2022-07-06 07:10:13 +00:00
|
|
|
test -z "$DISPLAY" || return 0
|
|
|
|
|
2022-07-06 09:15:29 +00:00
|
|
|
export PATH="$PATH:$HOME/.local/bin/server"
|
|
|
|
export PROJECTS="$HOME/projects"
|
|
|
|
test -d "$MUSIC" || export MUSIC="/srv/funkwhale/data/music/janek"
|
2022-07-06 07:10:13 +00:00
|
|
|
|
|
|
|
## STACKSPIN
|
2022-07-06 09:15:29 +00:00
|
|
|
export STACKSPIN="${STACKSPIN:-$PROJECTS/stackspin}"
|
2022-04-28 16:15:51 +00:00
|
|
|
_stackspin_cluster_cache=/var/tmp/stackspin-cluster
|
|
|
|
|
2022-07-06 07:01:38 +00:00
|
|
|
# Stackspin CLI Wrapper:
|
2022-04-28 16:15:51 +00:00
|
|
|
# Initialize once with "stack select example.org",
|
2022-06-30 09:54:03 +00:00
|
|
|
# then it loads the last selected cluster on startup.
|
2022-04-28 16:15:51 +00:00
|
|
|
# Presumes a mapping like the following in your ssh config:
|
|
|
|
# Host example.org
|
|
|
|
# Hostname [IP]
|
2022-07-06 07:10:13 +00:00
|
|
|
# This is a function so it can change directory.
|
2022-04-28 16:15:51 +00:00
|
|
|
stack() {
|
2022-06-30 09:54:03 +00:00
|
|
|
test $# -lt 1 &&
|
|
|
|
builtin cd "$STACKSPIN" &&
|
|
|
|
echo "Usage: $0 <COMMAND> [args...]" &&
|
2022-06-30 10:20:19 +00:00
|
|
|
echo "Inbuilt commands: select, sso, user, exec, pod, occ, push" &&
|
2022-06-30 09:54:03 +00:00
|
|
|
return 1
|
|
|
|
local command="$1"
|
|
|
|
shift
|
|
|
|
case "$command" in
|
2022-05-03 16:50:05 +00:00
|
|
|
# stackspin administration
|
2022-06-30 09:54:03 +00:00
|
|
|
(select)
|
2022-04-28 16:15:51 +00:00
|
|
|
export _cluster_name="$1"
|
|
|
|
export _cluster_ip="$(ssh -G "$_cluster_name" | grep --max-count 1 "^hostname " | cut -d " " -f2-)"
|
|
|
|
export CLUSTER_DIR="$STACKSPIN/clusters/$_cluster_name"
|
|
|
|
export KUBECONFIG="$CLUSTER_DIR/kube_config_cluster.yml"
|
2022-05-10 13:25:00 +00:00
|
|
|
# Uncomment the line below to always use the main stackspin repo, even when running in a fork.
|
|
|
|
#export GITLAB_CI="true"
|
2022-04-28 16:15:51 +00:00
|
|
|
echo Selected "$_cluster_name" with IP "$_cluster_ip"
|
|
|
|
echo "$_cluster_name" >"$_stackspin_cluster_cache"
|
2022-07-06 08:17:45 +00:00
|
|
|
test "$PWD" = "$HOME" && builtin cd "$STACKSPIN"
|
2022-04-28 16:15:51 +00:00
|
|
|
;;
|
2022-06-30 09:54:03 +00:00
|
|
|
(sso) builtin cd "$STACKSPIN"
|
2022-06-30 10:20:19 +00:00
|
|
|
"$0" exec dashboard --container backend -- flask "$@";;
|
2022-07-18 10:57:43 +00:00
|
|
|
(users)
|
|
|
|
if test $# -gt 0
|
|
|
|
then for arg
|
|
|
|
do "$0" user show $arg
|
|
|
|
done
|
|
|
|
else "$0" users $("$0" user list | sed 's|.*<\(.*\)>.*|\1|')
|
|
|
|
fi;;
|
2022-06-30 10:20:19 +00:00
|
|
|
(user|app)
|
2022-06-30 09:54:03 +00:00
|
|
|
if test "$1" = "init"
|
|
|
|
then mail="$2"
|
|
|
|
shift 2
|
2022-06-30 10:20:19 +00:00
|
|
|
"$0" user create "$mail"
|
|
|
|
"$0" user update "$mail" name "$*"
|
2022-04-28 16:15:51 +00:00
|
|
|
echo "Initialized user '$*' with email '$mail'"
|
2022-06-30 10:20:19 +00:00
|
|
|
else "$0" sso cli "$command" "$@"
|
2022-04-28 16:15:51 +00:00
|
|
|
fi;;
|
2022-05-03 16:50:05 +00:00
|
|
|
# app clis via kubectl
|
2022-07-20 20:05:43 +00:00
|
|
|
(occ) "$0" exec nc-nextcloud -c nextcloud -it -- su www-data -s /bin/bash -c "php $command $*";;
|
2022-07-18 10:57:43 +00:00
|
|
|
(exec) "$0" kube exec "$@";;
|
2022-07-20 20:05:43 +00:00
|
|
|
(logs) "$0" kube logs "$@";;
|
2022-07-18 10:57:43 +00:00
|
|
|
(kube)
|
|
|
|
if ! pod=$("$0" pod "$2-\(0\|[0-f]\+\)")
|
|
|
|
then echo "No pod found for $2" >&2
|
2022-06-30 10:20:19 +00:00
|
|
|
return 1
|
|
|
|
fi
|
2022-07-18 10:57:43 +00:00
|
|
|
local subcommand=$1
|
|
|
|
shift 2
|
|
|
|
kubectl "$subcommand" -n $(echo $pod) "$@";;
|
2022-06-30 09:54:03 +00:00
|
|
|
(pod)
|
|
|
|
local podname=$1
|
|
|
|
shift
|
|
|
|
kubectl get pods --all-namespaces --field-selector="status.phase=Running" -o=custom-columns=S:.metadata.namespace,N:.metadata.name --no-headers "$@" | grep --color=never "$podname";;
|
2022-06-30 10:20:19 +00:00
|
|
|
(push)
|
2022-07-18 10:57:43 +00:00
|
|
|
git commit -a "$@"
|
|
|
|
git push &&
|
|
|
|
flux reconcile source git -n flux-system "$(basename $(git rev-parse --show-toplevel))"
|
|
|
|
flux reconcile kustomization -n flux-system "$(basename $(git rev-parse --show-toplevel))";;
|
2022-05-03 16:50:05 +00:00
|
|
|
# stackspin bare
|
2022-06-30 09:54:03 +00:00
|
|
|
(*) if which "$0-$command" >/dev/null 2>&1
|
|
|
|
then "$0-$command" "$@"
|
|
|
|
return $?
|
|
|
|
fi
|
|
|
|
builtin cd "$STACKSPIN"
|
|
|
|
# Since the install command can also be given bare to install stackspin itself
|
|
|
|
if test $# -gt 0 -a "$command" = install
|
|
|
|
then "./install/install-$1.sh" || ./install/install-app.sh "$@"
|
|
|
|
else python3 -m stackspin "$_cluster_name" "$command" "$@"
|
|
|
|
# pip3 install -r requirements.txt
|
2022-04-28 16:15:51 +00:00
|
|
|
fi;;
|
|
|
|
esac
|
|
|
|
}
|
|
|
|
cat "$_stackspin_cluster_cache" 2>/dev/null |
|
|
|
|
while read cluster; do stack select "$cluster"; done
|
2022-07-06 09:15:29 +00:00
|
|
|
|
|
|
|
test "$PWD" = "$HOME" && cde "$PROJECTS/ampache-docker"
|