O tom co se kde provede vlastně rozhoduje hosts file:
#production/hosts
[project_name]
project_name.server.ltd
[nextcloud]
cloud.server.ltd
test.server.ltd
Tady mám 3 servery a ty jsem rozdělil do skupiny, to jak se vypořádají jednotlivé skupiny mám v site.yml (jedinej playbook), tady je pracovní verze:
#site.yml
---
- hosts: nextcloud
roles:
- nextcloud
- hosts: project_name
pre_tasks:
- import_tasks: roles/project_name/tasks/pre.yml
roles:
- generic/mariadb
- generic/apache
- project_name
post_tasks:
- import_tasks: roles/project_name/tasks/post.yml
- import_tasks: roles/generic/apache/tasks/print_hosts.yml
Takže servery ve skupine [nextcloud] se vypořádají rolí nextcloud, server ve skupine [project_name] tou složitější procedůrou. Tímto zajistím že apache je tam kde je potřeba. Pro dovysvětlení, nextcloud samozřejmně potřebuje webserver a databázi a původně jsem to měl:
- hosts: nextcloud
roles:
- generic/common
- generic/mariadb
- generic/apache
- nextcloud
což nyní řeším až na úrovni té role samotné viz
https://docs.ansible.com/ansible/latest/user_guide/playbooks_reuse_roles.html#role-dependencies kde sama role ví že je potřebuje
#roles/nextcloud/meta/main.yml
---
dependencies:
- generic/common
- generic/mariadb
- generic/apache
Samozřejmně je nesmysl vždycky pouštět všchno na celou infrastrukturu takže ji mám rozdělenou na 2 inventory (production a testing) přepínač -i, někdy chci pustit jen něco na jeden stroj takže --limit, a někdy chci třeba jen upravit konfig apache to řeším pomocí --tags, pokud chci udělat aktualizaci tak použiju --extra-vars spolus s podmínkou v generic/common
Každopádně takhle se provede vždycky jen to co chci na předem definovaných strojích.