是否可以在循环中多次调用角色,如下所示:
vars:
my_array:
- foo
- bar
- baz
roles:
- role: foobar
with_items: my_array
Run Code Online (Sandbox Code Playgroud)
我们应该怎么做?
小智 38
现在支持Ansible 2.3.0:
- name: myrole
with_items:
- "aone"
- "atwo"
include_role:
name: myrole
vars:
thing: "{{ item }}"
Run Code Online (Sandbox Code Playgroud)
目前无法循环使用角色,但正如Google Group讨论中所提到的,您可以将列表或字典传递给角色,然后在内部循环.
所以你可以这样做:
# loop_role/tasks/main.yml
- name: debug item
debug: var="{{ item }}"
with_items: my_array
Run Code Online (Sandbox Code Playgroud)
然后像这样使用它:
- hosts: all
vars:
my_array:
- foo
- bar
- baz
roles:
- { role: loop_role, my_array: "{{ my_array }}" }
Run Code Online (Sandbox Code Playgroud)
您可以使用 include_role 模块来执行此操作。查看文档
根据文档,它已经在 Ansible 2.2 中引入(而不是像其他人所说的那样在 2.3 中引入)。
代码看起来像
- name: Use role in loop
ansible.builtin.include_role:
name: my-role
vars:
some_role_variable: '{{ loop_var }}'
loop:
- '{{ roleinput1 }}'
- '{{ roleinput2 }}'
loop_control:
loop_var: loop_var
Run Code Online (Sandbox Code Playgroud)
小智 6
我在 Ansible 版本 2.8 上使用了类似下面的内容
tasks:
- name: looping role to create multiple filesystem
include_role:
name: /opt/ansible/playbook/app_filesystem
vars:
vgname: "{{ item.vgname }}"
lvname: "{{ item.lvname }}"
lvsize: "{{ item.lvsize }}"
mountpoint: "{{ item.mountpoint }}"
loop:
- { vgname: 'vgapp', lvname: 'lvapp', lvsize: '30g', mountpoint: '/app' }
- { vgname: 'vgapp', lvname: 'lvappzk', lvsize: '64g', mountpoint: '/app/z' }
- { vgname: 'vgapp', lvname: 'lvappdatazk', lvsize: '+100%FREE', mountpoint: '/app/data/zookeeper' }
tasks:
- name: looping role to create multiple filesystem
include_role:
name: /opt/ansible/playbook/app_filesystem
vars:
vgname: "{{ item.vgname }}"
lvname: "{{ item.lvname }}"
lvsize: "{{ item.lvsize }}"
mountpoint: "{{ item.mountpoint }}"
loop:
- { vgname: 'vgapp', lvname: 'lvapp', lvsize: '30g', mountpoint: '/app' }
- { vgname: 'vgapp', lvname: 'lvappzk', lvsize: '64g', mountpoint: '/app/zookeeper' }
- { vgname: 'vgapp', lvname: 'lvappdatazk', lvsize: '+100%FREE', mountpoint: '/app/data/zookeeper' }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25517 次 |
| 最近记录: |