Spec-Zone.ru › Ansible 2.4

Разработка динамических источников инвентаризации

  • Правила написания скриптов
  • Настройка внешнего скрипта инвентаризации

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

Как создать новый?

Просто! Мы просто создаём скрипт или программу, которая может выводить JSON в правильном формате, когда ей переданы соответствующие аргументы. Вы можете сделать это на любом языке программирования.

Правила написания скриптов инвентаризации

Когда внешний скрипт узла вызывается с единственным аргументом --list, скрипт должен вывести закодированный в JSON хеш/словарь всех управляемых групп в стандартный вывод. Значение каждой группы должно быть либо хеш/словарём, содержащим список каждого узла/IP-адреса, потенциальных дочерних групп и потенциальных переменных группы, либо просто списком адресов узлов/IP-адресов, как показано ниже:

{
    "databases": {
        "hosts": ["host1.example.com", "host2.example.com"],
        "vars": {
            "a": true
        }
    },
    "webservers": ["host2.example.com", "host3.example.com"],
    "atlanta": {
        "hosts": ["host1.example.com", "host4.example.com", "host5.example.com"],
        "vars": {
            "b": false
        },
        "children": ["marietta", "5points"]
    },
    "marietta": ["host6.example.com"],
    "5points": ["host7.example.com"]
}

Новая функция в версии 1.0.

Перед версией 1.0 каждая группа могла содержать только список имён хостов/IP-адресов, например, группы webservers, marietta и 5points выше.

При вызове со следующими аргументами --host <hostname> (где <hostname> — узел из вышеперечисленных), скрипт должен вывести либо пустой JSON хеш/словарь, либо хеш/словарь переменных, которые должны быть доступны для шаблонов и playbooks. Вывод переменных является необязательным, если скрипт не хочет этого делать, то он должен выводить пустой хеш/словарь:

{
    "favcolor": "red",
    "ntpserver": "wolf.example.com",
    "monitoring": "pack.example.com"
}

Настройка внешнего скрипта инвентаризации

Новая функция в версии 1.3.

Стандартная система скриптов инвентаризации, описанная выше, работает для всех версий Ansible, но вызов --host для каждого узла может быть довольно дорогостоящим, особенно если он включает дорогостоящие API-вызовы к удалённой подсистеме. В Ansible 1.3 и более поздних версиях, если скрипт инвентаризации возвращает элемент верхнего уровня с именем «_meta», то можно вернуть все переменные узла в одном вызове скрипта инвентаризации. Если этот элемент meta содержит значение для «hostvars», скрипт инвентаризации не будет вызываться с --host для каждого узла. Это приводит к значительному увеличению производительности для большого количества узлов, а также упрощает реализацию кэширования на стороне клиента для скрипта инвентаризации.

Данные, которые должны быть добавлены в словарь JSON верхнего уровня, выглядят так:

{

    # results of inventory script as above go here
    # ...

    "_meta": {
        "hostvars": {
            "moocow.example.com": {
                "asdf" : 1234
            },
            "llama.example.com": {
                "asdf": 5678
            }
        }
    }
}

Для удовлетворения требований использования _meta, чтобы предотвратить вызов Ansible вашим скриптом инвентаризации с --host, вы должны по крайней мере заполнить _meta пустым hostvars словарем, например:

{

    # results of inventory script as above go here
    # ...

    "_meta": {
        "hostvars": {}
    }
}

См. также

Python API
Python API для Playbooks и выполнения задач Ad Hoc
Разработка модулей
Как разрабатывать модули
Разработка плагинов
Как разрабатывать плагины
Ansible Tower
REST API-точку конечного узла и графический интерфейс пользователя для Ansible, синхронизируется с динамической инвентаризацией
Список рассылки для разработчиков
Список рассылки для тем по разработке
irc.freenode.net
IRC-чат-канал #ansible

© 2012–2018 Michael DeHaan
© 2018–2019 Red Hat, Inc.
Licensed under the GNU General Public License version 3.
https://docs.ansible.com/ansible/2.4/dev_guide/developing_inventory.html

Spec-Zone.ru

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