Fix vps-authentik presync: SA/Role/RoleBinding need PreSync hook ordering too

Without hook annotations they land in ArgoCD's regular Sync phase, which
runs AFTER PreSync hooks - so the presync Job's pod couldn't be created
('serviceaccount not found', confirmed live). Weight -1 vs the Job's 0
gets them created first, within the same PreSync phase.
This commit is contained in:
Scooby Husky
2026-08-17 22:37:55 -05:00
parent 85c916285e
commit e86d5e1154
@@ -3,17 +3,39 @@
# infrastructure/authentik/manifests/presync-job.yaml, scoped to a # infrastructure/authentik/manifests/presync-job.yaml, scoped to a
# dedicated ServiceAccount here (no shared argocd-hook-sa exists on the # dedicated ServiceAccount here (no shared argocd-hook-sa exists on the
# vps-standby cluster the way it does at home). # vps-standby cluster the way it does at home).
#
# SA/Role/RoleBinding are PreSync hooks too (hook-weight "-1", before the
# Job's default weight "0") - without that they're just regular resources
# applied in ArgoCD's normal Sync phase, which runs AFTER PreSync hooks,
# so the Job's pod would fail to create with "serviceaccount not found"
# (confirmed live 2026-08-18).
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
metadata: metadata:
name: authentik-hook name: authentik-hook
namespace: authentik namespace: authentik
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-weight: "-1"
# No hook-delete-policy here on purpose: SA/Role/RoleBinding aren't
# Jobs, so ArgoCD treats them as immediately "succeeded" on creation -
# a HookSucceeded delete policy would remove the SA right away,
# possibly racing with (or before) the weight "0" Job below that
# actually needs it to still exist while it runs.
--- ---
apiVersion: rbac.authorization.k8s.io/v1 apiVersion: rbac.authorization.k8s.io/v1
kind: Role kind: Role
metadata: metadata:
name: authentik-hook name: authentik-hook
namespace: authentik namespace: authentik
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-weight: "-1"
# No hook-delete-policy here on purpose: SA/Role/RoleBinding aren't
# Jobs, so ArgoCD treats them as immediately "succeeded" on creation -
# a HookSucceeded delete policy would remove the SA right away,
# possibly racing with (or before) the weight "0" Job below that
# actually needs it to still exist while it runs.
rules: rules:
- apiGroups: [""] - apiGroups: [""]
resources: ["secrets"] resources: ["secrets"]
@@ -27,6 +49,14 @@ kind: RoleBinding
metadata: metadata:
name: authentik-hook name: authentik-hook
namespace: authentik namespace: authentik
annotations:
argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-weight: "-1"
# No hook-delete-policy here on purpose: SA/Role/RoleBinding aren't
# Jobs, so ArgoCD treats them as immediately "succeeded" on creation -
# a HookSucceeded delete policy would remove the SA right away,
# possibly racing with (or before) the weight "0" Job below that
# actually needs it to still exist while it runs.
subjects: subjects:
- kind: ServiceAccount - kind: ServiceAccount
name: authentik-hook name: authentik-hook
@@ -43,6 +73,7 @@ metadata:
namespace: authentik namespace: authentik
annotations: annotations:
argocd.argoproj.io/hook: PreSync argocd.argoproj.io/hook: PreSync
argocd.argoproj.io/hook-weight: "0"
argocd.argoproj.io/hook-delete-policy: BeforeHookCreation argocd.argoproj.io/hook-delete-policy: BeforeHookCreation
spec: spec:
backoffLimit: 3 backoffLimit: 3