bjh*_*end 6 vagrant ansible ansible-vault
我有一个Vagrantfile配置一个带Ansible的Virtualbox VM.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
Run Code Online (Sandbox Code Playgroud)
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 }}"
Run Code Online (Sandbox Code Playgroud)
Ansible Vault密码是abc.
当我vagrant up第一次执行Vagrantfile或稍后调用时,vagrant provision我没有得到预期的提示输入密码.而是任务print foo's value打印(红色)消息:
fatal: [default]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}
Run Code Online (Sandbox Code Playgroud)
我还尝试了Vagrantfile中的outcommented替代品,以便为密码提供Ansible提示.我可以在ansible-playbookVagrant打印的电话中看到所有这些.
此外,我当加密试了几个选项foo用ansible-vault encrypt_string,这没有帮助.
使用Vagrant调用时,如何使Ansible提示输入密码?
这是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
Run Code Online (Sandbox Code Playgroud)
如果我直接执行此操作而没有Vagrant,则密码提示按预期工作!所以它必须是Vagrant,它以某种方式抑制提示.
在Ansible 2.4.0.0中,--ask-vault-pass当没有tty存在时(没有执行getpass.getpass功能),将跳过Vault密码提示符(即).
通过Ansible 2.4.0.0提示实现,Vagrant配置器集成不会收到交互式提示.
请注意,--ask-pass并--ask-become-pass实施并没有改变(即没有任何机制来跳过getpass功能),并仍在努力罚款流浪.
我计划向Ansible项目上游报告问题,但目前您可以通过降级到Ansible 2.3(或通过使用vault_password_file配置选项)来解决问题.
参考文献:
| 归档时间: |
|
| 查看次数: |
1229 次 |
| 最近记录: |