Skip to main content
Glama
254-argocd-third-party-helm.md9.95 kB
# PRD: Argo CD Integration for Third-Party Helm Charts **Issue**: [#254](https://github.com/vfarcic/dot-ai/issues/254) **Status**: Superseded **Priority**: High **Created**: 2025-12-06 **Closed**: 2025-12-10 --- ## Problem Statement When using the `recommend` tool in Helm mode to install third-party applications (PRD #250), users currently get direct `helm install` execution. While this works, it doesn't integrate with GitOps workflows where: 1. **All deployments should be declarative**: Stored in Git, not executed imperatively 2. **Argo CD manages application lifecycle**: Syncing, health checks, rollback capabilities 3. **Audit trail is required**: Git history provides deployment audit trail 4. **Environment promotion is needed**: Same Application definition can be promoted across environments Users who want GitOps-managed third-party applications must manually create Argo CD Application manifests after running `recommend`, defeating the purpose of automated deployment assistance. --- ## Solution Overview Extend the `recommend` tool's Helm mode to offer **Argo CD Application generation** as a deployment option: 1. **New Deployment Option**: After generating Helm configuration, ask: "How would you like to deploy?" - Direct `helm install` (current behavior) - Generate Argo CD Application CR 2. **Application CR Generation**: Create a complete Argo CD Application that: - References the external Helm chart repository - Includes all user-provided values - Configures appropriate sync policies 3. **Output Options**: - Display the Application YAML - Save to specified file path - (Future: Push to Git repository) --- ## User Journey ### Current State (Manual GitOps Setup) ``` User: "Install nginx ingress controller" → recommend tool finds chart, asks questions, runs helm install → User wants GitOps management → User manually creates Argo CD Application YAML → User commits to Git repo → User waits for Argo CD to sync ``` ### Target State (Integrated GitOps) ``` User: "Install nginx ingress controller" → recommend tool finds chart, asks questions → New question: "How would you like to deploy?" Option 1: Direct helm install Option 2: Generate Argo CD Application → User selects Argo CD → Additional questions: - Target namespace for the Application CR? (default: argocd) - Sync policy? (Manual / Automatic / Automatic with pruning) - Where to save the Application YAML? → System generates Application CR with all Helm values embedded → User gets ready-to-apply YAML (or saves to file) ``` --- ## Technical Design ### Workflow Integration Add new stage after Helm configuration in recommend workflow: ``` [Intent] → [Solution Selection] → [Helm Chart Discovery] → [Questions] → [NEW: Deployment Method] → [Generate Output] → [Deploy/Save] ``` ### Deployment Method Question ```typescript { id: 'deploymentMethod', question: 'How would you like to deploy this application?', options: [ { value: 'helm-install', label: 'Direct Helm Install', description: 'Run helm install now (current behavior)' }, { value: 'argocd-application', label: 'Argo CD Application', description: 'Generate Application CR for GitOps deployment' } ], default: 'helm-install' } ``` ### Argo CD-Specific Questions When `argocd-application` is selected: ```typescript { id: 'argocdNamespace', question: 'Which namespace should the Argo CD Application be created in?', type: 'text', default: 'argocd' }, { id: 'syncPolicy', question: 'What sync policy should be used?', options: [ { value: 'manual', label: 'Manual', description: 'Sync only when triggered' }, { value: 'auto', label: 'Automatic', description: 'Sync automatically on changes' }, { value: 'auto-prune', label: 'Automatic with Pruning', description: 'Auto-sync and remove orphaned resources' } ], default: 'manual' }, { id: 'outputPath', question: 'Where should the Application YAML be saved? (leave empty to display only)', type: 'text', placeholder: './argocd-apps/nginx-ingress.yaml' } ``` ### Application CR Generation Generate Argo CD Application CR from Helm configuration: ```typescript interface ArgoApplicationConfig { name: string; // From chart/release name namespace: string; // Where Application CR lives (default: argocd) project: string; // Argo CD project (default: default) destination: { server: string; // https://kubernetes.default.svc namespace: string; // Target namespace for Helm release }; source: { repoURL: string; // Helm repo URL chart: string; // Chart name targetRevision: string; // Chart version helm: { values: string; // YAML string of all user-provided values }; }; syncPolicy?: { automated?: { prune: boolean; selfHeal: boolean; }; }; } ``` **Example Output:** ```yaml apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: nginx-ingress namespace: argocd spec: project: default source: repoURL: https://kubernetes.github.io/ingress-nginx chart: ingress-nginx targetRevision: 4.8.3 helm: values: | controller: replicaCount: 2 resources: limits: cpu: 500m memory: 512Mi defaultBackend: enabled: true destination: server: https://kubernetes.default.svc namespace: ingress-nginx syncPolicy: automated: prune: true selfHeal: true ``` ### File Structure Changes ``` src/ ├── core/ │ ├── argocd-generator.ts # NEW: Application CR generation │ └── ... ├── tools/ │ └── recommend/ │ ├── helm-workflow.ts # Update: Add deployment method stage │ └── ... prompts/ ├── recommend-argocd-questions.md # NEW: Questions for Argo CD options ``` --- ## Success Criteria 1. **Deployment Choice**: Users can choose between direct Helm install and Argo CD Application generation 2. **Complete Application CR**: Generated Application includes all Helm values from user answers 3. **Valid Output**: Generated YAML passes `kubectl apply --dry-run` validation 4. **Sync Policy Options**: Users can configure manual, auto, or auto-prune sync policies 5. **File Output**: Users can save Application YAML to specified path 6. **Backward Compatible**: Default behavior (helm install) unchanged for existing users --- ## Out of Scope 1. **Git Push**: Pushing Application CR to Git repository (future PRD) 2. **Argo CD Detection**: Auto-detecting if Argo CD is installed in cluster 3. **ApplicationSet**: Generating ApplicationSets for multi-environment 4. **App of Apps**: Nested Application patterns 5. **Argo CD Project Creation**: Creating new Argo CD projects 6. **Private Helm Repos**: Credential configuration for private repositories 7. **Kustomize Sources**: Only Helm chart sources in this PRD --- ## Dependencies - **PRD #250** (Third-Party Helm Install): Helm chart discovery and value collection infrastructure - Argo CD CRD knowledge (Application schema) --- ## Risks and Mitigations | Risk | Impact | Mitigation | |------|--------|------------| | Argo CD not installed | Application CR cannot be applied | Warn user; still generate valid YAML for later use | | Invalid Application generated | Deployment fails | Validate against Argo CD schema; dry-run test | | Values formatting issues | Helm values not parsed correctly | Use proper YAML serialization; test with complex values | | Version mismatch | Application CR incompatible with Argo CD version | Target stable v1alpha1 API; document version requirements | --- ## Relationship to Other PRDs This PRD is part of a larger GitOps integration effort: | PRD | Scope | Dependency | |-----|-------|------------| | **#248** | Helm packaging for capability mode | Independent | | **#254** (this) | Argo CD + third-party Helm | Needs #250 | | Future | Argo CD + packaged Helm (from #248) | Needs #248 | | Future | Argo CD + Kustomize | Needs Kustomize packaging PRD | | Future | Flux equivalents | Independent track | | **#202** | May be superseded or narrowed | Review after above PRDs | --- ## Milestones - [ ] **M1**: Deployment method question integrated into Helm workflow - [ ] **M2**: Argo CD-specific questions (namespace, sync policy, output path) working - [ ] **M3**: Application CR generation with embedded Helm values - [ ] **M4**: File output option functional - [ ] **M5**: Integration tests covering all deployment paths - [ ] **M6**: Documentation updated with Argo CD workflow examples --- ## Progress Log | Date | Update | |------|--------| | 2025-12-06 | PRD created as part of GitOps integration planning | | 2025-12-06 | Scoped to third-party Helm charts only; other combinations tracked separately | | 2025-12-10 | PRD superseded by new GitOps architecture | --- ## Closure Summary **Status**: Superseded **Closed**: 2025-12-10 **Reason**: Architectural restructuring This PRD has been superseded by a new GitOps architecture that provides better separation of concerns: - **#264** (GitOps Tool with Argo CD Support): Standalone `gitops` tool with shared infrastructure and pluggable provider architecture - **#265** (Flux Support for GitOps Tool): Adds Flux as a provider - **#266** (GitOps Integration in Recommend Workflow): Integrates gitops into recommend workflow The new architecture: 1. Creates a standalone `gitops` tool that works with any existing packages 2. Provides smart package detection (Helm, Kustomize, raw manifests) 3. Uses a pluggable provider interface for extensibility 4. Enables code reuse between Argo CD and Flux providers 5. Supports both standalone usage and integration with recommend workflow

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/vfarcic/dot-ai'

If you have feedback or need assistance with the MCP directory API, please join our Discord server