Evite repetir 'with_items' no papel Ansible

3

Eu tenho uma função Ansible com várias tarefas que executo para vários hosts virtuais. Meu manual funciona e é assim:

---

- name: Create vhost configuration
  # action
  with_items: vhosts

- name: Ensure vhost is enabled
  # action  
  notify: restart apache2
  with_items: vhosts

# (Many more actions)

Existe uma maneira de evitar ter que escrever with_items para cada ação? Posso iterar os itens do vhost para todo o playbook em vez de executar cada comando para todos os vhosts sequencialmente? (como estou com o código acima)

    
por Andrew Moss 25.10.2014 / 14:29

1 resposta

4

Do que você está perguntando, parece que você quer apenas especificar o grupo vhosts como os hosts para executar uma função específica. Então, o seu manual deve começar assim:

---
- hosts: vhosts
  name: Tasks run on vhosts
  roles:
    - { role: somerole }

Tenha em mente que você pode ter várias reproduções no seu manual, por isso é perfeitamente adequado fazer algo assim:

---
- hosts: all
  name: Run roles for all servers
  roles:
    - { role: role1 }
    - { role: role2 }
    - etc.

- hosts: vhosts
  name: Run roles specific to vhosts
  roles:
    - { role: vhost-role }

- hosts: all
  name: Post-vhost roles for all servers
  roles:
    - { role: role3 }
    - etc.

Se você tiver um único manual de jogo que deseja executar em diferentes grupos de host em momentos diferentes, poderá usar uma variável para a entrada de hosts:

---
- hosts: "{{ somevar }}"
  name: Run roles against a user specified set of hosts
  roles:
    - { role: foo }

E então você invocaria este último de uma destas maneiras:

$ ansible-playbook playbook.yml --extra-vars "somevar=vhosts"

$ ansible-playbook playbook.yml --extra-vars "somevar=host1,host2"
    
por 27.10.2014 / 19:20

Tags