GNU/Linux >> Tutoriels Linux >  >> Linux

Déconstruire un playbook Ansible

Cet article décrit les différentes parties d'un playbook Ansible en commençant par un aperçu très large de ce qu'est Ansible et comment vous pouvez l'utiliser. Ansible est un moyen d'utiliser la syntaxe YAML facile à lire pour écrire des playbooks qui peuvent automatiser les tâches pour vous. Ces playbooks peuvent aller de très simples à très complexes et un playbook peut même être intégré dans un autre.

Installer httpd avec un playbook

Maintenant que vous avez ces connaissances de base, regardons un playbook de base qui installera le httpd emballer. J'ai un fichier d'inventaire avec deux hôtes spécifiés et je les ai placés dans le web groupe :

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

Regardons le playbook réel pour voir ce qu'il contient :

[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

En décomposant cela, vous voyez que la première ligne du playbook est --- . Cela vous permet de savoir que c'est le début du playbook. Ensuite, j'ai donné un nom à la pièce. Il ne s'agit que d'un simple playbook avec un seul jeu, mais un playbook plus complexe peut contenir plusieurs jeux. Ensuite, je spécifie les hôtes que je veux cibler. Dans ce cas, je sélectionne le web groupe, mais j'aurais pu spécifier soit ansibleclient.usersys.redhat.com ou ansibleclient2.usersys.redhat.com à la place si je ne voulais pas cibler les deux systèmes. La ligne suivante indique à Ansible que vous allez vous lancer dans les tâches qui font le travail réel. Dans ce cas, mon playbook n'a qu'une seule tâche, mais vous pouvez avoir plusieurs tâches si vous le souhaitez. Ici je précise que je vais installer le httpd emballer. La ligne suivante dit que je vais utiliser le yum module. Je lui dis ensuite le nom du paquet, httpd , et que je veux que la dernière version soit installée.

[ Les lecteurs ont également aimé : Premiers pas avec Ansible ]

Lorsque j'exécute le httpd.yml playbook deux fois, je reçois ceci sur le terminal :

[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]#

Notez que dans les deux cas, j'ai reçu un ok=2 , mais dans la deuxième exécution du playbook, rien n'a été changé. La dernière version de httpd était déjà installé à ce stade.

Pour obtenir des informations sur les différents modules que vous pouvez utiliser dans un playbook, vous pouvez utiliser le ansible-doc commande. Par exemple :

[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 >

C'est bien d'avoir un playbook qui installe httpd , mais pour le rendre plus flexible, vous pouvez utiliser des variables au lieu de coder en dur le package en tant que httpd . Pour ce faire, vous pouvez utiliser un playbook comme celui-ci :

[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

Ici, vous pouvez voir que j'ai ajouté une section appelée "vars" et j'ai déclaré une variable myrpm avec la valeur httpd . Je peux alors utiliser ce myrpm variable dans le playbook et ajustez-la à tout ce que je veux installer. De plus, comme j'ai spécifié le RPM à installer en utilisant une variable, je peux remplacer ce que j'ai écrit dans le playbook en spécifiant la variable sur la ligne de commande en utilisant -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]#

Une autre façon de rendre les tâches plus dynamiques consiste à utiliser des boucles . Dans cet extrait, vous pouvez voir que j'ai déclaré rpms sous forme de liste pour avoir mailx et suffixe . Pour les utiliser, j'utilise loop dans ma tâche :

 vars:
    rpms:
      - mailx
      - postfix

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

Vous avez peut-être remarqué que lorsque ces lectures sont diffusées, des informations sur les hôtes sont recueillies :

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


Ces faits peuvent être utilisés comme variables lorsque vous lancez le jeu. Par exemple, vous pourriez avoir un motd.yml fichier qui définit le contenu comme :

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

Pour tout système sur lequel vous exécutez ce playbook, le nom de domaine complet (FQDN), la distribution du système d'exploitation et la version de distribution corrects seraient définis, même sans que vous définissiez manuellement ces variables.

[ Besoin d'en savoir plus sur Ansible ? Suivez un cours de présentation technique gratuit de Red Hat. Ansible Essentials :Présentation technique de la simplicité dans l'automatisation. ] 

Récapitulez

Il s'agissait d'une introduction rapide à l'apparence des playbooks Ansible, à ce que font les différentes parties et à la manière dont vous pouvez obtenir plus d'informations sur les modules. De plus amples informations sont disponibles dans la documentation Ansible.


Linux
  1. Comment créer un Playbook Ansible

  2. Utilisation d'un playbook Ansible pour gérer les mises à jour des postes de travail et des serveurs

  3. Configurez votre démon Chrony avec un playbook Ansible

  4. Comment installer des packages logiciels avec un playbook Ansible

  5. comment créer un playbook Ansible pour obtenir les versions du système d'exploitation des hôtes distants ?

Comment utiliser les gestionnaires dans Ansible Playbook

Comment créer des rôles Ansible et les utiliser dans Playbook

Guide Ansible :créer un playbook Ansible pour la pile LEMP

Comment créer des playbooks Ansible pour l'automatisation informatique

Premiers pas avec les playbooks Ansible

Comment créer et exécuter un fichier Playbook Ansible