Como usar o Ansible para gerenciar vários servidores com configuração de vários sites?

Como usar o Ansible para gerenciar vários servidores com configuração de vários sites?

Pesquisei o Ansible para provisionar novos servidores e isso funciona muito bem. Meu jogo instala MySQL, Nginx e todo o resto. Agora me pergunto qual é a melhor maneira de usá-lo também como ferramenta de gerenciamento de configuração.

Executamos vários sites em cada servidor. Para mim, isso significa uma configuração geral do Nginx em cada servidor e uma configuração específica necessária para cada site/domínio. Tenho em mente que posso atualizar a configuração geral e a configuração específica de forma independente com o Ansible quando precisar (digamos, novos insights ou segurança).

O que eu precisaria fazer nesta situação? Isso exige que eu mantenha uma variável que contenha todos os sites e em qual site eles estão? Ou existem alternativas melhores?

Responder1

Um recurso do modelo que você pode usar com grande benefício para essa finalidade é sua capacidade de modelagem.

OmodeloO módulo permite que você implante um arquivo com valores exclusivos para cada host. O nome do host que está sendo trabalhado atualmente é mantido nas variáveis ​​inventário_hostname e inventário_hostname_short (sendo esta última o primeiro componente pontilhado do nome do host).

Você pode manter as variáveis ​​específicas do host em um dicionário em group_vars/all. Por exemplo:

www_sites: {
    host1: "www.mysite1.com",
    host2: "www.mysite2.com",
  }

Então, o modelo para o arquivo conf nginx pode incluir algo como as seguintes linhas:

server {
  listen       80;
  server_name  {{ www_sites[inventory_hostname_short] }};
  access_log   logs/{{ www_sites[inventory_hostname_short] }}.access.log  main;

A documentação para a linguagem de modelagem Jinja2 usada pelo Ansible pode ser encontradaaqui.

Responder2

Eu uso vars para fazer coisas específicas para o host em questão. Meu conselho é agrupar o máximo que puder seus hosts em grupos e usar variáveis ​​de grupo. Lembre-se de que os playbooks do Ansible são ótimos para controle de versão em git ou SVN, para que você possa acompanhar suas alterações.

Algo que pode funcionar para você é usar vars_prompt, especialmente se você não executa seus playbooks agendados no cron.

Espero que isto ajude!

informação relacionada