Cómo crear obras de teatro y libros de jugadas de Ansible-Parte 5

Cómo crear obras de teatro y libros de jugadas de Ansible-Parte 5

En esta Parte 5. de Ansible Series, explicaremos cómo crear Ansible Plays. y Playbooks. usando módulos de Ansible.

Ansible. se envía con scripts independientes llamados módulos. que se utilizan en libros de jugadas. para la ejecución de tareas especializadas en nodos remotos.

Los módulos. son útiles para automatizar tareas como la administración de paquetes, el archivo y la copia de archivos, por mencionar solo algunos. Le permiten realizar ajustes en los archivos de configuración y administrar dispositivos como enrutadores, conmutadores, equilibradores de carga, cortafuegos y una gran cantidad de otros dispositivos.

El objetivo de este subtema es brindarle una descripción general de varias tareas que se puede lograr con los módulos Ansible.

Administración de paquetes en Linux

La administración de paquetes es una de las tareas más esenciales y frecuentes que realizan los administradores de sistemas. Ansible se envía con módulos que lo ayudan a ejecutar tareas de administración de paquetes en sistemas basados ​​en RedHat. y Debian.

freestar.config.enabled_slots.push (LocationName: “tecmint_incontent “, slotId:” tecmint_incontent “);

Son relativamente fáciles de adivinar. Existe el módulo apt. para la administración de paquetes APT para Debian, el antiguo módulo yum. para la administración de paquetes YUM y el módulo dnf. asociado con las distribuciones RHEL más nuevas. .

A continuación se muestran algunos ejemplos de cómo se pueden usar los módulos en un manual de estrategias.

Ejemplo 1: Instalación del servidor web Apache en RHEL 8—-nombre : instalar hosts del servidor web Apache: tareas del servidor web:-nombre: instalar httpd dnf: nombre: httpd Estado: último Ejemplo 2: instalar el servidor web Apache en Debian 10—-nombre: instalar hosts del servidor web Apache: tareas de bases de datos:-nombre: instalar Servidor web Apache 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: Iniciando el servidor web Apache—-nombre: Iniciar el servicio httpd, si no se inició servicio: nombre: estado httpd: iniciado Ejemplo 2: Detención del servidor web Apache—-nombre: Detención del servicio servicio httpd: nombre: estado httpd: detenido Ejemplo 3: Reinicio de una interfaz de red enp2s0—-nombre: Reinicio de la red servicio para interfaz eth0 servicio: nombre: estado de red: reiniciado args: enp2s0

Copiar módulo

Como su nombre indica, el módulo de copia copia archivos desde 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: Copiar archivo con propietario y permisos copy: src:/etc/files/tecmint.conf dest:/srv/tecmint.conf owner: grupo tecmint: modo tecmint: ‘0644’

El libro de jugadas copia el archivo de configuración tecmint.conf. del directorio /etc/files/ a /srv/ como usuario tecmint. con permisos 0644.

Permisos c y también se representará usando una representación simbólica como se muestra en la última línea.

Ejemplo 2: Copiar archivos de Linux local a remoto—-nombre: Copiar archivo con propietario y permisos copy: src:/etc/files/tecmint .conf dest:/srv/tecmint.conf propietario: grupo tecmint: modo tecmint: u = rw, g = r, o = r

Los permisos del ejemplo anterior se pueden representar como se muestra en la última línea, El usuario se le asignan permisos de lectura. y escritura. al grupo se le asignan permisos de escritura y al resto del mundo se le asignan permisos de lectura.

Módulo de archivo

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

Ejemplo 1: Ejecutar permisos de archivo de Linux—-nombre: Cambiar la propiedad del archivo, el grupo y los permisos archivo: ruta:/etc/tecmint.conf propietario: grupo tecmint: modo tecmint: ‘0644’

Lo anterior play crea un archivo llamado tecmint.conf. en el directorio /etc. configurando los permisos en 0644.

Ejemplo 2: Eliminar archivo de Linux—nombre: Eliminar archivo (eliminar archivo) archivo: ruta:/etc/tecmint.conf estado: ausente

Esto elimina o elimina el archivo tecmint.conf.

Ejemplo 3 : Crear un directorio—-nombre: crear un directorio si no existe archivo: ruta:/etc/mydirectory Estado: modo de directorio: ‘0777’

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

Ejemplo 4: Eliminar un directorio de forma recurrente—-nombre: Eliminar un archivo de directorio de forma recursiva: ruta:/etc/tecmint.conf estado: ausente

