
En el artículo anterior, hablamos sobre Comandos ad hoc de AnsibleCualquier cosa que aprendamos allí se aplicará en este artículo, pero de una manera diferente. Este tutorial explica qué es un Playbook en Ansible y cómo usar Ansible Playbook con ejemplos.
¿Qué es un libro de jugadas de Ansible?
el guion es un YAML Un archivo utilizado para realizar una o más tareas en hosts administrados en un 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 comandos ad hoc en scripts de shell para ejecutar tareas sencillas. Cuando desee realizar acciones repetitivas complejas, debe escribir libros de jugadas y almacenarlos en un repositorio central y usarlos cuando sea necesario.
Suponga que usted es parte de un equipo de administradores de sistemas. Cada vez que se construye un nuevo servidor, su equipo es responsable de fortalecer el servidor de acuerdo con la política de su empresa.
En este caso, puede crear un libro de jugadas y fortalecer el servidor. El mismo libro de jugadas ahora se puede usar para N hosts nuevos que deben fortalecerse.
Mi estructura de Ansible Lab
Usaré un laboratorio ansible creado con dos nodos de Ubuntu 20.04LTS. Si es necesario, puede consultar el siguiente artículo para replicar la misma configuración de laboratorio.
Automatización de la configuración de Ansible Lab con Vagrant y Virtualbox en Linux
Cree su primer libro de jugadas de Ansible
Como dije antes, el script usa YAML Formato.El guión debe tener un .yml
o .yaml
posponer. Si desea obtener más información sobre YAML, consulte el siguiente enlace.
Tutorial de YAML | Primeros pasos con YAML
A continuación se muestra un libro de estrategias de muestra que usaré para demostrar cómo funciona este libro de estrategias. Aquí hay un libro de jugadas simple que se encargará de configurar un mensaje de banner personalizado cuando inicie sesión en node.
- 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 parte de este script. El guión se divide en dos partes. La primera sección contiene definiciones de reproducción, como el nombre de la reproducción, el host de destino y la escalada de privilegios.
- Nombre – Un libro de jugadas debe tener un nombre de juego, que no es más que una agrupación lógica de hosts, parámetros y tareas de destino. Puede tener varias jugadas dentro de un libro de jugadas. Asigne al guión un nombre descriptivo.
- anfitrión – Anfitrión de destino. Ansible verificará el archivo de inventario y verificará que el valor proporcionado en hosts esté disponible en el archivo de inventario.
- volverse – cuando se establece en ‘sí’ La tarea se ejecutará con privilegios sudo.Ya que estoy modificando permisos
/etc/
directorio, las tareas deben enviarse con privilegios elevados.
Consulte nuestro artículo completo sobre la escalada de privilegios para obtener más información al respecto.
Aumento de privilegios y autenticación SSH de Ansible
En la segunda parte, se definen las tareas.deberías usar palabras clave «Tarea» para definir la tarea. Aquí, he creado dos tareas.Cada tarea debe ser nombrada con una palabra clave «Nombre».
- La primera tarea eliminará el permiso de ejecución.
/etc/update-motd.d/*
contenido.estoy usando documento módulo para esto. - La segunda tarea escribirá la cadena. «Bienvenido a OSTechnix» llegar
/etc/motd
uso de archivos dupdo módulo.

Antes de ejecutar el libro de jugadas, permítanme verificar el estado del nodo de destino (gestionado2.anslab.com) iniciando sesión en el nodo. Puede ver que cuando inicio sesión en el nodo, recibo el mensaje de banner predeterminado y los permisos de ejecución están configurados para todos los archivos.
$ ssh [email protected]

Para ejecutar el libro de jugadas, ejecute el siguiente comando desde la terminal.
$ ansible-playbook# SYNTAX $ ansible-playbook banner_mod.yml

Tratemos de entender la salida.
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 que ejecuta ansible es «Recopilación de hechos»No hemos definido esta tarea en el libro de jugadas, pero se ejecutará a menos que la desactive.
TASK [Gathering Facts] *
ok: [managed2]
3. Ahora, las tareas que definiste en el archivo YAML como parte del juego comenzarán a ejecutarse una por una. Ansible leerá el libro de jugadas de arriba a abajo, por lo que las tareas se ejecutarán 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. Después de completar todas las misiones, tendrás un resumen del juego que te dará el estado total de las diferentes misiones. En nuestro caso, se ejecutaron un total de tres tareas (ok=3), incluida la recopilación de datos, y solo dos tareas (cambiado=2) realizaron cambios en los nodos administrados.
PLAY RECAP ****************************************** managed2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
Ahora puedo verificar el nodo administrado para ver si los cambios se aplicaron correctamente.

Deshabilitar recopilación de datos
Como se mencionó en la sección anterior, cuando ejecuta el libro de jugadas, ansible ejecutará el establecer móduloPuede deshabilitar la recopilación de datos agregando la siguiente línea a su libro de jugadas.
gather_facts : false

Ahora, cuando vuelva a ejecutar el libro de jugadas, solo verá las dos tareas definidas en el libro de jugadas. Dado que Ansible es idempotente, ansible no intentará cambiar el estado del objeto si se ha cambiado.Entonces verás la salida como DE ACUERDO.

La recopilación de datos puede hacer que el libro de jugadas se ejecute con lentitud cuando tiene que ejecutarlo contra una gran cantidad de hosts. Esto se debe a que ansible tiene que conectarse con un nodo administrado y recopilar una gran cantidad de datos sobre ese nodo, lo que no es necesario en todos los casos.
Puede verificar la diferencia de tiempo de ejecución con y sin los 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
realizar reproducción múltiple
Puede tener varias jugadas dentro de un libro de jugadas.Como puede ver en la imagen de abajo, mi segundo juego tiene una misión que se reiniciará sshd
uso del servicio Servir Los módulos están en diferentes hosts.

- 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, puede ver en la salida que ambas jugadas se ejecutaron con éxito.
$ ansible-playbook banner_mod.yml

Ahora debería tener una idea clara de cómo escribir un libro de jugadas y ejecutarlo. Los libros de jugadas admiten otras características útiles, que veremos en las siguientes secciones.
Verificar la sintaxis del script
puedes usarlo --syntax-check
Marque para verificar si hay errores de sintaxis en el libro de jugadas.estoy a propósito «Recopilación de hechos» línea en mi guión.
$ ansible-playbook --syntax-check banner_mod.yml

Solicitud de confirmación
cuando usas --step
bandera, para cada misión en su juego, le pedirá que confirme para continuar con esa misión.
$ ansible-playbook --step banner_mod.yml

Realice una prueba de funcionamiento
Puede simular ejecutar en lugar de ejecutar tareas en nodos administrados -C
o --check
bandera.
$ ansible-playbook -C banner_mod.yml
comenzar con una tarea específica
Puede optar por ejecutar el libro de jugadas a partir de una tarea específica. Como puede ver en la imagen a continuación, comencé con Play2 (tarea 1), por lo que se omiten ambas tareas en play1.usar logotipo --start-at-task
y pase el nombre de la tarea como parámetro.
$ ansible-playbook banner_mod.yml --start-at-task "Restart SSHD in managed1.anslab.com"

Puedes combinar juegos y misiones con EtiquetaUsando etiquetas, solo puede ejecutar tareas con etiquetas específicas u omitir esas tareas.
Puedes echar un vistazo a las imágenes que he usado a continuación. «Etiqueta» palabra clave y establezca algún valor para ella. También puede agregar múltiples valores a una sola etiqueta.

Puede ejecutar el siguiente comando para obtener una lista de tareas y sus etiquetas.
$ ansible-playbook banner_mod.yml --list-tasks
$ ansible-playbook banner_mod.yml --list-tags

usar -t
etiqueta y pasa el nombre de la etiqueta como un parámetro. Puede ejecutar tareas específicas basadas en etiquetas o múltiples etiquetas como se muestra a continuación. En el siguiente ejemplo, he usado dos etiquetas diferentes de dos jugadas diferentes.
$ ansible-playbook -t "set_perm","restart service" banner_mod.yml

También puede usar omitir tareas y ejecutar todas las demás tareas --skip-tags
bandera.
$ ansible-playbook -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml

Aumentar el nivel de detalle
A veces, los libros de jugadas no se comportan de la manera esperada. Esto podría ser algo que sucede en segundo plano o un error diferente.
Para depurar el problema, puede aumentar el nivel de detalle (-v) al ejecutar el libro de jugadas. El nivel de detalle se divide en cuatro niveles.puede ansible.cfg
agregando el atributo «verbosity=
-v
o la variable de entorno ANSIBLE_VERBOSITY.
$ ansible-playbook -vvvv -t "set_perm","restart service" --skip-tags "set_perm" banner_mod.yml # VERBOSE LEVEL SET TO 4(-vvvv)
[OR]
$ 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)

controlar el paralelismo
Cuando ejecuta el libro de jugadas, ansible ejecutará las tareas en lotes. De forma predeterminada, ansible ejecutará una tarea en paralelo en 5 nodos, una vez que se completen todas las tareas en los 5 nodos, pasará al siguiente conjunto de 5 nodos.
Nuevamente, ejecutará una tarea en grupos de 5 hasta que la tarea se complete en todos los nodos, luego pasará a la siguiente tarea y repetirá los mismos pasos.
Puede controlar el grado de paralelismo configurando y estableciendo cuántos nodos deben procesarse en paralelo "tenedor" parámetros en ansible.cfg
documento.
[defaults]
inventory = inventory
host_key_checking = False
forks=20
He fijado el valor de las horquillas en 20. Ahora procesará una tarea en paralelo en 20 nodos. Nuevamente, puede incrementar/disminuir el conteo según sea necesario.
Puede anular el valor establecido en ansible.cfg
vía archivo -f
o --forks
bandera. Cuando ejecuto el siguiente comando, el valor de las horquillas de 20 se sobrescribe con 15.
$ ansible-playbook banner_mod.yml -f 15
En conclusión
En este artículo, aprendimos a 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 los próximos artículos.