无法在Ansible中检索vault机密

无法在Ansible中检索vault机密,ansible,ansible-inventory,Ansible,Ansible Inventory,我无法使用VMware动态资源清册文件从vault中读取机密 库存: (在我的Ansible目录结构中将其用作vmware.yml) 更新了动态清单脚本中的几行 (#L213)阅读变量- 'ini_path': os.path.join(os.path.dirname(__file__), '../group_vars/vmware/vmware.yml'), Ansible目录结构: ansible/ inventory/ vmware_inventory.py group

我无法使用VMware动态资源清册文件从vault中读取机密

库存:
(在我的Ansible目录结构中将其用作vmware.yml)

更新了动态清单脚本中的几行 (#L213)阅读变量-

'ini_path': os.path.join(os.path.dirname(__file__), '../group_vars/vmware/vmware.yml'),
Ansible目录结构:

ansible/
  inventory/
    vmware_inventory.py
  group_vars/
    all_vars.yml                 
    vmware/
     vmware.yml
     vault.yml                    
  roles/
我可以使用-
ansible all-I vmware_inventory.py-m ping来ping所有主机

试用A:
使用
ansible vault Encrypt\u string password123--名称“password”--询问vault密码对密码值进行加密
。使用加密密码更新vmware.yml

cat.yml

server: vcsa.lab
port: 443
username: devuser
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          62616231653730653366633966626531383362323165643034336533356165626166313466396462
          3866363332663963366231636230646465363530666366320a346539343366663135353639646234
          65363163386136636662356534343430663133313865333731336230373437663230356361373363
          3434633132343731370a393139383464306432626638633837333030623539653462343230373562
          6433
validate_certs: False
server: vcsa.lab
port: 443
username: dev
password: "{{ vault_password}}"
validate_certs: False
错误:

vmware_inventory.py)出现执行错误:由于以下原因无法连接到ESXi服务器: (vim.fault.InvalidLogin){dynamicType=,dynamicProperty=(vmodl.dynamicProperty)[],msg='由于错误的 用户名或密码。“,faultCause=,faultMessage=(vmodl.LocalizableMessage)[]]

试验B:在此之后
创建ansible vault文件(ansible vault Create../group_vars/vmware/vault),并将其添加为纯文本,然后在vmware.yml中读取该值

server: vcsa.lab
port: 443
username: devuser
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          62616231653730653366633966626531383362323165643034336533356165626166313466396462
          3866363332663963366231636230646465363530666366320a346539343366663135353639646234
          65363163386136636662356534343430663133313865333731336230373437663230356361373363
          3434633132343731370a393139383464306432626638633837333030623539653462343230373562
          6433
validate_certs: False
server: vcsa.lab
port: 443
username: dev
password: "{{ vault_password}}"
validate_certs: False
cat.yml

server: vcsa.lab
port: 443
username: devuser
password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          62616231653730653366633966626531383362323165643034336533356165626166313466396462
          3866363332663963366231636230646465363530666366320a346539343366663135353639646234
          65363163386136636662356534343430663133313865333731336230373437663230356361373363
          3434633132343731370a393139383464306432626638633837333030623539653462343230373562
          6433
validate_certs: False
server: vcsa.lab
port: 443
username: dev
password: "{{ vault_password}}"
validate_certs: False
仍然会因相同的错误而失败

由于用户名或密码不正确,无法完成登录

但是我可以用纯文本运行相同的命令,而不用使用vault加密密码

环境:


任何人都能帮助找出哪里出了问题?非常感谢你的帮助

是否尝试调试已加密的值

下面的代码可以用来调试

    ansible-vault encrypt_string password123 --name 'password'
    New Vault Password: test
    Confirm New Vault Password: test
    --> Copy the generated string to the play as below
    ---
    - name: test
      hosts: localhost
      vars:
        password: !vault |
                  $ANSIBLE_VAULT;1.1;AES256
                  35366238333361633133643238666132353564393838306662316139663037666664316461366437
                  6434386663373838303766643034653832636363313237300a356533396138643531353434386564
                  66643239346365656631646335613764366136643137666533393031346238633363373662623964
                  3330396530633331640a626430666335303439653330646565616131376630373932653264386363
                  3239
      tasks:
        - name: debug password
          debug:
            msg: "{{ password }}"
---演出

ansible-playbook test2.yml --vault-id password@prompt
Vault password (password): test

如果我读对了,您正在使用组变量中的Vault文件,并且在库存文件中定义了一些变量。如果是这种情况,在ansible中,库存文件变量的优先级高于组变量,并且Vault中的变量很可能会被库存中的值覆盖。链接的顺序是否正确

最佳实践是始终将变量名设置为唯一,这样您就不会遇到冲突的情况

您可以通过使用调试任务查看该变量的值来进行故障排除

ansible <name-of-your-target-host> -i vmware_inventory.py -m debug -a "msg={{ password }}"
ansible-i vmware_inventory.py-m debug-a“msg={{{password}”
您应该在目标主机上运行上述命令,以便考虑组变量/主机变量


希望有帮助

要有效地诊断奇怪的问题,请使用命令的
ansible playbook-vvv-rest
。(“-v”是详细模式,您应该添加更多的“v”以获得详细输出。)感谢您的帮助。我可以解密这个字符串。这个问题更像是vars的先例谢谢你的帮助。我看不到密码或任何其他变量。