【Ansible】ansible-playbookでcheckのつもりが間違えて、実行となってしまわないようにするための工夫

Ansible

はじめに

ansible-playbookコマンドは既に手に馴染んでいる人が多いかと思います。
手に馴染んでいるがあまりに、playbookのチェックをしたいのに、--checkオプションを付け忘れて、そのまま実行されてしまった…orz
という経験があるのではないでしょうか。

本記事はそういった失敗を事前にどのように防げるのかを、記載します。

ansible-playbookコマンドについて

ansible-playbookコマンドをおさらいすると、以下の通りとなります。

ansible-playbook playbook.yml
ansible-playbook playbook.yml --check

この--checkでansible-playbookの実行モードが切り替わります。
いわゆるdry-runです。
この仕様により、本来dry-runを行いたいのに、--checkを付け忘れて、実行されちゃった…orz
となってしまうため、これをどうにかしたいのです。

解決策

解決策として、aliasを利用します。
例えばrmコマンドは-iオプションを利用することで、削除時に確認を挟むことが可能です。
この発想を応用します。

alias ansible-deploy='ansible-playbook'
alias ansible-check='ansible-playbook --check'

このように、実行したい場合はansible-deploy、チェックだけの場合はansible-checkを実行することでヒューマンエラーを回避可能です。

このままだと、ansible-deployを間違って打ってしまうこともあるためちょっと不安です。
なので、実行時に確認を入れることで対策を行います。
これのための設定が以下です。

ansible-deploy='fn_ansible_deploy'

function fn_ansible-deploy() {
    function usage() {
cat << "EOS"
    ansible-playbook(デプロイ)を安全に実行できるようにしたファンクションです。
    yesで実行します。
EOS
    }

    echo -e "Do you really deploy?"
    echo -e "Please check target server and tags before deploy"

    echo -n -e "if you are ok. please input \e[32;1myes\e[m: "
    read yesno

    if [ $yesno = "yes" ] ; then
        ansible-playbook $@
    else
        echo "process exit"
        return 1
    fi
}

これを.bashrcなどに記載しておくことで、安全に実行することが可能です。

yesを入力しない限り、ansible-playbookが実行されないので、間違ってコマンド打っちゃった…orz

でもセーフ!ってなるので、おすすめです。

コメント