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.
PLAY [Modify banner message] *
TASK [Gathering Facts] *
ok: [managed2]
TASK [Remove Execute Permission from /etc/update-motd.d/*] ******************************************************************************************* changed: [managed2] TASK [ADD BANNER MESSAGE] **************************************************************************************************************************** changed: [managed2]
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.