You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DevOps-Bash-tools/kubernetes/argocd_auto_sync.sh

76 lines
2.1 KiB
Bash

#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
#
# Author: Hari Sekhon
# Date: 2023-08-10 21:06:30 +0100 (Thu, 10 Aug 2023)
#
# https://github.com/HariSekhon/DevOps-Bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/HariSekhon
#
set -euo pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1090,SC1091
. "$srcdir/lib/utils.sh"
# shellcheck disable=SC2034,SC2154
usage_description="
Enables/Disable ArgoCD Auto-Sync
Need to be able to manually fix apps sometimes, without ArgoCD reverting the changes before they're testing and committed
If ArgoCD apps of the name 'argocd' and 'apps' are found, then toggles them too to prevent cascading auto-sync re-enabling via the App-of-Apps pattern
(see https://github.com/HariSekhon/Kubernetes-configs)
"
# used by usage() in lib/utils.sh
# shellcheck disable=SC2034
usage_args="on/off [<app>]"
help_usage "$@"
min_args 1 "$@"
check_bin argocd
check_env_defined "ARGOCD_SERVER"
if [ "$1" = on ]; then
automated_or_none="automated"
msg="enabling auto-sync on app"
elif [ "$1" = off ]; then
automated_or_none="none"
msg="disabling auto-sync on app"
else
usage "invalid first arg given, must be either 'on' or 'off'"
fi
# custom env var, found in .envrc in Kubernetes and DevOps-Bash-tools .envrc files
if [ -n "${ARGOCD_APP:-}" ]; then
app="$ARGOCD_APP"
elif [ $# -eq 2 ]; then
app="$2"
else
usage "\$ARGOCD_APP not defined and no second arg passed for app to enable/disable auto-sync for"
fi
apps="$(argocd app list -o name | sed 's|argocd/||')"
# App-of-Apps which would re-enable the app must be disabled first
for base_app in argocd apps; do
if grep -Fxq 'argocd' <<< "$apps"; then
timestamp "$msg '$base_app'"
argocd app set "$base_app" --sync-policy "$automated_or_none"
fi
echo >&2
done
timestamp "$msg '$app'"
argocd app set "$app" --sync-policy "$automated_or_none"