A modern Flask-based web application that analyzes ArgoCD Applications and ApplicationSets to identify Helm charts and compare their versions with available updates.
- π ArgoCD Integration: Automatically discovers and analyzes ArgoCD Applications and ApplicationSets
- π Helm Chart Detection: Identifies Helm charts from various repository types (HTTP, OCI)
- π Version Comparison: Compares installed versions with available versions from remote repositories
- π¨ Modern UI: Beautiful, responsive single-page application with real-time updates
- π Statistics Dashboard: Overview of applications, charts, and available updates
- π Kubernetes Native: Runs as a Kubernetes deployment with proper RBAC
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β Web Browser β β Flask App β β Kubernetes β
β βββββΊβ (Port 5000) βββββΊβ API Server β
βββββββββββββββββββ ββββββββββββββββββββ βββββββββββββββββββ
β
βΌ
ββββββββββββββββββββ
β Helm CLI β
β (OCI/HTTP) β
ββββββββββββββββββββ
- Kubernetes cluster with ArgoCD installed
kubectlconfigured to access your clusterdockerfor building the container image
-
Clone the repository
git clone <repository-url> cd helm-aware
-
Install Python dependencies
pip install -r requirements.txt
-
Run the application locally
python app/run.py
-
Access the dashboard Open your browser and navigate to
http://localhost:5000
-
Build the Docker image
docker build -t helm-aware:latest . -
Deploy to Kubernetes
# Apply all Kubernetes manifests kubectl apply -k k8s/ # Or apply individually kubectl apply -f k8s/namespace.yaml kubectl apply -f k8s/configmap.yaml kubectl apply -f k8s/service-account.yaml kubectl apply -f k8s/deployment.yaml kubectl apply -f k8s/service.yaml kubectl apply -f k8s/ingress.yaml
-
Access the application
# Port forward to access locally kubectl port-forward -n helm-aware svc/helm-aware 8080:80Then open
http://localhost:8080in your browser.
| Variable | Default | Description |
|---|---|---|
HOST |
0.0.0.0 |
Host to bind the Flask application |
PORT |
5000 |
Port to bind the Flask application |
DEBUG |
false |
Enable Flask debug mode |
LOG_LEVEL |
INFO |
Logging level |
The application includes proper RBAC configuration to access ArgoCD CRDs:
- ClusterRole: Read access to ArgoCD Applications and ApplicationSets
- ServiceAccount: Non-root user with minimal required permissions
- SecurityContext: Secure container configuration
Main dashboard page with the single-page application.
Returns all ArgoCD Applications and ApplicationSets with Helm chart analysis.
Response:
{
"applications": [
{
"metadata": {
"name": "example-app",
"namespace": "argocd"
},
"helm_charts": [
{
"repo_url": "https://charts.bitnami.com/bitnami",
"chart_name": "nginx",
"chart_version": "13.2.0",
"available_versions": ["13.2.1", "13.2.0", "13.1.0"]
}
]
}
],
"application_sets": [...]
}Get available versions for a specific chart.
Request:
{
"repo_url": "https://charts.bitnami.com/bitnami",
"chart_name": "nginx"
}The application automatically detects Helm charts by analyzing:
- Chart Field: Presence of a
chartfield in the source - OCI Protocol: Sources starting with
oci:// - Version Pattern: Target revisions matching semantic versioning
- HTTP/HTTPS: Traditional Helm chart repositories
- OCI: Open Container Initiative registries
- Auto-detection: Assumes OCI for repositories without protocol
-
Permission Denied
# Check if the service account has proper permissions kubectl auth can-i list applications --as=system:serviceaccount:helm-aware:helm-aware -
Helm Command Failures
# Check if Helm is available in the container kubectl exec -n helm-aware deployment/helm-aware -- helm version
-
Network Connectivity
# Test connectivity to external repositories kubectl exec -n helm-aware deployment/helm-aware -- curl -I https://charts.bitnami.com/bitnami/index.yaml
# View application logs
kubectl logs -n helm-aware deployment/helm-aware
# Follow logs in real-time
kubectl logs -n helm-aware deployment/helm-aware -fhelm-aware/
βββ app/ # Flask application
β βββ __init__.py # App factory
β βββ routes.py # API routes
β βββ run.py # Entry point
β βββ services/ # Business logic
β β βββ argocd_service.py
β β βββ helm_service.py
β βββ templates/ # HTML templates
β βββ index.html
βββ k8s/ # Kubernetes manifests
β βββ namespace.yaml
β βββ configmap.yaml
β βββ service-account.yaml
β βββ deployment.yaml
β βββ service.yaml
β βββ ingress.yaml
β βββ kustomization.yaml
βββ requirements.txt # Python dependencies
βββ Dockerfile # Container definition
βββ README.md # This file
- New API Endpoint: Add to
app/routes.py - New Service: Create in
app/services/ - UI Changes: Modify
app/templates/index.html - K8s Changes: Update manifests in
k8s/
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For issues and questions:
- Create an issue in the GitHub repository
- Check the troubleshooting section above
- Review the logs for error details