Cómo usar el módulo de registro Ansible

Cómo usar el módulo de registro Ansible
En Ansible, puede ejecutar cualquier comando shell en sus hosts ansible, los hosts que configurará con Ansible. Estos comandos de shell pueden tener salidas. Por defecto, la salida se ignora. Si desea almacenar la salida en una variable y usarla más tarde, puede usar el Ansible registro módulo. Este artículo le mostrará cómo usar el Ansible registro Módulo para almacenar la salida del comando en una variable y acceder a ella más tarde en su libro de jugadas Ansible.

Requisitos previos

Si desea probar los ejemplos en este artículo, debe:

1) Haga que Ansible sea instalado en su computadora.

2) Tenga un host Ubuntu configurado para la automatización Ansible.

Hay muchos artículos sobre Linuxhint dedicados a instalar Ansible y configurar hosts para Automatización Ansible. Puede consultar estos artículos si es necesario.

Configuración de un directorio de proyecto

Antes de avanzar más, configure un nuevo directorio de proyectos Ansible, solo para mantener las cosas un poco organizadas.

Para crear el directorio del proyecto Registro-Demo/ y todos los subdirectorios requeridos (en su directorio de trabajo actual), ejecute el siguiente comando:

$ Mkdir -PV Register -Demo/Playbooks

Una vez que se crea el directorio del proyecto, navegue al directorio del proyecto, de la siguiente manera:

$ CD Registro-Demo/

Crear un Hospedadores archivo de inventario, como sigue:

$ nano anfitriones

Agregue el nombre IP o DNS de host de su host Ubuntu en el archivo de inventario (un host por línea), como se muestra en la captura de pantalla a continuación.

Aquí, he agregado mi ubuntu 20.04 anfitrión LTS VM3.notekita.comunicarse en el ubuntu20 grupo.

Una vez que haya terminado, guarde el archivo presionando + X, seguido por Y y .

Crear un archivo de configuración ansible ansible.CFG En su directorio de proyecto, como sigue:

$ nano ansible.CFG

A continuación, escriba las siguientes líneas en el ansible.CFG archivo:

[Valores predeterminados]
inventario = hosts
host_key_checking = falso

Una vez que haya terminado, guarde el ansible.CFG Archivo presionando + X, seguido por Y y .

Ahora, trate de hacer ping a su anfitrión de Ubuntu, de la siguiente manera:

$ ansible ubuntu20 -u ansible -m ping

Como puedes ver, mi ubuntu 20.04 anfitrión VM3.notekita.comunicarse es accesible.

Ejemplo 1: los conceptos básicos

En este ejemplo, te mostraré algunos de los conceptos básicos de la Ansible registro módulo. Usaré Ansible para generar una contraseña aleatoria en mi Ubuntu 20.04 Host usando el pwgen comando, almacene la contraseña en una variable utilizando el registro módulo e imprima la contraseña en la pantalla.

Primero, crea el nuevo libro de jugadas Generar_Pass.yaml en el Libros de jugadas/ Directorio, como sigue:

$ Nano Playbooks/Generate_Pass.yaml

Escriba las siguientes líneas en el Generar_Pass.yaml archivo:

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Asegúrese de que esté instalado PWGEN
apto:
Nombre: PWGen
Estado: presente
update_cache: verdadero
- Nombre: Generar contraseña
Shell: PwGen -n 1 -S 30
Registrarse: MyPass
- Nombre: Imprima la contraseña generada
depurar:
Msg: "La contraseña es mypass"

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el Generar_Pass.yaml archivo.

La siguiente línea le dice a Ansible que ejecute el libro de jugadas Generar_Pass.yaml en cada anfitrión en el ubuntu20 grupo. En mi caso, el libro de jugadas se ejecutará en el anfitrión VM3.notekita.comunicarse.

En este libro de jugadas, definiré tres tareas.

La primera tarea enero se encargará de que el pwgen Se instala el paquete.

La segunda tarea generará una contraseña aleatoria de 30 caracteres utilizando el pwgen dominio. Usaré el registro módulo para almacenar la contraseña generada en el mi pase variable.

