Jinja:迭代列表以创建 yaml 元素数组

4c7*_*b41 1 templates yaml jinja2 ansible

我在 ansible playbook 中有以下变量

var1: "string"
variable:
  - name: "{{ var1 }}-xxx"
    sshKey: "{{ lookup('file', 'temp/xxx.pub') }}"
  - name: "{{ var1 }}-yyy"
    sshKey: "{{ lookup('file', 'temp/yyy.pub') }}"
  - name: "{{ var1 }}-zzz"
    sshKey: "{{ lookup('file', 'temp/zzz.pub') }}"
Run Code Online (Sandbox Code Playgroud)

这显然需要一个循环。然而,我尝试创建一个循环是徒劳的。

list: [ 'zzz', 'xxx', 'yyy' ]
loop: [
{% for item in list %}
- name: "{{ item }}"
  sshKey: "{{ lookup('file', 'temp/{{ item }}.tmp') }}"
{% endfor %}
]
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?我有点失落。

Kon*_*rov 7

据我所知,要使其正常工作,您应该将第二个 var 制作为 python-repr/JSON:

---
- hosts: localhost
  gather_facts: no
  vars:
    my_list: [aaa, bbb, ccc]
    my_loop: >
             [ {% for i in my_list %}
               {
                 'name':'prefix-{{ i }}',
                 'sshKey':'{{ lookup('file','/tmp/'+i) }}'
               }
               {% if not loop.last %},{% endif %}
               {% endfor %}
             ]
  tasks:
    - debug:
        msg: "{{ my_loop }}"
Run Code Online (Sandbox Code Playgroud)