Sicoob Customer CLI Quickstart
This runbook is the v1 operator path for Sicoob SREs running Finnest Power in their own AWS account. It assumes a compiled finnest binary installed with the matching finnest-runtime bundle. It does not require a Finnest monorepo checkout.
Prerequisites
- AWS account dedicated to the Finnest Power runtime.
- AWS credentials with permission to create and operate the Runtime CD state backend, platform stack, EKS runtime stack, Helm release, and smoke-test Kubernetes jobs.
- Kubeconfig for the target EKS cluster after platform provisioning.
- Finnest self-hosted license JWT delivered out-of-band by Finnest.
- Compiled
finnestbinary with one of:- adjacent
finnest-runtime/directory from the release tarball, --runtime-source /path/to/finnest-runtime,FINNEST_RUNTIME_SOURCE=/path/to/finnest-runtime.
- adjacent
- Operator credentials from Power IAM with these scopes for the target deployment id (
aws-prodfor production,aws-sandboxfor sandbox):infra.bootstrap:<deployment-id>infra.deploy:<deployment-id>infra.rollback:<deployment-id>
- Runtime CD deploy config JSON in a Customer-owned local file.
- Bootstrap config JSON in a Customer-owned local file.
- Runtime base URL available as
RUNTIME_CD_BASE_URLfor smoke checks.
For the Sicoob production path, use --cloud=aws --environment=prod. Sandbox verification uses --cloud=aws --environment=sandbox.
One-Time Init
Create a Customer workspace and keep config, evidence, and audit there:
mkdir -p ~/finnest-sicoob/runtime
cd ~/finnest-sicoob
cp /secure-drop/finnest-license.jwt ./finnest-license.jwt
cp /secure-drop/runtime-cd-bootstrap.json ./runtime/bootstrap.json
cp /secure-drop/runtime-cd-deploy.json ./runtime/deploy.jsonCreate the non-interactive init input:
{
"cloudTarget": "aws",
"environment": "prod",
"region": "sa-east-1",
"domain": "power.sicoob.example",
"licensePath": "./finnest-license.jwt",
"runtimeSource": "./finnest-runtime",
"bootstrapConfigPath": "./runtime/bootstrap.json",
"deployConfigPath": "./runtime/deploy.json",
"owner": {
"displayName": "Sicoob Owner",
"email": "owner@sicoob.example",
"method": "passkey"
},
"planeCapabilities": {
"selfUpdate": false,
"supportUpload": false,
"catalogUpdates": false,
"crashReports": false,
"telemetry": false
}
}Then run init and set the runtime smoke inputs:
finnest init --non-interactive --config ./init.json
export RUNTIME_CD_BASE_URL="https://api.sicoob.example"
export KUBECONFIG="$HOME/.kube/aws-prod"init writes ~/.finnest/config.toml and ./finnest.toml. Later commands read deployment.cloud, deployment.environment, runtime.source, runtime.bootstrap_config, and runtime.deploy_config from those files.
Authenticate the local Operator after Power IAM is reachable:
finnest auth login --power-url=https://power.sicoob.example
finnest auth whoamiDoctor
Run doctor before any mutating operation:
finnest doctor --cloud=aws --environment=prodDo not continue until required checks are OK. Warnings such as license expiry should be reviewed before a production change window.
Bootstrap
Bootstrap provisions the Pulumi state backend for the deployment target:
finnest bootstrap --cloud=aws --environment=prod --yesReview the evidence under:
.finnest/runs/bootstrap/<timestamp>-aws-prod/The key files are bootstrap.json, state-backend.json, github-environment.env, and operator-next-steps.md.
Deploy Preview
Always preview first:
finnest deploy --cloud=aws --environment=prod --dry-run --json | tee deploy-preview.ndjsonReview the NDJSON stream. The final line is the command envelope; preceding lines are deploy phase events for preflight, preview, confirmation, Helm status, and smoke.
Deploy
Apply only after the preview is reviewed:
finnest deploy --cloud=aws --environment=prod --yesReview:
.finnest/runs/deploy/<timestamp>-aws-prod/deploy.jsonThe deploy evidence mirrors the Runtime CD deploy output: target id, dry-run mode, status, engine version, platform summary, runtime summary, Helm phase, and smoke phase. Helm or smoke are never reported as passed unless those checks ran and passed.
Post-Deploy Doctor
Run doctor again after deploy:
finnest doctor --cloud=aws --environment=prodIf doctor fails, keep the deploy evidence directory and proceed to support bundle collection.
Rollback
Rollback imports the prior successful Pulumi deployment state for the runtime stack and then reruns smoke:
finnest rollback --cloud=aws --environment=prod --yesReview:
.finnest/runs/rollback/<timestamp>-aws-prod/rollback.jsonIf rollback smoke fails, the command exits non-zero while keeping rollback evidence and the reverted revision pair. Do not treat the rollback as healthy until the smoke failure is resolved or explicitly accepted by the change owner.
Support Bundle
Create a redacted local support bundle:
finnest support bundle --jsonIf manual collection is required, include these directories and files:
.finnest/runs/doctor/
.finnest/runs/bootstrap/
.finnest/runs/deploy/
.finnest/runs/rollback/
.finnest/topology.json
.finnest/stack.json
.finnest/services/*.status.json
.finnest/resources/*.status.jsonDo not include raw secrets, Pulumi passphrases, AWS secret keys, private keys, or unredacted .env files.
Plane Capability Toggles
The continuous plane-capability toggling command surface is tracked in #211. For the headless milestone, capability checks are explicit:
- Local Operator credentials must contain deployment-target-scoped capabilities.
finnest doctorchecks enabled plane capability endpoints fromFINNEST_PLANE_CAPABILITIES_JSON.- A disabled plane endpoint should be omitted or marked
"enabled": falsein that JSON.
Example:
[
{
"name": "support-bundle-upload",
"url": "https://power.sicoob.example/capabilities/support-bundle",
"enabled": false
}
]Supported v1 plane calls are limited to license refresh, telemetry, crash reports, support-bundle upload, regulatory catalog updates, and self-update. Runtime orchestration commands (bootstrap, deploy, rollback, secrets, and watch) do not call Finnest-hosted orchestration endpoints.
Troubleshooting
RUNTIME_BUNDLE_MISSING: install the releasefinnest-runtimedirectory beside the binary, pass--runtime-source, or setFINNEST_RUNTIME_SOURCE.RUNTIME_BUNDLE_INVALIDorRUNTIME_ASSET_MISSING: reinstall the runtime bundle from the same CLI release and verifyfinnest-runtime-bundle.json.BOOTSTRAP_CONFIG_FILE_MISSING: create the path referenced byRUNTIME_CD_BOOTSTRAP_CONFIG_PATHor[runtime].bootstrap_config.DEPLOY_CONFIG_FILE_MISSING: create the path referenced byRUNTIME_CD_DEPLOY_CONFIG_PATHor[runtime].deploy_config.DEPLOY_HELM_FAILED: inspect.finnest/runs/deploy/<run>/deploy.jsonand Helm output before retrying.DEPLOY_SMOKE_FAILEDorROLLBACK_SMOKE_FAILED: keep the evidence bundle, fixRUNTIME_CD_BASE_URL, kubeconfig, ingress, or health checks, then rerun doctor and the failed command.AUTH_POWER_URL_REQUIRED: pass--power-url, setFINNEST_POWER_URL, or configure[power].urlafter the self-hosted Power admin endpoint is live.