Prerrequisitos
Si desea probar los ejemplos de este artículo, debe:
1) Tenga Ansible instalado en su computadora.
2) Tener un host Ubuntu configurado para la automatización de Ansible.
Hay muchos artículos sobre dedicados a instalar Ansible y configurar hosts para la automatización de Ansible. Puede consultar estos artículos si es necesario.
Configurar un directorio de proyectos
Antes de continuar, configure un nuevo directorio de proyectos de Ansible, solo para mantener las cosas un poco organizadas.
Para crear el directorio del proyecto register-demo / y todos los subdirectorios necesarios (en su directorio de trabajo actual), ejecute el siguiente comando:
Una vez que se crea el directorio del proyecto, navegue hasta el directorio del proyecto, de la siguiente manera:
Cree un archivo de inventario de hosts , de la siguiente manera:
Agregue la IP del host o el nombre DNS 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 host Ubuntu 20.04 LTS vm3.nodekite.com en el grupo ubuntu20 .
Una vez que haya terminado, guarde el archivo presionando <Ctrl> + X , seguido de Y e <Enter> .
Cree un archivo de configuración Ansible ansible.cfg en el directorio de su proyecto, de la siguiente manera:
A continuación, escriba las siguientes líneas en el archivo ansible.cfg :
inventory = hosts
host_key_checking = False
Una vez que haya terminado, guarde el archivo ansible.cfg presionando <Ctrl> + X , seguido de Y e <Enter> .
Ahora, intente hacer ping a su host de Ubuntu, de la siguiente manera:
Como puede ver, mi host Ubuntu 20.04 vm3.nodekite.com es accesible.
Ejemplo 1: Conceptos básicos
En este ejemplo, le mostraré algunos de los conceptos básicos del módulo de registro de Ansible . Usaré Ansible para generar una contraseña aleatoria en mi host Ubuntu 20.04 usando el comando pwgen , almacenaré la contraseña en una variable usando el módulo de registro e imprimiré la contraseña en la pantalla.
Primero, cree el nuevo playbook generate_pass.yaml en el directorio playbooks / , de la siguiente manera:
Escriba las siguientes líneas en el archivo generate_pass.yaml :
user: ansible
become: True
tasks:
– name: Ensure pwgen is installed
apt:
name: pwgen
state: present
update_cache: True
– name: Generate password
shell: pwgen -N 1 -s 30
register: mypass
– name: Print the generated password
debug:
msg: “The password is {{ mypass }}”
Una vez que haya terminado, presione <Ctrl> + X , seguido de Y e <Enter> , para guardar el archivo generate_pass.yaml .
La siguiente línea le dice a Ansible que ejecute el libro de jugadas generate_pass.yaml en cada host del grupo ubuntu20 . En mi caso, el libro de jugadas se ejecutará en el host vm3.nodekite.com .
En este manual de estrategias, definiré tres tareas.
La primera tarea asegurará que el paquete pwgen esté instalado.
La segunda tarea generará una contraseña aleatoria de 30 caracteres mediante el comando pwgen . Usaré el módulo de registro para almacenar la contraseña generada en la variable mypass .
La tercera tarea imprimirá la variable mypass utilizando el módulo de depuración de Ansible .
Ejecute el libro de jugadas generate_pass.yaml con el siguiente comando:
Como puede ver, el libro de jugadas se ejecutó correctamente. También se ha generado una contraseña.
Pero, ¿por qué la variable mypass imprimió tantos elementos?
Bueno, la variable mypass es un objeto que contiene algunas propiedades importantes.
Las propiedades más importantes de cada una de las variables de registro 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.
inicio : la fecha y hora en que el comando comenzó a ejecutarse.
end : la fecha y hora en que el comando terminó de ejecutarse.
delta : el tiempo necesario para ejecutar el comando. Ésta es la diferencia entre las propiedades finales y iniciales .
stdout_lines : una matriz que contiene cada línea de salida del comando. Igual que stdout , pero stdout separa las líneas usando caracteres de nueva línea ( n) 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 nueva línea ( n) en lugar de matrices.
Si solo desea imprimir / acceder a la cadena de contraseña (lo cual es muy probable), puede imprimir / acceder a la propiedad stdout de la variable mypass en su libro de jugadas, como se indica en la captura de pantalla a continuación.
Una vez que haya terminado, ejecute el libro de jugadas generate_pass.yaml nuevamente. Solo se imprimirá la cadena de contraseña, como puede ver en la captura de pantalla a continuación.
Eso cubre los conceptos básicos del módulo de registro de Ansible .
Ejemplo 2: contenido del directorio de tiendas
En este ejemplo, le mostraré cómo almacenar el contenido de un directorio en una variable usando el módulo de registro de Ansible , así como también cómo iterar sobre ellos.
Primero, cree el nuevo libro de jugadas get_dir_contents.yaml en el directorio playbooks / .
A continuación, escriba las siguientes líneas en el libro de jugadas get_dir_contents.yaml :
user: ansible
become: True
tasks:
– name: List all files and directories in /home/ansible
shell: ls /home/ansible
register: dir_contents
– name: Print directory contents using loops
debug:
msg: “{{ item }}”
loop: “{{ dir_contents.stdout_lines }}”
Una vez que haya terminado, presione <Ctrl> + X , seguido de Y e <Enter> , para guardar el archivo generate_pass.yaml .
En este libro de jugadas, definiré dos tareas.
La primera tarea enumera todos los contenidos del directorio / home / ansible y los almacena en la variable dir_contents .
La segunda tarea imprime la variable dir_contents .
Ejecute el libro de jugadas get_dir_contents.yaml , de la siguiente manera.
Como puede ver, la propiedad stdout_lines almacenaba el contenido del directorio como una matriz. La propiedad stdout también se almacena en el contenido del directorio. Estas propiedades están separadas por caracteres de nueva línea ( n). En este ejemplo, es fácil trabajar con la propiedad stdout_lines .
A continuación, repita el contenido del directorio mediante un bucle.
Para hacer esto, abra el libro de jugadas get_dir_contents.yaml y cambie la segunda tarea, como se indica en la captura de pantalla a continuación.
Aquí, estoy iterando sobre la matriz dir_contents.stdout_lines usando un bucle e imprimiendo los elementos de la matriz usando el módulo de depuración de Ansible . En esta tarea, la variable de elemento es una variable de bucle que se utiliza para iterar sobre los elementos de la matriz.
Ejecute el libro de jugadas get_dir_contents.yaml , de la siguiente manera:
Como puede ver, el contenido del directorio / home / ansible se imprime en la pantalla.
Ejemplo 3: copia de seguridad del directorio
En este ejemplo, le mostraré cómo hacer una copia de seguridad de un directorio utilizando los módulos de registro , archivo y copia de Ansible .
Primero, cree el nuevo libro de jugadas backup_home_dir.yaml en el directorio playbooks / , de la siguiente manera:
A continuación, escriba las siguientes líneas en el archivo backup_home_dir.yaml .
user: ansible
become: True
tasks:
– name: Get home directory /home/ansible contents
shell: ls /home/ansible
register: dir_contents
– name: Create a new directory /tmp/ansible
file:
path: /tmp/ansible
state: directory
– name: Backup home directory /home/ansible to /tmp/ansible
copy:
src: /home/ansible/{{ item }}
dest: /tmp/ansible/
remote_src: True
loop: “{{ dir_contents.stdout_lines }}
Una vez que haya terminado, presione <Ctrl> + X , seguido de Y e <Enter> , para guardar el archivo backup_home_dir.yaml .
En este manual de estrategias, definiré tres tareas.
La primera tarea almacena el contenido del directorio / home / ansible (el directorio del que haré una copia de seguridad) en la variable dir_contents usando el módulo de registro de Ansible .
La segunda tarea crea un nuevo directorio / tmp / ansible usando el módulo de archivo Ansible . Este es el directorio donde se almacenará la copia de seguridad.
La tercera tarea recorre la matriz dir_contents.stdout_lines y usa el módulo de copia de Ansible para copiar cada directorio al directorio / tmp / ansible / .
Ejecute el libro de jugadas backup_home_dir.yaml , de la siguiente manera:
Como puede ver, en mi host Ubuntu 20.04 LTS, la copia de seguridad se realizó correctamente.
Ejemplo 4: ejecutar u omitir tareas
En este ejemplo, le mostraré cómo ejecutar u omitir tareas, según la variable que haya registrado, utilizando el módulo de registro .
Primero, cree el nuevo playbook register_conditions.yaml en el directorio playbooks / de la siguiente manera:
A continuación, escriba las siguientes líneas en el archivo register_conditions.yaml .
user: ansible
become: True
tasks:
– name: List directory contents
shell: ls /home/ansible/test3
register: dir_contents
– name: Check if directory is empty
debug:
msg: “Directory is empty.”
when: dir_contents.stdout== “
Una vez que haya terminado, presione <Ctrl> + X , seguido de Y e <Enter> , para guardar el archivo register_conditions.yaml .
En este libro de jugadas, he definido dos tareas.
La primera tarea almacena el contenido del directorio / home / ansible / test3 en la variable dir_contents .
La segunda tarea verifica si dir_contents.stdout es una cadena vacía o si el directorio / home / ansible / test3 está vacío. Si el directorio está vacío, se imprimirá el mensaje Directorio vacío .
Ejecute el libro de jugadas register_conditions.yaml , de la siguiente manera:
Como puede ver, el libro de jugadas se ejecutó correctamente.
Dado que el directorio / home / ansible / test3 está vacío, el libro de jugadas imprimió el mensaje Directorio está vacío .
A continuación, cree un nuevo archivo en el directorio / home / ansible / test3 .
Dado que el directorio / home / ansible / test3 ya no está vacío, se omite la tarea Comprobar si el directorio está vacío , como puede ver en la captura de pantalla a continuación.
Conclusión
El módulo de registro de Ansible es muy útil para la automatización de servidores. Este artículo le mostró los conceptos básicos del módulo de registro , incluidos ejemplos del uso del módulo de registro de Ansible para el almacenamiento y la copia de seguridad de directorios, y para ejecutar tareas de directorio.