kubernetes/mod.just
Rama main · réplica de lectura del repositorio original.
set default-list
set default-script
set quiet
set script-interpreter := ['bash', '-euo', 'pipefail']
set shell := ['bash', '-euo', 'pipefail', '-c']
[doc('Prune pods in Failed, Pending, or Succeeded state')]
prune-pods:
for phase in Failed Pending Succeeded; do
kubectl delete pods --all-namespaces --field-selector status.phase="$phase" --ignore-not-found=true
done
[doc('Restore a PVC from volsync')]
restore ns app previous='0':
flux --namespace {{ ns }} suspend kustomization {{ app }}
flux --namespace {{ ns }} suspend helmrelease {{ app }}
kubectl --namespace {{ ns }} get deploy,sts --selector app.kubernetes.io/name={{ app }} --output name \
| xargs -r -I{} kubectl --namespace {{ ns }} scale {} --replicas=0
kubectl --namespace {{ ns }} wait pod --for=delete --selector="app.kubernetes.io/name={{ app }}" --timeout=5m
kubectl --namespace {{ ns }} get replicationdestination {{ app }}-dst --output json \
| jq 'del(.status)
| .metadata = {name: "{{ app }}-manual", namespace: .metadata.namespace}
| .spec.restic.copyMethod = "Direct"
| .spec.restic.destinationPVC = "{{ app }}"
| .spec.restic.previous = {{ previous }}' \
| kubectl apply --server-side --filename -
kubectl --namespace {{ ns }} wait job/volsync-dst-{{ app }}-manual --for=create --timeout=120s
kubectl --namespace {{ ns }} wait job/volsync-dst-{{ app }}-manual --for=condition=complete --timeout=120m
kubectl --namespace {{ ns }} delete replicationdestination {{ app }}-manual
flux --namespace {{ ns }} resume kustomization {{ app }}
flux --namespace {{ ns }} resume helmrelease {{ app }}
flux --namespace {{ ns }} reconcile helmrelease {{ app }} --force
kubectl --namespace {{ ns }} wait pod --for=condition=ready --selector="app.kubernetes.io/name={{ app }}" --timeout=5m
[doc('Snapshot volsync PVCs')]
snapshot:
kubectl get replicationsources --all-namespaces --no-headers | while read -r ns name _; do
kubectl --namespace "$ns" patch replicationsources "$name" --type merge -p "{\"spec\":{\"trigger\":{\"manual\":\"$(date +%s)\"}}}"
done
[arg('resource', pattern='hr|ks|gitrepo|ocirepo|es')]
[doc('Sync a resource')]
sync resource:
kubectl get {{ resource }} --all-namespaces --no-headers | while read -r ns name _; do
kubectl --namespace "$ns" annotate --field-manager flux-client-side-apply --overwrite {{ resource }} "$name" \
"force-sync=$(date +%s)" \
"reconcile.fluxcd.io/requestedAt=$(date +%s)" \
"reconcile.fluxcd.io/forceAt=$(date +%s)"
done