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指定を一時的になかったコトにできるらしいので、暗号化が必要ないコマンドではこれを実行することにしました(若干面倒だけど・・・。)