Introducción
Ansible es una herramienta moderna de gestión de configuraciones que facilita la tarea de configurar y mantener servidores remotos.
Esta guía en formato de hoja de trucos proporciona una referencia rápida a los comandos y prácticas comúnmente utilizados al trabajar con Ansible. Para obtener una visión general de Ansible y cómo instalarlo y configurarlo, consulte nuestra guía sobre Cómo Instalar y Configurar Ansible en Ubuntu 20.04.
Cómo Usar Esta Guía:
- Esta guía está en formato de hoja de trucos con fragmentos de línea de comandos autocontenidos.
- Salta a cualquier sección que sea relevante para la tarea que estás tratando de completar.
- Cuando veas
texto destacado
en los comandos de esta guía, ten en cuenta que este texto debería referirse a los hosts, nombres de usuario y direcciones IP de tu propio inventario.
Glosario de Ansible
Los siguientes términos específicos de Ansible se utilizan ampliamente en esta guía:
- Máquina de Control / Nodo: un sistema donde Ansible está instalado y configurado para conectarse y ejecutar comandos en nodos.
- Nodo: un servidor controlado por Ansible.
- Archivo de Inventario: un archivo que contiene información sobre los servidores que Ansible controla, típicamente ubicado en
/etc/ansible/hosts
. - Libro de Jugadas: un archivo que contiene una serie de tareas a ejecutar en un servidor remoto.
- Rol: una colección de libros de jugadas y otros archivos que son relevantes para un objetivo como instalar un servidor web.
- Jugada: una ejecución completa de Ansible. Una jugada puede tener varios libros de jugadas y roles, incluidos desde un solo libro de jugadas que actúa como punto de entrada.
Si deseas un ejemplo de estos comandos en práctica, consulta nuestra guía sobre Cómo Usar Ansible para Automatizar la Configuración Inicial del Servidor en Ubuntu 20.04. Necesitarás al menos un servidor remoto para usar como nodo.
Prueba de Conectividad a los Nodos
Para probar que Ansible puede conectarse y ejecutar comandos y libros de jugadas en tus nodos, puedes usar el siguiente comando:
El módulo ping
probará si tienes credenciales válidas para conectarte a los nodos definidos en tu archivo de inventario, además de probar si Ansible puede ejecutar scripts de Python en el servidor remoto. Una respuesta de pong significa que Ansible está listo para ejecutar comandos y libros de jugadas en ese nodo.
Conectarse como un usuario diferente
Por defecto, Ansible intenta conectarse a los nodos como el usuario del sistema actual, utilizando su par de claves SSH correspondiente. Para conectarse como un usuario diferente, agregue el comando con la bandera -u
seguida del nombre del usuario deseado:
Lo mismo es válido para ansible-playbook
:
Usar una clave SSH personalizada
Si está utilizando una clave SSH personalizada para conectarse a los servidores remotos, puede proporcionarla en el momento de la ejecución con la opción --private-key
:
Esta opción también es válida para ansible-playbook
:
Usar autenticación basada en contraseña
Si necesita utilizar autenticación basada en contraseña para conectarse a los nodos, debe agregar la opción --ask-pass
a su comando de Ansible.
Esto hará que Ansible le solicite la contraseña del usuario en el servidor remoto al que está intentando conectarse:
Esta opción también es válida para ansible-playbook
:
Proporcionando la Contraseña de sudo
Si el usuario remoto necesita proporcionar una contraseña para ejecutar comandos sudo
, puede incluir la opción --ask-become-pass
en su comando Ansible. Esto le pedirá que proporcione la contraseña de sudo del usuario remoto:
Esta opción también es válida para ansible-playbook
:
Usando un Archivo de Inventario Personalizado
El archivo de inventario predeterminado generalmente se encuentra en /etc/ansible/hosts
, pero también puede usar la opción -i
para señalar archivos de inventario personalizados al ejecutar comandos y playbooks de Ansible. Ansible también admite scripts de inventario para construir archivos de inventario dinámicos, para cuando su inventario fluctúa, con servidores que se crean y destruyen con frecuencia. Los archivos de inventario personalizados son útiles para configurar inventarios por proyecto que se pueden incluir en sistemas de control de versiones como Git:
La misma opción es válida para ansible-playbook
:
Ejecución de Comandos ad-hoc
Para ejecutar un comando en un nodo, utiliza la opción -a
seguida del comando que deseas ejecutar, entre comillas.
Esto ejecutará uname -a
en todos los nodos de tu inventario:
También es posible ejecutar módulos de Ansible con la opción -m
. El siguiente comando instalaría el paquete vim
en server1
de tu inventario:
Antes de realizar cambios en tus nodos, puedes realizar una prueba en seco para predecir cómo los servidores serían afectados por tu comando. Esto se puede hacer incluyendo la opción --check
:
Ejecución de Playbooks
Para ejecutar un playbook y ejecutar todas las tareas definidas dentro de él, utiliza el comando ansible-playbook
:
Para sobrescribir la opción hosts
por defecto en el playbook y limitar la ejecución a un cierto grupo o host, incluye la opción -l
en tu comando:
Obteniendo información sobre una obra
La opción --list-tasks
se utiliza para listar todas las tareas que se ejecutarían en una obra sin realizar ningún cambio en los servidores remotos:
De manera similar, es posible listar todos los anfitriones que se verían afectados por una obra, sin ejecutar ninguna tarea en los servidores remotos:
Puedes usar etiquetas para limitar la ejecución de una obra. Para listar todas las etiquetas disponibles en una obra, utiliza la opción --list-tags
:
Controlando la Ejecución del Libro de Juego
Puedes usar la opción --start-at-task
para definir un nuevo punto de entrada para tu libro de juego. Ansible entonces omitirá todo lo que esté antes de la tarea especificada, ejecutando el resto de la obra desde ese punto en adelante. Esta opción requiere un nombre de tarea válido como argumento:
Para ejecutar solo tareas asociadas con etiquetas específicas, puedes usar la opción --tags
. Por ejemplo, si deseas ejecutar solo tareas etiquetadas como nginx
o mysql
, puedes usar:
Si desea omitir todas las tareas que estén bajo etiquetas específicas, utilice --skip-tags
. El siguiente comando ejecutaría miarchivo.yml
, omitiendo todas las tareas etiquetadas como mysql
:
Uso de Ansible Vault para almacenar datos sensibles
Si sus playbooks de Ansible manejan datos sensibles como contraseñas, claves de API y credenciales, es importante mantener esos datos seguros mediante un mecanismo de cifrado. Ansible proporciona ansible-vault
para cifrar archivos y variables.
Aunque es posible cifrar cualquier archivo de datos de Ansible así como archivos binarios, es más común utilizar ansible-vault
para cifrar archivos de variables que contienen datos sensibles. Después de cifrar un archivo con esta herramienta, solo podrá ejecutar, editar o ver su contenido proporcionando la contraseña relevante definida cuando cifró el archivo por primera vez.
Creación de un nuevo archivo cifrado
Puede crear un nuevo archivo cifrado de Ansible con:
Este comando realizará las siguientes acciones:
- Primero, te pedirá que ingreses una nueva contraseña. Deberás proporcionar esta contraseña cada vez que accedas al contenido del archivo, ya sea para editarlo, verlo o simplemente ejecutar playbooks o comandos utilizando esos valores.
- Después, abrirá tu editor de línea de comandos predeterminado para que puedas poblar el archivo con el contenido deseado.
- Finalmente, cuando hayas terminado de editar,
ansible-vault
guardará el archivo como datos encriptados.
Cifrado de un Archivo de Ansible Existente
Para cifrar un archivo de Ansible existente, puedes utilizar la siguiente sintaxis:
Esto te pedirá una contraseña que necesitarás ingresar cada vez que accedas al archivo credentials.yml
.
Visualización del Contenido de un Archivo Encriptado
Si deseas ver el contenido de un archivo que fue previamente encriptado con ansible-vault
y no necesitas cambiar su contenido, puedes utilizar:
Esto te pedirá que proporciones la contraseña que seleccionaste cuando encriptaste el archivo por primera vez con ansible-vault
.
Edición de un archivo cifrado
Para editar el contenido de un archivo que fue previamente cifrado con Ansible Vault, ejecuta:
Esto te pedirá que proporciones la contraseña que elegiste al cifrar por primera vez el archivo credentials.yml
con ansible-vault
. Después de validar la contraseña, tu editor de línea de comandos predeterminado se abrirá con el contenido no cifrado del archivo, lo que te permitirá realizar tus cambios. Cuando hayas terminado, puedes guardar y cerrar el archivo como lo harías normalmente, y los contenidos actualizados se guardarán como datos cifrados.
Descifrado de archivos cifrados
Si deseas revertir permanentemente un archivo que fue previamente cifrado con ansible-vault
a su versión no cifrada, puedes hacerlo con esta sintaxis:
Esto te pedirá que proporciones la misma contraseña utilizada al cifrar por primera vez el archivo credentials.yml
con ansible-vault
. Después de validar la contraseña, el contenido del archivo se guardará en el disco como datos no cifrados.
Usar Múltiples Contraseñas de Bóveda
Ansible admite múltiples contraseñas de bóveda agrupadas por diferentes identificadores de bóveda. Esto es útil si deseas tener contraseñas de bóveda dedicadas para diferentes entornos, como entornos de desarrollo, pruebas y producción.
Para crear un nuevo archivo encriptado usando un identificador de bóveda personalizado, incluye la opción --vault-id
junto con una etiqueta y la ubicación donde ansible-vault
puede encontrar la contraseña para esa bóveda. La etiqueta puede ser cualquier identificador y la ubicación puede ser prompt
, lo que significa que el comando debe solicitarte que ingreses una contraseña, o una ruta válida a un archivo de contraseña.
Esto creará un nuevo identificador de bóveda llamado dev que utiliza prompt
como fuente de contraseña. Al combinar este método con archivos de variables de grupo, podrás tener bóvedas de ansible separadas para cada entorno de aplicación:
Utilizamos dev y prod como identificadores de bóveda para demostrar cómo puedes crear bóvedas separadas por entorno, pero puedes crear tantas bóvedas como desees y puedes usar cualquier identificador de tu elección como identificador de bóveda.
Ahora, para ver, editar o desencriptar estos archivos, necesitarás proporcionar el mismo identificador de bóveda y fuente de contraseña junto con el comando ansible-vault
:
Usando un Archivo de Contraseña
Si necesitas automatizar el proceso de aprovisionamiento de servidores con Ansible utilizando una herramienta de terceros, necesitarás proporcionar la contraseña del almacén sin que se te solicite. Puedes hacerlo utilizando un archivo de contraseña con ansible-vault
.
A password file can be a plain text file or an executable script. If the file is an executable script, the output produced by this script will be used as the vault password. Otherwise, the raw contents of the file will be used as vault password.
Para utilizar un archivo de contraseña con ansible-vault
, debes proporcionar la ruta a un archivo de contraseña al ejecutar cualquiera de los comandos del almacén:
Ansible no hace distinción entre contenido que fue encriptado utilizando prompt
o un archivo de contraseña como fuente de contraseña, siempre y cuando la contraseña de entrada sea la misma. En términos prácticos, esto significa que está bien encriptar un archivo usando prompt
y luego usar un archivo de contraseña para almacenar la misma contraseña utilizada con el método prompt
. Lo contrario también es cierto: puedes encriptar contenido utilizando un archivo de contraseña y luego usar el método prompt
, proporcionando la misma contraseña cuando Ansible lo solicite.
Para obtener flexibilidad y seguridad extendidas, en lugar de tener tu contraseña del almacén almacenada en un archivo de texto plano, puedes utilizar un script de Python para obtener la contraseña de otras fuentes. El repositorio oficial de Ansible contiene algunos ejemplos de scripts de almacén que puedes utilizar como referencia al crear un script personalizado que se adapte a las necesidades particulares de tu proyecto.
Ejecutando un Playbook con Datos Encriptados a través de Ansible Vault
Cada vez que ejecutas un playbook que utiliza datos previamente encriptados mediante ansible-vault
, necesitarás proporcionar la contraseña del vault al comando de tu playbook.
Si utilizaste las opciones predeterminadas y el origen de contraseña prompt
al encriptar los datos utilizados en este playbook, puedes utilizar la opción --ask-vault-pass
para que Ansible te solicite la contraseña:
Si utilizaste un archivo de contraseña en lugar de solicitar la contraseña, deberías usar la opción --vault-password-file
en su lugar:
Si estás utilizando datos encriptados bajo un ID de vault, necesitarás proporcionar el mismo ID de vault y origen de contraseña que utilizaste al encriptar los datos por primera vez:
Si estás utilizando un archivo de contraseña con tu ID de vault, deberías proporcionar la etiqueta seguida de la ruta completa al archivo de contraseña como origen de contraseña:
Si tu playbook utiliza varios vaults, deberías proporcionar un parámetro --vault-id
para cada uno de ellos, sin un orden particular:
Depuración
Si te encuentras con errores al ejecutar comandos y playbooks de Ansible, es una buena idea aumentar la verbosidad de la salida para obtener más información sobre el problema. Puedes hacerlo incluyendo la opción -v
en el comando:
Si necesitas más detalle, puedes usar -vvv
y esto aumentará la verbosidad de la salida. Si no puedes conectar con los nodos remotos a través de Ansible, utiliza -vvvv
para obtener información de depuración de la conexión:
Conclusión
Esta guía cubre algunos de los comandos de Ansible más comunes que puedes utilizar al aprovisionar servidores, como ejecutar comandos remotos en tus nodos y cómo ejecutar playbooks usando una variedad de configuraciones personalizadas.
Existen otras variaciones de comandos y banderas que puedes encontrar útiles para tu flujo de trabajo de Ansible. Para obtener una visión general de todas las opciones disponibles, puedes usar el comando help:
Si deseas ver una visión más completa de Ansible y todos sus comandos y características disponibles, por favor consulta la documentación oficial de Ansible.
Si deseas ver otro ejemplo práctico de Ansible, revisa nuestra guía sobre Cómo Usar Ansible para Instalar y Configurar Docker en Ubuntu 20.04.
Source:
https://www.digitalocean.com/community/tutorials/how-to-use-ansible-cheat-sheet-guide