Sobes.tech
Middle

Защо в ролята на DevOps са необходими две папки с променливи и кои са те?

sobes.tech AI

Отговор от AI

Като DevOps, обикновено се използват две папки с променливи за разделяне на общите и специфичните за околната среда (среда) настройки. Това увеличава гъвкавостта, повторната употреба и сигурността на конфигурациите.

Двете основни папки:

  1. group_vars: Съдържа променливи, които се прилагат към всички хостове в определена група инвентар. Променливите от тези файлове се прилагат към хостовете, включени в групата, чието име съвпада с името на файла (например group_vars/web_servers.yaml) или във файла group_vars/all.yaml (се прилага към всички хостове). Това е удобно за определяне на общи настройки за група сървъри (например мрежови настройки, пътища за инсталиране).
  2. host_vars: Съдържа променливи, специфични за отделни хостове. Променливите от тези файлове се прилагат само към конкретен хост, чието име съвпада с името на файла (например host_vars/server1.example.com.yaml). Използва се за уникални настройки на хостовете (например IP адреси на конкретен интерфейс, версии на софтуер, специфични достъпи).

Пример за структура на директории при използване на Ansible:

# Структура на директории с променливи
.
├── inventory  # Файл или директория на инвентара
│   └── hosts.yaml
├── group_vars
│   ├── all.yaml       # Общи променливи за всички хостове
│   └── web_servers.yaml # Променливи за групата web_servers
└── host_vars
    ├── server1.example.com.yaml # Променливи за хост server1
    └── server2.example.com.yaml # Променливи за хост server2

Пример за съдържание на файлове:

// group_vars/all.yaml
---
# Общи променливи за всички хостове
tz: "Europe/Moscow"
ntp_servers:
  - 0.pool.ntp.org
  - 1.pool.ntp.org
// group_vars/web_servers.yaml
---
# Променливи за групата web_servers
http_port: 80
https_port: 443
document_root: "/var/www/html"
// host_vars/server1.example.com.yaml
---
# Специфични променливи за server1
external_ip: "192.168.1.100"
database_server: "db.example.com"

Предимства на такъв раздел:

  • Иерархия и приоритет: Осигурява ясна иерархия при прилагането на променливи (host_vars имат по-висок приоритет от group_vars, а group_vars за конкретна група имат по-висок приоритет от group_vars/all).
  • Повторна употреба: Общите настройки могат да бъдат определени веднъж в group_vars и да се прилагат към множество хостове.
  • Четливост и управляемост: Конфигурацията става по-разбираема и лесна за поддръжка, тъй като специфичните и общите настройки са разделени.
  • Сигурност: Чувствителните специфични данни (например пароли или ключове за конкретен хост) могат да се съхраняват в host_vars и да бъдат криптирани отделно, ако е необходимо.

В контекста на други инструменти (например Terraform с използване на .tfvars файлове или конфигурационни файлове на приложения) принципът на разделяне на общи и специфични за околната среда/инстанцията променливи се запазва, въпреки че имената на директорите могат да се различават. Например, в Terraform често се използват файлове като terraform.tfvars (за общи стойности по подразбиране) и специфични файлове за среди като dev.tfvars, stage.tfvars, prod.tfvars.

Основната идея е да се разделят неизменяемите "общи" параметри от променящите се "околните" или "хостови", за да се улесни управлението на конфигурацията.