From 36fd0558b0fdd8fa242ea8d1998b2bed6823a727 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Tue, 4 Nov 2025 22:09:24 -0500 Subject: [PATCH] feat: Cleans up hpa script, adds init command to it. --- env/.local/scripts/hpa | 83 +++++++++++++++++++++++++++++++----------- 1 file changed, 61 insertions(+), 22 deletions(-) diff --git a/env/.local/scripts/hpa b/env/.local/scripts/hpa index 9eb03a5..44235d2 100755 --- a/env/.local/scripts/hpa +++ b/env/.local/scripts/hpa @@ -1,38 +1,77 @@ #!/usr/bin/env bash +set -e +set -o nounset +set -o pipefail + # A wrapper script to run swift-hpa in a docker container and # mount the correct volumes, etc. # +# To download templates, playbooks, setup secrets, generate shell completions, etc. +# you can call this script with 'init'. +# +# Otherwise it will run the hpa script inside of a docker container with any passed +# in arguments. -DOCKER_IMAGE="git.housh.dev/michael/swift-hpa:latest" XDG_CONFIG_HOME=${XDG_CONFIG_HOME:-$HOME/.config} XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share} -CONSULT_TEMPLATE_DIR="$XDG_DATA_HOME/hpa/template" -CONSULT_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/consult-template.git" -HPA_PLAYBOOK_DIR="$XDG_DATA_HOME/hpa/playbook" -HPA_PLAYBOOK_URL="ssh://git@git.housh.dev:2222/michael/ansible-hpa-playbook.git" + +HPA_DOCKER_IMAGE="git.housh.dev/michael/swift-hpa" +HPA_DOCKER_TAG=${HPA_DOCKER_TAG:-"latest"} + +HPA_DATA_DIR="$XDG_DATA_HOME/hpa" HPA_CONFIG_DIR="$XDG_CONFIG_HOME/hpa" CONSULTS_DIR=${CONSULTS_DIR:-$HOME/work/consults} + +CONSULT_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/consult-template.git" +HPA_PLAYBOOK_URL="ssh://git@git.housh.dev:2222/michael/ansible-hpa-playbook.git" HPA_VAULT_SECRET_KEY="${HPA_VAULT_SECRET_KEY:-vault-pass}" -echoerr() { - echo -e "\e[31m[ERROR]:\e[0m $*" +generate-completion() { + local type=${1:-"zsh"} + local output=${2:-$HOME/.zsh/completions/_hpa} + local output_dir=$(dirname $output) + + [[ ! -d "$output_dir" ]] && mkdir -p "$output_dir" + ( + podman run --rm -it "$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" \ + --generate-completion-script "$type" | + tr -d '\r' + ) >"$output" +} + +gnnerate-secret() { + local secret="$(pass -c ansible/vault-pass)" + printf "$secret" | podman secret create "$HPA_VAULT_SECRET_KEY" - } # Ensure the dependencies are installed / setup. -[[ "$(podman secret exists $HPA_VAULT_SECRET_KEY)" == "1" ]] && - echoerr "Valut secret needs to be set for key: '$HPA_VAULT_SECRET_KEY'\nUse 'podman secret create '$HPA_VAULT_SECRET_KEY'" && - exit 1 -[[ ! -d $CONSULTS_DIR ]] && mkdir -p "$CONSULTS_DIR" -[[ ! -d "$XDG_DATA_HOME/hpa" ]] && mkdir "$XDG_DATA_HOME/hpa" -[[ ! -d "$HPA_PLAYBOOK_DIR" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_PLAYBOOK_DIR" -[[ ! -d "$CONSULT_TEMPLATE_DIR" ]] && git clone "$CONSULT_TEMPLATE_URL" "$CONSULT_TEMPLATE_DIR" +init() { + generate-completion "$@" + gnnerate-secret + mkdir -p "$CONSULTS_DIR" &>/dev/null + mkdir "$HPA_DATA_DIR" &>/dev/null + [[ ! -d "$HPA_DATA_DIR/playbook" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_DATA_DIR/playbook" + [[ ! -d "$HPA_DATA_DIR/template" ]] && git clone "$CONSULT_TEMPLATE_URL" "$HPA_DATA_DIR/template" +} -podman run --rm -it \ - -v "$CONSULT_TEMPLATE_DIR":/template \ - -v "$HPA_PLAYBOOK_DIR":/playbook \ - -v "$HPA_CONFIG_DIR":/config \ - -v "$CONSULTS_DIR":/consults \ - --secret "$HPA_VAULT_SECRET_KEY" \ - "$DOCKER_IMAGE" \ - "$@" +run() { + podman run --rm -it \ + --volume "$HPA_DATA_DIR/template":/template \ + --volume "$HPA_DATA_DIR/playbook":/playbook \ + --volume "$HPA_CONFIG_DIR":/config/hpa \ + --volume "$CONSULTS_DIR":/consults \ + --secret "$HPA_VAULT_SECRET_KEY" \ + "$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" "$@" +} + +############################## MAIN ############################## + +first_arg=${1:-""} + +if [[ $first_arg == "init" ]]; then + shift + init "$@" && exit 0 +else + run "$@" +fi