【问题标题】:Assign variable by referencing another通过引用另一个变量来分配变量
【发布时间】:2018-05-12 08:38:46
【问题描述】:

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

变量/密码

---
passwords:
  foobar: 
     password: pass1234

defaults/main.yml

users:
  - username: foobar
    group: barfoo
    password: "{{passwords.foobar}}"

tasks/main.yml

- include_vars: passwords.yml

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

当我运行这个剧本时,我收到以下错误:

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

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

【问题讨论】:

    标签: variables ansible


    【解决方案1】:

    您提供的第一个文件将 passwords 作为列表变量,而在您的 defaults/main.yml 文件中,您需要一个字典变量 (passwords.foobar)。

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

    ---
    passwords:
      foobar: pass1234
    

    无法评论其余部分,在我看来 tasks/main.yml 缺少一行,可能包含 with_items 语句的一行。我并不是在你的代码中暗示这是一个问题,你只是可能没有将所有代码都粘贴到这个问题中。

    【讨论】:

    • 修复了我的变量/密码以反映我在寻找什么。我还分享了我想出的一项工作。
    【解决方案2】:

    使用当前变量文件(默认值和变量),我的解决方案是使用用户名作为密钥调用用户栏的密码。我目前有:

    - 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

    ---
    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') }}"
    

    这解决了我的问题,并让我可以使用 passwords.yml。 如果您有任何改进或建议,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      相关资源
      最近更新 更多