esddns

ArgoCD Directory Structure

Organized separation of development and production ArgoCD configurations.

Tree

argocd/
├── bootstrap/
│   └── argocd-setup.sh              # Bootstrap script for automated setup
├── dev/                              # Development environment
│   ├── appproject.yaml               # Dev AppProject with dev-specific permissions
│   ├── applications/                 # Dev applications
│   │   ├── kustomization.yaml
│   │   ├── esddns-operator-helm.yaml
│   │   └── esddns-operator-kustomize.yaml
│   ├── kustomization.yaml            # Dev root kustomization
│   └── README.md                     # Dev-specific documentation
├── prod/                             # Production environment
│   ├── appproject.yaml               # Prod AppProject with prod-specific permissions
│   ├── applications/                 # Prod applications
│   │   ├── kustomization.yaml
│   │   ├── esddns-operator-helm.yaml
│   │   └── esddns-operator-kustomize.yaml
│   ├── kustomization.yaml            # Prod root kustomization
│   └── README.md                     # Prod-specific documentation
├── README.md                         # Main documentation
├── DEPLOYMENT.md                     # Comprehensive deployment guide
└── STRUCTURE.md                      # This file

File Details

/bootstrap/argocd-setup.sh

Automated bootstrap script for deploying ESDDNS to ArgoCD.

Usage:

./argocd-setup.sh [dev|prod|both]

Features:

/dev/ - Development Environment

appproject.yaml

ArgoCD AppProject for development with:

applications/

Development applications directory:

esddns-operator-helm.yaml

esddns-operator-kustomize.yaml

kustomization.yaml

Root kustomization for dev that includes:

Deploy with:

kubectl apply -k argocd/dev/

/prod/ - Production Environment

appproject.yaml

ArgoCD AppProject for production with:

applications/

Production applications directory:

esddns-operator-helm.yaml

esddns-operator-kustomize.yaml

kustomization.yaml

Root kustomization for prod that includes:

Deploy with:

kubectl apply -k argocd/prod/

Configuration Isolation

Dev vs Prod Differences

Aspect Dev Prod
Sync Automatic Manual
Prune Enabled Disabled
SelfHeal Enabled Disabled
Replicas 1 3
Values values-development.yaml values-production.yaml
AppProject esddns-dev esddns-prod
Namespace esddns-operator-dev esddns-operator
Permissions Liberal Strict

Why Separate Environments?

  1. Isolation: Changes in dev don’t affect prod
  2. Different Sync Policies: Dev auto-syncs, prod requires approval
  3. Different Scaling: Dev runs on 1 replica, prod runs on 3
  4. Different Permissions: Prod has stricter RBAC
  5. Clear Ownership: Each environment has its own AppProject
  6. Easy Cleanup: Remove entire environment with single command

Deployment Workflows

Deploy to Dev Only

kubectl apply -k argocd/dev/

Deploy to Prod Only

kubectl apply -k argocd/prod/

Deploy to Both (using bootstrap script)

cd argocd/bootstrap
./argocd-setup.sh both

Manage Individual Applications

# Dev - Helm
kubectl apply -f argocd/dev/applications/esddns-operator-helm.yaml

# Dev - Kustomize
kubectl apply -f argocd/dev/applications/esddns-operator-kustomize.yaml

# Prod - Helm
kubectl apply -f argocd/prod/applications/esddns-operator-helm.yaml

# Prod - Kustomize
kubectl apply -f argocd/prod/applications/esddns-operator-kustomize.yaml

Shared Resources

Both dev and prod reference the same Git repository:

Cleanup

Remove specific environment:

# Remove dev
kubectl delete -k argocd/dev/

# Remove prod
kubectl delete -k argocd/prod/

Remove everything:

kubectl delete -k argocd/dev/
kubectl delete -k argocd/prod/

This will:

  1. Delete all Applications in the environment(s)
  2. Delete the AppProject(s)
  3. Optionally delete deployed resources (depends on finalizer configuration)