-- Leo's gemini proxy

-- Connecting to gmi.osiux.com:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini;lang=es_AR

Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools


AUTHOR: Osiris Alejandro Gomez

EMAIL: osiux@osiux.com

DATE: 2022-10-08 20:17


[IMG]

[1]


la escala lo cambia todo


Instalar y configurar equipos usando `ansible` ^1[2] 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[3] 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[4] (*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[5] 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[6] 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[7], 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[8] 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[9], fue posible ejecutar `awx-deploy-revision` desde `.gitlab-ci.yml` ^9[10] 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:


1. La persona hoy conicida como *DevOps* ejecuta `git push`

2. *GitLab* recibe los cambios y ejecuta `json-lint`

3. Luego se configura el entorno definido en `AWX_ENV` mediante `awx-config`

4. Se envían los *teams* usando `awx-cli send team`

5. Se envían los *projects* usando `awx-cli send project`

6. Se actualizan los *projects* enviados usando `awx-cli update project`

7. Se envían los *inventories sources* usando `awx-cli send inventory_source`

8. Se envían los *inventories* usando `awx-cli send inventory`

9. Se actualizan los *inventories sources* usando `awx-cli pdate inventory_source`

10. Se envían los *job templates* usando `awx-cli send job_template`

11. Se envían los *workflows* usando `awx-cli send workflow`

12. 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


*Ansible Tools* `v0.3.0`[11]

Ansible/AWX tools[12]


ChangeLog


`2022-11-13 20:39`[13] agregar y actualizar tags OpenGraph

`2022-10-10 15:54`[14] remove Leaked GitLab Token from ChangeLog :S

`2022-10-10 13:04`[15] corregir links de `.gitlab-ci.yml` y `Makefile` en *Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools*

`2022-10-08 23:02`[16] Agregar Automatizar la implementación de los recursos de AWX con GitLab CI/CD y Ansible Tools


1: file:img/ansible-devops-gitlab-awx-deploy-revision.png

2: https://www.ansible.com/

3: https://github.com/ansible/awx/

4: https://docs.ansible.com/ansible/2.9/modules/tower_project_module.html

5: https://github.com/ansible/tower-cli

6: https://gitlab.com/osiux/awx/

7: https://gitlab.com/osiux/ansible_tools/

8: https://gitlab.com/osiux/ansible_tools/-/blob/master/awx-deploy-revision

9: https://gitlab.com/osiux/awx/-/raw/develop/Makefile

10: https://gitlab.com/osiux/awx/-/raw/develop/.gitlab-ci.yml

11: 2022-10-03-ansible-tools-v0-3-0.gmi

12: 2021-02-05-ansible-awx-tools.gmi

13: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/bf3a61526ad2a73cecb77a18995f1d63494e3664

14: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/dfcc2246359073fc35cbdc446ee6dcd683a1ad23

15: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/1433e03c4abec4ebe24964a155ecf6b5c0c5c070

16: https://gitlab.com/osiux/osiux.gitlab.io/-/commit/f35c37045805a67170a967f407b88aad3c6a70f6

-- Response ended

-- Page fetched on Fri May 17 04:43:17 2024