docs: add the first-deployment checklist - #32
Merged
Conversation
What a person has to supply that cannot be generated, inferred or committed, in the order the steps depend on each other -- which is not the obvious order. The S3 credentials do not exist until the FLUX manifests are merged, because Rook generates them when it reconciles the object-store user, so that merge comes first and the pods CrashLoopBackOff until the secret follows. Also records the things that bite in a way the error does not explain: the bot's role has to sit above the consent role or /setup fails on permissions; the database password appears in two files that must agree; the OAuth redirect URI fails late, after a participant has already consented, and surfaces from Outline rather than from Sturnus. Every command and name in it was checked against the code and the manifests rather than written from memory -- the secret template in the FLUX repository was written from the design document and had three names wrong and two missing.
Checked against the code while building the invite link: the bot posts the finished protocol link into the recording channel with channel.send() (_DiscordAnnouncer.post). Without that permission everything works and only the last step fails, from the publish loop rather than from anywhere an operator would be looking.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Requested after the 0.3.1 release: what a person has to supply to get Sturnus running in the cluster.
The ordering is the part worth reviewing. It is not the obvious one:
The FLUX manifests get merged first, deliberately without the secret, and the pods CrashLoopBackOff until it follows. The reason is that two of the seven secret values do not exist yet — Rook generates the S3 access and secret key when it reconciles the
CephObjectStoreUserthat same PR adds. There is nothing to put in a secret before that has happened, and inventing them produces a bucket nobody can write to.Beyond the ordering, the document records the things that bite in a way the error message does not explain:
/setupfails on permissions — Discord will not let a bot edit a role positioned above its own.openssl rand -base64 32for the master key, not a passphrase: it must decode to exactly 32 bytes.It also lists what is not outstanding, since several things look like open questions and are not: the chart, manifests and image are done and released, the image is in Harbor, and the FLUX secret template's variable names have been corrected against the code.
Verification
Every command and name was checked against the code and the manifests rather than written from memory:
ingress.yaml/oauth/callback, against the link server's route tablecrypto.py— andopenssl rand -base64 32actually decoded and measuredpolicy_url/document_targetconfig keys, against the sourceThat care is not decorative: the secret template in the FLUX repository was written from the design document instead of the code, and had three variable names wrong and two missing. Every pod would have failed to start.