Algo parecido com isto, por exemplo:
inventário:
[debian]
host1
host2
host3 bacula_role=server
host4
host5
jogar:
- hosts: debian
vars:
bacula_server: "{{ (ansible_play_hosts | map('extract',hostvars) | selectattr('bacula_role','defined') | selectattr('bacula_role','equalto','server') | first).inventory_hostname }}"
tasks:
- debug: msg="Install server"
when: inventory_hostname == bacula_server
# client block
- block:
- debug: msg="Template server-side client config"
delegate_to: bacula_server
- debug: msg="Template client config"
when: inventory_hostname != bacula_server
# end of block
Substitua as instruções debug
por algum módulo real (por exemplo, apt
/ template
) e inclua algum tratamento de erro, se não houver hosts com bacula_role=server
.
Se você tiver muitas tarefas para instalar o servidor / cliente, poderá dividi-las em bacula_server.yml
e bacula_client.yml
sem when
declarações, mas incluí-las com:
- include: "bacula_{{ bacula_role | default('client') }}.yml"