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