Cómo crear jugadas y libros de jugadas ansibles - Parte 5

Cómo crear jugadas y libros de jugadas ansibles - Parte 5

En esto Parte 5 de la serie Ansible, explicaremos cómo crear Ansible Plays y Libros de jugadas Usando módulos Ansible.

Ansible barcos con guiones independientes llamados módulos que se usan en libros de jugadas Para la ejecución de tareas especializadas en nodos remotos.

Módulos sea ​​útil para automatizar tareas como administración de paquetes, archivar y copiar archivos para mencionar solo unos pocos. Le permiten hacer ajustes en los archivos de configuración y administrar dispositivos como enrutadores, conmutadores, equilibradores de carga, firewalls y una gran cantidad de otros dispositivos.

El objetivo de este subtópico es darle una visión general de varias tareas que se pueden realizar por Módulos ansibles:

Gestión de paquetes en Linux

La gestión de paquetes es una de las tareas más esenciales y frecuentes que llevan a cabo los administradores de sistemas. Envíe ansible con módulos que lo ayudan a ejecutar tareas de administración de paquetes tanto en Sombrero rojo y Debian sistemas basados.

Son relativamente fáciles de adivinar. Ahí está el módulo apto Para la gestión de paquetes apt para Debian con sede, The Old módulo yum para la gestión de paquetes yum y módulo DNF asociado con las nuevas distribuciones de RHEL.

A continuación se presentan algunos ejemplos de cómo se pueden usar los módulos en un libro de jugadas:

Ejemplo 1: Instalación del servidor web de Apache en RHEL 8

--- - Nombre: Instale Apache WebServer Hosts: WebServers Tareas: - Nombre: Instalar httpd DNF: Nombre: Httpd Estado: Último 

Ejemplo 2: Instalación del servidor web de Apache en Debian 10

--- - Nombre: Instale Apache WebServer Hosts: Tareas de bases de datos: - Nombre: Instalar Apache WebServer APT: Nombre: Apache2 Estado: Último 

Módulo de servicio

El módulo de servicio permite a los administradores del sistema iniciar, detener, actualizar, actualizar y recargar servicios en el sistema.

Ejemplo 1: Iniciar el servidor web de Apache

--- - Nombre: Servicio de inicio httpd, si no se inicia el servicio: nombre: httpd estado: iniciado 

Ejemplo 2: Detener el servidor web de Apache

--- - Nombre: Servicio de detención Httpd Servicio: Nombre: Httpd Estado: Detenido 

Ejemplo 3: Reiniciar una interfaz de red ENP2S0

--- - Nombre: Reiniciar el servicio de red para la interfaz ETH0 Servicio: Nombre: Estado de la red: reiniciado Args: ENP2S0 

Módulo de copia

Como su nombre indica, copie los archivos de copias del módulo de una ubicación en la máquina remota a una ubicación diferente en la misma máquina.

Ejemplo 1: Copiar archivos de Linux local a remoto

--- - Nombre: Copie el archivo con el propietario y los permisos Copiar: src:/etc/files/tecMint.conf Dest: /srv /tecmint.Conf Propietario: Tecmint Group: Tecmint Mode: '0644' 

El libro de jugadas copia el archivo de configuración tecmenta.confusión de /etc/archivos/ directorio /SRV/ directorio como tecmenta usuario 0644 permisos.

Los permisos también se pueden representar utilizando la representación simbólica como se muestra en la última línea.

Ejemplo 2: Copiar archivos de Linux local a remoto

--- - Nombre: Copie el archivo con el propietario y los permisos Copiar: src:/etc/files/tecMint.conf Dest: /srv /tecmint.Conf Propietario: Tecmint Group: Tecmint Mode: U = RW, G = R, O = R 

Los permisos en el ejemplo anterior se pueden representar como se muestra en la última línea, se asigna al usuario leer y escribir Permisos, al grupo se les asigna permisos de escritura, y al resto del mundo se les asigna permisos de lectura.

Módulo de archivo

El módulo de archivo se utiliza para llevar muchas operaciones de archivos, incluida la creación de archivos y directorios, asignar permisos de archivos y configurar enlaces simbólicos.

Ejemplo 1: Realizar permisos de archivos de Linux

--- - Nombre: Cambiar la propiedad del archivo, el grupo y el archivo de permisos: ruta: /etc /tecMint.Conf Propietario: Tecmint Group: Tecmint Mode: '0644' 

