este problema se puede tratar de diversas maneras, pero en este caso te dejamos la que para nosotros es la resolución más completa.
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:
- Crear un
group_vars/
subdirectorio que lleva el nombre del grupo. - Dentro de este subdirectorio, cree dos archivos llamados
vars
yvault
. - En el
vars
archivo, defina todas las variables necesarias, incluidas las sensibles. - Copie todas las variables sensibles en el
vault
archivo y prefix estas variables convault_
. - Ajuste las variables en el
vars
archivo para apuntar a la coincidenciavault_
variables que utilizan la sintaxis jinja2:db_password: vault_db_password
. - Encriptar el
vault
archivo para proteger su contenido. - 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
Reseñas y valoraciones
Si entiendes que ha sido de utilidad nuestro artículo, nos gustaría que lo compartas con el resto seniors de esta manera nos ayudas a dar difusión a esta información.