首页 > 解决方案 > Ansible:在另一个循环中引用的循环变量

问题描述

有没有办法引用loop1中的另一个变量以在loop2中使用?

这是我的虚拟剧本,它不起作用:


---
- name: test
  hosts: localhost
  vars:
    - br:
      - dir1
      - dir2
    - folders:
      - /folder1/"{{ item.1 }}"/sub1
      - /folder1/"{{ item.1 }}"/sub2
    tasks:
    - name:
      debug:
        msg: "{{ item.0 }}"
      with_nested:
        - "{{ folders }}"
        - "{{ br }}"

我想要实现的输出是:

/folder1/dir1/sub1
/folder1/dir1/sub2
/folder1/dir2/sub1
/folder1/dir2/sub2


Thank you. Appreciate your response.

标签: ansible

解决方案


您可以使用 Jinja 创建结构,例如

- hosts: localhost
  vars:
    root:
      - folder1
    br:
      - dir1
      - dir2
    sub:
      - sub1
      - sub2
    _folders: |-
      {% for r in root %}
      {% for b in br %}
      {% for s in sub %}
      - /{{ r }}/{{ b }}/{{ s }}
      {% endfor %}
      {% endfor %}
      {% endfor %}
    folders: "{{ _folders|from_yaml }}"
  tasks:
    - debug:
        var: folders

给你想要的

  folders:
  - /folder1/dir1/sub1
  - /folder1/dir1/sub2
  - /folder1/dir2/sub1
  - /folder1/dir2/sub2

您可以将其隐藏在文件中并将动态数据与代码分开,例如下面的播放给出相同的结果

shell> cat my_vars.yml
root:
  - folder1
br:
  - dir1
  - dir2
sub:
  - sub1
  - sub2
_folders: |-
  {% for r in root %}
  {% for b in br %}
  {% for s in sub %}
  - /{{ r }}/{{ b }}/{{ s }}
  {% endfor %}
  {% endfor %}
  {% endfor %}
folders: "{{ _folders|from_yaml }}"
shell> cat playbook.yml
- hosts: localhost
  vars_files:
    - my_vars.yml
  tasks:
    - debug:
        var: folders

推荐阅读