La reproducción anterior elimina un directorio de forma recursiva.

Módulo Lineinfile

El módulo lineinfile. 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 en el modo de ejecución lineinfile: ruta:/etc/selinux/config regexp: ‘^ SELINUX =’ línea: SELINUX = desactivado

La reproducción anterior establece el valor de SELINUX. en desactivado.

SELINUX = desactivado Ejemplo 2: Alterar archivos en Linux—-nombre: Agregar 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 create: yes

Esto agrega la entrada 10.200.50.51. tecmint.com. al archivo /etc/hosts.

Módulo de archivo

Un Archivo. módulo se utiliza para la creación de un archivo comprimido de uno o varios archivos. Se asume que la fuente de compresión que existe está presente en el destino de destino. Después del archivo, el archivo de origen se puede eliminar o eliminar más tarde usando la declaración remove = True.

Ejemplo 1: Crear un archivo de almacenamiento-nombre: Comprimir directorio/ruta/a/tecmint_dir/en/ruta/a/tecmint. tgz archive: path:/path/to/tecmint_dir dest:/path/to/tecmint.tgz Esto comprime el directorio/path/to/tecmint_dir en/path/to/tecmint.tgz Ejemplo 2: Crear un archivo de almacenamiento y eliminarlo-name: Comprima el archivo normal/ruta/a/tecmint en/path/to/foo.gz y elimínelo archive: ruta:/ruta/a/tecmint dest:/path/to/tecmint.tgz eliminar: sí

En la reproducción anterior, el archivo de origen /ruta/a/tecmint. se elimina una vez que se completa el archivo.

Ejemplo 3: Crear un archivo de almacenamiento-nombre: crear un archivo bz2 de/ruta/a/archivo tecmint: ruta:/ruta/a/formato tecmint: bz2

Esto crea un archivo comprimido en formato bz2. desde el archivo /ruta/a/tecmint. .

Módulo Git

El módulo de administración es git comprobaciones de repositorios de software.

Ejemplo 1: Comprobar repositorios de Git-git: repo: ‘https://foosball.example.org/path/to/repo.git’ dest:/srv/checkout version: release-0.22

Módulo de comando

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

Ejemplo 1: Ejecutar un comando-nombre: Ejecutar un comando usando el comando del módulo de comando: cat helloworld.txt Ejemplo 2: Verificar el tiempo de actividad de Remote Linux—-nombre: Verifique el tiempo de actividad del host remoto hosts: tareas del servidor:-nombre: Ejecute el comando Uptime sobre el módulo de comando register: uptimeoutput command: “uptime”-debug: var: uptimeoutput.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

Por lo general, los libros de jugadas Ansible. se utilizan para ejecutar tareas en hosts administrados sin mostrar la salida en la línea de comando. Sin embargo, hay casos en los que es posible que deba 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 mostrarla.

Un registro ansible se usa para capturar la salida de una tarea y guardarla como variable. A partir de entonces, la variable contendrá la salida estándar de la tarea.

Por ejemplo, supongamos que desea verificar el uso del disco de los nodos administrados en los respectivos directorios raíz usando el comando df-Th/. Vas a usar el módulo ‘comando’ para definir el comando y ‘registrar’ para guardar la salida estándar en una variable.

Para mostrar el comando, usarás el módulo ‘depuración’ junto con la salida estándar valor de retorno.

—-hosts: todos se vuelven: sí tareas:-nombre: Ejecutar/uso de arranque en hosts comando: ‘df-Th/’ registro: df-debug: var = df.stdout

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

# ansible-playbook check_disk_space.yml  comprobar el uso del disco de los nodos gestionados de Ansible  comprobar el uso del disco de los nodos administrados de Ansible comprobar el uso del disco de los nodos administrados de Ansible

Como ha visto, la salida está desordenada y dificulta su seguimiento.

Para alinear la salida y facilitar su lectura, reemplace stdout. valor de retorno con stdout_lines.

—-hosts: todos se convierten en: sí tareas:-nombre: Ejecutar/uso de arranque en hosts comando: ‘df-Th/’ registro: df-depurar : var = df.stdout_lines

Utilice condicionales para controlar la ejecución de la reproducción

Al igual que en los lenguajes de programación, las sentencias condicionales. se utilizan cuando es posible más de un resultado. Echemos un vistazo a algunas de las declaraciones condicionales de uso común en los libros de jugadas de Ansible.

Declaración de cuándo

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

when: condition

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

Veamos algunos ejemplos:

