← Назад к вопросам

Как объявить хост в файле inventory с расширением YAML

1.3 Junior🔥 221 комментариев
#Ansible и управление конфигурацией

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Объявление хостов в Ansible Inventory YAML

В современных версиях Ansible (начиная с 2.4) YAML-формат inventory стал предпочтительным способом описания инфраструктуры благодаря своей структурированности и читаемости. Вот основные подходы к объявлению хостов:

Базовое объявление хостов

Простой список хостов можно объявить в корневом элементе all.hosts:

all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.10
    webserver2:
      ansible_host: 192.168.1.11
    database:
      ansible_host: 192.168.1.20

Использование групп

Основная сила inventory YAML проявляется при работе с группами хостов:

all:
  children:
    webservers:
      hosts:
        web1:
          ansible_host: 10.0.0.1
        web2:
          ansible_host: 10.0.0.2
    databases:
      hosts:
        db-primary:
          ansible_host: 10.0.1.1
        db-replica:
          ansible_host: 10.0.1.2
    
    # Группа, объединяющая другие группы
    production:
      children:
        webservers:
        databases:

Расширенные возможности YAML inventory

Переменные на разных уровнях

all:
  vars:
    ansible_user: admin
    ansible_ssh_private_key_file: ~/.ssh/production_key
  
  children:
    webservers:
      vars:
        http_port: 80
        max_clients: 200
      hosts:
        web1.prod.example.com:
          # Переменные уровня хоста переопределяют групповые
          http_port: 8080

Использование шаблонов для диапазонов

all:
  hosts:
    # Диапазон номеров
    web-[01:10].example.com:
    
    # Диапазон букв
    db-[a:e].example.com:
    
    # Комбинированные шаблоны
    app-server-[1:3]-[a:c]:

Динамические группы с паттернами

all:
  children:
    # Группа по паттерну имени
    us_servers:
      hosts:
        "*.us.example.com":
    
    # Группа с использованием переменных
    high_memory:
      hosts:
        "{{ groups['all'] }}"
      vars:
        min_memory: 16384

Продвинутые примеры

Inventory с ролями и средами

all:
  children:
    prod:
      children:
        prod_webservers:
          hosts:
            prod-web-01:
              ansible_host: 192.168.100.10
              role: frontend
            prod-web-02:
              ansible_host: 192.168.100.11
              role: backend
        
        prod_databases:
          hosts:
            prod-db-01:
              ansible_host: 192.168.101.10
              cluster_node: primary
    
    stage:
      children:
        stage_servers:
          hosts:
            stage-web-01:
              ansible_host: 192.168.200.10
            stage-db-01:
              ansible_host: 192.168.200.20

Inventory с кастомными переменными и структурами

all:
  vars:
    environment: production
    data_center: ams01
    
  children:
    application_stack:
      vars:
        stack_version: "2.5.1"
        deployment_strategy: rolling
        
      hosts:
        app-server-1:
          ansible_host: 10.1.0.100
          # Сложные структуры данных
          ports:
            - 80
            - 443
          tags:
            - primary
            - load_balancer
            
        app-server-2:
          ansible_host: 10.1.0.101
          ports:
            - 8080

Практические рекомендации

  • Именование файлов: Используйте расширение .yml или .yaml для inventory файлов
  • Подключение inventory: Указывайте в ansible.cfg или через флаг -i
  • Валидация: Проверяйте YAML-синтаксис с помощью ansible-inventory --list -i inventory.yml
  • Модульность: Разделяйте большое inventory на несколько файлов с помощью include или import
  • Безопасность: Используйте ansible-vault для шифрования чувствительных данных

YAML inventory предоставляет мощный и гибкий способ управления инфраструктурой, особенно в комбинации с динамическими inventory-скриптами и плагинами inventory, что делает его идеальным выбором для сложных DevOps-сред.