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!