# βοΈ make-argocd-fly
A powerful tool for generating **ArgoCD Applications** and their **rendered Kubernetes resources** from **Helm**, **Kustomize**, and **Jinja2** β across multiple environments, at scale.
[](https://github.com/Karandash8/make-argocd-fly/actions/workflows/coverage.yml)
[](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Karandash8/26eb92c97bbfac22b938afebac85e7cd/raw/covbadge.json)
[](LICENSE)
---
## π§ What It Does
**`make-argocd-fly`** lets you:
- Render **Helm charts** and **Kustomize overlays** into plain Kubernetes manifests, so you know exactly what will be deployed
- Add **Jinja2-based templating** for reusable parametrization
- Automatically generate **ArgoCD Application** resources
- Organize applications into a **well-defined directory structure**
- Define multiple environments and control **what gets deployed where**
Think of it as a static GitOps generator for Kubernetes β rendering, organizing, and wiring your apps for ArgoCD.
---
## π§© The Rendered Manifest Pattern
The Kubernetes GitOps community recently introduced the [Rendered Manifest Pattern](https://www.youtube.com/watch?v=TonN-369Qfo) as a best practice for managing applications with ArgoCD.
Instead of letting ArgoCD invoke Helm or Kustomize internally, you **pre-render manifests outside the cluster** and commit only plain YAML to Git.
This makes your Git repo the *single source of truth* for the exact Kubernetes resources being deployed.
### Why this matters
When ArgoCD runs Helm or Kustomize directly, you may hit problems like:
- **Version drift** β different clusters use different plugin versions and render inconsistently
- **Debugging blind spots** β failures happen inside ArgoCD, with no access to the rendered YAML
- **Unreviewable diffs** β Git diffs show template changes, not the actual manifests applied
- **Limited portability** β CI/CD, linters, and policy tools canβt easily check resources
- **Operational surprises** β subtle plugin/env differences lead to unexpected drift
With pre-rendered manifests you gain:
- **Single source of truth** β Git shows exactly what ArgoCD applies
- **Deterministic builds** β no hidden differences across environments
- **Transparent reviews** β PR diffs show actual Kubernetes changes
- **Pluggable checks** β run linters and security scanners on YAML in CI
- **Simpler ops** β ArgoCD only syncs plain YAML, reducing complexity
**`make-argocd-fly` is a practical implementation of the Rendered Manifest Pattern.**
It automates rendering of Helm charts, Kustomize overlays, and Jinja2 templates, organizes them by environment, and generates ArgoCD `Application` resources pointing to the rendered output.
---
## π‘ Key Features
* β
**Helm rendering**
Render Helm charts into raw manifests.
* β
**Kustomize overlays**
Render Kustomize overlays into fully resolved Kubernetes manifests. See the full, flattened configuration before deployment.
* β
**Jinja2 templating**
Use variables, logic, and partials to build composable app definitions.
* β
**Multi-environment support**
Define once and deploy to multiple environments (e.g. `dev`, `staging`, `prod`) with clean separation of concerns.
* β
**ArgoCD Application generation**
Automatically generate Application CRs based on your configuration and environment layout.
* β
**Repeatable & Git-friendly**
Fully GitOps-compatible. Output is deterministic and fits naturally into pull request workflows.
---
## π¦ Installation
```bash
pip install make-argocd-fly
```
---
## π Project Structure (Example)
```
config/
βββ my_vars.yml # Config file
βββ my_apps.yml # Config file
source/
βββ my_awesome_app/ # Application source resources
βββ monitoring/
βββ prometheus/ # Application source resources
βββ grafana/ # Application source resources
output/
βββ my_env/ # Environment name
βββ my_awesome_app/ # Application YAML resources
βββ monitoring/
βββ prometheus/ # Application YAML resources
βββ grafana/ # Application YAML resources
```
---
## π Example Workflow
```
make-argocd-fly
```
What it does:
- Applies Jinja2 templates with the right variables
- Renders Helm and Kustomize into raw manifests
- Generates `Application` manifests for ArgoCD
- Organizes everything under `./output/`
---
## π Documentation
- [Getting Started](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/getting-started.md)
- [Configuration Reference](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/configuration.md)
- [Application Templates](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/templates.md)
- [Kustomize & Helm Applications](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/kustomize.md)
- [ArgoCD Integration](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/argocd.md)
- [CLI Reference](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/cli.md)
- [Examples](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/examples.md)
- [Troubleshooting & Limitations](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/caveats.md)
---
## π£ Community & Feedback
- Found a bug or have a feature request? [Open an issue](https://github.com/Karandash8/make-argocd-fly/issues)
- Want to contribute? Check out [CONTRIBUTING.md](https://github.com/Karandash8/make-argocd-fly/blob/main/CONTRIBUTING.md)
---
## π‘ License
MIT License β see [LICENSE](https://github.com/Karandash8/make-argocd-fly/blob/main/LICENSE) for full text.
Raw data
{
"_id": null,
"home_page": null,
"name": "make-argocd-fly",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "argocd, kustomize, jinja2",
"author": null,
"author_email": "Andrei Lapin <karandash8@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/e8/e4/fca206d30d23df1713c2d2f1b8aa8335604ddffb8330cc3ca7e7b5282564/make_argocd_fly-0.4.2.tar.gz",
"platform": null,
"description": "# \u2708\ufe0f make-argocd-fly\n\nA powerful tool for generating **ArgoCD Applications** and their **rendered Kubernetes resources** from **Helm**, **Kustomize**, and **Jinja2** \u2014 across multiple environments, at scale.\n\n[](https://github.com/Karandash8/make-argocd-fly/actions/workflows/coverage.yml)\n[](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/Karandash8/26eb92c97bbfac22b938afebac85e7cd/raw/covbadge.json)\n[](LICENSE)\n\n---\n\n## \ud83d\udd27 What It Does\n\n**`make-argocd-fly`** lets you:\n\n- Render **Helm charts** and **Kustomize overlays** into plain Kubernetes manifests, so you know exactly what will be deployed\n- Add **Jinja2-based templating** for reusable parametrization\n- Automatically generate **ArgoCD Application** resources\n- Organize applications into a **well-defined directory structure**\n- Define multiple environments and control **what gets deployed where**\n\nThink of it as a static GitOps generator for Kubernetes \u2014 rendering, organizing, and wiring your apps for ArgoCD.\n\n---\n\n## \ud83e\udde9 The Rendered Manifest Pattern\n\nThe Kubernetes GitOps community recently introduced the [Rendered Manifest Pattern](https://www.youtube.com/watch?v=TonN-369Qfo) as a best practice for managing applications with ArgoCD.\n\nInstead of letting ArgoCD invoke Helm or Kustomize internally, you **pre-render manifests outside the cluster** and commit only plain YAML to Git.\nThis makes your Git repo the *single source of truth* for the exact Kubernetes resources being deployed.\n\n### Why this matters\n\nWhen ArgoCD runs Helm or Kustomize directly, you may hit problems like:\n- **Version drift** \u2013 different clusters use different plugin versions and render inconsistently\n- **Debugging blind spots** \u2013 failures happen inside ArgoCD, with no access to the rendered YAML\n- **Unreviewable diffs** \u2013 Git diffs show template changes, not the actual manifests applied\n- **Limited portability** \u2013 CI/CD, linters, and policy tools can\u2019t easily check resources\n- **Operational surprises** \u2013 subtle plugin/env differences lead to unexpected drift\n\nWith pre-rendered manifests you gain:\n- **Single source of truth** \u2013 Git shows exactly what ArgoCD applies\n- **Deterministic builds** \u2013 no hidden differences across environments\n- **Transparent reviews** \u2013 PR diffs show actual Kubernetes changes\n- **Pluggable checks** \u2013 run linters and security scanners on YAML in CI\n- **Simpler ops** \u2013 ArgoCD only syncs plain YAML, reducing complexity\n\n**`make-argocd-fly` is a practical implementation of the Rendered Manifest Pattern.**\nIt automates rendering of Helm charts, Kustomize overlays, and Jinja2 templates, organizes them by environment, and generates ArgoCD `Application` resources pointing to the rendered output.\n\n\n---\n\n## \ud83d\udca1 Key Features\n\n* \u2705 **Helm rendering**\nRender Helm charts into raw manifests.\n\n* \u2705 **Kustomize overlays**\nRender Kustomize overlays into fully resolved Kubernetes manifests. See the full, flattened configuration before deployment.\n\n* \u2705 **Jinja2 templating**\nUse variables, logic, and partials to build composable app definitions.\n\n* \u2705 **Multi-environment support**\nDefine once and deploy to multiple environments (e.g. `dev`, `staging`, `prod`) with clean separation of concerns.\n\n* \u2705 **ArgoCD Application generation**\nAutomatically generate Application CRs based on your configuration and environment layout.\n\n* \u2705 **Repeatable & Git-friendly**\nFully GitOps-compatible. Output is deterministic and fits naturally into pull request workflows.\n\n---\n\n## \ud83d\udce6 Installation\n\n```bash\npip install make-argocd-fly\n```\n\n---\n\n## \ud83d\udcc1 Project Structure (Example)\n\n```\nconfig/\n \u251c\u2500\u2500 my_vars.yml # Config file\n \u2514\u2500\u2500 my_apps.yml # Config file\nsource/\n \u251c\u2500\u2500 my_awesome_app/ # Application source resources\n \u2514\u2500\u2500 monitoring/\n \u251c\u2500\u2500 prometheus/ # Application source resources\n \u2514\u2500\u2500 grafana/ # Application source resources\noutput/\n \u2514\u2500\u2500 my_env/ # Environment name\n \u251c\u2500\u2500 my_awesome_app/ # Application YAML resources\n \u2514\u2500\u2500 monitoring/\n \u251c\u2500\u2500 prometheus/ # Application YAML resources\n \u2514\u2500\u2500 grafana/ # Application YAML resources\n```\n\n---\n\n## \ud83d\udd04 Example Workflow\n\n```\nmake-argocd-fly\n```\n\nWhat it does:\n- Applies Jinja2 templates with the right variables\n- Renders Helm and Kustomize into raw manifests\n- Generates `Application` manifests for ArgoCD\n- Organizes everything under `./output/`\n\n---\n\n## \ud83d\udcd8 Documentation\n\n- [Getting Started](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/getting-started.md)\n- [Configuration Reference](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/configuration.md)\n- [Application Templates](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/templates.md)\n- [Kustomize & Helm Applications](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/kustomize.md)\n- [ArgoCD Integration](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/argocd.md)\n- [CLI Reference](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/cli.md)\n- [Examples](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/examples.md)\n- [Troubleshooting & Limitations](https://github.com/Karandash8/make-argocd-fly/blob/main/docs/caveats.md)\n\n---\n\n## \ud83d\udce3 Community & Feedback\n\n- Found a bug or have a feature request? [Open an issue](https://github.com/Karandash8/make-argocd-fly/issues)\n- Want to contribute? Check out [CONTRIBUTING.md](https://github.com/Karandash8/make-argocd-fly/blob/main/CONTRIBUTING.md)\n\n---\n\n## \ud83d\udee1 License\n\nMIT License \u2013 see [LICENSE](https://github.com/Karandash8/make-argocd-fly/blob/main/LICENSE) for full text.\n",
"bugtrack_url": null,
"license": null,
"summary": "A tool to generate Kubernetes manifests from templates",
"version": "0.4.2",
"project_urls": {
"Source Code": "https://github.com/Karandash8/make-argocd-fly"
},
"split_keywords": [
"argocd",
" kustomize",
" jinja2"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "c1d16849e904e9a50cadbabd2ff1e0eac105452f82d1804b32aa018379d16e01",
"md5": "f045c0fcc0217608fbd59a63b7af9fe7",
"sha256": "b0e89189f4f772f8606019308caf9bb581d452d230cc08b47ddc07167a8ede19"
},
"downloads": -1,
"filename": "make_argocd_fly-0.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f045c0fcc0217608fbd59a63b7af9fe7",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 251281,
"upload_time": "2025-10-26T20:00:01",
"upload_time_iso_8601": "2025-10-26T20:00:01.952995Z",
"url": "https://files.pythonhosted.org/packages/c1/d1/6849e904e9a50cadbabd2ff1e0eac105452f82d1804b32aa018379d16e01/make_argocd_fly-0.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e8e4fca206d30d23df1713c2d2f1b8aa8335604ddffb8330cc3ca7e7b5282564",
"md5": "4f1adfa960ca062efff09a3bd3563463",
"sha256": "99a11dbcd30f68f4e14b15c4532016a56f5ab947406b7c35411c40d9a37e1433"
},
"downloads": -1,
"filename": "make_argocd_fly-0.4.2.tar.gz",
"has_sig": false,
"md5_digest": "4f1adfa960ca062efff09a3bd3563463",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 147369,
"upload_time": "2025-10-26T20:00:03",
"upload_time_iso_8601": "2025-10-26T20:00:03.736720Z",
"url": "https://files.pythonhosted.org/packages/e8/e4/fca206d30d23df1713c2d2f1b8aa8335604ddffb8330cc3ca7e7b5282564/make_argocd_fly-0.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-10-26 20:00:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Karandash8",
"github_project": "make-argocd-fly",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [
{
"name": "PyYAML",
"specs": [
[
"==",
"6.0.3"
]
]
},
{
"name": "Jinja2",
"specs": [
[
"==",
"3.1.6"
]
]
},
{
"name": "jinja2-ansible-filters",
"specs": [
[
"==",
"1.3.2"
]
]
},
{
"name": "yamllint",
"specs": [
[
"==",
"1.37.1"
]
]
},
{
"name": "packaging",
"specs": [
[
"==",
"25.0"
]
]
},
{
"name": "Deprecated",
"specs": [
[
"==",
"1.2.18"
]
]
}
],
"tox": true,
"lcname": "make-argocd-fly"
}