Ansible - jak sparovat hosty s playbookem?

Ansible - jak sparovat hosty s playbookem?
« kdy: 02. 07. 2019, 10:52:48 »
Ahoj,

jak spustit playbooky podle urcitych kriterii vim. Ale nad cim badam...

Ve vzorove dokumentaci adresaroveho stromu jsou soubory typu site.yml, database.yml, webserver.yml  apod. Me by zajimalo, jak kdybych chtel spustit napr. site.yml, co v nem vlastne je? Je to:

1] specific_server.yml  s tasky pro konfiguraci
2] specific_site.yml s tasky pro konfiguraci 1 a vice hostu - vyuziti group_vars (pro dany projekt), nastaveni host (nebo se vsude pouziva all a limituje se to v cli?)
3] site.yml s tasky pro konfiguraci celeho environmentu

Resp...ted muzu omylem pustit webserver.yml vuci db serveru, sice to padne na chybejicich promennych v host_vars, pokud nejsou definovany i defaultne, ale obecne to udela nejake zmeny. Jake metody se tedy pouzivaji k ochrane (mimo AWX apod.) v pripade statickeho inventare? Vylucovat kazdou skupinu serveru je neefektivni.

Diky.


ETNyx

Re:Ansible - jak sparovat hosty s playbookem?
« Odpověď #1 kdy: 02. 07. 2019, 14:58:26 »
Upravte si to tak, že jediný příkaz kterým budete spouštět ansible je
Kód: [Vybrat]
ansible-playbook site.yml ostatní (webserver.yml, database.yml) konvertujte na role. Ano je to pak obrovskej moloch ale máme --tags --limit,...

Re:Ansible - jak sparovat hosty s playbookem?
« Odpověď #2 kdy: 02. 07. 2019, 16:03:15 »
Upravte si to tak, že jediný příkaz kterým budete spouštět ansible je
Kód: [Vybrat]
ansible-playbook site.yml ostatní (webserver.yml, database.yml) konvertujte na role. Ano je to pak obrovskej moloch ale máme --tags --limit,...

Ve Vasem pripade je site.yml co? Vsechno? Nebo napr. projekt? Pokud budu mit site.yml jako project_group.yml:

Kód: [Vybrat]
---
- hosts: "project_group"
  become: yes
  become_method: sudo
  roles:
   - role: common
   - role: database
   - role: webserver

A napr. role database zavola "roles/database/tasks/main.yml":
Kód: [Vybrat]
---
- name: Something
  ....

Jak presne zajistim, ze to nespusti na webserverech, ale pouze na db hostech?

ETNyx

Re:Ansible - jak sparovat hosty s playbookem?
« Odpověď #3 kdy: 02. 07. 2019, 18:04:06 »
O tom co se kde provede vlastně rozhoduje hosts file:
Kód: [Vybrat]
#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:
Kód: [Vybrat]
#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:
Kód: [Vybrat]
- 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
Kód: [Vybrat]
#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.

Re:Ansible - jak sparovat hosty s playbookem?
« Odpověď #4 kdy: 04. 07. 2019, 15:43:31 »
Dik, to mi dalo ty spravne info. Reusable roles zatim nepouziju, mel bych docela problem rozlisit, kdy tam ty role potrebuji a kdy ne - napr. webserver s db a webserver bez db.