Sobes.tech
Middle

Dlaczego w roli DevOps potrzebne są dwa foldery z zmiennymi i jakie one są?

sobes.tech AI

Odpowiedź od AI

W roli DevOps zazwyczaj używa się dwóch folderów z zmiennymi do rozdzielenia ogólnych i specyficznych dla środowiska (środowiska) ustawień. To zwiększa elastyczność, ponowne użycie i bezpieczeństwo konfiguracji.

Dwa główne foldery:

  1. group_vars: Zawiera zmienne, które mają zastosowanie do wszystkich hostów w określonej grupie inwentarza. Zmienne z tych plików są stosowane do hostów w grupie, której nazwa odpowiada nazwie pliku (np. group_vars/web_servers.yaml) lub w pliku group_vars/all.yaml (stosowany do wszystkich hostów). To jest przydatne do definiowania wspólnych ustawień dla grupy serwerów (np. ustawienia sieci, ścieżki instalacji).
  2. host_vars: Zawiera zmienne specyficzne dla poszczególnych hostów. Zmienne z tych plików są stosowane tylko do konkretnego hosta, którego nazwa odpowiada nazwie pliku (np. host_vars/server1.example.com.yaml). Używane do unikalnych ustawień hostów (np. adresy IP interfejsów, wersje oprogramowania, specyficzne dostęp).

Przykład struktury katalogów przy użyciu Ansible:

# Struktura katalogów z zmiennymi
.
├── inventory  # Plik lub katalog inwentarza
│   └── hosts.yaml
├── group_vars
│   ├── all.yaml       # Zmienne dla wszystkich hostów
│   └── web_servers.yaml # Zmienne dla grupy web_servers
└── host_vars
    ├── server1.example.com.yaml # Zmienne dla hosta server1
    └── server2.example.com.yaml # Zmienne dla hosta server2

Przykład zawartości plików:

// group_vars/all.yaml
---
# Ogólne zmienne dla wszystkich hostów
tz: "Europe/Moscow"
ntp_servers:
  - 0.pool.ntp.org
  - 1.pool.ntp.org
// group_vars/web_servers.yaml
---
# Zmienne dla grupy web_servers
http_port: 80
https_port: 443
document_root: "/var/www/html"
// host_vars/server1.example.com.yaml
---
# Specyficzne zmienne dla server1
external_ip: "192.168.1.100"
database_server: "db.example.com"

Zalety takiego rozdzielenia:

  • Hierarchia i priorytet: Zapewnia jasną hierarchię stosowania zmiennych (host_vars ma wyższy priorytet niż group_vars, a group_vars dla konkretnej grupy ma wyższy priorytet niż group_vars/all).
  • Ponowne użycie: Ogólne ustawienia mogą być zdefiniowane raz w group_vars i zastosowane do wielu hostów.
  • Czytelność i zarządzanie: Konfiguracja staje się bardziej zrozumiała i łatwa do utrzymania, ponieważ specyficzne i ogólne ustawienia są rozdzielone.
  • Bezpieczeństwo: Wrażliwe dane specyficzne (np. hasła lub klucze dla konkretnego hosta) mogą być przechowywane w host_vars i szyfrowane oddzielnie, jeśli to konieczne.

W kontekście innych narzędzi (np. Terraform z plikami .tfvars lub plikami konfiguracyjnymi aplikacji) zasada rozdzielenia na ogólne i specyficzne dla środowiska/instancji zmienne pozostaje, choć nazwy katalogów mogą się różnić. Na przykład w Terraform często używa się plików typu terraform.tfvars (dla ogólnych domyślnych wartości) i specyficznych plików dla środowisk typu dev.tfvars, stage.tfvars, prod.tfvars.

Główny pomysł — rozdzielić niezmienne "ogólne" parametry od zmieniających się "środowiskowych" lub "hostowych", aby ułatwić zarządzanie konfiguracją.