diff --git a/bootstrap.sh b/bootstrap.sh deleted file mode 100755 index c4a95ad..0000000 --- a/bootstrap.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -set -euo pipefail - -sudo ansible-playbook --ask-pass --ask-become-pass -i hosts.yml init@homeserver.yml -ansible-playbook --ask-become-pass -i hosts.test.yml administrate@homeserver.yml \ No newline at end of file diff --git a/skato-ansible.sh b/skato-ansible.sh new file mode 100755 index 0000000..6d5a382 --- /dev/null +++ b/skato-ansible.sh @@ -0,0 +1,120 @@ +#!/bin/bash +set -euo pipefail +# @TODO long-term, turn this simple bash script into more complex Python Click project + +SKANSIBLE_SCRIPT_PATH=$(dirname "$0") +SKANSIBLE_STAGE=1 +SKANSIBLE_DEBUG=1 +SKANSIBLE_UNIT_TEST=1 +DEFAULT_USER=senpai +DEFAULT_SKANSIBLE_PLAY_HOST=vps + +if [[ "$1" == "version" ]]; then + echo "0.0.0" +fi + +if [[ "$1" == "show-defaults" ]]; then + printf "User: %s\n" "$DEFAULT_USER" + printf "Expected hosts for playbook: %s\n" "$DEFAULT_SKANSIBLE_PLAY_HOST" + printf "Private SSH keys available throufh SSH agent: |\n%s\n" "$(ssh-add -l)" +fi + +if [[ "$1" == "start-agent" ]]; then + eval "$(ssh-agent -s)" +fi + +if [[ "$1" == "populate-agent" ]]; then + shift 1 + + if [[ -z "$1" ]]; then + for SKANSIBLE_SSH_KEY in ~/.ssh/*; do + case $SKANSIBLE_SSH_KEY in + *.pub);; + *.old);; + *.bak);; + */config);; + */authorized_keys);; + *_hosts);; + */agent);; + *) ssh-add "${SKANSIBLE_SSH_KEY}";; + esac + done + else + # @TODO improve by adding fuzzy querying or file finding pror + ssh-add "$1" + fi +fi + +if [[ "$1" == "init" ]]; then + shift 1 + + source "${SKANSIBLE_SCRIPT_PATH}/.env/bin/activate" + + while getopts "hsdtu:p:n:" opt; do + case $opt in + h) Help "$1";; + s) SKANSIBLE_STAGE=0;; + d) SKANSIBLE_DEBUG=0;; + t) SKANSIBLE_UNIT_TEST=0;; + u) SKANSIBLE_CONN_USER="$OPTARG";; + n) SKANSIBLE_CONN_HOSTS="$OPTARG";; + p) SKANSIBLE_PLAY_HOSTS="$OPTARG";; + *) echo "Err: Invalid option set"; exit 1;; + esac + done + + if [[ "$SKANSIBLE_STAGE" == 0 ]]; then + SKANSIBLE_CONN_HOSTS=${SKANSIBLE_CONN_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}_test + fi + + if [[ "$SKANSIBLE_DEBUG" == 0 ]]; then + if [[ "$SKANSIBLE_UNIT_TEST" == 0 ]]; then + sudo ansible-playbook -vvvv --ask-pass --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-root}" "init@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" --check + else + sudo ansible-playbook -vvvv --ask-pass --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-root}" "init@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" + fi + else + if [[ "$SKANSIBLE_UNIT_TEST" == 0 ]]; then + sudo ansible-playbook --ask-pass --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-root}" "init@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" --check + else + sudo ansible-playbook --ask-pass --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-root}" "init@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" + fi + fi +fi + +if [[ "$1" == "bootstrap" ]]; then + shift 1 + + source "${SKANSIBLE_SCRIPT_PATH}/.env/bin/activate" + + while getopts "hsdtu:p:n:" opt; do + case $opt in + h) Help "$1";; + s) SKANSIBLE_STAGE=0;; + d) SKANSIBLE_DEBUG=0;; + t) SKANSIBLE_UNIT_TEST=0;; + u) SKANSIBLE_CONN_USER="$OPTARG";; + n) SKANSIBLE_CONN_HOSTS="$OPTARG";; + p) SKANSIBLE_PLAY_HOSTS="$OPTARG";; + *) echo "Err: Invalid option set"; exit 1;; + esac + done + + if [[ "$SKANSIBLE_STAGE" == 0 ]]; then + SKANSIBLE_CONN_HOSTS=${SKANSIBLE_CONN_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}_test + fi + + if [[ "$SKANSIBLE_DEBUG" == 0 ]]; then + if [[ "$SKANSIBLE_UNIT_TEST" == 0 ]]; then + ansible-playbook -vvvv --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-${DEFAULT_USER}}" "administrate@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" --check + else + ansible-playbook -vvvv --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-${DEFAULT_USER}}" "administrate@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" + fi + else + if [[ "$SKANSIBLE_UNIT_TEST" == 0 ]]; then + ansible-playbook --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-${DEFAULT_USER}}" "administrate@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" --check + else + ansible-playbook --ask-become-pass -i hosts.yml --extra-vars "chosen_host=${SKANSIBLE_CONN_HOSTS}" --extra-vars "chosen_user=${SKANSIBLE_CONN_USER:-${DEFAULT_USER}}" "administrate@${SKANSIBLE_PLAY_HOSTS:-${DEFAULT_SKANSIBLE_PLAY_HOST}}.yml" + fi + fi +fi