La tercera tarea imprimirá el mi pase variable utilizando el ansible depurar módulo.

Ejecutar el libro de jugadas Generar_Pass.yaml Usando el siguiente comando:

$ Ansible-Playbook Playbooks/Generate_Pass.yaml

Como puede ver, el libro de jugadas se ejecutó con éxito. También se ha generado una contraseña.

Pero, ¿por qué la variable mi pase Imprima tantos artículos?

Bueno, la variable mi pase es un objeto que contiene algunas propiedades importantes.

Las propiedades más importantes de cada uno de los registro Las variables son las siguientes:

CMD - El comando que se ejecutó para generar la salida.

stdout - La salida del comando.

stderr - La salida de error del comando.

comenzar - La fecha y la hora en que el comando comenzó a ejecutar.

fin - La fecha y la hora en que el comando terminó de ejecutar.

delta - El tiempo necesario para ejecutar el comando. Esta es la diferencia entre el fin y el comenzar propiedades.

stdout_lines - Una matriz que contiene cada línea de salida del comando. Igual que stdout, pero stdout separa las líneas usando un nuevo (\ n) caracteres en lugar de matrices.

stderr_lines - Una matriz que contiene cada línea de salida de error del comando. Igual que stderr, pero stderr separa las líneas usando caracteres de línea nueva (\ n) en lugar de matrices.

Si solo desea imprimir/acceder a la cadena de contraseña (que es muy probable), puede imprimir/acceder al stdout propiedad del mi pase Variable en su libro de jugadas, como se marca en la captura de pantalla a continuación.

$ Nano Playbooks/Generate_Pass.yaml

Una vez que hayas terminado, ejecute el libro de jugadas Generar_Pass.yaml de nuevo. Solo se imprimirá la cadena de contraseña, como puede ver en la captura de pantalla a continuación.

Que cubre los conceptos básicos del ansible registro módulo.

Ejemplo 2: Contenido del directorio de almacenamiento

En este ejemplo, le mostraré cómo almacenar el contenido de un directorio en una variable utilizando el Ansible registro módulo, así como cómo iterar sobre ellos.

Primero, crea el nuevo libro de jugadas get_dir_contents.yaml en el Libros de jugadas/ directorio.

$ Nano Playbooks/get_dir_contents.yaml

A continuación, escriba las siguientes líneas en el get_dir_contents.yaml Playbook:

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Enumere todos los archivos y directorios en /home /ansible
Shell: LS /Home /Ansible
Registrarse: dir_contents
- Nombre: Imprimir contenido del directorio con bucles
depurar:
Msg: "item"
bucle: "dir_contents.stdout_lines "

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el Generar_Pass.yaml archivo.

En este libro de jugadas, definiré dos tareas.

La primera tarea enumera todo el contenido del /Inicio/Ansible directorio y los almacena en el dir_contents variable.

La segunda tarea imprime el dir_contents variable.

Ejecutar el get_dir_contents.yaml libro de jugadas, como sigue.

$ Ansible-Playbook Playbooks/get_dir_contents.yaml

Como puedes ver, el stdout_lines propiedad almacenó el contenido del directorio como una matriz. El stdout La propiedad también se almacena en el contenido del directorio. Estas propiedades están separadas por los caracteres Newline (\ n). En este ejemplo, el stdout_lines La propiedad es fácil de trabajar con.

A continuación, itere sobre el contenido del directorio usando un bucle.

Para hacer esto, abra el get_dir_contents.yaml Playbook y cambiar la segunda tarea, como se marca en la captura de pantalla a continuación.

$ Nano Playbooks/get_dir_contents.yaml

Aquí, estoy iterando sobre el dir_contents.stdout_lines matriz usando un bucle e imprimiendo los elementos de la matriz usando el ansible depurar módulo. En esta tarea, el artículo La variable es una variable de bucle utilizada para iterar sobre los elementos de la matriz.

Ejecutar el get_dir_contents.yaml Libro de jugadas, como sigue:

$ Ansible-Playbook Playbooks/get_dir_contents.yaml

Como puede ver, el contenido del /Inicio/Ansible El directorio se imprime en la pantalla.

