Files

51 lines
2.0 KiB
YAML

# The app-of-apps. This is the ONE manifest in this entire repo that you
# apply by hand, one time, with `kubectl apply -f`. It's the seed: after
# this exists, Argo CD takes over and everything else in the apps/ folder
# gets applied automatically, because this Application's job is to watch
# that folder.
#
# This deployment uses the public repository at tea.ahmza.com. Every child
# Application needs its own matching repoURL; they do not inherit this one.
#
# >> Ask Claude: "why does the app-of-apps live in argocd/app-of-apps
# instead of inside apps/ with everything else?" before moving on — the
# answer (avoiding a directory managing itself) is worth understanding.
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: app-of-apps
namespace: argocd
spec:
project: default
source:
repoURL: https://tea.ahmza.com/ahmza.com/vps-k8s.git
targetRevision: main
path: apps
directory:
# recurse: false is deliberate. apps/ contains both Application
# manifests (apps/demo.yaml) AND subfolders full of the actual
# workload manifests they point to (apps/demo/*.yaml). Without this,
# Argo CD would try to apply everything inside apps/demo/ directly
# under the app-of-apps too — duplicating work the demo Application
# already does, and blurring which Application actually owns what.
# recurse: false means "only look at files directly in apps/, ignore
# subfolders" — so the app-of-apps only ever sees the Application
# manifests, never the workloads themselves.
recurse: false
# This single Hetzner node has neither a LAN MetalLB pool nor the
# dedicated disks/extensions expected by Longhorn. Explicitly opt in
# to demo only; extend this filter when adding another Application.
include: demo.yaml
destination:
server: https://kubernetes.default.svc
namespace: argocd
syncPolicy:
automated:
prune: true
selfHeal: true
syncOptions:
- CreateNamespace=true