Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools
index | about | archive | charlas | docs | links
dot
|
git
|
img
|
plt
|
tty
|
uml
la escala lo cambia todo
Instalar y configurar equipos usando ansible
1 es muy
cómodo, pero siempre se puede mejorar y a gran escala, cuando es
necesario lidiar con cientos o miles de servers y workstations es
conveniente utilizar AWX 2 ya que permite organizar, registrar
y monitorear el deploy en paralelo sin perder ningún detalle.
módulos tower
vs awx-cli
Ansible cuenta con módulos tower_*
3 (collections
en las versiones nuevas) que permiten crear y/o modificar los diferentes
recursos de una instancia de AWX (Ansible Tower) e inicialmente creé
un rol ansible_role_tower_cli
que tomaba las definiciones de desde
archivos YAML para crear y/o modificar projects, job_templates.
A medida que pasaron los días y en el apuro de varios deploys, ejecutar el rol no resultó práctico, porque estaba pensado para actualizar el histórico de recursos completos de AWX.
Luego de probar diferentes alternativas de trabajo con AWX, crear un
job_template manualmente en la instancia de desarrollo (awx-dev
) y
exportar la plantilla a un archivo .json
usando awx-cli
4
para luego importarla en la instancia productiva (awx-prd
) resultó muy
práctico.
awx.git + ansible-tools
Versionar los recursos de AWX en un repositorio awx.git
5
surgió naturalmente para obtener reproducibilidad entre diferentes
instancias, generar releases, verificar diferencias y aplicar
correcciones.
El repositorio awx.git
impulsó la creación de nuevos scripts de
ansible_tools
6, para interactuar con AWX, obtener
dependencias, validar recursos, otorgar permisos y obtener valores de
variables de la una instancia.
awx-deploy-revision
Teniendo todos los recursos versionados en un repositorio git
, era
inevitable automatizar el deploy de una revisión de AWX, al
principio awx-deploy-revision
7 se ejecutaba
manualmente y permitía reproducir el deploy de un release en
diferentes instancias, asegurando la integridad de cada componente
detectando inconsistencias y asegurando los mismos permisos.
GitLab CI/CD
Invocando reglas de Makefile
8, fue posible ejecutar
awx-deploy-revision
desde .gitlab-ci.yml
9 de modo
desatendido y aprovechando todas las ventajas de las Pipelines ahora
es posible iniciar el desarrollo de un job_template directamente desde
el repositorio awx.git
monitoreando la salida de los jobs de
GitLab sin necesidad de ingresar a AWX.
git push
= pipeline success
Sin entrar en detalles, la secuencia de pasos automatizada es la siguiente:
- La persona hoy conicida como DevOps ejecuta
git push
- GitLab recibe los cambios y ejecuta
json-lint
- Luego se configura el entorno definido en
AWX_ENV
medianteawx-config
- Se envían los teams usando
awx-cli send team
- Se envían los projects usando
awx-cli send project
- Se actualizan los projects enviados usando
awx-cli update project
- Se envían los inventories sources usando
awx-cli send inventory_source
- Se envían los inventories usando
awx-cli send inventory
- Se actualizan los inventories sources usando
awx-cli pdate inventory_source
- Se envían los job templates usando
awx-cli send job_template
- Se envían los workflows usando
awx-cli send workflow
- Se otorgan permisos para todos los recursos usando
awx-cli grant
Si no hubo ningún error, se obtiene Pipeline Success y la revisión en
curso queda disponible para ejecutar en AWX :)
Si hubo algún error, basta con observar la salida del Job fallido y
realizar los cambios necesarios en el repositorio awx.git
, efectuar un
commit y al ejecutar nuevamente git push
, GitLab se ocupará del
deploy.
Si fue exitoso el deploy en awx-dev
, en otro stage se realiza el
mismo deploy en otra instancia de AWX.
Relacionado
ChangeLog
2022-11-13 20:39
agregar y actualizar tags OpenGraph2022-10-10 15:54
remove Leaked GitLab Token from ChangeLog :S2022-10-10 13:04
corregir links de.gitlab-ci.yml
yMakefile
en Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools2022-10-08 23:02
Agregar Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools