摘要
我有一个使用Vagrantfile进行Virtualbox虚拟机和Ansible部署的过程。Ansible playbook包含了一个加密变量,使用了Ansible Vault。我的问题是,尽管我传递了相应的选项,但Vagrant部署并没有提示输入密码。
最小完整示例
Vagrantfile:
Vagrant.configure(2) do |config|
config.vm.provider "virtualbox" do |vb|
# Build a master VM for this box and clone it for individual VMs
vb.linked_clone = true
end
config.vm.box = "bento/ubuntu-16.04"
config.vm.hostname = "test-vm"
config.vm.provision :ansible do |ansible|
ansible.verbose = true
ansible.playbook = "playbook.yml"
ansible.ask_vault_pass = true
# ansible.raw_arguments = --ask-vault-pass
# ansible.raw_arguments = ["--vault-id", "@prompt"]
# ansible.raw_arguments = ["--vault-id", "dev@prompt"]
end
end
playbook.yml:
---
- name: Test
hosts: all
vars:
foo: !vault |
$ANSIBLE_VAULT;1.1;AES256
65306264626234353434613262613835353463346435343735396138336362643535656233393466
6331393337353837653239616331373463313665396431390a313338333735346237363435323066
66323435333331616639366536376639626636373038663233623861653363326431353764623665
3663636162366437650a383435666537626564393866643461393739393434346439346530336364
3639
tasks:
- name: print foo's value
debug:
msg: "foo -> {{ foo }}"
Ansible Vault的密码是abc
。
当我第一次执行Vagrantfile或后来执行vagrant provision
时,没有看到输入密码的提示。相反,任务print foo's value
会打印出(红色)消息:
fatal: [default]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
我也尝试了在Vagrantfile中注释掉的替代方案,以使Ansible提示输入密码。 我可以在Vagrant打印的ansible-playbook
调用中看到所有这些选项。
此外,我尝试了使用ansible-vault encrypt_string
加密foo
时的几个选项,但也没有帮助。
我该怎么做才能让Ansible在被Vagrant调用时提示输入密码?
版本
- kubuntu 16.04
- Vagrant 1.8.1和Vagrant 2.0.0
- Ansible 2.4.0.0
更新
这是由Vagrant打印的Ansible调用:
PYTHONUNBUFFERED=1 ANSIBLE_FORCE_COLOR=true ANSIBLE_HOST_KEY_CHECKING=false ANSIBLE_SSH_ARGS='-o UserKnownHostsFile=/dev/null -o IdentitiesOnly=yes -o ControlMaster=auto -o ControlPersist=60s' ansible-playbook --connection=ssh --timeout=30 --ask-vault-pass --limit="default" --inventory-file=/opt/vagrantVM/.vagrant/provisioners/ansible/inventory -v playbook.yml
如果我直接执行这个命令而不使用Vagrant,密码提示会按预期工作!因此必须是Vagrant,在某种程度上抑制了提示。