DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»DevOps Zone»Comment créer un playbook Ansible
    DevOps Zone

    Comment créer un playbook Ansible

    novembre 23, 2022
    Comment créer un playbook Ansible
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Dans cet article, vous apprendrez à créer un playbook Ansible. À titre d’exercice, vous allez installer un serveur Web Apache sur deux machines cibles et modifier la page d’accueil.

    1. Introduction

    Dans les deux articles Ansible précédents, vous avez appris à configurer un environnement de test Ansible et à créer un inventaire Ansible. Cet article continue cette série, mais il n’est pas nécessaire de lire les deux premiers articles. Dans cet article, vous apprendrez à créer un playbook Ansible. Un playbook se compose d’un ou plusieurs jeux qui exécutent des tâches. Les tâches appellent des modules Ansible. Ne vous inquiétez pas si vous ne comprenez pas encore cela, c’est ce que vous apprendrez. Il est également conseillé de lire l’introduction aux playbooks dans la documentation Ansible.

    Au cas où vous n’auriez pas lu les blogs précédents ou simplement pour rappel, l’environnement se compose d’un contrôleur et de deux machines cibles. Les machines contrôleur et cible s’exécutent dans une machine virtuelle VirtualBox. Le développement des scripts Ansible se fait avec IntelliJ sur la machine hôte. Les fichiers sont synchronisés de la machine hôte vers le contrôleur au moyen d’un script. Dans ce blog, les machines ont les adresses IP suivantes :

    • Manette: 192.168.2.11
    • Cible 1: 192.168.2.12
    • Cible 2: 192.168.2.13

    Les fichiers utilisés dans ce blog sont disponibles dans le référentiel git correspondant sur GitHub.

    2. Prérequis

    Les conditions préalables suivantes s’appliquent à ce blog :

    • Vous avez besoin d’un environnement de test Ansible, voir un blog précédent comment configurer un environnement de test ;
    • Vous devez avoir des connaissances de base sur Ansible Inventory et Ansible Vault, consultez un blog précédent si vous ne possédez pas ces connaissances;
    • Si vous utilisez votre propre environnement, sachez qu’Ubuntu 22.04 LTS est utilisé pour les machines Controller et Target et Ansible version 2.13.3 ;
    • Connaissances de base de Linux.

    3. Votre premier livre de jeu

    En tant que premier playbook, vous allez créer un playbook qui cinglera les machines Target1 et Target2. Le playbook peut être trouvé dans le dépôt git comme playbook-ping-targets-success.yml et se présente comme suit :

    - name: Ping target1
      hosts: target1
     
      tasks:
        - name: Ping test
          ansible.builtin.ping:
     
    - name: Ping target2
      hosts: target2
     
      tasks:
        - name: Ping test
          ansible.builtin.ping:

    Voyons à quoi ressemble ce playbook. Un playbook se compose de jeux. Dans ce playbook, deux jeux peuvent être trouvés avec le nom Ping target1 et Ping target2. Pour chaque playbook, vous indiquez où il doit s’exécuter au moyen du hosts paramètre qui fait référence à un nom dans le fichier d’inventaire.

    Un jeu se compose de tâches. Dans les deux jeux, une seule tâche est définie avec le nom Ping test.

    Une tâche appelle un module Ansible. Une liste des modules pouvant être utilisés est disponible ici. Il est important de savoir quels modules existent, comment les trouver, comment les utiliser, etc. La documentation du module Ping est ce dont vous avez besoin pour cet exemple, alors prenez le temps et jetez-y un coup d’œil.

    La dernière chose à noter est que le FQCN (Fully Qualified Collection Name) est utilisé. Ceci est considéré comme une pratique exemplaire.

    Exécutez le playbook à partir de la machine Controller. Si vous utilisez les fichiers tels quels à partir du référentiel git, vous devrez entrer le mot de passe du coffre, qui est itisniceweather.

    $ ansible-playbook playbook-ping-targets-success.yml -i inventory/inventory.ini --ask-vault-pass
    Vault password: 
     
    PLAY [Ping target1] ***********************************************************************************************
     
    TASK [Gathering Facts] ********************************************************************************************
    ok: [target1]
     
    TASK [Ping test] **************************************************************************************************
    ok: [target1]
     
    PLAY [Ping target2] ***********************************************************************************************
     
    TASK [Gathering Facts] ********************************************************************************************
    ok: [target2]
     
    TASK [Ping test] **************************************************************************************************
    ok: [target2]
     
    PLAY RECAP ********************************************************************************************************
    target1                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    target2                    : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

    La journalisation montre exactement quelles parties et quelles tâches sont exécutées et si elles ont été exécutées avec succès.

    Le module Ping offre également la possibilité de planter la commande. Dans le jeu Target1, le paramètre data est ajouté afin de laisser planter la commande. Le playbook peut être trouvé dans le dépôt git comme playbook-ping-targets-failure.yml.

    - name: Ping target1
      hosts: target1
     
      tasks:
        - name: Ping test
          ansible.builtin.ping:
            data: crash
    ...

    L’exécution de ce playbook plantera le jeu Target1 et le playbook se terminera.

    \r\n Fichier \ »/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py\ », ligne 79, dans main\r\nException : boom\r\n » , « msg »: « ÉCHEC DU MODULE\nVoir stdout/stderr pour l’erreur exacte », « rc »: 1} PLAY RECAP *********************** ****************************************************** ******************************* cible1 : ok=1 modifié=0 inaccessible=0 échoué=1 ignoré=0 secouru= 0 ignoré=0  » data-lang= »text/x-sh »>

    $ ansible-playbook playbook-ping-targets-failure.yml -i inventory/inventory.ini --ask-vault-pass
    Vault password: 
     
    PLAY [Ping target1] ***********************************************************************************************
     
    TASK [Gathering Facts] ********************************************************************************************
    ok: [target1]
     
    TASK [Ping test] **************************************************************************************************
    An exception occurred during task execution. To see the full traceback, use -vvv. The error was: Exception: boom
    fatal: [target1]: FAILED! => {"changed": false, "module_stderr": "Shared connection to 192.168.2.12 closed.\r\n", "module_stdout": "Traceback (most recent call last):\r\n  File \"/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/osboxes/.ansible/tmp/ansible-tmp-1662800777.2553337-6094-259627128894774/AnsiballZ_ping.py\", line 47, in invoke_module\r\n    runpy.run_module(mod_name="ansible.modules.ping", init_globals=dict(_module_fqn='ansible.modules.ping', _modlib_path=modlib_path),\r\n  File \"/usr/lib/python3.10/runpy.py\", line 209, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\r\n    _run_code(code, mod_globals, init_globals,\r\n  File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py\", line 89, in <module>\r\n  File \"/tmp/ansible_ansible.builtin.ping_payload_xnphtwh8/ansible_ansible.builtin.ping_payload.zip/ansible/modules/ping.py\", line 79, in main\r\nException: boom\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
     
    PLAY RECAP ********************************************************************************************************
    target1                    : ok=1    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0   

    4. Installez le serveur Web Apache

    Dans ce deuxième exercice, vous allez installer Apache Webserver sur une machine cible et modifier la page d’accueil. Le playbook final peut être trouvé dans le référentiel git sous playbook-httpd-target1.yml. Vous apprendrez dans cette section comment créer cette version finale.

    4.1 Installer le package

    Pour installer des packages, vous pouvez utiliser le module Apt. Il contient de nombreux paramètres, vous n’en utiliserez que quelques-uns :

    • Nom: le nom du package à installer ;
    • mise à jour_cache: court apt-get update avant l’installation ;
    • Etat: indique l’état du colis souhaité, present est très bien ici.

    Les autres éléments de ce livre de jeu devraient être assez familiers maintenant.

    - name: Install Apache webserver
      hosts: target1
     
      tasks:
        - name: Install apache httpd  (state=present is optional)
          ansible.builtin.apt:
            name: apache2
            update_cache: yes
            state: present

    Exécutez le livre de jeu.

    $ ansible-playbook playbook-httpd-target1.yml -i inventory/inventory.ini --ask-vault-pass
    Vault password: 
     
    PLAY [Install Apache webserver] *****************************************************************************************
     
    TASK [Gathering Facts] **************************************************************************************************
    ok: [target1]
     
    TASK [Install apache httpd  (state=present is optional)] ****************************************************************

    Ce livre de jeu ne s’arrête pas. Il se bloque et vous pouvez l’arrêter avec CTRL+C.

    Alors que se passe-t-il ici ? Comme vous le savez probablement, pour installer des packages, vous avez besoin des privilèges sudo. D’une manière ou d’une autre, Ansible doit savoir si une escalade de privilèges est nécessaire et vous devrez fournir le mot de passe sudo à Ansible. Une description détaillée peut être lue dans la documentation Ansible. La version courte est que vous devez ajouter le become paramètre avec valeur yes. Mais ce n’est pas tout, il faut aussi ajouter la ligne de commande…

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.