El juego anterior crea un archivo llamado tecmenta.confusión en el /etc permisos de configuración de directorio para 0644.

Ejemplo 2: Eliminar el archivo Linux

--- - Nombre: Eliminar archivo (eliminar archivo) archivo: ruta: /etc /tecMint.Estado de confirmación: ausente 

Esto elimina o elimina el archivo tecmenta.confusión.

Ejemplo 3: crear un directorio

--- - Nombre: Cree un directorio si no existe Archivo: ruta: /etc /myDirectory State: Directorio Modo: '0777' 

Esto creará un directorio en el /etc permisos de configuración de directorio para 0777.

Ejemplo 4: Eliminar recursamente un directorio

--- - Nombre: Eliminar recursivamente un archivo de directorio: ruta: /etc /tecMint.Estado de confirmación: ausente 

El juego anterior elimina recursivamente un directorio.

Módulo lineInfile

El lineinfile El módulo es útil cuando desea cambiar una sola línea en un archivo. Puede reemplazar una línea existente.

Ejemplo 1: Manipular archivos en Linux

--- - Nombre: Asegúrese de que Selinux esté configurado para hacer cumplir el modo LineInfile: ruta:/etc/selinux/config regexp: '^selinux =' line: selinux = discapacitado 

La juego anterior se establece Selinux valor a desactivado.

Selinux = discapacitado 

Ejemplo 2: Alterar archivos en Linux

--- - Nombre: Agregue una línea a un archivo si el archivo no existe, sin pasar regexp lineInfile: ruta: /etc /hosts Línea: 10.200.50.51 Tecmint.com Crear: si 

Esto agrega la entrada 10.200.50.51 tecmenta.comunicarse hacia /etc/huéspedes archivo.

Módulo de archivo

Un Archivo El módulo se utiliza para la creación de un archivo comprimido de un solo o múltiples archivos. Se supone que la fuente de compresión existe en el destino de destino. Después del archivo, el archivo de origen se puede eliminar o eliminar más tarde utilizando la declaración eliminar = verdadero.

Ejemplo 1: crear un archivo de archivo

- Nombre: Directorio de compresión/ruta/a/tecmint_dir/into/path/to/tecMint.Archivo TGZ: ruta:/ruta/a/tecmint_dir des:/rath/to/tecMint.TGZ Esto comprime el directorio/ruta/a/tecMint_dir a/rath/to/tecMint.tgz 

Ejemplo 2: crear un archivo de archivo y eliminar

- Nombre: comprimir archivo/ruta regular/a/tecmint en/rath/to/foo.GZ y eliminarlo Archivo: ruta:/ruta/to/tecmint Dest:/rath/to/tecMint.TGZ eliminar: si 

En la reproducción anterior, el archivo fuente /Path/To/TecMint se elimina después de que se completa el archivo.

Ejemplo 3: crear un archivo de archivo

- Nombre: Cree un archivo BZ2 de/ruta/to/tecmint Archive: ruta:/ruta/to/tecMint Format: BZ2 

Esto crea un archivo comprimido en bz2 formato del /Path/To/TecMint archivo.

Módulo git

El módulo gestiona los controles de repositorios de software.

Ejemplo 1: Compruebe los reposterios de Git

- Git: Repo: 'https: // Foosball.ejemplo.org/Path/to/Repo.Git 'Dest: /SRV /Versión de pago: Release-0.22 

Módulo de mando

Uno de los módulos más utilizados, el dominio El módulo toma el nombre del comando y luego seguido de una lista de argumentos. El comando es una pasada de la misma manera que escribiría en un shell de Linux.

Ejemplo 1: ejecute un comando

- Nombre: Ejecución de un comando Uso del comando Módulo de comando: Cat Helloworld.TXT 

Ejemplo 2: tiempo de excursión de Linux remoto

--- - Nombre: Verifique el host remoto Host del tiempo de actividad: Tareas de los servidores: - Nombre: Ejecutar el comando de tiempo de condición a través del módulo de comando Registro: Comando de tiempo de actividad: "Tiempo de actividad" - Debug: Var: InstimeOutput.stdout_lines 

El módulo de comando recupera el tiempo de actividad de los servidores remotos.

Variables para recuperar los resultados de los comandos en ejecución

