ansible中的双with_items循环
Double with_items loop in ansible
我想在ansible中创建一个双循环。
我有一件事是这样的:
userslist:
- name: user1
primary : user1-group
groups :
- group1
- group2
- name: user2
primary : user2-group
groups :
- group3
- group4
- name : Creating Secondary group
group :
name : "{{ item.groups }}"
state: present
with_items: "{{ userslist}}"
是否可以为每个用户创建每个辅助组?
我想为此我需要做第二个 with_items 循环,但我不知道如何
有两种方法可以在 Ansible 中创建嵌套(双)循环。
with_nested
。它允许您对在外循环中迭代的对象进行内部迭代。官方文档中提供了示例和解释:https://docs.ansible.com/ansible/2.5/plugins/lookup/nested.html
使用 with_items
和 include_tasks
。这是一个复杂而强大的结构。理论上,这种结构的嵌套程度没有限制(堆栈深度除外)。
需要将内部代码放入单独的任务列表中。我将用 outer.yaml
和 inner.yaml
来展示它,外部对列表执行循环,内部对外部循环的项目(循环变量)执行循环。
outer.yaml:
- name: Loop over foo
include_tasks: inner.yaml
with_items: '{{ foo }}'
loop_control:
loop_var: inner_var_name
vars:
foo:
- [1, 2, 3]
- [a, b, c]
inner.yaml:
- name: Performing operation one
debug: msg="Action one for {{ item }}"
with_items: '{{ inner_var_name }}'
- name: Performing operation two
debug: msg="Action two for {{item}}"
with_items: '{{ inner_var_name }}'
这种方法的主要优点是 inner.yaml
可以包含任意数量的语句,所有语句都将在 outer.yaml
.
的循环中处理
一件重要的事情:所有 include
事情都需要谨慎处理与从包含的代码传递值(set_fact
、register
等)相关的任何事情。 In 相当棘手且不明显,所以我的建议是永远不要在包含代码之外使用包含代码中设置的变量。
我这样做了,效果很好
---
- hosts: all
become: yes
vars:
userslist:
- name: user1
primary : user1-group
groups :
- group1
- group2
- name: user2
primary : user2-group
groups :
- group3
- group4
tasks:
- name: Creating Secondary group
group:
name="{{ item.1 }}"
with_subelements:
- '{{ userslist }}'
- groups
我想在ansible中创建一个双循环。 我有一件事是这样的:
userslist:
- name: user1
primary : user1-group
groups :
- group1
- group2
- name: user2
primary : user2-group
groups :
- group3
- group4
- name : Creating Secondary group
group :
name : "{{ item.groups }}"
state: present
with_items: "{{ userslist}}"
是否可以为每个用户创建每个辅助组? 我想为此我需要做第二个 with_items 循环,但我不知道如何
有两种方法可以在 Ansible 中创建嵌套(双)循环。
with_nested
。它允许您对在外循环中迭代的对象进行内部迭代。官方文档中提供了示例和解释:https://docs.ansible.com/ansible/2.5/plugins/lookup/nested.html使用
with_items
和include_tasks
。这是一个复杂而强大的结构。理论上,这种结构的嵌套程度没有限制(堆栈深度除外)。
需要将内部代码放入单独的任务列表中。我将用 outer.yaml
和 inner.yaml
来展示它,外部对列表执行循环,内部对外部循环的项目(循环变量)执行循环。
outer.yaml:
- name: Loop over foo
include_tasks: inner.yaml
with_items: '{{ foo }}'
loop_control:
loop_var: inner_var_name
vars:
foo:
- [1, 2, 3]
- [a, b, c]
inner.yaml:
- name: Performing operation one
debug: msg="Action one for {{ item }}"
with_items: '{{ inner_var_name }}'
- name: Performing operation two
debug: msg="Action two for {{item}}"
with_items: '{{ inner_var_name }}'
这种方法的主要优点是 inner.yaml
可以包含任意数量的语句,所有语句都将在 outer.yaml
.
一件重要的事情:所有 include
事情都需要谨慎处理与从包含的代码传递值(set_fact
、register
等)相关的任何事情。 In 相当棘手且不明显,所以我的建议是永远不要在包含代码之外使用包含代码中设置的变量。
我这样做了,效果很好
---
- hosts: all
become: yes
vars:
userslist:
- name: user1
primary : user1-group
groups :
- group1
- group2
- name: user2
primary : user2-group
groups :
- group3
- group4
tasks:
- name: Creating Secondary group
group:
name="{{ item.1 }}"
with_subelements:
- '{{ userslist }}'
- groups