Ejemplo 1: Usar el operador When—-hosts: todas las tareas:-nombre: instalar Nginx en Debian apt: name = nginx state = present when: ansible_os_family == “Debian”

El juego anterior instala el servidor web Nginx. en hosts que ejecutan la familia de distribuciones Debian.

También puede usar el operador OR y AND junto con la instrucción condicional when.

Ejemplo 2: Usar el operador AND con When—-hosts: todas las tareas:-nombre: Instalar Nginx en Debian apt: name = nginx state = present when: ansible_os_family == “Debian” y ansible_distribution_version == “18.04”

Cuando se usa el operador AND, ambas declaraciones deben cumplirse para que se ejecute la tarea.

El juego anterior instala Nginx en No des ejecutando una familia de sistemas operativos Debian que es la versión 18.04. Obviamente, será Ubuntu 18.04.

Ejemplo 3: Uso del operador OR con When

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

—-hosts: all tareas:-nombre: Instalar Nginx en Debian apt: name = nginx state = present when: ansible_os_family == “Debian” o Ansible_os_family == “SUSE”

La obra anterior instala servidores web Nginx en Debian o en la familia de sistemas operativos SUSE o ambos.

NOTA. Siempre asegúrese de usar el signo de doble igualdad == cuando pruebe una condición.

Condicionales en bucles

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

En el manual de estrategias a continuación, tenemos una matriz llamada paquetes. que contiene una lista de paquetes que necesita ser instalado. Estas tareas se llevarán a cabo una tras otra si la cláusula required. se establece en True.

—-nombre: instalar paquetes de software hosts: todas las vars : paquetes: • nombre: nginx requerido: verdadero • nombre: mysql requerido: verdadero • nombre: apache requerido: falso tareas: • nombre: Instale “item.name” en Debian apt: name: “item. name ”state: present When: item.required == True loop:“ packages ”

Configurar el manejo de errores

A veces, las tareas fallan cuando se ejecutan playbooks. Supongamos que está ejecutando 5 tareas en 3 servidores, como se muestra en el manual a continuación. Si ocurre 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: servidor1, servidor2, servidor3 tareas:-nombre: instalar dependencias <>-nombre: instalar la base de datos MySQL <>-nombre: iniciar MySQL <>-nombre: Instalar Nginx <>-nombre: Iniciar Nginx <>

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

—-nombre: Instalar paquetes de software hosts: servidor1, servidor2, servidor3 any_errors_fatal: true. 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 saldrá.

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

—-nombre: Instalar paquetes de software hosts: servidor1, servidor2, servidor3 tareas:-nombre: Instalar dependencias <> ignore_errors: True.

Crear guías para configurar sistemas en un estado específico

En esta sección, analizamos algunas opciones adicionales que están disponibles cuando se ejecuta un libro de jugadas.

Comencemos con el modo Verificar. o la opción Ejecución en seco. La opción de ejecución en seco o modo de verificación se usa cuando se ejecuta un libro de jugadas para verificar si se encontrarán errores y si se realizarán cambios en los hosts administrados. Sin embargo, no realiza ningún cambio en los nodos remotos.

Por ejemplo, para ejecutar en seco un libro de jugadas llamado httpd.yml que instala e inicia el servidor web Apache, ejecute:

# ansible-playbook httpd.yml–check  ejecución en seco un libro de jugadas de Ansible  ejecutar en seco un libro de jugadas de Ansible ejecutar en seco un libro de jugadas de Ansible

La otra opción que debemos mirar es la opción–start-at-task. Esto se usa cuando se especifica el nombre de la tarea en la que el libro de jugadas debe comenzar o comenzar.

Tomemos un ejemplo: el libro de jugadas a continuación detalla 2 tareas: la primera obra instala el servidor web Apache y la segunda instala utilidad htop.

—-nombre: Instalar hosts httpd: todas las tareas: yum: nombre: estado httpd: Instalado-nombre: Instalar htop yum: nombre: estado htop: iniciado

Si desea omitir la instalación Servidor web Apache y en su lugar instale la utilidad htop ejecute:

# ansible-playbook playbook.yml–start-at-task “Install htop”  Instalar paquetes usando Ansible Playbook  Instalar paquetes usando Ansible Playbook Instala paquetes usando Ansible Playbook

Por último, puedes etiquetar tus tareas o jugadas agregando la opción etiquetas. a tu playbook como se muestra. Esto resulta útil cuando tiene un libro de jugadas bastante grande y desea ejecutar tareas específicas de todo el libro de jugadas.