Generalmente, Ansible Los libros de jugadas se utilizan para ejecutar tareas en hosts administrados sin mostrar la salida en la línea de comandos. Sin embargo, hay instancias que puede ser necesario para capturar la salida o los resultados. En esta sección, lo guiamos a través de cómo puede capturar la salida de un libro de jugadas en una variable y luego mostrarlo.

Se utiliza un registro Ansible para capturar la salida de una tarea y guardarla una variable. Posteriormente, la variable contendrá el stdout de la tarea.

Por ejemplo, supongamos que desea verificar el uso del disco de los nodos administrados en respectivos directorios raíz utilizando el df -th / dominio. Vas a usar el 'dominio' módulo para definir el comando y 'registro' Para guardar la salida STD en una variable.

Para mostrar el comando, usará el 'depurar' módulo junto con el valor de retorno de stdout.

--- - Hosts: Todos se convierten en: Sí Tareas: - Nombre: Ejecutar /Boot Uso en el comando Hosts: 'Df -th /' Registro: DF - Debug: var = DF.stdout 

Ahora, ejecutemos el libro de jugadas. En este caso, hemos nombrado nuestro libro de jugadas check_disk_space.YML.

# ansible-playbook check_disk_space.YML 
Verifique el uso del disco de los nodos administrados Ansible

Como has visto, la salida está confundida y hace que sea difícil seguir.

Para alinear la salida y facilitar la lectura, reemplace el stdout Valor de devolución con stdout_lines.

--- - Hosts: Todos se convierten en: Sí Tareas: - Nombre: Ejecutar /Boot Uso en el comando Hosts: 'Df -th /' Registro: DF - Debug: var = DF.stdout_lines 

Usar condicionales para controlar la ejecución del juego

Al igual que en los lenguajes de programación, declaraciones condicionales se usan cuando es posible más de un resultado. Echemos un vistazo a algunas de las declaraciones condicionales comúnmente utilizadas en Ansible Playbooks.

Declaración

A veces, es posible que desee realizar tareas en nodos específicos y no en otros. El 'cuando' La declaración condicional es bastante fácil de usar e implementar en un libro de jugadas. Al usar el 'cuando' cláusula simplemente declare la condición adyacente a la cláusula como se muestra:

Cuándo: condición 

Cuando se satisface la condición, la tarea se realiza en el sistema remoto.

Veamos algunos ejemplos:

Ejemplo 1: Usando cuando el operador

--- - Hosts: Todas las tareas: - Nombre: Instale Nginx en Debian Apt: name = Nginx State = presente cuando: ansible_os_family == "Debian" 

La jugada anterior se instala Nginx WebServer en anfitriones que ejecutan la familia de Distros de Debian.

También puedes usar el O y Y operador junto con la declaración condicional.

Ejemplo 2: Uso y operador con cuándo

--- - Hosts: Todas las tareas: - Nombre: Instale Nginx en Debian Apt: name = Nginx State = presente cuando: ansible_os_family == "Debian" y ansible_distribution_version == "18.04 " 

Al usar el Y operador, ambas declaraciones deben estar satisfechas para la tarea que se ejecuta.

La juego anterior instala Nginx en nodos que ejecutan una familia de OS Debian que es la versión 18.04. Obviamente, este será Ubuntu 18.04.

Ejemplo 3: Uso o operador con cuándo

Con O operador, la tarea se ejecuta si se cumple alguna de las condiciones.

--- - Hosts: Todas las tareas: - Nombre: Instale Nginx en Debian Apt: name = Nginx State = presente cuando: ansible_os_family == "Debian" o ansible_os_family == "Suse" 

La obra anterior instala Nginx Webservers en Debian o Suse Family of OS o ambos de ellos.

NOTA: Siempre asegúrese de usar el signo de doble igualdad == Al probar una condición.

Condicionales en bucles

Los condicionales también se pueden usar en un bucle. Digamos que, por ejemplo, tiene una lista de múltiples paquetes que deben instalarse en nodos remotos.

En el libro de jugadas a continuación, tenemos una matriz llamada paquetes que contiene una lista de paquetes que deben instalarse. Estas tareas se llevarán a cabo una tras otra si la requerido La cláusula se establece en Verdadero.

--- - Nombre: Instalar PAQUETES DE SOFTWARE Hosts: Todos los Vars: Packages: • Nombre: Nginx Requerido: Verdadero • Nombre: MySQL Requerido: Verdadero • Nombre: Apache Requerido: Tareas falsas: • Nombre: Instalar “elemento.nombre "en Debian apt: nombre:" item.Nombre "Estado: presente cuándo: elemento.requerido == verdadero bucle: "paquetes" 

