Можно ли вызывать роль несколько раз в таком цикле:

vars:
  my_array:
    - foo
    - bar
    - baz 
roles:
  - role: foobar
    with_items: my_array

Как мы можем это сделать?

36
hewo 29 Окт 2015 в 16:45

5 ответов

Лучший ответ

Теперь поддерживается с Ansible 2.3.0:

- name: myrole
  with_items:
    - "aone"
    - "atwo"
  include_role:
    name: myrole
  vars:
    thing: "{{ item }}"
44
Jakub Bujny 1 Авг 2019 в 13:26

Вот пример кода для использования цикла include_role на my_array:

- name: Use role in loop
  include_role:
    name: myrole
  loop: "{{ my_array }}"
0
kalaolani 8 Янв 2019 в 23:33

Я использовал что-то вроде ниже на 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' }
2
David Buck 4 Май 2020 в 19:57

Модуль include_role задокументирован здесь: https://docs.ansible.com/ansible /include_role_module.html

Согласно документации, это уже было введено в Ansible 2.2.

4
Stefan Horning 3 Май 2017 в 11:51

В настоящее время невозможно перебрать роль, но как уже упоминалось в этом обсуждении в группе Google вы можете передать список или диктовку роли, а затем прокрутить его внутри.

Вместо этого вы можете сделать что-то вроде:

# loop_role/tasks/main.yml

- name: debug item
  debug: var="{{ item }}"
  with_items: my_array

А затем используйте это так:

- hosts: all
  vars:
    my_array:
      - foo
      - bar
      - baz 
  roles:
    - { role: loop_role, my_array: "{{ my_array }}" }
8
ydaetskcoR 29 Окт 2015 в 18:08