Spec-Zone.ru › Ansible

Создание инвентаря

Инвентари упорядочивают управляемые узлы в централизованных файлах, которые предоставляют Ansible сведения о системах и сетевых расположениях. С помощью файла инвентаря Ansible может управлять большим количеством узлов одной командой.

Чтобы выполнить следующие шаги, вам понадобится IP-адрес или полное доменное имя (FQDN) хотя бы одной хост-системы. Для демонстрации хост может работать локально в контейнере или виртуальной машине. Также необходимо убедиться, что ваш открытый ключ SSH добавлен в файл authorized_keys на каждом хосте.

Продолжите знакомство с Ansible и создайте инвентарь следующим образом:

  1. Создайте файл с именем inventory.ini в каталоге ansible_quickstart, созданном на предыдущем шаге.
  2. Добавьте в файл inventory.ini новую группу [myhosts] и укажите IP-адрес или полное доменное имя (FQDN) каждой хост-системы.

    [myhosts]
    192.0.2.50
    192.0.2.51
    192.0.2.52
    
  3. Проверьте свой инвентарь.

    ansible-inventory -i inventory.ini --list
    
  4. Проверьте доступность группы myhosts в своем инвентаре.

    ansible myhosts -m ping -i inventory.ini
    

    Примечание

    Передайте параметр -u команде ansible, если имена пользователя на управляющем узле и управляемых узлах различаются.

    192.0.2.50 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    192.0.2.51 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    192.0.2.52 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python3"
        },
        "changed": false,
        "ping": "pong"
    }
    

Поздравляем, вы успешно создали инвентарь. Продолжите знакомство с Ansible, создав плейбук.

Инвентари в формате INI или YAML

Инвентари можно создавать как в файлах INI, так и в формате YAML. В большинстве случаев, например в примере из предыдущих шагов, файлы INI просты и удобны для чтения, если управляемых узлов немного.

По мере увеличения числа управляемых узлов создание инвентаря в формате YAML становится разумным вариантом. Например, следующий вариант эквивалентен inventory.ini, объявляет уникальные имена управляемых узлов и использует поле ansible_host:

myhosts:
  hosts:
    my_host_01:
      ansible_host: 192.0.2.50
    my_host_02:
      ansible_host: 192.0.2.51
    my_host_03:
      ansible_host: 192.0.2.52

Советы по созданию инвентарей

  • Убедитесь, что имена групп понятны и уникальны. Имена групп также чувствительны к регистру.
  • Избегайте пробелов, дефисов и цифр в начале имен групп (используйте floor_19, а не 19th_floor).
  • Логически группируйте узлы в инвентаре в соответствии с их назначением, расположением и временем.

    Назначение

    Группируйте узлы по топологии, например: db, web, leaf, spine.

    Расположение

    Группируйте узлы по географическому расположению, например: центр обработки данных, регион, этаж, здание.

    Время

    Группируйте узлы по этапам, например: разработка, тестирование, предварительная подготовка, эксплуатация.

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

Создайте метагруппу, которая объединяет несколько групп в инвентаре, используя следующий синтаксис:

metagroupname:
  children:

В следующем инвентаре показана базовая структура центра обработки данных. Этот пример инвентаря содержит метагруппу network, включающую все сетевые устройства, и метагруппу datacenter, включающую группу network и все веб-серверы.

leafs:
  hosts:
    leaf01:
      ansible_host: 192.0.2.100
    leaf02:
      ansible_host: 192.0.2.110

spines:
  hosts:
    spine01:
      ansible_host: 192.0.2.120
    spine02:
      ansible_host: 192.0.2.130

network:
  children:
    leafs:
    spines:

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
    webserver02:
      ansible_host: 192.0.2.150

datacenter:
  children:
    network:
    webservers:

Группа может входить в несколько метагрупп. Например, группа network может входить как в метагруппу datacenter, так и в метагруппу ops:

leafs:
  hosts:
    leaf01:
      ansible_host: 192.0.2.100
    leaf02:
      ansible_host: 192.0.2.110

spines:
  hosts:
    spine01:
      ansible_host: 192.0.2.120
    spine02:
      ansible_host: 192.0.2.130

network:
  children:
    leafs:
    spines:

datacenter:
  children:
    network:

ops:
  children:
    network:

Переменные, определенные для group_vars родительской группы, применяются к узлам дочерних групп, но значения, определенные в group_vars дочерней группы, переопределяют значения родительской группы. Для предсказуемого наследования рекомендуется определять каждую группу только в одной родительской метагруппе, хотя допускается несколько родительских групп.

Создание переменных

Переменные задают значения для управляемых узлов, например IP-адрес, полное доменное имя, операционную систему и пользователя SSH, поэтому их не нужно указывать при выполнении команд Ansible.

Переменные можно назначать отдельным хостам.

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
      http_port: 80
    webserver02:
      ansible_host: 192.0.2.150
      http_port: 443

Переменные также можно назначать всем хостам в группе.

webservers:
  hosts:
    webserver01:
      ansible_host: 192.0.2.140
      http_port: 80
    webserver02:
      ansible_host: 192.0.2.150
      http_port: 443
  vars:
    ansible_user: my_server_user

См. также

Как создать инвентарь

Подробнее об инвентарях в формате YAML или INI.

Добавление переменных в инвентарь

Подробнее о переменных инвентаря и их синтаксисе.

Ansible Vault

Узнайте, как шифровать конфиденциальные данные в инвентаре, например пароли и ключи.

© 2012–2018 Michael DeHaan
© 2018–2025 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/projects/ansible/latest/getting_started/get_started_inventory.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API