Orbit add-on
Status: Implemented Issue: https://gitlab.com/gitlab-org/cloud-native/gitlab-operator/-/work_items/2252 Parent: none
Goal
An administrator turns on Orbit, the GitLab Knowledge Graph, for an instance in the Bridge UI. One
switch wires the GitLabCore, its Siphon, and the Orbit together, so nobody has to write the
three references by hand. For the design, see
ADR 38.
Requirements
- The API reads, creates or replaces, and deletes the
Orbitof an instance, whatever theOrbitis named. An instance has at most oneOrbitthrough the API. - A created
Orbitis named<instance>-orbit. A name longer than 44 characters receives422. - Saving an
Orbitfor an instance with noSiphon, or one being deleted, receives422. An instance that does not exist receives404. Neither writes anOrbit. - A save keeps an
Orbitthat someone put on anotherSiphonof the instance on thatSiphon. - Saving the
Orbitconnects GitLab to it, and deleting it disconnects GitLab. A conflicting write to the instance fails neither. A failed deletion leaves GitLab connected to theOrbitthat stays. Deleting anOrbitthat is already gone succeeds. - Deleting a
Siphonthat anOrbituses receives409, and theSiphonstays. A caller who may not listOrbitresources receives403instead. - A read of the
Orbitreports none when the cluster does not serve the kind. - A graph read user without a read password, or the reverse, receives
422. So does port 9000 for the datalake or the graph. - Enabling the Orbit add-on with Siphon off fails validation on the Orbit section. So does turning Siphon off while Orbit stays on.
- Create and Save write the
Orbitafter the instance and theSiphon. Turning both off deletes theOrbitbefore theSiphon. - Clearing Enable Orbit deletes the
Orbitafter a confirmation. Declining keeps it, and a declined or failed deletion does not stop aSiphonthat stays on from saving. ASiphonthat is turned off stays until theOrbitis gone. - When the
Orbitfails to save, the instance and theSiphonstay saved, and the form stays open on the add-on. Saving again retries it, and clearing Enable Orbit deletes anOrbitthe failed save created. When aSiphonfails too, the notice names both, and the form opens on the one that failed. - A caller who cannot read
Orbitresources can still save the instance. The add-on shows as Unknown and locked, and an existingOrbitis left untouched. It is also locked and left untouched while theSiphoncannot be read. - While an
Orbitexists, the panel reports its phase, chart version, GitLab version, and gRPC endpoint, or says that GitLab is not connected yet. While a condition is notTrue, it also gives the reason and message of the first one. - While the instance reports the
OrbitConnectedcondition, the panel shows a GitLab connection row: Connected when it isTrue, otherwise its reason and message. - The form keeps the chart values of an
Orbitit loaded.
Out of scope
- Editing the chart values of an
Orbitin the form. - Connecting GitLab to an
Orbitwhose TLS is terminated in front of it. - Creating the ClickHouse users, the graph database, the JWT key, or the TLS certificate.
FAQ
For how the add-on wires the three resources, in which order, and why, see ADR 38.
- Why does saving the
Orbitconnect the instance to it? AnOrbitno instance points at indexes a graph nothing queries. The add-on means GitLab uses Orbit, so the switch wires both sides. - Why does a save keep an
Orbiton anotherSiphonof the instance? Someone set that reference withkubectlon purpose, and the form has no field to show it. Replacing it would quietly move the graph to another datalake. - Why does the panel show a connection row besides the endpoint? The endpoint says what the
Orbitserves. Whether GitLab uses it is theOrbitConnectedcondition of the instance, which can beFalsewith an endpoint, for example while the Secret of the JWT key is missing. - Why is the
Orbitdeleted before theSiphon? AnOrbitwithout itsSiphonwaits with no way to recover. Deleting theOrbitfirst never leaves that state behind. - Why does deleting a
Siphonneed permission onOrbitresources? A caller who cannot listOrbitresources cannot show that none uses theSiphon, so the deletion is refused rather than risked.