v0.3.0
Drafts, Validation, Async Writes, kubectl Access, Self-Update, and OVH Parity
A big release: stage changes as drafts, validate specs server-side, runkubectl through Ankra, query metrics, manage stack profiles and support tickets from the terminal, and keep the CLI current with a built-in self-update. Plus verified SOPS encryption and full OVH parity with the web UI.Verified SOPS encryption
ankra cluster encrypt manifest|addon could previously produce files that only looked encrypted: a dotted --key such as data.password matched no YAML key during SOPS tree traversal, so the file gained sops: metadata while the secret value stayed plaintext base64. A dotted --key is now normalised to its last segment (data.password → password) with a notice, and after every encryption the CLI verifies the target key’s value is real ENC[...] ciphertext — hard-failing before any file write or stack update when nothing was encrypted. If you encrypted keys with a dotted --key on an older CLI version, re-run the encrypt command to confirm the values are actually encrypted.Draft and validate before you apply
ankra cluster draft -f <file>stages every stack in an ImportCluster YAML as reviewable drafts instead of deploying. Local checks run first; stacks already at desired state report “no changes”. If the cluster doesn’t exist yet it’s imported first.ankra cluster validate -f <file>runs server-side validation the offline checks can’t do — chart existence in your connected registries, plaintext-secret detection, and parent references resolved against a cluster.--strict-secretsturns plaintext secrets into errors;--cluster <id>validates against a live cluster.ankra cluster applynow validates referenced files and the parent/dependency tree (unique names, valid kinds, no cycles) before anything is sent to the API, andankra cluster apply --dry-run/ankra delete cluster --dry-runrun fully offline with no token — ready for pre-merge CI.
Asynchronous writes with --wait
ankra cluster apply and the node-group mutation commands now submit asynchronously and return immediately. Add --wait (with an optional --timeout) to block until the platform finishes and report success or failure. Re-running with --wait is also how you follow a previously submitted change to completion.Run kubectl through Ankra
ankra cluster kubeconfig add|remove|listmanages Ankra contexts in your kubeconfig. By defaultaddwrites an auto-refreshing, SSO-backed exec context (no static credentials);--all,--use,--embed-token,--print, and--namespaceare supported.ankra cluster kube-tokenprints a short-livedExecCredentialfor use as a kubectl credential plugin (wired up automatically bykubeconfig add).
Query cluster metrics
ankra cluster metrics query <promql> and ankra cluster metrics query-range run PromQL against the cluster’s configured Prometheus source, proxied through the agent. Supports --range/--start/--end/--step and -o table|json|yaml.Stack profiles and support from the CLI
ankra stack-profiles list|export-iac|importmanages reusable stack profiles.ankra support create|list|get|comment|attach|closefiles and tracks support requests, with AI review before submission (--forceto override a flag).
OVH command parity with the web UI
ankra cluster ovh regions --credential-id <id>— list the regions a credential’s project can actually deploy in.ankra cluster ovh stop <id>andankra cluster ovh start <id> [--scope all|control_plane]— stop a cluster’s compute while keeping its configuration, then start it again later.ankra cluster ovh access-info <id>— gateway and control-plane IPs with ready-to-usessh -Jjump and Kubernetes API port-forward commands.ankra cluster ovh ssh-keys get|set— view and replace the SSH key credentials attached to a cluster.ankra cluster ovh node-group add ... --labels --taints, plusnode-group labelsandnode-group taintssubcommands to update them later.ankra cluster ovh control-plane ...andankra cluster ovh nodes ...now work over the public API with a token-authenticated CLI session.
Watch operations and machine-readable output
ankra cluster operations list --watchpolls until every execution reaches a terminal state (--interval, default 5s);operations listandoperations stepssupport-o json|yaml.- Shared
-o json|yamloutput across commands for scripting and CI. - Unexpected platform errors now print a ready-made
ankra support createcommand, so you can file a bug without leaving the terminal.
Self-update and beta channel
ankra upgrade(aliasankra self-update) downloads and installs a release in place, verifying its SHA-256 checksum first.--versionpins an exact release (and doubles as a rollback),--checkreports availability, and--force/--yescontrol prompts.ankra config beta enable|disable|statusopts into pre-release (release candidate) versions forankra upgrade.
Fixes
ankra credentials getresolves a name to an ID (v2 platform-credential lookup before the legacy table).ankra org members/ankra org currenthonour--organd validate the saved selection instead of sending a stale value.- An unknown
--clustername fails clearly instead of forwarding a non-UUID value and producing an opaque server-side error. ankra cluster applyunderstands theprometheus_metricsspec field.
v0.2.5
Variables, Live-Cluster SOPS, Dependency Parents, and Multi-Org
Rounds out stack CRUD from the CLI: template variables at every scope, SOPS encryption against live clusters, dependency-parent editing, read/delete commands, a global organisation override, and offline-installable Agent Skills.Variables (org / cluster / stack scopes)
Full CRUD for the template variables substituted into stack manifests and addon values at deploy time, at three scopes:ankra org variables list|get|set|delete— organisation-wide, available to every cluster.ankra cluster variables list|get|set|delete [--cluster <name|id>]— per cluster; shadows org variables on that cluster.ankra cluster stacks variables list|get|set|delete <stack>— per stack; the most specific scope.
set is an upsert (create or update). Values can be read from stdin with - for piping secrets, list / get support -o json|yaml, and delete prompts for confirmation (--yes to skip). Resolution at deploy time is stack > cluster > organisation — a more specific scope shadows less specific ones for the same name.SOPS encrypt/decrypt against live clusters
ankra cluster encrypt and ankra cluster decrypt now operate directly on a live cluster, with no local cluster.yaml required.ankra cluster encrypt manifest <name> --key <key> [--cluster <name|id>]ankra cluster encrypt addon --name <addon> --key <key> [--cluster <name|id>] [--stack <stack>]ankra cluster decrypt manifest <name> [--cluster <name|id>]ankra cluster decrypt addon --name <addon> [--cluster <name|id>] [--stack <stack>]
encrypted_paths updated. The -f cluster.yaml file mode is unchanged for GitOps workflows; the two modes are mutually exclusive and cluster mode is the default. decrypt addon is new, bringing the addon variant to parity with manifests.Dependency parents on upgrade
ankra cluster addons upgrade and ankra cluster manifests upgrade now edit the dependency parents that control deployment ordering inside a stack, without re-applying the whole cluster.yaml:--add-parent name=<n>,kind=<manifest|addon>— repeatable;kinddefaults tomanifest.--remove-parent name=<n>,kind=<manifest|addon>— repeatable; removing the last parent clears the link.--set-parent name=<n>,kind=<manifest|addon>— replaces ALL parents; mutually exclusive with--add-parent/--remove-parent.
Read and delete
ankra cluster addons values <name>— print an addon’s current Helm values (decoded;-o rawfor the base64 form).ankra cluster manifests get <name>— print a manifest’s current YAML (decoded;-o rawfor the base64 form).ankra cluster manifests delete <name>— disconnect a manifest from its stack and remove its resources; the owning stack is resolved automatically and a confirmation prompt protects the operation (--yesto skip,--dry-runto preview).
Run a command against another organisation
A global--org <name|id> flag (or the ANKRA_ORG environment variable) runs a single command against any organisation you belong to, without changing your selected organisation:ankra org switch selection. You must be an active member of the target organisation.Install Ankra Agent Skills
ankra skills installs the curated Ankra Agent Skills into a Cursor/Claude skills directory. The skills are embedded in the binary, so installation works offline and is versioned with the release.--force to overwrite existing skills and --source <dir> to install from a local directory instead of the embedded copy. This is separate from ankra openclaw skill, which generates a per-cluster SKILL.md.v0.2.4
Surgical Addon and Manifest Upgrades
Two new subcommands for in-place updates that go through the same partial-stack endpoint as the UI. Atomic, locked, single git commit per invocation.Addon Upgrade
ankra cluster addons upgrade <addon> --chart-version <version>— bump the chart version.ankra cluster addons upgrade <addon> --set <key>=<value>— mutate a single Helm values field (helm-style; supports dotted paths,[idx]indexing, and[key=value]list selectors such asenv[name=LOG_LEVEL].value).ankra cluster addons upgrade <addon> --values-from-file <path>— replace the entire values document.ankra cluster addons upgrade <addon> --registry-name,--registry-url,--registry-credential-name— atomically retag the addon’s registry.ankra cluster addons upgrade <addon> --namespace <new>— destructive Helm reinstall in a new namespace; requires--yesor an interactive confirmation.
--set and --values-from-file are mutually exclusive: --set* MUTATES the existing values document, --values-from-file REPLACES it. Use --set-string to force a value to remain a string, and --set-file key=path to load a value from a file.Manifest Upgrade
ankra cluster manifests upgrade <manifest> --from-file <path>— replace the manifest content.ankra cluster manifests upgrade <manifest> --manifest -— read manifest YAML from stdin.ankra cluster manifests upgrade <manifest> --set <key>=<value>— mutate a single path in the manifest YAML (helm-style; supports dotted paths,[idx]indexing, and[key=value]list selectors such ascontainers[name=app].image).ankra cluster manifests upgrade <manifest> --target-kind <kind> --target-name <name>— with--set, pick which document to edit when the manifest holds multiple Kubernetes resources.ankra cluster manifests upgrade <manifest> --namespace <new>— change the manifest’s namespace.
--set* MUTATE the existing manifest and are mutually exclusive with --from-file / --manifest -, which REPLACE it. Use --set-string to force a value to remain a string, and --set-file key=path to load a value from a file.Addon and manifest field selectors
Bothaddons upgrade and manifests upgrade --set paths can address a list item by a stable field instead of a numeric index — for example env[name=LOG_LEVEL].value=debug or spec.template.spec.containers[name=app].image=nginx:1.27. A selector that matches nothing fails with a clear error rather than guessing.Common Options
--cluster <name|id>— defaults to the active selection.--stack <name>— addons only, required when the same addon name exists in multiple stacks. Manifest names are globally unique on a cluster, somanifests upgradehas no--stackflag.--dry-run— print before/after without writing.-o json|yaml— machine-readable output (the--dry-runenvelope is{before, after, notices}).
Example: bump image.tag for the website addon
Example: bump a Deployment image tag in a manifest
v0.2.0
Helm, Kubernetes Resources & Security Hardening
Helm management, Kubernetes resource access, direct cluster selection, and client hardening.Helm Release Commands
Commands for managing Helm releases in the active cluster:ankra cluster helm releases— List Helm releases (--namespace,--all-namespaces,--output json)ankra cluster helm uninstall <release> --namespace <ns>— Uninstall a Helm release
Helm Registry Commands
ankra helm registries list— List Helm registriesankra helm registries get <name>— Get registry detailsankra helm registries create --name <name> --url <url>— Create a registryankra helm registries delete <name>— Delete a registry
Helm Credential Commands
ankra helm credentials list— List registry credentialsankra helm credentials create --name <name>— Create a credential with secure promptsankra helm credentials delete <name>— Delete a credential
Kubernetes Resource Commands
Commands for accessing Kubernetes resources in the active cluster:ankra cluster pods— List pods (--namespace,--all-namespaces,--output json)ankra cluster resources <kind>— Get resources by kind (--namespace,--name,--output json)ankra cluster logs <pod>— Stream pod logs (--namespace,--container,--follow,--tail,--previous)
Cluster Selection & Info
ankra cluster select <name>— Select a cluster directly by name without the interactive pickerankra cluster info [name]— Show cluster details (defaults to selected cluster; replacescluster get)
Security & Reliability
- HTTP client timeouts and response body size limits
- URL encoding for all API path and query parameters
- Config file permissions restricted to owner-only (0600)
- Machine ID hashed with SHA-256
- Browser URL validation before opening
v0.1.129
Node Groups, UpCloud & OVH
Node group management commands and new UpCloud/OVH commands for cluster and credential management.Node Group Commands
Available for all three providers (hetzner, ovh, upcloud):ankra cluster <provider> node-group list <cluster_id>— List node groupsankra cluster <provider> node-group add <cluster_id> --name <name> --instance-type <type> --count <n>— Add a groupankra cluster <provider> node-group scale <cluster_id> <group_name> <count>— Scale a groupankra cluster <provider> node-group upgrade <cluster_id> <group_name> <instance_type>— Upgrade instance typeankra cluster <provider> node-group delete <cluster_id> <group_name>— Delete a group
UpCloud Commands
Credentials:ankra credentials upcloud list— List UpCloud API credentialsankra credentials upcloud create --name <name>— Create credential with secure token promptankra credentials upcloud ssh-key list— List SSH key credentialsankra credentials upcloud ssh-key create --name <name> --generate— Create SSH key
ankra cluster upcloud create— Create an UpCloud clusterankra cluster upcloud deprovision <cluster_id>— Deprovision a clusterankra cluster upcloud workers <cluster_id>— Get worker countankra cluster upcloud scale <cluster_id> <count>— Scale workersankra cluster upcloud k8s-version <cluster_id>— Get Kubernetes versionankra cluster upcloud upgrade <cluster_id> <version>— Upgrade Kubernetes version
OVH Commands
Credentials:ankra credentials ovh list— List OVH API credentialsankra credentials ovh create --name <name> --project-id <id>— Create credential with secure promptsankra credentials ovh ssh-key list— List SSH key credentialsankra credentials ovh ssh-key create --name <name> --generate— Create SSH key
ankra cluster ovh create— Create an OVH clusterankra cluster ovh deprovision <cluster_id>— Deprovision a clusterankra cluster ovh workers <cluster_id>— Get worker countankra cluster ovh scale <cluster_id> <count>— Scale workersankra cluster ovh k8s-version <cluster_id>— Get Kubernetes versionankra cluster ovh upgrade <cluster_id> <version>— Upgrade Kubernetes version
v0.1.127
OVH Cloud Support
OVH Cloud commands for cluster and credential management.OVH Credential Commands
ankra credentials ovh list— List OVH API credentialsankra credentials ovh create --name <name> --project-id <id>— Create credential with secure promptsankra credentials ovh ssh-key list— List SSH key credentialsankra credentials ovh ssh-key create --name <name> --generate— Create SSH key
OVH Cluster Commands
ankra cluster ovh create— Create an OVH cluster with configurable control planes, workers, networking, and gatewayankra cluster ovh deprovision <cluster_id>— Deprovision a clusterankra cluster ovh workers <cluster_id>— Get worker countankra cluster ovh scale <cluster_id> <count>— Scale workersankra cluster ovh k8s-version <cluster_id>— Get Kubernetes versionankra cluster ovh upgrade <cluster_id> <version>— Upgrade Kubernetes version
v0.1.125
SOPS Encryption & API Tokens
New SOPS encryption commands and API token management.SOPS Encryption
ankra cluster sops-config— Display the SOPS encryption configurationankra cluster encrypt manifest <name> --key <key> -f <file>— Encrypt a manifest keyankra cluster encrypt addon --name <addon> --key <key> -f <file>— Encrypt an addon keyankra cluster decrypt manifest <name> -f <file>— Decrypt a manifest
API Tokens
ankra tokens list— List API tokensankra tokens create <name>— Create a tokenankra tokens revoke <id>— Revoke a tokenankra tokens delete <id>— Delete a revoked token