ansible.cfgにask_vault_pass = Trueを設定したいけど毎回パスワード聞かれたくないとき

ansible.cfgにask_vault_pass = Trueを設定したいけどそうすると必要なとき以外もvaultパスを聞かれてつらいのをなんとか回避する

ansible-vaultで暗号化したファイルをansible-playbookコマンドなどで使いたい場合は

ansible-playbook --ask-vault-pass -i ... site.yml

のように--ask-vault-pass を指定する必要がありますが、人類なので容易に指定を忘れ、 ERROR: A vault password must be specified to decrypt のように追い返されたりします。

このようなミスを防ぐためにAnsible Vault を賢く使うで紹介されているようなテクニックが利用できます。

具体的には、ansible.cfg

[defaults]
ask_vault_pass = True

と書くことで、--ask-vault-pass を指定しなくてもvault passwordが聞かれるようになります。

(vault_password_file=/path/to/password/fileを書くとpassword入力自体もショートカットできますが、 機密情報ファイル管理という別の問題が発生するので今のところ使っていません。)

ところが上記のansible.cfgを設定すると

ansible -i ... all -a "echo hello"

のような暗号化ファイルの復号化が必要ないコマンドに対しても毎回vault-passが聞かれるようになります。 (聞かれるが、decrypt自体は行わないので、"a"とか空白とか入れてもコマンドが実行されるという仕様・・・。)

これが少し面倒なのでansible.cfgに上記設定をいれるか迷っていましたが、

ANSIBLE_ASK_VAULT_PASS= ansible -i ... all -a "echo hello"

のようにansbile.cfgの設定を上書きしてask_vault_pass指定を一時的になかったコトにできるらしいので、暗号化が必要ないコマンドではこれを実行することにしました(若干面倒だけど・・・。)