如何将一个变量用作另一个变量的模板?

时间:2018-10-22 09:15:57

标签: ansible

我知道如何使用“ loop”关键字来执行此操作,但是在某些情况下,我无法使用“ loop”。例如,如果我在调试任务中仅使用一个标签选项运行“ ansible-playbook”,则该错误不起作用:“未定义'final_users'”

这些是我要结合的两个变量:

# defaults/main.yml
users:
  - name: 'foo1'
    id: '001'
  - name: 'foo2'
    id: '002'
  - name: 'foo3'
    id: '003'

user_template:
  - key: 'path/to/{{ item.name | to_uuid }}/baz1'
    value: 'common_123'
  - key: 'path/to/{{ item.name | to_uuid }}/baz2'
    value: '{{ item.name }}'
  - key: 'path/to/{{ item.name | to_uuid }}/baz3'
    value: '{{ item.id }}'  

这是我组合变量的方式:

# /tasks/main.yml
- set_fact:
    final_users: |
      {{
        final_users
        | default([])
        + [ user_template ]
      }}
  loop: '{{ users }}'

- debug:
    msg: '{{ item }}'
  loop: '{{ final_users }}'
  tags: 'test_debug'

是否有一种无需«loop»关键字即可创建«final_users»的方法?换句话说,摆脱“ set_fact”任务,直接在“ debug”任务或“ defaults / main.yml”文件中创建“ final_users”。

结果应如下所示:

msg: |-
    -   -   key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz1
            value: 'common_123'
        -   key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz2
            value: foo1
        -   key: path/to/2e414bfd-3b86-55a8-b00e-2891c3709d46/baz3
            value: '001'
    -   -   key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz1
            value: 'common_123'
        -   key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz2
            value: foo2
        -   key: path/to/58971df0-ec8e-5c53-be75-ec6562b04101/baz3
            value: '002'
    -   -   key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz1
            value: 'common_123'
        -   key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz2
            value: foo3
        -   key: path/to/d97ff9e1-f11f-5ed5-a65d-9313471fb7f1/baz3
            value: '003'

我尝试使用 lookup filters ,但无法获得所需的结果。

0 个答案:

没有答案