Zero-config Flux to Docker Hardened Images chart migration reporter
Project description
Steelman
Disclaimer
This project is vibe-coded.
Assume there are bugs, rough edges, missing validation, and incorrect assumptions. Review the output before relying on it.
steelman is a reporting CLI for Flux-managed Helm releases.
It scans Flux resources from:
- live Kubernetes clusters
- Git repositories containing Flux manifests
- or both
It compares those releases against Docker Hardened Images catalog data and reports one of:
- already using a DHI chart
- a DHI chart replacement is available
- DHI image replacements are available inside the chart values
- no DHI replacement was found
Scope
Current scope:
- Flux
HelmRelease - Flux
HelmRepository - Flux
OCIRepository
Not currently supported:
- plain Helm releases that are not represented as Flux resources
- Argo CD applications
- direct workload or pod inspection
valuesFromresolution
What It Checks
For each Flux release, the tool:
- identifies the current chart source
- checks whether a DHI chart exists
- if not, tries to resolve chart defaults with
helm show values - merges inline
HelmRelease.spec.values - extracts image references from the effective values
- checks whether matching DHI images exist
Chart replacement takes precedence over image replacement.
Requirements
- Python 3.12+
uvhelmif you want image replacement analysis- kubeconfig access if you want live cluster scanning
Usage
From the repo root:
uv run steelman
Common variants:
uv run steelman --mode cluster
uv run steelman --mode git --repo /path/to/gitops-repo
uv run steelman --contexts prod-eu,prod-us
uv run steelman --output-dir reports
uv run steelman --offline
uv run steelman --skip-image-analysis
uv run steelman --helm-bin helm
uv run steelman --image-match-threshold 0.75
uv run steelman --aliases ./aliases.yaml
uv run steelman --verbose
Defaults
If run without flags:
--mode both- scans
.recursively for Flux manifests - reads kubeconfig from the default location
- uses all contexts if kubeconfig contains 10 or fewer contexts
- otherwise uses the current context only
- writes:
./steelman.md./steelman.json
Output
The Markdown report contains:
- summary
- already on DHI chart
- hardened chart available
- hardened images available
- no DHI replacement
- scan notes
The JSON report contains:
- catalog metadata
- inventory summary
- recommendation counts
- per-release results
- recorded errors
Current Limitations
valuesFromis detected but not resolved- image analysis depends on
helm show values - some OCI chart sources may fail
helm show valuesdepending on how the chart is published - matching is heuristic and may still need alias tuning for edge cases
Development
uv sync --group dev
uv run ruff check .
uv run ruff format --check .
uv run ty check
uv run pytest
Project details
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 steelman-0.1.0.tar.gz.
File metadata
- Download URL: steelman-0.1.0.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d66c97dc8cd8480e3db8083fdf83677ce67ab25e4828a0d1274859e7a11d2dc2
|
|
| MD5 |
5c0adf43d1c527bd8a7ddca730bd0c51
|
|
| BLAKE2b-256 |
7e33bf4e439da65a44b7e9da6b983385df082cc61e75ca591984a585584a7643
|
File details
Details for the file steelman-0.1.0-py3-none-any.whl.
File metadata
- Download URL: steelman-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1240083b3e82c420a598b73de12b43a4560df51df3c41d16e2f909f89c678525
|
|
| MD5 |
842b834e2df2e9148f53cbf4143433ee
|
|
| BLAKE2b-256 |
a1af6f281ad409a1a5a08b4c16ba75be1637c787a106aeb37f8efbc8b7373072
|