Waarom zijn er in de rol van DevOps twee mappen met variabelen nodig, en welke zijn dat?
sobes.tech AI
Antwoord van AI
In de rol van DevOps worden meestal twee mappen met variabelen gebruikt om algemene en omgevingsspecifieke (omgeving) instellingen te scheiden. Dit verhoogt de flexibiliteit, hergebruik en veiligheid van configuraties.
De twee hoofd mappen:
group_vars: Bevat variabelen die gelden voor alle hosts in een bepaalde inventarisgroep. De variabelen uit deze bestanden worden toegepast op de hosts die in de groep zijn opgenomen, waarvan de naam overeenkomt met de bestandsnaam (bijvoorbeeldgroup_vars/web_servers.yaml) of in het bestandgroup_vars/all.yaml(toepasselijk op alle hosts). Dit is handig voor het definiëren van gemeenschappelijke instellingen voor een servergroep (bijvoorbeeld netwerkconfiguraties, installatiepaden).host_vars: Bevat variabelen die specifiek zijn voor individuele hosts. De variabelen uit deze bestanden worden alleen toegepast op een specifieke host, waarvan de naam overeenkomt met de bestandsnaam (bijvoorbeeldhost_vars/server1.example.com.yaml). Gebruikt voor unieke hostinstellingen (bijvoorbeeld IP-adressen van specifieke interfaces, softwareversies, specifieke toegangen).
Voorbeeld van directorystructuur bij gebruik van Ansible:
# Structuur van directories met variabelen
.
├── inventory # Inventarisbestand of -directory
│ └── hosts.yaml
├── group_vars
│ ├── all.yaml # Variabelen voor alle hosts
│ └── web_servers.yaml # Variabelen voor de groep web_servers
└── host_vars
├── server1.example.com.yaml # Variabelen voor host server1
└── server2.example.com.yaml # Variabelen voor host server2
Voorbeeld van inhoud van bestanden:
// group_vars/all.yaml
---
# Algemene variabelen voor alle hosts
tz: "Europe/Moscow"
ntp_servers:
- 0.pool.ntp.org
- 1.pool.ntp.org
// group_vars/web_servers.yaml
---
# Variabelen voor de groep web_servers
http_port: 80
https_port: 443
document_root: "/var/www/html"
// host_vars/server1.example.com.yaml
---
# Specifieke variabelen voor server1
external_ip: "192.168.1.100"
database_server: "db.example.com"
Voordelen van deze scheiding:
- Hiërarchie en prioriteit: Er wordt een duidelijke hiërarchie in de toepassing van variabelen gewaarborgd (host_vars heeft een hogere prioriteit dan group_vars, en group_vars voor een specifieke groep heeft een hogere prioriteit dan group_vars/all).
- Herbruikbaarheid: Algemene instellingen kunnen één keer worden gedefinieerd in
group_varsen op meerdere hosts worden toegepast. - Leesbaarheid en beheersbaarheid: De configuratie wordt begrijpelijker en gemakkelijker te onderhouden, omdat specifieke en algemene instellingen gescheiden zijn.
- Veiligheid: Gevoelige specifieke gegevens (bijvoorbeeld wachtwoorden of sleutels voor een bepaalde host) kunnen worden opgeslagen in
host_varsen indien nodig apart worden versleuteld.
In de context van andere tools (bijvoorbeeld Terraform met .tfvars-bestanden of applicatieconfiguratiebestanden) blijft het principe van scheiding tussen algemene en specifieke omgevings- of instantievariabelen bestaan, hoewel de naamgeving van mappen kan verschillen. Bijvoorbeeld, in Terraform worden vaak bestanden gebruikt zoals terraform.tfvars (voor algemene standaardwaarden) en specifieke bestanden voor omgevingen zoals dev.tfvars, stage.tfvars, prod.tfvars.
Het belangrijkste idee is om ongewijzigde "algemene" parameters te scheiden van veranderlijke "omgeving" of "host"-parameters om het beheer van de configuratie te vereenvoudigen.