Tutoriales

Manual de Ansible – OSTechNix

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

Definición de juego

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.
Libro de jugadas - Misión
Libro de jugadas – Misión

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]
Estado predeterminado: nodo Managed2
Estado predeterminado: nodo Managed2

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

$ ansible-playbook    # SYNTAX
$ ansible-playbook banner_mod.yml
Salida de reproducción
Salida de reproducción

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.

Resultados de la validación
Resultados de la validación

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
Deshabilitar la recopilación de hechos
Deshabilitar la recopilación de hechos

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.

Datos de recopilación deshabilitados - Salida
Datos de recopilación deshabilitados – Salida

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.

Definición multijugador
Definición multijugador

- 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
realizar reproducción múltiple
realizar reproducción múltiple

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
revisión gramatical del guión
revisión gramatical del guión

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
Solicitud de confirmación
Solicitud de confirmación

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"
Ejecutar desde una tarea específica
Ejecutar desde una tarea específica

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.

Etiqueta
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
Lista de tareas y etiquetas
Lista de tareas y etiquetas

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
Ejecutar tareas basadas en etiquetas
Ejecutar tareas basadas en etiquetas

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
Omitir tareas basadas en etiquetas
Omitir tareas basadas en etiquetas

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=" o desde el uso de la terminal -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)
salida detallada
salida detallada

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.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Botón volver arriba