From e53cef27a018128af6c23bc3f076130a8321ad67 Mon Sep 17 00:00:00 2001 From: Michael Housh Date: Thu, 6 Nov 2025 15:18:52 -0500 Subject: [PATCH] feat: Creates hpa-pull script, adds '--echo' to logging. --- env/.local/scripts/hpa-init | 4 +- env/.local/scripts/hpa-pull | 107 +++++++++++++++++++++++++++ env/.local/scripts/hypr/logging | 28 ++++--- env/.local/scripts/utils/hpa/hpa.env | 14 ++-- 4 files changed, 134 insertions(+), 19 deletions(-) create mode 100755 env/.local/scripts/hpa-pull diff --git a/env/.local/scripts/hpa-init b/env/.local/scripts/hpa-init index 88122f4..78629ef 100755 --- a/env/.local/scripts/hpa-init +++ b/env/.local/scripts/hpa-init @@ -92,6 +92,6 @@ else mkdir "$HPA_DATA_DIR" &>/dev/null log "Cloning required template and playbook, if they don't exist" - [[ ! -d "$HPA_DATA_DIR/playbook" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_DATA_DIR/playbook" - [[ ! -d "$HPA_DATA_DIR/template" ]] && git clone "$HPA_CONSULT_TEMPLATE_URL" "$HPA_DATA_DIR/template" + [[ ! -d "$HPA_PLAYBOOK_DIR" ]] && git clone "$HPA_PLAYBOOK_URL" "$HPA_PLAYBOOK_DIR" + [[ ! -d "$HPA_CONSULT_TEMPLATE_DIR" ]] && git clone "$HPA_CONSULT_TEMPLATE_URL" "$HPA_CONSULT_TEMPLATE_DIR" fi diff --git a/env/.local/scripts/hpa-pull b/env/.local/scripts/hpa-pull new file mode 100755 index 0000000..abee42b --- /dev/null +++ b/env/.local/scripts/hpa-pull @@ -0,0 +1,107 @@ +#!/usr/bin/env bash + +set -e +set -o nounset +set -o pipefail + +SCRIPTS=${SCRIPTS:-$HOME/.local/scripts} +THIS_FILE=${BASH_SOURCE[0]} +LOG_LABEL=$(basename "$THIS_FILE") +THIS=${THIS:-$LOG_LABEL} +LOG_FILE=${LOG_FILE:-"$LOG_LABEL.log"} +# Load environment / shared variables. +. "$SCRIPTS/utils/hpa/hpa.env" + +usage() { + cat < + +FLAGS: + -a | --all: Pull everything (default). + -d | --docker: Pull docker image. + -p | --playbook: Pull ansible-hpa-playbook. + -t | --template: Pull consult template. + -h | --help: Show this help page. + +If no flags are passed in then we will pull everything. + +EOF +} + +# Logging utility function, use in place of echo. +log() { + logging log --source "$THIS_FILE" "$@" +} + +pull-repo() { + local dir=${1:-""} + [[ -z "$dir" ]] && + log --error "Directory not supplied to pull git repo." && + exit 1 + + pushd "$dir" &>/dev/null || exit 1 + ( + git pull + ) + popd &>/dev/null +} + +pull-docker() { + log --echo "Pulling docker image: '$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG'" + podman pull "$HPA_DOCKER_IMAGE:$HPA_DOCKER_TAG" +} + +pull-playbook() { + log --echo "Pulling playbook: '$HPA_PLAYBOOK_DIR'" + pull-repo "$HPA_PLAYBOOK_DIR" +} + +pull-template() { + log --echo "Pulling template: '$HPA_CONSULT_TEMPLATE_DIR'" + pull-repo "$HPA_CONSULT_TEMPLATE_DIR" +} + +################################################################################ +# MAIN +################################################################################ + +# Setup logging file and label. +source "$SCRIPTS/hypr/logging" +setup-logging "$LOG_FILE" "$LOG_LABEL" +all_flag="1" +docker_flag="0" +playbook_flag="0" +template_flag="0" + +while [[ $# -gt 0 ]]; do + if [[ $1 == "-a" ]] || [[ $1 == "--all" ]]; then + all_flag="1" + break + elif [[ $1 == "-h" ]] || [[ $1 == "--help" ]]; then + usage && exit 0 + elif [[ $1 == "-d" ]] || [[ $1 == "--docker" ]]; then + all_flag="0" + docker_flag="1" + elif [[ $1 == "-p" ]] || [[ $1 == "--playbook" ]]; then + all_flag="0" + playbook_flag="1" + elif [[ $1 == "-t" ]] || [[ $1 == "--template" ]]; then + all_flag="0" + template_flag="1" + fi + shift +done + +if [[ $all_flag == "1" ]]; then + docker_flag="1" + playbook_flag="1" + template_flag="1" +fi + +[[ $docker_flag == "1" ]] && pull-docker +[[ $playbook_flag == "1" ]] && pull-playbook +[[ $template_flag == "1" ]] && pull-template diff --git a/env/.local/scripts/hypr/logging b/env/.local/scripts/hypr/logging index 5429894..ab620c7 100755 --- a/env/.local/scripts/hypr/logging +++ b/env/.local/scripts/hypr/logging @@ -43,14 +43,14 @@ warn_flag="0" error_flag="0" __msg() { - if [[ -z "$@" ]]; then + if [[ -z "$*" ]]; then echo -e "\e[31m[ERROR]:\e[0m No logs were supplied." exit 1 fi if [[ $warn_flag == "1" ]]; then - echo -e "\e[33m[WARN]:\e[0m $@" + echo -e "\e[33m[WARN]:\e[0m $*" elif [[ $error_flag == "1" ]]; then - echo -e "\e[31m[ERROR]:\e[0m $@" + echo -e "\e[31m[ERROR]:\e[0m $*" else echo "$@" fi @@ -72,6 +72,7 @@ logging() { # Reset flags log_flag="0" + echo_flag="0" warn_flag="0" error_flag="0" source_file="" @@ -79,11 +80,11 @@ logging() { while [[ $# -gt 0 ]]; do if [[ $1 == "-w" ]] || [[ $1 == "--warn" ]] || [[ $1 == "--warning" ]]; then - log_flag="1" warn_flag="1" elif [[ $1 == "-e" ]] || [[ $1 =~ ^--error ]]; then - log_flag="1" error_flag="1" + elif [[ $1 =~ ^--echo ]]; then + echo_flag="1" elif [[ $1 == "-s" ]] || [[ $1 =~ ^--source ]]; then shift source_file="$1" @@ -100,20 +101,21 @@ logging() { exit 1 fi - if [[ -z $args ]]; then + if [[ -z "${args[*]}" ]]; then echo -e "\e[31m[ERROR]:\e[0m No log message supplied." exit 1 fi - msg="$(__msg ${args[@]})" + msg="$(__msg "${args[@]}")" - if [[ $LOG_ENABLE_DRY_RUN == "0" ]]; then + if [[ $LOG_ENABLE_DRY_RUN == "0" ]] && [[ $log_flag == "1" ]]; then # Loop over log files logging message to each file. for i in "${!LOG_FILE[@]}"; do local file=${LOG_DIR}/${LOG_FILE[i]} local id=$LOG_INVOCATION_ID local label=${LOG_LABEL[i]:-"$LOG_LABEL"} - local time=$(date '+%D %H:%M:%S') + local time + time=$(date '+%D %H:%M:%S') if [[ -z $file ]] || [[ -z $id ]] || [[ -z $label ]]; then echo "Logging not properly setup." @@ -130,6 +132,8 @@ logging() { echo -e "[id: $id]$msg" elif [[ $warn_flag == "1" ]]; then echo -e "[id: $id]$msg" + elif [[ $echo_flag == "1" ]]; then + echo -e "$msg" fi else # Dry run mode, so just log to the console @@ -168,7 +172,7 @@ setup-logging() { if [[ -n $LOG_LABEL ]] && [[ ! $LOG_LABEL =~ $label ]]; then LOG_LABEL+=("${LOG_LABEL[@]}=>$label") - elif [[ ! $LOG_LABEL =~ $label ]]; then + elif [[ ! ${LOG_LABEL[*]} =~ $label ]]; then LOG_LABEL+=("$label") fi @@ -179,9 +183,9 @@ setup-logging() { } print_logger_env() { - echo "LOG_FILE: ${LOG_FILE[@]}" + echo "LOG_FILE: ${LOG_FILE[*]}" echo "LOG_INVOCATION_ID: $LOG_INVOCATION_ID" - echo "LOG_LABEL: ${LOG_LABEL[@]}" + echo "LOG_LABEL: ${LOG_LABEL[*]}" } export -f setup-logging diff --git a/env/.local/scripts/utils/hpa/hpa.env b/env/.local/scripts/utils/hpa/hpa.env index 10dd304..88c4e37 100755 --- a/env/.local/scripts/utils/hpa/hpa.env +++ b/env/.local/scripts/utils/hpa/hpa.env @@ -13,22 +13,26 @@ XDG_DATA_HOME=${XDG_DATA_HOME:-$HOME/.local/share} HPA_DOCKER_IMAGE="git.housh.dev/michael/swift-hpa" HPA_DOCKER_TAG=${HPA_DOCKER_TAG:-"latest"} -# Consults vars. -HPA_CONSULTS_DIR=${CONSULTS_DIR:-$HOME/work/consults} -HPA_CONSULT_ORIGIN_BASE_URL=${CONSULT_ORIGIN_BASE_URL:-"ssh://git@git.housh.dev:2222/consults"} -HPA_CONSULT_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/consult-template.git" - HPA_CONFIG_DIR="$XDG_CONFIG_HOME/hpa" HPA_DATA_DIR="$XDG_DATA_HOME/hpa" +HPA_PLAYBOOK_DIR="$HPA_DATA_DIR/playbook" HPA_PLAYBOOK_URL="ssh://git@git.housh.dev:2222/michael/ansible-hpa-playbook.git" HPA_VAULT_SECRET_KEY="${HPA_VAULT_SECRET_KEY:-vault-pass}" +# Consults vars. +HPA_CONSULTS_DIR=${CONSULTS_DIR:-$HOME/work/consults} +HPA_CONSULT_ORIGIN_BASE_URL=${CONSULT_ORIGIN_BASE_URL:-"ssh://git@git.housh.dev:2222/consults"} +HPA_CONSULT_TEMPLATE_DIR=${HPA_DATA_DIR}/template +HPA_CONSULT_TEMPLATE_URL="ssh://git@git.housh.dev:2222/hhe/consult-template.git" + export HPA_CONSULTS_DIR export HPA_CONSULT_ORIGIN_BASE_URL +export HPA_CONSULT_TEMPLATE_DIR export HPA_CONSULT_TEMPLATE_URL export HPA_CONFIG_DIR export HPA_DATA_DIR export HPA_DOCKER_IMAGE export HPA_DOCKER_TAG export HPA_PLAYBOOK_URL +export HPA_PLAYBOOK_DIR export HPA_VAULT_SECRET_KEY