
This guide will explain the various components of ArgoCD Projects in YAML. In the spirit of GitOps, you may leverage deploying ArgoCD Projects from source code. This can be a powerful way to maintain Argo, and even consistently deploy to multiple clusters maintained by multiple Argo instances.
Understanding the ArgoCD Project
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: hello-haze-project
  namespace: argocd
spec:
  description: AppProject for the Hello Haze UI
  destinations:
  - namespace: hello-haze
    server: https://kubernetes.default.svc
  namespaceResourceBlacklist:
  - group: ""
    kind: ResourceQuota
  - group: ""
    kind: LimitRange
  namespaceResourceWhitelist:
  - group: '*'
    kind: '*'
  sourceRepos:
  - 'https://gitlab.clearthehaze.com/**'
You may see some expected properties in this resource, but let me elaborate on these elements.
Line 2: This deploys an AppProject resource
Line 4-5: The project will be named hello-haze-project and deployed in the argocd namespace. In ArgoCD 2.5.0, Argo resources need to be in the argocd namespace. Future releases will likely ease this restriction.
Line 7: A simple description on the resource, later displayed in the Argo UI.
Lines 8-10: In this case, this Project only allows resources to deploy to the hello-haze namespace. Any attempts to deploy elsewhere will result in an error.
Lines 11-15: This block prohibits modifying the ResourceQuota and LimitRange within the namespace. This prevents any application from messing with resource restrictions place on the namespace.
Lines 16-18: This block allows all other resources to deploy to the destinations.
Lines 19-20: The sourceRepos are the Git repositories which this Project may read.
To learn more about configuring the Project, check out my post on Project configuration.
