Carry the host user's credential files in nexusIdentity #17
Labels
No labels
blocked
bug
decision
duplicate
enhancement
handoff
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/secrets#17
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Let a deployment name, through the identity contract, the two age files a host user's tools read — the human's forge API token and the site hosting rclone config — so the framework can place them instead of each deployment writing its own module. Part of allod/strategy#51.
Primary goals:
nexusIdentity—userForgejoTokenFileandsiteHostingConfigFile, bothnullin this template beside the existingforgeTokenFile = null(flake.nix:84-89). A deployment sets them to"${self}/secrets/<name>.age", the same spelling the dev-VM token fields use.credentials.nixrecord looks like, so a fork can produce a valid one without reading the consumer.or null, so this can land first and nothing downstream breaks in either order.Current state and specifics
nexusIdentitytoday: username, hostname, forge coordinates, host SSH public keys,forgeTokenFile = null. The README's exported-outputs table describes it atREADME.md:56, and "Howarchetypesconsumes it" atREADME.md:169-176lists what the framework reads from it; both gain the two fields.Shape to document:
userForgejoTokenFile/home/<user>/.config/git/forgejo-token, mode 0600siteHostingConfigFile[shared],type = ftp,host,user,passin rclone's obscured form,explicit_tls = true/home/<user>/.config/rclone/rclone.conf, mode 0600The rclone stanza is stored whole, not as a bare password, because rclone reads its config file and nothing else, and storing exactly what it reads means no activation step reshapes a secret. Obscuring is reversible by anyone with rclone, so the stanza is as sensitive as the password; that is why the recipient set is the host alone.
Each non-null file needs a
credentials.nixentry with a consumer{ type = "agenix"; repo = "secrets"; secret = "secrets/<name>.age"; }and asecrets.nixrecipient line, as the existing entries show;credential-inventoryrefuses an age file with no record and a record with no file. The template itself commits nothing new: with both fields null there is no ciphertext to carry, synthetic or otherwise.Scope
In: the two fields, the README rows and consumer notes, and a line in the layout section for the two paths.
Out: declaring the secrets (allod/archetypes#74), the deploy command's own docs (allod/nexus#44), and rotation tooling (allod/nexus#42).