Sobes.tech
Middle

Por que na função de DevOps são necessárias duas pastas com variáveis, e quais são elas?

sobes.tech IA

Resposta da IA

No papel de DevOps, geralmente são usadas duas pastas com variáveis para separar configurações comuns e específicas do ambiente (ambiente). Isso aumenta a flexibilidade, a reutilização e a segurança das configurações.

As duas pastas principais:

  1. group_vars: Contém variáveis que se aplicam a todos os hosts de um grupo de inventário específico. As variáveis desses arquivos se aplicam aos hosts incluídos no grupo cujo nome corresponde ao nome do arquivo (por exemplo, group_vars/web_servers.yaml) ou no arquivo group_vars/all.yaml (que se aplica a todos os hosts). Isso é útil para definir configurações comuns para um grupo de servidores (por exemplo, configurações de rede, caminhos de instalação).
  2. host_vars: Contém variáveis específicas para hosts individuais. As variáveis desses arquivos aplicam-se apenas a um host específico, cujo nome corresponde ao nome do arquivo (por exemplo, host_vars/server1.example.com.yaml). Usado para configurações únicas de hosts (por exemplo, endereços IP específicos, versões de software, acessos específicos).

Exemplo de estrutura de diretórios ao usar Ansible:

# Estrutura de diretórios com variáveis
.
├── inventory  # Arquivo ou diretório de inventário
│   └── hosts.yaml
├── group_vars
│   ├── all.yaml       # Variáveis para todos os hosts
│   └── web_servers.yaml # Variáveis para o grupo web_servers
└── host_vars
    ├── server1.example.com.yaml # Variáveis para o host server1
    └── server2.example.com.yaml # Variáveis para o host server2

Exemplo de conteúdo de arquivos:

// group_vars/all.yaml
---
# Variáveis gerais para todos os hosts
tz: "Europe/Moscow"
ntp_servers:
  - 0.pool.ntp.org
  - 1.pool.ntp.org
// group_vars/web_servers.yaml
---
# Variáveis para o grupo web_servers
http_port: 80
https_port: 443
document_root: "/var/www/html"
// host_vars/server1.example.com.yaml
---
# Variáveis específicas para server1
external_ip: "192.168.1.100"
database_server: "db.example.com"

Vantagens dessa separação:

  • Hierarquia e prioridade: Garante uma hierarquia clara na aplicação de variáveis (host_vars tem prioridade mais alta que group_vars, e group_vars para um grupo específico tem prioridade mais alta que group_vars/all).
  • Reutilização: Configurações comuns podem ser definidas uma vez em group_vars e aplicadas a múltiplos hosts.
  • Legibilidade e gerenciabilidade: A configuração torna-se mais compreensível e fácil de manter, pois configurações específicas e gerais estão separadas.
  • Segurança: Dados sensíveis específicos (por exemplo, senhas ou chaves para um host específico) podem ser armazenados em host_vars e criptografados separadamente, se necessário.

No contexto de outras ferramentas (por exemplo, Terraform com arquivos .tfvars ou arquivos de configuração de aplicativos), o princípio de separação entre variáveis gerais e específicas do ambiente/instância é mantido, embora os nomes dos diretórios possam variar. Por exemplo, no Terraform, frequentemente usam-se arquivos como terraform.tfvars (para valores padrão gerais) e arquivos específicos para ambientes como dev.tfvars, stage.tfvars, prod.tfvars.

A ideia principal é separar os parâmetros "gerais" imutáveis dos "ambientais" ou "de host" que mudam, para facilitar a gestão da configuração.