便利なので記事として書いて置く
varsは書くrole毎に管理してもいいが環境が複数ある場合はgroup_varsとして管理するのが楽
そこにパスワードを直で書いてgitとかで見える形で置いて置くのはちょっとやだ
ディレクトリ構成
[code lang=text] astel-no-MacBook-Pro% cd group_vars
astel-no-MacBook-Pro% ls dev production
astel-no-MacBook-Pro% tree . ├── dev │ ├── vars.yml │ └── vault.yml └── production ├── vars.yml └── vault.yml
2 directories, 4 files [/code]
inventory
[code lang=text] [test] astail.net ansible_ssh_port=2222
[production:children] test [/code]
こうすることでproduction環境はgroup_vars/production/vars.yml を読んでくれる
vars.yml 例
[code lang=text] astel-no-MacBook-Pro% cat vars.yml deploy_branch: master mysql_passwd: "{{ vault_production.mysql_passwd }}" [/code]
vault.yml 例
[code lang=text]
astel-no-MacBook-Pro% cat vault.yml
vault_production: mysql_passwd: qaswedrftgyhujikol [/code]
このように書ける
ここからvault.ymlを暗号化する
ansible-vault ansible バージョン 1.5で登場したらしい もう2系だしずいぶん前の話
オプションはいろいろあるけど2つしか使ってない。。。
暗号化 ansible-vault encrypt vault.yml
複合化 ansible-vault decrypt vault.yml
暗号化してみる
[code lang=text]
astel-no-MacBook-Pro% cat vault.yml
vault_production: mysql_passwd: qaswedrftgyhujikol
astel-no-MacBook-Pro% ansible-vault encrypt vault.yml New Vault password: Confirm New Vault password: Encryption successful
astel-no-MacBook-Pro% cat vault.yml $ANSIBLE_VAULT;1.1;AES256 34646661306462306236363030306662306133393537666139393330336261646235393831316334 3339626461353730336232366630343134646661646561310a656566666531376333623439386531 39353532663866373163623964613930303363333635373037643437616361343132323362383530 6133306336396639610a626434366434363239383332633230333833363839393765303731663431 65303837383566663664663366353965313531346234653361353236393264643639306462663664 33353137363934386166653932363631623435626334643837353331383531363932386166666536 663931383866653832353135386234626534 [/code]
パスワードは一文字でもいけた
複合
[code lang=text] astel-no-MacBook-Pro% ansible-vault decrypt vault.yml Vault password: Decryption successful
astel-no-MacBook-Pro% cat vault.yml
vault_production: mysql_passwd: qaswedrftgyhujikol [/code]
暗号化してplaybookを流す場合はオプションとして --ask-vault-pass を渡す必要があります
[code lang=text] astel-no-MacBook-Pro% ansible-playbook -i inventory/hosts aaa.yml --ask-vault-pass Vault password:
PLAY ***************************************************************************
TASK [setup] *******************************************************************
ok: [astail.net]
(ry [/code]
インフラの人たちでvaultパスワードだけ管理してればいいので良い