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

Можно ли поменять имя inventory.ini в Ansible?

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

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

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

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

Возможность изменения имени inventory.ini в Ansible

Да, абсолютно можно и даже рекомендуется изменять имя inventory.ini в Ansible. Файл inventory — это просто текстовый файл, содержащий информацию о целевых хостах, и Ansible не имеет жестких требований к его имени. Вы можете использовать любое имя и расширение, которое удобно для вашего проекта.

Основные механизмы работы с inventory в Ansible

Ansible поддерживает несколько форматов inventory и предоставляет множество способов его указания.

1. Статический inventory файл (INI или YAML)

Вы можете создать файл с любым именем, например:

  • hosts.ini
  • production.yml
  • my_inventory.txt
  • servers.cfg

Пример структуры в формате INI (servers.cfg):

[webservers]
web1.example.com ansible_user=admin
web2.example.com ansible_port=2222

[databases]
db-primary.example.com
db-replica.example.com ansible_host=10.0.1.5

Пример в формате YAML (production.yml):

all:
  children:
    webservers:
      hosts:
        web1.example.com:
          ansible_user: admin
        web2.example.com:
          ansible_port: 2222
    databases:
      hosts:
        db-primary.example.com:
        db-replica.example.com:
          ansible_host: 10.0.1.5

2. Динамический inventory

Ansible может получать информацию о хостах из внешних источников через динамические inventory скрипты, которые могут возвращать данные в формате JSON. Например, от AWS EC2, VMware, или собственной CMDB.

Пример запуска playbook с динамическим inventory:

ansible-playbook -i dynamic_inventory_aws.py deploy.yml

3. Передача inventory через переменные окружения или параметры команд

Ansible позволяет указывать inventory файл несколькими способами:

  • Через параметр -i (интерфейс командной строки):
    ansible-playbook -i custom_hosts.ini playbook.yml
    ansible -i dynamic/aws_ec2.yml all --list-hosts
    
  • Через переменную окружения ANSIBLE_INVENTORY:
    export ANSIBLE_INVENTORY=/path/to/my_inventory
    ansible-playbook playbook.yml
    
  • В конфигурационном файле Ansible (ansible.cfg): Можно задать inventory по умолчанию в секции [defaults].
    [defaults]
    inventory = ./inventory/production
    

Практические рекомендации и лучшие практики

  • Использование директории inventory/: В сложных проектах часто организуют inventory в отдельной директории с различными файлами для разных окружений.
    inventory/
    ├── production/
    │   ├── hosts.yml      # Основной файл хостов
    │   ├── group_vars/    # Переменные групп
    │   └── host_vars/     # Переменные конкретных хостов
    ├── staging/
    │   └── hosts.yml
    └── development/
        └── hosts.yml
    
Тогда можно запускать playbook для конкретного окружения:
    ```bash
    ansible-playbook -i inventory/production/ deploy.yml
    ```

*   **Разделение inventory по ролям или функциям:** Например, `frontend.yml`, `backend.yml`, `network.yml`.

*   **Учет расширений файлов:** Хотя Ansible автоматически распознает форматы INI и YAML, явное указание расширения `.yml` или `.ini` помогает в понимании структуры.

*   **Интеграция с динамическими источниками:** Для cloud-окружений часто используют отдельные inventory файлы, генерируемые скриптами или плагинами (например, `aws_ec2.yml`, `azure_rm.yml`).

### Пример настройки проекта с кастомным именем inventory

Рассмотрим структуру проекта, где основной inventory файл называется `infra.yml`:

1.  **Создаем файл `infra.yml`:**
    ```yaml
    all:
      children:
        europe:
          children:
            germany:
              hosts:
                vm01.de.example.com:
                vm02.de.example.com:
            uk:
              hosts:
                server.uk.example.com:
        usa:
          hosts:
            node.us.example.com:
    ```

2.  **Запускаем Ansible с этим файлом:**
    ```bash
    # Проверим список хостов
    ansible -i infra.yml all --list-hosts

    # Выполним playbook
    ansible-playbook -i infra.yml site.yml
    ```

3.  **Для постоянного использования можно настроить `ansible.cfg`:**
    ```ini
    [defaults]
    inventory = infra.yml
    host_key_checking = False
    ```

### **Важные ограничения и замечания**

*   Ansible **читает inventory последовательно**. Если указан путь к директории (например, `-i inventory/`), он будет обрабатывать все поддерживаемые файлы внутри нее как единый inventory.
*   При использовании **динамического inventory** скрипт должен возвращать корректный JSON в формате, ожидаемом Ansible.
*   В **Ansible Tower/AWX** или других CI/CD системах механизмы указания inventory могут иметь свои особенности, но принцип свободы в выборе имени обычно сохраняется.

**Таким образом, имя `inventory.ini` — это лишь распространенный пример по умолчанию из многих туториалов.** В реальных проектах вы абсолютно свободны в выборе имен и структуры inventory файлов, что позволяет лучше организовать инфраструктуру в соответствии с требованиями DevOps процессов.