list - Ansible - 在一系列列表上依次循环

标签 list loops ansible yaml

即使这个问题看起来相当简单(并且我一直在搜索和测试很多),我也无法弄清楚如何在单个任务中循环使用 ansible 中的两个以上列表。

举个非常简单的例子:

我的 vars.yml :

list1:
  - /tmp/dir1
  - /tmp/dir2
  - /tmp/dir3

list2:
  - /tmp/dir4
  - /tmp/dir5
  - /tmp/dir6

我的任务:

task:
 - name: Create basic directories if they do not exist
   file:
     path: "{{ DIRECTORY }}"
     state: directory
   loop: 
     - "{{ list1 }}"
     - "{{ list2 }}"
   loop_control:
     loop_var: DIRECTORY

显然,我可以在单个列表中的单个任务中创建所有这些,但我有很多要创建,因此我的问题。

提前致谢,

最佳答案

例如,给出下面的列表

    list1:
      - /tmp/dir1
      - /tmp/dir2
      - /tmp/dir3
    list2:
      - /tmp/dir4
      - /tmp/dir5
      - /tmp/dir6
    list3:
      - /tmp/dir1
      - /tmp/dir4
      - /tmp/dir9

创建这些列表的列表,然后 flatten他们并选择 unique仅项目,例如

    list3: "{{ [list1, list2, list3]|flatten|unique }}"

可能提供您正在寻找的内容

  list3:
  - /tmp/dir1
  - /tmp/dir2
  - /tmp/dir3
  - /tmp/dir4
  - /tmp/dir5
  - /tmp/dir6
  - /tmp/dir9

当然,你可以在循环中使用它

task:
 - name: Create basic directories if they do not exist
   file:
     path: "{{ DIRECTORY }}"
     state: directory
   loop: "{{ [list1, list2, list3]|flatten|unique }}"
   loop_control:
     loop_var: DIRECTORY

如果列表存储在文件中,情况会更简单,例如

shell> cat vars.yml
list1:
  - /tmp/dir1
  - /tmp/dir2
  - /tmp/dir3
list2:
  - /tmp/dir4
  - /tmp/dir5
  - /tmp/dir6
list3:
  - /tmp/dir1
  - /tmp/dir4
  - /tmp/dir9

将文件中的变量(列表)包含到字典中

    - include_vars:
        file: vars.yml
        name: lists

这将创建字典列表

  lists:
    list1:
    - /tmp/dir1
    - /tmp/dir2
    - /tmp/dir3
    list2:
    - /tmp/dir4
    - /tmp/dir5
    - /tmp/dir6
    list3:
    - /tmp/dir1
    - /tmp/dir4
    - /tmp/dir9

然后,展平值并选择唯一的项目。下面的表达式创建与之前相同的列表,而无需明确知道列表,即您可以保持代码不变并仅更改文件 vars.yml 中的数据

    list3: "{{ lists.values()|flatten|unique }}"

关于list - Ansible - 在一系列列表上依次循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71114367/

相关文章:

Java 扫描器和循环

ansible - 执行角色、任务、pre_tasks、post_task 的顺序。任务可以在剧本中定义吗?

python - 如何检查列表中的所有项目

python - 在python中以所需格式排列列表的字符串

list - 带有部分的 SwiftUI 动态列表未正确布局

python - While True 和条件语句

列表的 Python 问题(TypeError : 'NoneType' object is not iterable)

php - MySQL和PHP高级产品销售: check multiple fields

docker - 如何在Docker容器中运行Ansible脚本

ansible 模块与 shell 结合使用超时