ringohub
10/12/2017 - 4:38 AM

Interactive ansible-playbook execution script.

Interactive ansible-playbook execution script.

#!/bin/bash -eu -o pipefail

trap 'printf "\nAborted. Bye 👋\n"; exit 1' 1 2 3 15

inventory=$(ls inventories | fzf --reverse --header "📦 Choose inventory")
echo "📦 : ${inventory}"
hosts=$(cat inventories/${inventory} | grep -v '\[' | grep -v '^$' | grep -v '=' | fzf -m --reverse --header "✨ Choose target hosts"| tr '\n' ',' | rev | cut -c 2- | rev)
echo "✨ : ${hosts}"

case ${inventory} in
  dev)        keys=development.key;;
  production) keys=production.key;;
  stage)      keys=stage.key;;
  *)          keys=local.key;;
esac

playbook=$(ls playbooks/*.yml | fzf --reverse --header "📚 Choose playbook")
echo "📚 : ${playbook}"

printf "🖥 ❯ \033[0;32mansible-playbook -i inventories/${inventory} -l ${hosts} --vault-password-file=./keys/${keys} ${playbook}\033[0m\n"
read -p "🤔  Can I execute this command? (y/N): " res
printf "\n"

case $res in
  [yY]|[yY]es|yes|YES)
    ansible-playbook -i inventories/${inventory} -l ${hosts} --vault-password-file=./keys/${keys} ${playbook}
    ;;
  *) printf "Canceled. Bye 👋\n";;
esac