Deconstruyendo un libro de jugadas de Ansible | Activar el administrador del sistema

Este artículo describe las diferentes partes de un libro de jugadas de Ansible, comenzando con una descripción general muy amplia de lo que es Ansible y cómo puede usarlo. Ansible es una forma de usar sintaxis YAML fácil de leer para escribir libros de jugadas que pueden automatizar tareas por usted. Estos libros de jugadas pueden variar de muy simples a muy complejos, y un libro de jugadas puede incluso integrarse en otro.

Índice

    Instalar httpd con un libro de jugadas

    Ahora que tiene este conocimiento básico, echemos un vistazo a un libro de jugadas básico que instalará el httpd paquete. Tengo un archivo de inventario con dos hosts especificados y los coloqué en el la tela grupo:

    [[email protected] test]# cat inventory
    [web]
    ansibleclient.usersys.tipstecnologicos.es
    ansibleclient2.usersys.tipstecnologicos.es

    Miremos el libro de jugadas real para ver qué hay en él:

    [[email protected] 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

    Desglosando esto, ves que la primera línea del libro de jugadas es ---. Esto le permite saber que es el comienzo del libro de jugadas. Luego le di un nombre a la habitación. Este es solo un libro de jugadas simple con un solo juego, pero un libro de jugadas más complejo puede contener varios juegos. Luego especifico los hosts a los que quiero apuntar. En este caso, selecciono el la tela grupo, pero podría haber especificado cualquiera o en su lugar si no quería apuntar a ambos sistemas. La siguiente línea le dice a Ansible que va a saltar a las tareas que hacen el trabajo real. En este caso, mi libro de jugadas solo tiene una tarea, pero puede tener varias tareas si lo desea. Aquí especifico que voy a instalar el httpd paquete. La siguiente línea dice que usaré el ñam módulo. Entonces le digo el nombre del paquete, httpdy desea instalar la última versión.

    Cuando ejecuto el httpd.yml libro de jugadas dos veces, obtengo esto en la terminal:

    [[email protected] test]# ansible-playbook httpd.yml
    
    PLAY [this playbook will install httpd] ************************************************************************************************************
    
    TASK [Gathering Facts] *****************************************************************************************************************************
    ok: [ansibleclient.usersys.tipstecnologicos.es]
    ok: [ansibleclient2.usersys.tipstecnologicos.es]
    
    TASK [this is the task to install httpd] ***********************************************************************************************************
    changed: [ansibleclient2.usersys.tipstecnologicos.es]
    changed: [ansibleclient.usersys.tipstecnologicos.es]
    
    PLAY RECAP *****************************************************************************************************************************************
    ansibleclient.usersys.tipstecnologicos.es : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    ansibleclient2.usersys.tipstecnologicos.es : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    [[email protected] test]# ansible-playbook httpd.yml
    
    PLAY [this playbook will install httpd] ************************************************************************************************************
    
    TASK [Gathering Facts] *****************************************************************************************************************************
    ok: [ansibleclient.usersys.tipstecnologicos.es]
    ok: [ansibleclient2.usersys.tipstecnologicos.es]
    
    TASK [this is the task to install httpd] ***********************************************************************************************************
    ok: [ansibleclient.usersys.tipstecnologicos.es]
    ok: [ansibleclient2.usersys.tipstecnologicos.es]
    
    PLAY RECAP *****************************************************************************************************************************************
    ansibleclient.usersys.tipstecnologicos.es : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    ansibleclient2.usersys.tipstecnologicos.es : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
    
    [[email protected] test]#

    Tenga en cuenta que en ambos casos recibí un de acuerdo = 2, pero en la segunda ejecución del libro de jugadas nada cambió. La última versión de httpd ya estaba instalado en ese momento.

    Para obtener información sobre los diferentes módulos que puede usar en un libro de jugadas, puede usar el ansible-doc pedido. Por ejemplo:

    [[email protected] 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 >

    Es bueno tener un libro de jugadas que establezca httpd, pero para hacerlo más flexible, puede usar variables en lugar de codificar el paquete como httpd. Para hacer esto, puede usar un libro de jugadas como este:

    [[email protected] 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

    Aquí puedes ver que agregué una sección llamada "vars" y declaré una variable con el valor de httpd. Luego puedo usar esta variable en el libro de jugadas y ajustarla a lo que quiero instalar. Además, dado que especifiqué el RPM para instalar usando una variable, puedo anular lo que escribí en el libro de jugadas especificando la variable en la línea de comando usando -e:

    [[email protected] 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
    [[email protected] test]# ansible-playbook httpd.yml -e "myrpm=at"
    
    PLAY [this playbook will install at] ***************************************************************************************************************
    
    TASK [Gathering Facts] *****************************************************************************************************************************
    ok: [ansibleclient.usersys.tipstecnologicos.es]
    ok: [ansibleclient2.usersys.tipstecnologicos.es]
    
    TASK [this is the task to install at] **************************************************************************************************************
    changed: [ansibleclient2.usersys.tipstecnologicos.es]
    changed: [ansibleclient.usersys.tipstecnologicos.es]
    
    PLAY RECAP *****************************************************************************************************************************************
    ansibleclient.usersys.tipstecnologicos.es : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    ansibleclient2.usersys.tipstecnologicos.es : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
    
    [[email protected] test]#

    Otra forma de dinamizar las tareas es usar. En este extracto se puede ver que he declarado rpm como una lista para tener correo y sufijo. Para usarlos uso loop en mi tarea:

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

    Es posible que haya notado que cuando se llevan a cabo estos juegos, se recopilan datos sobre los anfitriones:

    TASK [Gathering Facts] *****************************************************************************************************************************
    ok: [ansibleclient.usersys.tipstecnologicos.es]
    ok: [ansibleclient2.usersys.tipstecnologicos.es]

    Estos hechos se pueden usar como variables cuando lanzas la moneda. Por ejemplo, es posible que tenga un motd.yml archivo que define el contenido como:

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

    Para cualquier sistema en el que ejecute este libro de jugadas, se configurará el nombre de dominio completo (FQDN), la distribución del sistema operativo y la versión de distribución correctos, incluso sin configurar manualmente estas variables.

    Conclusión

    Esta fue una breve introducción sobre cómo se ven los libros de jugadas de Ansible, qué hacen las diferentes partes y cómo obtener más información sobre las modificaciones. Más información está disponible en Documentación responsable.

    Artículos de interés

    Subir