Uso de ansible para implementar un entorno de prueba dockerizado y ubuntu simple para producción

Uso de ansible para implementar un entorno de prueba dockerizado y ubuntu simple para producción

Necesito ayuda para implementar un sistema en el que he estado trabajando durante un año y medio. Para que puedan entender mi preocupación les explicaré un poco sobre nuestra infraestructura.

Tenemos un servidor (llamémoslo TESTING_SERVER) donde tenemos diferentes entornos de prueba para nuestro sistema. Cada uno de estos entornos se ejecuta completamente con Docker. Cada instancia de un entorno de pruebas consta de: 1. Contenedor Docker con nginx actuando como proxy 2. Contenedor Docker con una web Django 3. Contenedor Docker con mysql

Cada vez que necesitamos crear un nuevo entorno con fines de prueba (es decir, el control de calidad quiere probar una nueva característica), utilizamos un libro de jugadas ansible que ejecuta estas tareas en TESTING_SERVER:

  1. Crear una red acoplable
  2. Crear contenedor de base de datos
  3. Clonar o actualizar el repositorio django git en algún lugar de TESTING_SERVER
  4. Crear contenedor Django
  5. Ejecute el comando django Collectstatic dentro del contenedor de Django
  6. Ejecute el comando django migrar dentro del contenedor django
  7. Crear contenedor nginx

En nuestro entorno de producción tenemos un servidor ubuntu simple (PRODUCTION_SERVER) que ejecuta mysql, django y nginx. Cada vez que tenemos que implementar en producción, ejecutamos un manual de estrategias ansible que (casi) repite los pasos enumerados anteriormente:

  1. verifique la conexión mysql (la base de datos está en otro servidor)
  2. Clonar o actualizar el repositorio django git en algún lugar de PRODUCTION_SERVER
  3. Verifique y reinicie gunicorn (es el equivalente a crear un contenedor django)
  4. ejecutar django Collectstatic
  5. ejecutar django migrar
  6. comprobar la configuración de nginx

Estos dos manuales son diferentes, aunque tienen mucho en común. Estaba pensando en convertir cada paso en una tarea ansible y usar un condicional para saber qué tareas (dockerizadas o directas) deberían ejecutarse. Pero seguiré teniendo diferentes tareas para cada paso (el mismo manual de estrategias, pero parece un poco complicado).

Mi pregunta es: ¿hay alguna manera de "fusionar" estos manuales para tener solo uno sin repetirnos?

Respuesta1

Crearía un rol por "tarea" y lo usaría en el libro de estrategias, similar a lo que se describe en el documento de mejores prácticas.

http://docs.ansible.com/ansible/latest/playbooks_best_practices.html#directory-layout

Por ejemplo

roles/  
  create_a_docker_network/  
    tasks/  
      main.yml  
  create_database_container/...
  ...  
  Create_nginx_container/

y en el libro de jugadas llama los roles

prueba.yml

- hosts: testserver
  roles:
    - create_a_docker_network
    - create_database_container
    - ...

información relacionada