{"Data":{"Prefix":"proxmox","Actions":[{"Route":"notary/describe","Method":"GET","Description":"Report the household trust state: the public ACME passport, the internal CA, and the SSH CA."},{"Route":"notary/sign-ssh-key","Method":"POST","Description":"Sign an SSH public key with the household SSH CA. Rotation is a re-sign: no key is ever copied between hosts.","Fields":[{"Name":"Identity","Type":"string","Description":"Key identity recorded in the certificate for audit (e.g. the hostname or username).","Required":false,"Node":{"Type":"String","Description":"Key identity recorded in the certificate for audit (e.g. the hostname or username).","Choices":null}},{"Name":"Kind","Type":"string","Description":"Whether this is a host key (trusted by clients) or a user key (trusted by hosts).","Required":true,"Node":{"Type":"String","Description":"Whether this is a host key (trusted by clients) or a user key (trusted by hosts).","Choices":["Host","User"]}},{"Name":"Principals","Type":"array","Description":"Hostnames (host kind) or usernames (user kind) the certificate is valid for. Defaults to the modeled principals when omitted.","Required":false,"Node":{"Type":"List","Description":"Hostnames (host kind) or usernames (user kind) the certificate is valid for. Defaults to the modeled principals when omitted.","Choices":null}},{"Name":"PublicKey","Type":"string","Description":"The public key to sign, in OpenSSH authorized_keys format.","Required":true,"Node":{"Type":"String","Description":"The public key to sign, in OpenSSH authorized_keys format.","Choices":null}}]},{"Route":"notary/trust","Method":"POST","Description":"Return household trust material for one-tap device install, parametrized by Kind: 'Internal' returns the internal root CA certificate in PEM form so the device trusts every internal-domain certificate AbuNotary signs (a pure read — fails if not yet minted); 'Ssh' returns the SSH CA public keys (the trust anchors) in OpenSSH format — a node installs the user CA key as TrustedUserCAKeys so it trusts user certificates, and the host CA key as a known-hosts certificate authority so it trusts host certificates AbuNotary signs. Marked Mutating for the whole action (one wire verb for both Kinds) because Kind=Ssh mints the shared SSH CA on first use, a genuine write — never GET despite reading trust material. One parametrized read replacing the former trust-bundle/ssh-trust pair.","Fields":[{"Name":"Kind","Type":"string","Description":"Which trust material to return.","Required":true,"Node":{"Type":"String","Description":"Which trust material to return.","Choices":["Internal","Ssh"]}}]},{"Route":"package/list","Method":"GET","Description":"List all explicitly installed software packages."},{"Route":"package/describe","Method":"GET","Description":"Retrieve exhaustive metadata for a specific software package.","Fields":[{"Name":"Name","Type":"string","Description":"The unique Name of the software package.","Required":true,"Node":{"Type":"String","Description":"The unique Name of the software package.","Choices":["AbuBot","AbuAuthenticator","AbuDNS","AbuHighway","AbuNotary","AbuRegistry","AbuTrafficAgent","OmadaController","AbuAgent","AbuBuild","AbuCloud","AbuIoT","AbuITDepartment","AbuPipelines","AbuProxmox","AbuScripts","AbuSecrets","AbuStream","AbuCode","AbuDownloadStack","AbuGoldSrc","AbuJellyfin","AbuLiveTV","Abustation","AbuSteam","AbuUsenet","AbuWebServices","Romm"]}}]},{"Route":"package/deep-ping","Method":"GET","Description":"Return read-only runtime liveness for a software package.","Fields":[{"Name":"Name","Type":"string","Description":"The unique Name of the software package.","Required":true,"Node":{"Type":"String","Description":"The unique Name of the software package.","Choices":["AbuBot","AbuAuthenticator","AbuDNS","AbuHighway","AbuNotary","AbuRegistry","AbuTrafficAgent","OmadaController","AbuAgent","AbuBuild","AbuCloud","AbuIoT","AbuITDepartment","AbuPipelines","AbuProxmox","AbuScripts","AbuSecrets","AbuStream","AbuCode","AbuDownloadStack","AbuGoldSrc","AbuJellyfin","AbuLiveTV","Abustation","AbuSteam","AbuUsenet","AbuWebServices","Romm"]}}]},{"Route":"container/deploy","Method":"POST","Description":"Create or replace a box by direct label. Abu uses the submitted Label as the box name, and Name equals Label for operator deploys. Deploy is asynchronous and idempotent; retry with the same IdempotencyKey to resolve the same operation. Progress is tracked by the returned RequestId with `abu logs get --request-id \u003cid\u003e`.","Fields":[{"Name":"ArchivePath","Type":"string","Description":"Optional published release archive path to seed into this fresh cattle birth. Pipelines supplies it so the box boots the exact published build for its stage and architecture.","Required":false,"Node":{"Type":"String","Description":"Optional published release archive path to seed into this fresh cattle birth. Pipelines supplies it so the box boots the exact published build for its stage and architecture.","Choices":null}},{"Name":"AutoupdateOverride","Type":"string","Description":"A container node's PER-INSTANCE override of its box flavour's modeled Autodeploy default (Catalog/Container/AbuBox.json Specifications.Autodeploy) — whether the fleet reconciler auto-deploys this exact box onto a newly published version, or skips it for an explicit operator deploy only. 'On' forces continuous-deployment auto-deploy for this one instance even if its flavour defaults to manual-only (e.g. a CodeMonkey box an operator has decided to let auto-update). 'Off' forces manual-deploy-only for this one instance even if its flavour normally auto-deploys (e.g. pinning one box while investigating a regression). Empty (the common case) inherits the flavour default. Unlike DeployStrategy (baked in at create time), this is set/cleared live on an already-running box via a tag rewrite — no redeploy required, so it takes effect on the reconciler's very next pass.","Required":false,"Node":{"Type":"String","Description":"A container node's PER-INSTANCE override of its box flavour's modeled Autodeploy default (Catalog/Container/AbuBox.json Specifications.Autodeploy) — whether the fleet reconciler auto-deploys this exact box onto a newly published version, or skips it for an explicit operator deploy only. 'On' forces continuous-deployment auto-deploy for this one instance even if its flavour defaults to manual-only (e.g. a CodeMonkey box an operator has decided to let auto-update). 'Off' forces manual-deploy-only for this one instance even if its flavour normally auto-deploys (e.g. pinning one box while investigating a regression). Empty (the common case) inherits the flavour default. Unlike DeployStrategy (baked in at create time), this is set/cleared live on an already-running box via a tag rewrite — no redeploy required, so it takes effect on the reconciler's very next pass.","Choices":["On","Off"]}},{"Name":"Box","Type":"string","Description":"AbuBox definition to deploy.","Required":true,"Node":{"Type":"String","Description":"AbuBox definition to deploy.","Choices":["Minimal","Lab","Network","AbuGamingDesktop","AbuPirate","AbuLiveTV","CodeMonkey","AbuAdmin","AbuStation","AbuITDepartmentLoadbearing","OmadaController"]}},{"Name":"Cell","Type":"string","Description":"A container node's failover identity — which cell's DNS VIP the traffic agent advertises, at this cell's VRRP frequency. Only containers (AbuBox nodes) carry a cell; the single global controller does not. Cells are a flat, dynamic pool (1..N); the Balanced cells form the WAN-edge contest. A node's cell is orthogonal to its deployment Stage.","Required":false,"Node":{"Type":"String","Description":"A container node's failover identity — which cell's DNS VIP the traffic agent advertises, at this cell's VRRP frequency. Only containers (AbuBox nodes) carry a cell; the single global controller does not. Cells are a flat, dynamic pool (1..N); the Balanced cells form the WAN-edge contest. A node's cell is orthogonal to its deployment Stage.","Choices":["A","B","U"]}},{"Name":"DeployStrategy","Type":"string","Description":"A container node's PER-INSTANCE override of its box flavour's deploy strategy — how the fleet reconciler replaces this exact box when it drifts from the published target. 'CreateThenDestroy' deploys a distinct blue/green-identity successor, converges and health-gates it, then reaps this box — never a moment with zero healthy members of its deploy group (same Box+Stage+Cell). 'DestroyThenCreate' destroys this box immediately, then creates its replacement under the same identity. Empty (the common case) inherits the box flavour's own modeled default (Catalog/Container/AbuBox.json Specifications.CreateThenDestroy) — an operator sets this only to flip the strategy for one instance without changing the flavour.","Required":false,"Node":{"Type":"String","Description":"A container node's PER-INSTANCE override of its box flavour's deploy strategy — how the fleet reconciler replaces this exact box when it drifts from the published target. 'CreateThenDestroy' deploys a distinct blue/green-identity successor, converges and health-gates it, then reaps this box — never a moment with zero healthy members of its deploy group (same Box+Stage+Cell). 'DestroyThenCreate' destroys this box immediately, then creates its replacement under the same identity. Empty (the common case) inherits the box flavour's own modeled default (Catalog/Container/AbuBox.json Specifications.CreateThenDestroy) — an operator sets this only to flip the strategy for one instance without changing the flavour.","Choices":["CreateThenDestroy","DestroyThenCreate"]}},{"Name":"Hypervisor","Type":"string","Description":"Optional live Proxmox cluster node to host this LXC-backed box, resolved against the live cluster this box drives.","Required":false,"Node":{"Type":"String","Description":"Optional live Proxmox cluster node to host this LXC-backed box, resolved against the live cluster this box drives.","Choices":null}},{"Name":"Label","Type":"string","Description":"Direct box name to create or replace.","Required":true,"Node":{"Type":"String","Description":"Direct box name to create or replace.","Choices":null}},{"Name":"Stage","Type":"string","Description":"A container node's explicit deployment stage, orthogonal to its failover Cell. The model stores Prod or Devo on every container. URL rendering omits the one stage marked Default; URL parsing maps an absent stage label to that Default.","Required":false,"Node":{"Type":"String","Description":"A container node's explicit deployment stage, orthogonal to its failover Cell. The model stores Prod or Devo on every container. URL rendering omits the one stage marked Default; URL parsing maps an absent stage label to that Default.","Choices":["Prod","Devo"]}},{"Name":"Version","Type":"string","Description":"Optional Abu release version represented by ArchivePath. Required when ArchivePath is supplied so the box projection and Proxmox tags record the build being deployed, not the deploying daemon's own version.","Required":false,"Node":{"Type":"String","Description":"Optional Abu release version represented by ArchivePath. Required when ArchivePath is supplied so the box projection and Proxmox tags record the build being deployed, not the deploying daemon's own version.","Choices":null}}]},{"Route":"container/describe","Method":"GET","Description":"Describe one deployed box from the container projection. This is an eventually-consistent read of Abu's recorded container state, not a live Proxmox scan or a guest probe.","Fields":[{"Name":"BoxId","Type":"string","Description":"Immutable AbuBox identity to describe.","Required":true,"Node":{"Type":"String","Description":"Immutable AbuBox identity to describe.","Choices":null}},{"Name":"Hypervisor","Type":"string","Description":"Optional live Proxmox cluster node filter when the caller already knows the host that owns this projected box.","Required":false,"Node":{"Type":"String","Description":"Optional live Proxmox cluster node filter when the caller already knows the host that owns this projected box.","Choices":null}}]},{"Route":"container/destroy","Method":"DELETE","Description":"Destroy a projected box by direct label.","Fields":[{"Name":"BoxId","Type":"string","Description":"Immutable Abu identity of the box incarnation to destroy.","Required":true,"Node":{"Type":"String","Description":"Immutable Abu identity of the box incarnation to destroy.","Choices":null}},{"Name":"Force","Type":"boolean","Description":"Clear driver termination protection before destroying when the driver supports it.","Required":false,"Node":{"Type":"Boolean","Description":"Clear driver termination protection before destroying when the driver supports it.","Choices":null}},{"Name":"Hypervisor","Type":"string","Description":"Optional live Proxmox cluster node filter when the caller already knows the host that owns this projected box.","Required":false,"Node":{"Type":"String","Description":"Optional live Proxmox cluster node filter when the caller already knows the host that owns this projected box.","Choices":null}}]},{"Route":"container/list","Method":"GET","Description":"List deployed boxes from the container projection. This is an eventually-consistent read of Abu's recorded container state, not a live Proxmox scan.","Fields":[{"Name":"Hypervisor","Type":"string","Description":"Optional live Proxmox cluster node filter (resolved against the live cluster this box drives, never a static list). Omit to list every projected box.","Required":false,"Node":{"Type":"String","Description":"Optional live Proxmox cluster node filter (resolved against the live cluster this box drives, never a static list). Omit to list every projected box.","Choices":null}}]},{"Route":"container/start","Method":"POST","Description":"Start a projected box by direct label.","Fields":[{"Name":"BoxId","Type":"string","Description":"Immutable Abu identity of the box incarnation to start.","Required":true,"Node":{"Type":"String","Description":"Immutable Abu identity of the box incarnation to start.","Choices":null}}]},{"Route":"container/stop","Method":"POST","Description":"Stop a projected box by direct label without destroying it.","Fields":[{"Name":"BoxId","Type":"string","Description":"Immutable Abu identity of the box incarnation to stop.","Required":true,"Node":{"Type":"String","Description":"Immutable Abu identity of the box incarnation to stop.","Choices":null}}]},{"Route":"ping","Method":"GET","Description":"Ping the platform to verify connectivity."},{"Route":"environment","Method":"GET","Description":"Return authoritative metadata for this node: binary version, environment type, hostname, CPU architecture, and — for a container node only — its failover cell and deployment stage. A non-container node (bare metal or the CLI) carries neither cell nor stage, so it reports both empty."},{"Route":"network/enable","Method":"GET","Description":"Enables an executable network ingress (network or bridge).","Fields":[{"Name":"Name","Type":"string","Description":"","Required":true,"Node":{"Type":"String","Description":"","Choices":["Network","Bridge"]}}]},{"Route":"network/disable","Method":"GET","Description":"Disables an executable network ingress (network or bridge).","Fields":[{"Name":"Name","Type":"string","Description":"","Required":true,"Node":{"Type":"String","Description":"","Choices":["Network","Bridge"]}}]},{"Route":"network/describe","Method":"GET","Description":"Returns the current state of one executable network ingress.","Fields":[{"Name":"Name","Type":"string","Description":"","Required":true,"Node":{"Type":"String","Description":"","Choices":["Network","Bridge"]}}]},{"Route":"network/list","Method":"GET","Description":"Lists all executable network ingresses and their current state."}]},"RequestId":"admin-replace/aTGWcAhQd6-000125","ExitCode":0}
