gpt4 book ai didi

Vagrant 调用的 Ansible 不提示输入保管库密码

转载 作者:行者123 更新时间:2023-12-04 14:39:37 25 4
gpt4 key购买 nike

概括

我有一个 Vagrantfile 使用 Ansible 配置 Virtualbox VM。 Ansible playbook 包含一个 Ansible Vault 加密变量。我的问题是 Vagrant 配置不提示输入密码,尽管我传递了这样做的选项。

最小的,完整的例子

Vagrant 文件:

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

剧本.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 .

当我打电话时 vagrant up第一次执行 Vagrantfile 或之后 vagrant provision我没有收到输入密码的预期提示。取而代之的是任务 print foo's value打印(红色)消息:
fatal: [default]: FAILED! => {"msg": "Attempting to decrypt but no vault secrets found"}

我还尝试了 Vagrantfile 中未注释的替代方案,以使 Ansible 提示输入密码。我可以在 ansible-playbook 中看到所有这些调用由 Vagrant 打印。

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

当使用 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(没有执行 --ask-vault-pass 函数)时,Vault 密码提示(即 getpass.getpass )将被跳过。

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

    请注意 --ask-pass--ask-become-pass实现没有改变(即没有机制可以跳过 getpass 函数)并且仍然可以与 Vagrant 一起正常工作。

    我计划向上游报告 Ansible 项目的问题,但目前您可以通过降级到 Ansible 2.3(或使用 vault_password_file 配置程序选项)来解决这种情况。

    引用:

  • https://github.com/ansible/ansible/pull/22756/files#diff-bdd6c847fae8976ab8a7259d0b583f34L176
  • https://github.com/hashicorp/vagrant/issues/2924
  • 查看相关Bug Fix Pull Request (#31493)在 Ansible 项目中
  • 关于Vagrant 调用的 Ansible 不提示输入保管库密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46451737/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com