Summary
Configuring Argo CD can be an arduous process with a growing number of configuration knobs in large configmaps and secrets. Example https://argoproj.github.io/argo-cd/operator-manual/argocd-cm.yaml
This enhancement proposal aims to introduce a set of strongly typed APIs a.k.a CRDs to make configuration of clusters, repository credentials, and health checks.
Motivation
- Make it extremely hard for operators to enter incorrect configuration.
 - Operators should be able to define key configuration information as custom resources.
 - Use the Kubernetes best practices to deprecate API attributes ( example ) .
 - Provide feedback to operators as information in the `.status` section of the configuration object or deny admission of an incorrectly formatted configuration.
 
Goals
- Build a set of operator-focused APIs that hide the configuration information that goes into argocd-cm.yaml
 - Use the operator-focused APIs to convey compatibility information to operators.
 
Non-Goals
- Enhancing https://github.com/argoproj-labs/argocd-operator is a non-goal. We may consider having these controllers in a separate repo or the same as https://github.com/argoproj-labs/argocd-operator .
 - This proposal doesn’t intend to define how the APIs would look in detail.
 - This proposal doesn’t intend to define the exhaustive list of configurations.
 
Proposal
- Define & manage a set of CRD/Controllers in a separate Github repository that simplify configuration of Argo CD.
 - Define a Repository CRD and controller which watches Repository CRs and configures the relevant configmaps. argoproj/argo-cd/issues/5720
 - Define a CustomHealthCheck CRD and controller which watches CustomHealthCheck and configures the relevant configmaps argoproj/argo-cd/issues/5506
 - Define a ArgoCDConfig CRD and controller which watches ArgoCDConfig CRs and configures relevant configmaps that captures the equivalent of https://argoproj.github.io/argo-cd/operator-manual/argocd-cm.yaml for areas which aren’t covered by other CRDs.
 - argoproj/argo-cd/issues/5721Define a ConfigManagementPlugin CRD and controller which watches ConfigManagementPlugin CRs and configures the appropriate workloads
 
These CRDs need may live with the Argo CD Operator project.
Use cases
Use case 1:
As an operator, I wish to add/remove repository configurations following an OpenAPI Validation Schema.
Use case 2:
As an operator, I wish to add/remove custom health checks following an OpenAPI Validation Schema.
Use case 3:
As an operator, I wish to configure ArgoCD following an OpenAPI Validation Schema.
- is blocked by
 - 
                    
GITOPS-766 Add mechanism for custom Argo CD plugins and tools
-         
 - Closed
 
 -         
 - 
                    
GITOPS-915 Health status for OpenShift resources
-         
 - Closed
 
 -         
 - 
                    
GITOPS-1310 Define a Repository CRD and controller which watches Repository CRs and configures the relevant configmaps.
-         
 - Closed
 
 -         
 - 
                    
GITOPS-1309 R&D: Define & manage a set of CRD/Controllers in a separate Github repository that simplify configuration of Argo CD
-         
 - Closed
 
 -