Ejemplo 3: Directorio de respaldo

En este ejemplo, le mostraré cómo hacer una copia de seguridad de un directorio usando el Ansible registro, archivo, y Copiar módulos.

Primero, crea el nuevo libro de jugadas respaldo_home_dir.yaml en el Libros de jugadas/ Directorio, como sigue:

$ Nano Playbooks/Backup_home_dir.yaml

A continuación, escriba las siguientes líneas en el respaldo_home_dir.yaml archivo.

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Get Home Directory /Home /Ansible Contents
Shell: LS /Home /Ansible
Registrarse: dir_contents
- Nombre: crear un nuevo directorio /tmp /ansible
archivo:
ruta: /tmp /ansible
Estado: directorio
- Nombre: Backup Home Directory /Home /Ansible to /TMP /Ansible
Copiar:
src:/home/ansible/item
Dest:/tmp/ansible/
Remote_src: verdadero
bucle: "dir_contents.stdout_lines

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el respaldo_home_dir.yaml archivo.

En este libro de jugadas, definiré tres tareas.

La primera tarea almacena el contenido del /Inicio/Ansible directorio (el directorio que estaré respaldando) en el dir_contents variable utilizando el ansible registro módulo.

La segunda tarea crea un nuevo directorio /tmp/ansible Usando el Ansible archivo módulo. Este es el directorio donde se almacenará la copia de seguridad.

La tercera tarea boops a través del dir_contents.stdout_lines matriz y usa el ansible Copiar módulo para copiar cada directorio al /tmp/ansible/ directorio.

Ejecutar el respaldo_home_dir.yaml Libro de jugadas, como sigue:

$ Ansible-Playbook Playbooks/backup_home_dir.yaml

Como puedes ver, en mi ubuntu 20.04 LTS Host, la copia de seguridad fue exitosa.

Ejemplo 4: Ejecutar o omitir tareas

En este ejemplo, le mostraré cómo ejecutar o omitir tareas, dependiendo de la variable que haya registrado, utilizando el registro módulo.

Primero, crea el nuevo libro de jugadas registro_conditions.yaml en el Libros de jugadas/ Directorio de la siguiente manera:

$ Nano Playbooks/Register_conditions.yaml

A continuación, escriba las siguientes líneas en el registro_conditions.yaml archivo.

- Anfitriones: Ubuntu20
Usuario: Ansible
hecho realidad
tareas:
- Nombre: Lista de contenido del directorio
Shell: LS/Home/Ansible/Test3
Registrarse: dir_contents
- Nombre: Compruebe si el directorio está vacío
depurar:
MSG: "El directorio está vacío."
Cuándo: dir_contents.stdout == ""

Una vez que haya terminado, presione + X, seguido por Y y , Para salvar el registro_conditions.yaml archivo.

En este libro de jugadas, he definido dos tareas.

La primera tarea almacena el contenido del /home/ansible/test3 directorio en el dir_contents variable.

La segunda tarea verifica si dir_contents.stdout es una cadena vacía o si el directorio /home/ansible/test3 esta vacio. Si el directorio está vacío, el mensaje El directorio está vacío imprimirá.

Ejecutar el registro_conditions.yaml Libro de jugadas, como sigue:

$ Ansible-Playbook Playbooks/Register_conditions.yaml

Como puede ver, el libro de jugadas se ejecutó con éxito.

Desde el directorio /home/ansible/test3 está vacío, el libro de jugadas imprimió el mensaje El directorio está vacío.

A continuación, cree un nuevo archivo en el /home/ansible/test3 directorio.

$ touch test3/myfile

Desde el /home/ansible/test3 El directorio ya no está vacío, la tarea Compruebe si el directorio está vacío se omite, como puede ver en la captura de pantalla a continuación.

$ Ansible-Playbook Playbooks/Register_conditions.yaml

Conclusión

El ansible registro El módulo es muy útil para la automatización del servidor. Este artículo te mostró los conceptos básicos del registro módulo, incluidos ejemplos de uso de la ansible registro Módulo para el almacenamiento y copia de seguridad del directorio, y para la ejecución de tareas de directorio.