#!/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