Dělám to takto, v hosts souboru přiřazuji stroje do skupin a ty definují jaký aplikace na stroji mají běžet
#production/hosts
[xibo]
fdqn
playbook pak obsahuje jednotlivé play, které spouštějí role, zatím používám jeden playbook trošku se bojím, že bych několika playbooky snížil přehlednost a navíc mohl vytvořil stavy, kdy by jeden přepisoval co udělal druhej.
#site.yml
- hosts: xibo
roles:
- xibo
- hosts: wordpress
pre_tasks:
- import_tasks: roles/wordpress/tasks/pre.yml
roles:
- generic/apache
- generic/mariadb
- wordpress
post_tasks:
- import_tasks: roles/wordpress/tasks/post.yml
první příklad s xibo používá pro role dedičnosti, tedy sama role ví že si má použít jiné role (docker, databaze a webserver). V druhým příkladu wordpress s dědičností nepracuje takže musím potřebný role zavolat ručně.
Proměný mají definované role většinou nějaké defaultní, které se pak přepisují nejčastějí v rámci host_vars
#production/host_vars/fdqn
xibo_instances:
- xibo_server_name: admin.fdqn
xibo_path: /opt/xibo/
xibo_version: 2.0.4
xibo_web_port: 127.0.0.1:8080
xibo_xmr_port: 9505
- xibo_server_name: test.fdqn
xibo_path: /opt/xibo_test/
xibo_version: 2.1.0.rc1
xibo_web_port: 127.0.0.1:8081
xibo_xmr_port: 9506
Tady na fdqn mi role připraví dvě instance ty aplikace. Co se týká skupin tak u nich ještě používám group_vars/all.yml a pak skupiny "geolokační" který vesměs slouží k nastavení repozitářů.
Asi největší nevýhoda/výhoda tohodle systému je, že role který jsou "dole" třeba apache musí být dost univerzálně napsaný tak aby je bez problému mohli používat ostatní role. Například když jsem dělal apache tak jsem hodně okoukal a naučil se tady
https://github.com/geerlingguy/ansible-role-apache