Configurar el manejo de errores

A veces, las tareas fallan al ejecutar libros de jugadas. Supongamos que está ejecutando 5 tareas en 3 servidores como se muestra en el libro de jugadas a continuación. Si se produce un error en la Tarea 3 (iniciar MySQL) en el servidor 2, Ansible dejará de ejecutar las tareas restantes en el servidor 2 e intentará completar las tareas restantes en el resto de los servidores.

--- - Nombre: Instalar paquetes de software Hosts: Server1, Server2, Server3 Tareas: - Nombre: Instalar dependencias <> - Nombre: Instale la base de datos MySQL <> - Nombre: Inicie MySQL <> - Nombre: instalar nginx <> - Nombre: Inicio Nginx <> 

Si desea consistencia en la ejecución del libro de jugadas, por ejemplo, detenga la ejecución de un libro de jugadas, si uno de los servidores falla, agregue la opción.

--- - Nombre: Instalar paquetes de software Hosts: Server1, Server2, Server3 any_errors_fatal: verdadero tareas: 

De esta manera, si una tarea falla en un servidor, Ansible detendrá la ejecución de todo el libro de jugadas en todos los servidores y salida.

Si desea que el libro de jugadas ignore los errores y proceda a ejecutar el conjunto restante de tareas, use el ignore_errors: opción verdadera.

--- - Nombre: Instalar paquetes de software Hosts: Server1, Server2, Server3 Tareas: - Nombre: Instalar dependencias <>  ignorar_errors: verdadero 

Crear libros de jugadas para configurar sistemas en un estado específico

En esta sección, observamos algunas opciones adicionales que están disponibles al ejecutar un libro de jugadas.

Comencemos con el Controlar modo o Carrera seca opción. La opción de modo de ejecución seca o de verificación se usa al ejecutar un libro de jugadas para verificar si se encontrarán errores y si hay algún cambio que se realizará en los hosts administrados. Sin embargo, no realiza ningún cambio en los nodos remotos.

Por ejemplo, para ejecutar un libro de jugadas llamado httpd.YML que instala e inicia la ejecución de Apache Webserver:

# Ansible-Playbook httpd.YML -CHECK 
Dry corre un libro de jugadas ansible

La otra opción que debemos mirar es el --inicio de la tarea opción. Esto se usa al especificar el nombre de la tarea en la que debe comenzar o comenzar el libro de jugadas.

Tomemos un ejemplo: el siguiente libro de jugadas explica 2 tareas: la primera jugada instala el servidor web Apache y el segundo instala la utilidad HTOP.

--- - Nombre: instalar httpd hosts: todas las tareas: yum: nombre: httpd estado: instalado - nombre: install htop yum: nombre: estado de htop: iniciado 

Si desea omitir la instalación de Apache Webserver y, en su lugar, instalar Utilidad HTOP Ejecutar:

# Libro de jugadas Ansible-Playbook.YML --S-STArt-at-Task "Instalar htop" 
Instalar paquetes con Ansible Playbook

Por último, puede etiquetar sus tareas o jugadas agregando el etiquetas opción a su libro de jugadas como se muestra. Esto es útil cuando tienes un libro de jugadas bastante grande y quieres ejecutar tareas específicas de todo el libro de jugadas.

--- - Nombre: instalar httpd Etiquetas: instalar y comenzar Hosts: Todas las tareas: yum: nombre: httpd estado: instalado Etiquetas: instalar • Servicio: Nombre: Estado HTTPD: Comenzada 
# Libro de jugadas Ansible-Playbook.yml -Tags "instalar" 

Para omitir las etiquetas, use el --etiquetas de salto Opciones como se muestra.

# Libro de jugadas Ansible-Playbook.YML--Skip-Tags "Instalar" 
Conclusión

En este tema, lo llevamos a través de los módulos de uso común en Ansible, Cómo recuperar Stdout de la ejecución de un libro de jugadas para el análisis, utilizando condicionales en el libro de jugadas y cómo administrar errores que pueden ocurrir al ejecutar tareas. Por último, resumimos la configuración de los libros de jugadas y cómo puede usar opciones adicionales para decidir qué tareas ejecutar si no tiene la intención de ejecutar todo el libro de jugadas.