背景
packerでansible-vault使ってami生成したかった。
ansible-vaultの復号化passwordはgithubなどにあげたくないので、コマンド入力時に入力したかった。
イメージは以下のような使用方法。
打ちたいコマンド
packer build -var 'vault_pass=some-pass' packer.json
ansible-vaultの複合化パスの渡し方は2つ。
- --ask-vault-pass オプションでプロンプトで入力する
- --vault-password-file オプションでパスが書いてあるファイルパス渡す
2を使って無理やり実現できるようにしたのでメモ。もっといい方法あったら教えてください。
packerのjsonファイル
packer.json
{
"variables": {
"aws_access_key": "HOGE",
"aws_secret_key": "FUGA",
"vault_pass": ""
},
"builders": [{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "ap-northeast-1",
"source_ami": "ami-374db956",
"instance_type": "t2.micro",
"ssh_username": "ec2-user",
"ami_name": "name"
}],
"provisioners": [{
"type": "shell",
"inline": [
"sudo yum -y update",
"sudo yum -y --enablerepo=epel install ansible",
"mkdir -p /tmp/packer-provisioner-ansible-local/",
"touch /tmp/packer-provisioner-ansible-local/vault.txt",
"echo {{user `vault_pass`}} > /tmp/packer-provisioner-ansible-local/vault.txt"
]},{
"type": "ansible-local",
"playbook_file": "playbook.yml",
"extra_arguments": ["--vault-password-file vault.txt"]
}]
}
これでコマンド叩くとうまくいった
参考
http://docs.ansible.com/ansible/playbooks_vault.html
https://www.packer.io/docs/provisioners/ansible-local.html
https://www.packer.io/docs/templates/user-variables.html