GNU/Linux >> Tutoriales Linux >  >> Linux

Primeros pasos con los libros de jugadas de Ansible

En el último artículo, hemos hablado sobre los comandos ad hoc de Ansible. . Todo lo que aprendimos allí se aplicará en este artículo pero de una manera diferente. Este tutorial explica qué es un Playbook en Ansible y cómo trabajar con Ansible Playbooks con ejemplos.

¿Qué es Ansible Playbook?

El libro de jugadas es un YAML archivo que se usa para ejecutar una o más tareas contra los hosts administrados en el entorno.

La principal diferencia entre los comandos ad hoc y los playbooks es que con los comandos ad hoc puede crear frases sencillas o utilizar el comando ad hoc en scripts de shell para ejecutar tareas sencillas. Cuando desee realizar operaciones repetitivas complejas, debe escribir libros de jugadas y almacenarlos en un repositorio central y usarlos cuando sea necesario.

Supongamos que usted es parte del equipo de administración del sistema. Cada vez que se construye un nuevo servidor, su equipo es responsable de fortalecer el servidor según la política de su empresa.

En este caso, puede crear un libro de jugadas y fortalecer el servidor. Ahora se puede usar el mismo libro de jugadas contra el número N de nuevos hosts que deben reforzarse.

Mi estructura de Ansible Lab

Voy a usar el laboratorio ansible que se creó con dos nodos de Ubuntu 20.04LTS. Puede consultar el siguiente artículo para replicar la misma configuración de laboratorio si es necesario.

Cree su primer libro de jugadas de Ansible

Como dije anteriormente, los Playbooks están escritos en YAML. formato. El libro de jugadas debe tener un .yml o .yaml extensión. Echa un vistazo al siguiente enlace si quieres aprender sobre YAML.

A continuación se muestra el libro de jugadas de muestra que voy a usar para demostrar cómo funciona el libro de jugadas. Este es un libro de jugadas simple que se encargará de configurar un mensaje de banner personalizado cuando inicie sesión en el nodo.

