GNU/Linux >> Linux Esercitazione >  >> Linux

Decostruire un playbook Ansible

Questo articolo descrive le diverse parti di un playbook Ansible iniziando con una panoramica molto ampia di cosa sia Ansible e come puoi usarlo. Ansible è un modo per utilizzare la sintassi YAML di facile lettura per scrivere playbook che possono automatizzare le attività per te. Questi playbook possono variare da molto semplici a molto complessi e un playbook può anche essere incorporato in un altro.

Installazione di httpd con un playbook

Ora che hai le conoscenze di base, diamo un'occhiata a un playbook di base che installerà httpd pacchetto. Ho un file di inventario con due host specificati e li ho inseriti nel Web gruppo:

[root@ansible test]# cat inventory
[web]
ansibleclient.usersys.redhat.com
ansibleclient2.usersys.redhat.com

Diamo un'occhiata al playbook effettivo per vedere cosa contiene:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install httpd
  hosts: web
  tasks:
    - name: this is the task to install httpd
      yum:
        name: httpd
        state: latest

Analizzando questo, vedrai che la prima riga nel playbook è --- . Questo ti consente di sapere che è l'inizio del playbook. Successivamente, ho dato un nome alla commedia. Questo è solo un semplice playbook con una sola riproduzione, ma un playbook più complesso può contenere più riproduzioni. Successivamente, specifico gli host a cui voglio indirizzare. In questo caso, sto selezionando il web gruppo, ma avrei potuto specificare ansibleclient.usersys.redhat.com o ansibleclient2.usersys.redhat.com invece se non volessi prendere di mira entrambi i sistemi. La riga successiva dice ad Ansible che ti occuperai delle attività che svolgono il lavoro vero e proprio. In questo caso, il mio playbook ha solo un'attività, ma puoi avere più attività se lo desideri. Qui specifico che installerò il httpd pacchetto. La riga successiva dice che userò yum modulo. Quindi gli dico il nome del pacchetto, httpd e che voglio che sia installata l'ultima versione.

[ Ai lettori è piaciuto anche: Iniziare con Ansible ]

Quando eseguo httpd.yml playbook due volte, ricevo questo sul terminale:

[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
[root@ansible test]# ansible-playbook httpd.yml

PLAY [this playbook will install httpd] ************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install httpd] ***********************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[root@ansible test]#

Tieni presente che in entrambi i casi ho ricevuto un ok=2 , ma nella seconda esecuzione del playbook non è stato modificato nulla. L'ultima versione di httpd era già installato a quel punto.

Per ottenere informazioni sui vari moduli che puoi utilizzare in un playbook, puoi utilizzare il ansible-doc comando. Ad esempio:

[root@ansible test]# ansible-doc yum
> YUM    (/usr/lib/python3.6/site-packages/ansible/modules/packaging/os/yum.py)
Installs, upgrade, downgrades, removes, and lists packages and groups with the `yum' package manager. This module only works on Python 2. If you require Python 3 support, see the [dnf] module.

  * This module is maintained by The Ansible Core Team
  * note: This module has a corresponding action plugin.
< output truncated >

È bello avere un playbook che installa httpd , ma per renderlo più flessibile, puoi utilizzare le variabili invece di codificare il pacchetto come httpd . Per farlo, puoi utilizzare un playbook come questo:

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest

Qui puoi vedere che ho aggiunto una sezione chiamata "vars" e ho dichiarato una variabile myrpm con il valore di httpd . Quindi posso usare quel myrpm variabile nel playbook e adattarlo a ciò che voglio installare. Inoltre, poiché ho specificato l'RPM da installare utilizzando una variabile, posso sovrascrivere ciò che ho scritto nel playbook specificando la variabile sulla riga di comando usando -e :

[root@ansible test]# cat httpd.yml
---
- name: this playbook will install {{ myrpm }}
  hosts: web
  vars:
    myrpm: httpd
  tasks:
    - name: this is the task to install {{ myrpm }}
      yum:
        name: "{{ myrpm }}"
        state: latest
[root@ansible test]# ansible-playbook httpd.yml -e "myrpm=at"

PLAY [this playbook will install at] ***************************************************************************************************************

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]

TASK [this is the task to install at] **************************************************************************************************************
changed: [ansibleclient2.usersys.redhat.com]
changed: [ansibleclient.usersys.redhat.com]

PLAY RECAP *****************************************************************************************************************************************
ansibleclient.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
ansibleclient2.usersys.redhat.com : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

[root@ansible test]#

Un altro modo per rendere le attività più dinamiche è utilizzare loop . In questo frammento puoi vedere che ho dichiarato rpm come elenco per avere mailx e postfisso . Per usarli, utilizzo loop nel mio compito:

 vars:
    rpms:
      - mailx
      - postfix

  tasks:
    - name: this will install the rpms
      yum:
        name: "{{ item }}"
        state: installed
      loop: "{{ rpms }}"

Potresti aver notato che quando vengono eseguite queste riproduzioni, vengono raccolti i dati sugli host:

TASK [Gathering Facts] *****************************************************************************************************************************
ok: [ansibleclient.usersys.redhat.com]
ok: [ansibleclient2.usersys.redhat.com]


Questi fatti possono essere usati come variabili quando esegui il gioco. Ad esempio, potresti avere un motd.yml file che imposta contenuti come:

“This is the system {{ ansible_facts['fqdn'] }}.
This is a {{ ansible_facts['distribution'] }} version {{ ansible_facts['distribution_version'] }} system.”

Per qualsiasi sistema in cui esegui quel playbook, verrebbero impostati il ​​nome di dominio completo (FQDN), la distribuzione del sistema operativo e la versione della distribuzione corretti, anche senza definire manualmente tali variabili.

[ Hai bisogno di più su Ansible? Partecipa a un corso di panoramica tecnica gratuito di Red Hat. Ansible Essentials:Semplicità nell'automazione Panoramica tecnica. ] 

Concludi

Questa è stata una rapida introduzione all'aspetto dei playbook Ansible, a cosa fanno le diverse parti e a come ottenere maggiori informazioni sui moduli. Ulteriori informazioni sono disponibili nella documentazione di Ansible.


Linux
  1. Come creare un Playbook Ansible

  2. Utilizzo di un playbook Ansible per gestire gli aggiornamenti di workstation e server

  3. Configura il tuo demone Chrony con un playbook Ansible

  4. Come installare pacchetti software con un playbook Ansible

  5. come creare un playbook Ansible per ottenere le versioni del sistema operativo degli host remoti?

Come utilizzare i gestori in Ansible Playbook

Come creare ruoli Ansible e usarli in Playbook

Ansible Guide:crea Ansible Playbook per LEMP Stack

Come creare playbook Ansible per l'automazione IT

Guida introduttiva ai Playbook Ansible

Come creare ed eseguire file Ansible Playbook