繁体   English   中英

Vagrant调用的Ansible不会提示输入保险箱密码

[英]Ansible called by Vagrant does not prompt for vault password

摘要

我有一个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

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时调用vagrant up ,我没有得到预期的提示输入密码。 相反,任务print foo's value打印(红色)消息:

fatal: [default]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}

我还尝试了Vagrantfile中的outcommented替代品,以便为密码提供Ansible提示。 我可以在Vagrant打印的ansible-playbook看到所有这些内容。

另外,我在使用ansible-vault encrypt_string加密foo时尝试了几个选项,这也没有帮助。

使用Vagrant调用时,如何使Ansible提示输入密码?

版本

  • 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,它以某种方式抑制提示。

在Ansible 2.4.0.0中 ,当没有tty存在时(没有执行getpass.getpass函数),将跳过Vault密码提示(即--ask-vault-pass )。

通过Ansible 2.4.0.0提示实现,Vagrant配置器集成不会收到交互式提示。

注意--ask-pass--ask-become-pass实现没有改变(即没有跳过getpass函数的机制)并且仍然可以正常使用Vagrant。

我计划向Ansible项目上游报告问题,但目前您可以通过降级到Ansible 2.3(或者使用vault_password_file provisioner选项)来解决问题。

参考文献:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM