Estos consejos y trucos nos han ayudado a optimizar nuestro uso de Ansible y los ofrecemos aquí como sugerencias. Esperamos que lo ayuden a organizar el contenido, escribir libros de jugadas, mantener el inventario y ejecutar Ansible. Sin embargo, en última instancia, debe utilizar Ansible de la forma que tenga más sentido para su organización y sus objetivos.

  • Consejos generales

    • Mantenlo simple
    • Usar control de versiones
  • Consejos del libro de jugadas

    • Usar espacios en blanco
    • Siempre nombre las tareas
    • Siempre menciona el estado
    • Utilizar comentarios
  • Consejos de inventario

    • Utilice un inventario dinámico con nubes
    • Agrupar el inventario por función
    • Inventario separado de producción y puesta en escena
    • Mantenga las variables abovedadas visibles de forma segura
  • Trucos de ejecución

    • Pruébelo en la puesta en escena primero
    • Actualizar en lotes
    • Manejo de diferencias de distribución y SO

Consejos generales

Estos conceptos se aplican a todas las actividades y artefactos de Ansible.

Mantenlo simple

Siempre que pueda, haga las cosas de forma sencilla. Utilice funciones avanzadas solo cuando sea necesario y seleccione la función que mejor se adapte a su caso de uso. Por ejemplo, probablemente no necesitará vars, vars_files, vars_prompt y --extra-vars todo a la vez, al mismo tiempo que utiliza un archivo de inventario externo. Si algo se siente complicado, probablemente lo sea. Tómese el tiempo necesario para buscar una solución más sencilla.

Usar control de versiones

Mantenga sus libros de jugadas, roles, inventario y archivos de variables en git u otro sistema de control de versiones y realice confirmaciones en el repositorio cuando realice cambios. El control de versiones le brinda una pista de auditoría que describe cuándo y por qué cambió las reglas que automatizan su infraestructura.

Consejos del libro de jugadas

Estos consejos ayudan a que los libros de jugadas y los roles sean más fáciles de leer, mantener y depurar.

Usar espacios en blanco

El uso generoso de espacios en blanco, por ejemplo, una línea en blanco antes de cada bloque o tarea, hace que un libro de jugadas sea fácil de escanear.

Siempre nombre las tareas

Los nombres de las tareas son opcionales, pero extremadamente útiles. En su salida, Ansible le muestra el nombre de cada tarea que ejecuta. Elija nombres que describan lo que hace cada tarea y por qué.

Siempre menciona el estado

Para muchos módulos, el parámetro ‘estado’ es opcional. Los diferentes módulos tienen diferentes configuraciones predeterminadas para ‘estado’, y algunos módulos admiten varias configuraciones de ‘estado’. Establecer explícitamente ‘estado = presente’ o ‘estado = ausente’ hace que los libros de jugadas y los roles sean más claros.

Utilizar comentarios

Incluso con los nombres de las tareas y el estado explícito, a veces una parte de un libro de jugadas o rol (o archivo de inventario / variable) necesita más explicación. Agregar un comentario (cualquier línea que comience con ‘#’) ayuda a otros (y posiblemente a usted mismo en el futuro) a comprender qué hace una obra de teatro o tarea (o configuración variable), cómo lo hace y por qué.

Consejos de inventario

Estos consejos le ayudarán a mantener su inventario bien organizado.

Utilice un inventario dinámico con nubes

Con proveedores de nube y otros sistemas que mantienen listas canónicas de su infraestructura, use inventario dinámico para recuperar esas listas en lugar de actualizar manualmente static archivos de inventario. Con los recursos de la nube, puede utilizar etiquetas para diferenciar los entornos de producción y de ensayo.

Agrupar el inventario por función

Un sistema puede estar en varios grupos. Ver Cómo construir su inventario y Patrones: dirigidos a hosts y grupos. Si crea grupos con el nombre de la función de los nodos en el grupo, por ejemplo servidores web o dbservers, sus libros de jugadas pueden apuntar a máquinas en función de la función. Puede asignar variables específicas de la función utilizando el sistema de variables de grupo y diseñar roles de Ansible para manejar casos de uso específicos de la función. Ver Roles.

Inventario separado de producción y puesta en escena

Puede mantener su entorno de producción separado de los entornos de desarrollo, prueba y preparación mediante el uso de directorios o archivos de inventario separados para cada entorno. De esta manera, eliges con -i lo que estás apuntando. ¡Mantener todos sus entornos en un archivo puede llevar a sorpresas!

Mantenga las variables abovedadas visibles de forma segura

Debe cifrar las variables confidenciales o secretas con Ansible Vault. Sin embargo, cifrar los nombres de las variables y los valores de las variables dificulta la búsqueda de la fuente de los valores. Puede mantener accesibles los nombres de sus variables (por grep, por ejemplo) sin exponer ningún secreto agregando una capa de indirección:

  1. Crear un group_vars/ subdirectorio que lleva el nombre del grupo.
  2. Dentro de este subdirectorio, cree dos archivos llamados vars y vault.
  3. En el vars archivo, defina todas las variables necesarias, incluidas las sensibles.
  4. Copie todas las variables sensibles en el vault archivo y prefix estas variables con vault_.
  5. Ajuste las variables en el vars archivo para apuntar a la coincidencia vault_ variables que utilizan la sintaxis jinja2: db_password: vault_db_password .
  6. Encriptar el vault archivo para proteger su contenido.
  7. Utilice el nombre de la variable de la vars archivo en sus libros de jugadas.

Al ejecutar un libro de jugadas, Ansible encuentra las variables en el archivo no cifrado, que extrae los valores de las variables sensibles del archivo cifrado. No hay límite para la cantidad de archivos de bóveda y variables o sus nombres.

Trucos de ejecución

Estos consejos se aplican al uso de Ansible, en lugar de a los artefactos de Ansible.

Pruébelo en la puesta en escena primero

Probar los cambios en un entorno de ensayo antes de implementarlos en producción siempre es una gran idea. No es necesario que sus entornos sean del mismo tamaño y puede utilizar variables de grupo para controlar las diferencias entre esos entornos.

Actualizar en lotes

Utilice la palabra clave ‘serial’ para controlar cuántas máquinas actualiza a la vez en el lote. Ver Controlar dónde se ejecutan las tareas: delegación y acciones locales.

Manejo de diferencias de distribución y SO

Archivos de variables de grupo y group_by El módulo trabaja en conjunto para ayudar a Ansible a ejecutarse en una variedad de sistemas operativos y distribuciones que requieren diferentes configuraciones, paquetes y herramientas. los group_by El módulo crea un grupo dinámico de hosts que cumplen ciertos criterios. No es necesario definir este grupo en el archivo de inventario. Este enfoque le permite ejecutar diferentes tareas en diferentes sistemas operativos o distribuciones. Por ejemplo:

----name: talk to all hosts just so we can learn about them
   hosts: all
   tasks:-name: Classify hosts depending on their OS distribution
       group_by:key: os_ ansible_facts['distribution']# now just on the CentOS hosts...-hosts: os_CentOS
   gather_facts:Falsetasks:-# tasks that only happen on CentOS go in this play

La primera obra clasifica todos los sistemas en grupos dinámicos según el nombre del sistema operativo. Las obras posteriores pueden usar estos grupos como patrones en el hosts línea. También puede agregar configuraciones específicas de grupo en archivos de vars de grupo. Los tres nombres deben coincidir: el nombre creado por el group_by tarea, el nombre del patrón en reproducciones posteriores y el nombre del archivo de vars de grupo. Por ejemplo:

---# file: group_vars/allasdf:10---# file: group_vars/os_CentOS.ymlasdf:42

En este ejemplo, las máquinas CentOS obtienen el valor de ’42’ para asdf, pero otras máquinas obtienen ’10’. Esto se puede usar no solo para establecer variables, sino también para aplicar ciertos roles solo a ciertos sistemas.

Puede utilizar la misma configuración con include_vars cuando solo necesita variables específicas del sistema operativo, no tareas:

-hosts: all
  tasks:-name: Set OS distribution dependent variables
      include_vars:"os_ ansible_facts['distribution'] .yml"-debug:var: asdf

Esto extrae variables del archivo group_vars / os_CentOS.yml.

Ver también

Sintaxis de YAML

Más información sobre la sintaxis de YAML

Trabajar con libros de jugadas

Revise las características básicas del libro de jugadas.

Índice de colección

Explore colecciones, módulos y complementos existentes

¿Deberías desarrollar un módulo?

Aprenda a ampliar Ansible escribiendo sus propios módulos

Patrones: dirigidos a hosts y grupos

Más información sobre cómo seleccionar hosts

Directorio de ejemplos de GitHub

Archivos de playbook completos de la fuente del proyecto github

Lista de correo

¿Preguntas? ¿Ayudar? Ideas? Pasa por la lista de Grupos de Google