Variables 通过引用另一个变量来分配变量

Variables 通过引用另一个变量来分配变量,variables,ansible,Variables,Ansible,在下面的Ansible Playbook中,我尝试使用defaults/main.yml中的预定义变量创建用户密码,该变量反过来调用vars/passwords.yml中的password。此文件稍后将被保险存储 变量/密码 默认值/main.yml tasks/main.yml 当我运行此剧本时,出现以下错误: ERROR: { "msg": "[{u'username': u'foobar', u'group': u'barfoo', u'password': u

在下面的Ansible Playbook中,我尝试使用defaults/main.yml中的预定义变量创建用户密码,该变量反过来调用vars/passwords.yml中的password。此文件稍后将被保险存储

变量/密码 默认值/main.yml tasks/main.yml 当我运行此剧本时,出现以下错误:

ERROR:
{
    "msg": "[{u'username': u'foobar',
     u'group': u'barfoo',
     u'password': u'{{passwords.username}}'}]: 'list object' has no attribute 'username'"
}

您知道如何通过引用另一个变量来分配变量吗。

您提供的第一个文件将密码作为列表变量,而在默认值/main.yml文件中,您需要一个字典变量passwords.foobar

请将第一个文件内容更改为:

---
passwords:
  foobar: pass1234

无法对其余内容发表评论,在我看来,tasks/main.yml缺少一行,可能是包含with_items语句的一行。我并不是说你的代码有问题,你可能只是没有把所有的代码都粘贴到这个问题上。

对于当前的变量文件defaults和vars,我的解决方案是使用用户名作为密钥调用用户栏的密码。我目前有:

- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{item.password | password_hash('sha512') }}"
新的defaults/main.yml将没有密码键/值:

users:
  - username: foobar
    group: barfoo
现在使用vars/passwords.yml:

我可以编辑我的任务并将其更改为:

- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{passwords[item.username].password | password_hash('sha512') }}"
这解决了我的问题,并允许我保管密码.yml。
如果您有任何改进或建议,请告诉我。

修复了我的VAR/密码,以反映我的需求。我还分享了我想出的一份工作。
- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{item.password | password_hash('sha512') }}"
users:
  - username: foobar
    group: barfoo
---
passwords:
  foobar: 
     password: pass1234
- include_vars: passwords.yml

- name: Create user
  user:
    name: "{{item.username}}"
    group: "{{item.group}}"
    password: "{{passwords[item.username].password | password_hash('sha512') }}"