- name: First Play - Modify banner message
  hosts: ubuntu2
  gather_facts: false
  become: yes

  tasks:
    - name: Remove Execute Permission from /etc/update-motd.d/*
      file:
        path: /etc/update-motd.d/
        mode: u=rw,g=rw,o=rw
        recurse: yes

    - name: ADD BANNER MESSAGE
      copy:
        content: "Welcome to OSTechnix"
        dest: /etc/motd

Veamos cada sección de este libro de jugadas. El libro de jugadas se divide en dos secciones. La primera sección contiene definiciones de reproducción, como el nombre de la reproducción, los hosts de destino y la escalada de privilegios.

  • nombre - El libro de jugadas debe tener un nombre de juego que no sea más que una agrupación lógica del host, los parámetros y las tareas de destino. Puedes tener más de una jugada en el libro de jugadas. Dale un nombre descriptivo a la obra.
  • anfitriones - Hosts de destino. Ansible comprobará el archivo de inventario y verificará si el valor dado en hosts está disponible en el archivo de inventario.
  • convertirse - Cuando se establece en 'sí' ejecutará la tarea con el privilegio sudo. Ya que estoy modificando el permiso bajo /etc/ directorio, la tarea debe enviarse con privilegios elevados.

Eche un vistazo a nuestro artículo completo sobre la escalada de privilegios para comprenderlo en detalle.

En la segunda sección, se definen las tareas. Debe utilizar la palabra clave "tareas" para definir la tarea. Aquí he creado dos tareas. Cada tarea debe recibir un nombre usando la palabra clave "nombre" .

  • La primera tarea eliminará el permiso de ejecución de /etc/update-motd.d/* directorio. Estoy usando el archivo módulo para esto.
  • La segunda tarea escribirá la cadena "Bienvenido a OSTechnix" al /etc/motd archivo usando la copia módulo.

Antes de ejecutar el libro de jugadas, permítanme verificar el estado de mi nodo de destino (managed2.anslab.com ) iniciando sesión en el nodo. Puede ver cuando inicio sesión en el nodo, recibo el mensaje de banner predeterminado y el permiso de ejecución está configurado para todos los archivos.

$ ssh [email protected]

Para ejecutar el libro de jugadas, ejecuta el siguiente comando desde la terminal.

$ ansible-playbook <playbook-name>   # SYNTAX
$ ansible-playbook banner_mod.yml

Tratemos de entender el resultado.

1. Cuando ejecute el libro de jugadas, lo primero que verá es el nombre de la jugada.

PLAY [Modify banner message] *

2. La primera tarea ejecutada por ansible es "Recopilación de datos" . No hemos definido esta tarea en nuestro libro de jugadas, pero se ejecutará a menos que la desactive.

TASK [Gathering Facts] *
ok: [managed2]

3. Ahora la tarea que definiste en el archivo YAML como parte del juego comenzará a ejecutarse una por una. Ansible leerá el libro de jugadas de arriba a abajo para que las tareas se ejecuten en el orden definido en el libro de jugadas.

TASK [Remove Execute Permission from /etc/update-motd.d/*] *******************************************************************************************
changed: [managed2]

TASK [ADD BANNER MESSAGE] ****************************************************************************************************************************
changed: [managed2]

4. Una vez que se completen todas las tareas, tendrá un resumen del juego que le dará el recuento total del estado de las diferentes tareas. En nuestro caso, se ejecutó un total de tres tareas (ok=3), incluida la recopilación de datos, y solo dos tareas (cambiado=2) realizaron los cambios en el nodo administrado.

PLAY RECAP ******************************************
managed2 : ok=3 changed=2    unreachable=0 failed=0 skipped=0    rescued=0 ignored=0   

Ahora puedo validar el nodo administrado para ver si los cambios se aplicaron correctamente.

Desactivar recopilación de datos

Como se predijo en la sección anterior cuando ejecuta el libro de jugadas, ansible recopilará datos sobre los nodos administrados al ejecutar el módulo de configuración. . Puede deshabilitar la recopilación de datos agregando la siguiente línea en el libro de jugadas.

gather_facts : false

Ahora, cuando vuelva a ejecutar el libro de jugadas, solo verá dos tareas que se definieron en el libro de jugadas. Dado que Ansible es idempotente, ansible no intentará alterar el estado del objeto si ya está alterado. Entonces verá la salida como OK .

La recopilación de datos hará que las jugadas se ralenticen cuando tenga que ejecutar el libro de jugadas contra una gran cantidad de anfitriones. Esto se debe a que ansible tiene que conectarse con el nodo administrado y recopilar una gran cantidad de datos sobre el nodo que no son necesarios en todos los casos.

Puede verificar la diferencia de tiempo de ejecución con y sin datos a continuación.

$ time ansible-playbook banner_mod.yml  # WITHOUT FACTS

real    0m1.642s
user    0m0.731s
sys    0m0.220s

$ time ansible-playbook banner_mod.yml  # WITH FACTS

real    0m2.547s
user    0m1.139s
sys    0m0.187s

Ejecutar varias reproducciones

Puedes tener más de una jugada en el libro de jugadas. Como puede ver en la imagen a continuación, mi segundo juego tiene una tarea que reiniciará el sshd servicio usando el servicio módulo en un host diferente.

- name: Second Play - Restart SSHD service
  hosts: ubuntu1
  gather_facts: false
  become: yes

  tasks:
    - name: Restart SSHD in managed1.anslab.com
      service:
        name: sshd
        state: restarted

Ejecutemos el libro de jugadas nuevamente y puede ver en la salida que ambas jugadas se ejecutaron con éxito.

$ ansible-playbook banner_mod.yml

Ahora debe tener una comprensión justa de cómo escribir un libro de jugadas y ejecutarlo. Playbook admite funciones útiles adicionales que veremos en la próxima sección.

Validar la sintaxis del libro de jugadas

Puede usar --syntax-check marca para verificar si hay errores de sintaxis en su libro de jugadas. Cometí deliberadamente un error sintáctico en "gather_facts" línea en mi libro de jugadas.

$ ansible-playbook --syntax-check banner_mod.yml

Pedir confirmación

Cuando usas el --step bandera, para cada tarea en su juego le pedirá su confirmación para continuar con la tarea.

$ ansible-playbook --step banner_mod.yml

Ejecutar un ensayo

En lugar de ejecutar las tareas en nodos administrados, puede simular la ejecución usando -C o --check bandera.

$ ansible-playbook -C banner_mod.yml

Comenzar desde una tarea particular

Tiene la opción de comenzar a ejecutar el libro de jugadas desde una tarea en particular. Puede ver en la imagen a continuación que comencé desde Play2 (tarea 1), por lo que se omite la tarea en play1. Usa la marca --start-at-task y pase el nombre de la tarea como argumento.

$ ansible-playbook banner_mod.yml --start-at-task "Restart SSHD in managed1.anslab.com"

Ejecutar tarea usando etiquetas

Puedes agrupar jugadas y tareas con etiquetas . Usando etiquetas, puede ejecutar solo aquellas tareas con etiquetas particulares u omitir las tareas.

Puedes echar un vistazo a la imagen de abajo donde he usado las "etiquetas" palabra clave y establezca algunos valores para ella. También puede agregar múltiples valores a una sola etiqueta.

Puede ejecutar el siguiente comando para obtener la lista de tareas junto con sus etiquetas.

$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags

Utilice -t marcar y pasar nombres de etiquetas como argumento. Puede ejecutar una tarea particular basada en etiquetas o múltiples etiquetas como se muestra a continuación. En el siguiente ejemplo, estoy usando dos etiquetas diferentes de dos jugadas diferentes.

$ ansible-playbook -t "set_perm","restart service" banner_mod.yml

También puede omitir una tarea y ejecutar todas las demás tareas usando --skip-tags bandera.

$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml

Aumentar la verbosidad

A veces, el libro de jugadas no se comportará de la forma esperada. Puede ser algo que esté sucediendo en segundo plano o diferentes errores.

Para depurar el problema, puede aumentar la verbosidad (-v) al ejecutar el libro de jugadas. Hay cuatro niveles de verbosidad. Puede establecer la verbosidad en ansible.cfg archivo agregando la propiedad "verbosity=<level " o desde la terminal usando -v o variable ambiental ANSIBLE_VERBOSITY.

$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)

[O]

$ ANSIBLE_VERBOSITY=4 ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(ENV VARIABLE)

Paralelismo de control

Cuando ejecute el libro de jugadas, ansible ejecutará la tarea en lotes. De forma predeterminada, ansible ejecutará una tarea en 5 nodos en paralelo y, una vez que se complete toda la tarea en los 5 nodos, pasará al siguiente conjunto de 5 nodos.

Asimismo, ejecutará una tarea en lotes de 5 hasta completar la tarea en todos los nodos y luego pasará a la siguiente tarea y repetirá el mismo paso.

Puede controlar el paralelismo y establecer cuántos nodos deben procesarse en paralelo configurando las "bifurcaciones" parámetro en ansible.cfg archivo.

[defaults]
inventory = inventory
host_key_checking = False
forks=20

Establecí el valor de las bifurcaciones en 20. Ahora procesará una tarea en 20 nodos en paralelo. Asimismo, puede aumentar/disminuir el conteo según su requerimiento.

Puede anular el valor establecido en ansible.cfg archivo pasando -f o --forks bandera. Cuando ejecuto el siguiente comando, el valor de las bifurcaciones de 20 será anulado por 15.

$ ansible-playbook banner_mod.yml -f 15

Conclusión

En este artículo, hemos visto cómo escribir libros de jugadas de Ansible y los diferentes parámetros y opciones admitidos en los libros de jugadas. Hay toneladas de otras características como variables, condiciones, bucles, etc. que se pueden usar en los libros de jugadas que cubriremos en nuestros próximos artículos.


Linux
  1. Comenzando con Zsh

  2. Comenzando con ls

  3. Primeros pasos con Samba para la interoperabilidad

  4. Primeros pasos con PostgreSQL en Linux

  5. Cómo:Introducción a Ansible

Primeros pasos con el sistema operativo Linux

Primeros pasos con GitHub

Introducción a los comandos ad hoc de Ansible

Primeros pasos con el administrador de paquetes de Nix

Primeros pasos con systemctl

Primeros pasos con el comando Tar