GNU/Linux >> Tutoriales Linux >  >> Linux

Deconstruyendo un libro de jugadas de Ansible

Este artículo describe las diferentes partes de un libro de jugadas de Ansible, comenzando con una descripción general muy amplia de qué 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 estar incrustado en otro.

Instalar httpd con un libro de jugadas

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

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

Miremos el libro de jugadas real para ver lo que 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

Desglosando esto, verá que la primera línea en el libro de jugadas es --- . Esto le permite saber que es el comienzo del libro de jugadas. A continuación, le di un nombre a la obra. Este es solo un libro de jugadas simple con una sola jugada, pero un libro de jugadas más complejo puede contener múltiples jugadas. A continuación, especifico los hosts a los que quiero apuntar. En este caso estoy seleccionando la web grupo, pero podría haber especificado ansibleclient.usersys.redhat.com o ansibleclient2.usersys.redhat.com en cambio, si no quisiera apuntar a ambos sistemas. La siguiente línea le dice a Ansible que entrará en las tareas que hacen el trabajo real. En este caso, mi libro de jugadas tiene solo 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 voy a usar el yum módulo. Luego le digo el nombre del paquete, httpd y que quiero que se instale la última versión.

[ A los lectores también les gustó: Introducción a Ansible ]

Cuando ejecuto httpd.yml libro de jugadas dos veces, obtengo esto en la 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]#

Tenga en cuenta que en ambos casos, recibí un ok=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 diversos módulos que puede usar en un libro de jugadas, puede usar ansible-doc dominio. Por ejemplo:

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

Es bueno tener un libro de jugadas que instala httpd , pero para que sea más flexible, puede usar variables en lugar de codificar el paquete como httpd . Para hacer eso, podría usar un libro de jugadas como este:

[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

Aquí puede ver que agregué una sección llamada "vars" y declaré una variable myrpm con el valor de httpd . Entonces puedo usar ese myrpm variable en el libro de jugadas y ajustarlo a lo que quiera instalar. Además, debido a 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 :

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

Otra forma de hacer que las tareas sean más dinámicas es usar bucles . En este fragmento, puedes ver que he declarado rpms como una lista para tener mailx y postfijo . 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 hayas notado que cuando se ejecutan estas jugadas, se recopilan datos sobre los anfitriones:

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


Estos hechos se pueden utilizar como variables cuando ejecuta la obra. Por ejemplo, podría tener un motd.yml archivo que establece 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 ese libro de jugadas, se establecería el nombre de dominio completo (FQDN), la distribución del sistema operativo y la versión de distribución correctos, incluso sin que usted defina manualmente esas variables.

[ ¿Necesita más información sobre Ansible? Realice un curso gratuito de descripción técnica de Red Hat. Ansible Essentials:descripción técnica de la simplicidad en la automatización. ] 

Resumir

Esta fue una introducción rápida a cómo se ven los libros de jugadas de Ansible, qué hacen las diferentes partes y cómo puede obtener más información sobre los módulos. Hay más información disponible en la documentación de Ansible.


Linux
  1. Cómo crear un libro de jugadas de Ansible

  2. Uso de un playbook de Ansible para administrar actualizaciones de estaciones de trabajo y servidores

  3. Cómo pasar variables adicionales a un libro de jugadas de Ansible

  4. Configure su demonio Chrony con un libro de jugadas de Ansible

  5. ¿Cómo crear el libro de jugadas de Ansible para obtener versiones del sistema operativo de los hosts remotos?

Cómo usar controladores en Ansible Playbook

Cómo crear roles de Ansible y usarlos en Playbook

Guía de Ansible:Cree un libro de jugadas de Ansible para LEMP Stack

Cómo crear playbooks de Ansible para la automatización de TI

Primeros pasos con los libros de jugadas de Ansible

Cómo crear y ejecutar un archivo de libro de jugadas de Ansible