Generate Argo CD Application manifests from Helm releases in Kubernetes
Project description
helmadm
CLI tools for Helm 3 releases stored in Kubernetes: generate Argo CD Application YAML, export reproducible Helm install bundles, list releases, and compare a release manifest to live cluster objects. No helm or kubectl binary required for helmadm itself.
Requirements
- Python 3.12+
- uv
- Access to a Kubernetes cluster (kubeconfig or in-cluster)
Install
uv sync
Commands
| Command | Purpose |
|---|---|
argocd-yaml |
Print an Argo CD Application manifest for a release (stdout) |
pull |
Export a reproducible Helm install bundle (values files + README) |
ls |
List Helm releases in the cluster |
drift |
Compare the release's stored manifest to live objects (read-only) |
uv run helmadm --help
uv run helmadm argocd-yaml --help
uv run helmadm pull --help
uv run helmadm ls --help
uv run helmadm drift --help
argocd-yaml — Application manifest
Reads the release from cluster storage, diffs coalesced chart values + user config against helm show values for the chart version (fetched from the chart repo), and writes overrides to spec.source.helm.valuesObject. Non-helm fields use CHANGE_ME placeholders.
uv run helmadm ls -n monitoring
uv run helmadm argocd-yaml -n monitoring prometheus
If the release has no chart.metadata.repoURL, pass the repository URL (see NEEDS_REPO_URL in ls):
uv run helmadm argocd-yaml -n monitoring prometheus \
--repo-url https://prometheus-community.github.io/helm-charts
--debug adds a .debug block to the YAML (raw values, diff metadata, ignoreAnnotations). Remove it before applying to Argo CD.
pull — reproducible install bundle
Reads a release from cluster storage and writes a directory you can use with plain helm install / helm upgrade (no helmadm or Argo required for reinstall).
uv run helmadm pull -n loki -o ./bundles fluentbit
Creates ./bundles/{namespace}/{release}/ containing:
helmadm-pull-metadata.yaml— when pulled, kubeconfig/context, release and chart info{chart}.all.values.yaml— effective values from the cluster (coalesced){chart}.changed.values.yaml— overrides only (diff vs remote chart defaults){chart}.remote-all.values.yaml— chart defaults from the repositoryREADME.md— helm install/template commands for each values file
Options:
--revision N— pull a specific Helm release revision (default: latest)--repo-url— when the release has nochart.metadata.repoURL(seeNEEDS_REPO_URLinls)--repo-name— helm repo alias used in the README (default: derived from the repo URL host)--tar— write a gzip tarball of the bundle to stdout instead of leaving files on disk--force— overwrite an existing bundle directory
uv run helmadm pull -n monitoring prometheus --revision 3 -o ./bundles
uv run helmadm pull -n loki -o ./bundles fluentbit --tar > fluentbit-bundle.tar.gz
ls — list releases
uv run helmadm ls # all namespaces, detailed (default)
uv run helmadm ls -n monitoring # one namespace
uv run helmadm ls --no-detail # name / revision / status only
drift — manifest vs live
uv run helmadm drift -n monitoring prometheus
uv run helmadm drift --detect-extras -n monitoring prometheus
uv run helmadm drift -ia -n kube-system traefik # print normalization notes before each diff
Exit 1 on drift, missing objects, fetch errors, or extras (with --detect-extras).
Environment variables
CLI flags take precedence over env vars.
| Flag | Environment variable |
|---|---|
-n / --namespace |
HELMADM_NAMESPACE (or current kubeconfig context namespace) |
--context |
HELMADM_CONTEXT |
--repo-url |
HELMADM_REPO_URL |
| release name (positional) | HELMADM_RELEASE_NAME |
(values trace, with -v) |
HELMADM_TRACE_VALUES — per-key logs during argocd-yaml |
| (Kubernetes HTTP) | HELMADM_K8S_CONNECT_TIMEOUT — connect timeout in seconds (default: 5) |
| (Kubernetes HTTP) | HELMADM_K8S_READ_TIMEOUT — read timeout in seconds (default: 60) |
--kubeconfig follows kubectl: use the flag, or KUBECONFIG / ~/.kube/config.
Development
uv run pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file helmadm-0.1.2.tar.gz.
File metadata
- Download URL: helmadm-0.1.2.tar.gz
- Upload date:
- Size: 65.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8531863409ba227da930b6b076e9486f40e4c8764658f6c215f99f4d16f0205a
|
|
| MD5 |
3b098f3145fbb1410dfe85f6ba08d156
|
|
| BLAKE2b-256 |
7f55141392bfdf34b4a6b88d86c614ed046260b207a67e7bd040f1b12ccf5763
|
File details
Details for the file helmadm-0.1.2-py3-none-any.whl.
File metadata
- Download URL: helmadm-0.1.2-py3-none-any.whl
- Upload date:
- Size: 39.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.8 {"installer":{"name":"uv","version":"0.11.8","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
106c9bea8ad73b0b33ebf99111ad388f17626b0890c5abf5842fe66cd5cd0a7b
|
|
| MD5 |
52dee7df75dd3d2b8c9d64ec38b620f2
|
|
| BLAKE2b-256 |
19618cb5896d0474151c0a100949021a6182359a5a0bbd4929affb823f73f7d4
|