thirose’s blog

openstackやpythonなどなど

Ansibleでvault使う時は変数ごと暗号化する

OpenStackをdeployするのにAnsibleとか使うと便利だったり?します。
便利かどうかはさておき、Vaultをファイル単位で暗号化しgithubで管理し始めると、何をどう変更したのかわからない。
という問題が発生します。そこで変数ごと暗号化していくのが変更を管理するのが一つの解決方法としてわかりやすいと考えています。
ただし、適当にhoge-vault.ymlとかファイルを作り、値だけ書き込んで、
ansible-vault encrypt hoga-vault.ymlとか書いてしまうとなぜかansible実行中に改行コードが入ります。
調べてみると、echo -e 'hoge' > hoge-vault.ymlをやれば良いようなことも書かれてますがやってみたけど、
ダメだったので
#use-encrypt-string-to-create-encrypted-variables-to-embed-in-yaml を参照して以下のようなスクリプトでファイルを作ってくことにしました。

$ cat vault_password_generator.sh
#!/usr/local/bin/bash

declare -A PASSWORD_LIST;

PASSWORD_LIST=(
  ["vault_password_key1"]="password1"
  ["vault_password_key2"]="password2"
  ["vault_password_key3"]="password3"
  ["vault_password_key4"]="password4"
  ["vault_password_key5"]="password5"
)

for PASSWORD in ${!PASSWORD_LIST[@]};
do  
    `ansible-vault encrypt_string ${PASSWORD_LIST[$PASSWORD]} --name $PASSWORD >> all.yml`
done

PASSWORD_LISTはハッシュ形式で、左辺がkeyで右辺がvalueになり、
実行時には${PASSWORD_LIST[$PASSWORD]}valueが入り、$PASSWORDにkeyが入ります。

変数ごと暗号化すれば、どの変数を追加 or 更新したのかわかるので管理しやすくなります。