Usando ansible para implantar o ambiente de teste dockerizado e o ubuntu simples para produção

1

Preciso de ajuda para implantar um sistema em que estou trabalhando há um ano e meio. Para que você possa entender minha preocupação, vou explicar um pouco sobre nossa infraestrutura.

Temos um servidor (vamos chamá-lo de TESTING_SERVER) onde temos diferentes ambientes de teste para o nosso sistema. Cada um desses ambientes está sendo executado inteiramente com o docker. Cada instância de um ambiente de teste consiste em: 1. Contêiner do Docker com o nginx agindo como um proxy 2. Contêiner do Docker com uma Web do Django 3. Contêiner do Docker com o mysql

Sempre que precisamos criar um novo ambiente para fins de teste (por exemplo, o controle de qualidade deseja testar um novo recurso), usamos um playbook ansioso que executa essas tarefas em TESTING_SERVER:

  1. Crie uma rede de encaixe
  2. Criar contêiner de banco de dados
  3. Clone ou atualize o django git repo em algum lugar em TESTING_SERVER
  4. Crie o contêiner do django
  5. Execute o comando django collectstatic dentro do contêiner do django
  6. Execute o comando django migrate dentro do contêiner do django
  7. Criar contêiner nginx

Em nosso ambiente de produção, temos um servidor ubuntu simples (PRODUCTION_SERVER) executando mysql, django e nginx. Toda vez que temos que implantar na produção, executamos um playbook ansible que (quase) repete os passos listados acima:

  1. verifique a conexão do mysql (o db está em outro servidor)
  2. Clone ou atualize o django git repo em algum lugar em PRODUCTION_SERVER
  3. Verifique e reinicie o gunicorn (é o equivalente a criar o contêiner do django)
  4. execute o django collectstatic
  5. execute o django migrate
  6. verifique a configuração do nginx

Estes dois livros didáticos são diferentes, embora tenham muito em comum. Eu estava pensando em converter cada etapa em uma tarefa ansible e usar uma condicional para saber quais tarefas (dockerizadas ou diretas) deveriam ser executadas. Mas ainda terei diferentes tarefas para cada etapa (o mesmo manual, mas parece um pouco complicado).

Minha pergunta é: existe uma maneira de "mesclar" esses manuais para ter apenas um sem repetir?

    
por marianobianchi 13.12.2017 / 04:41

1 resposta

0

Eu criaria uma função por "tarefa" e a utilizaria no manual, semelhante ao descrito no documento de prática recomendada.

link

por exemplo

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

e na cartilha, chame os papéis

testing.yml

- hosts: testserver
  roles:
    - create_a_docker_network
    - create_database_container
    - ...
    
por 17.12.2017 / 12:26