Источником моего инвентаря хоста является внутренний инструмент, который выводит пары значений, например, вот шесть наблюдений, в настоящее время у меня есть 160 наблюдений:
servername1 processname1
servername1 processname2
servername1 processname3
servername2 processname1
servername3 processname1
servername4 processname1
Итак, столбец 1 - это мой список целевых хостов (мой инвентарь). Столбец 2 - это уникальные значения имени процесса, специально присвоенные значению имени сервера. Часто встречается один и тот же сервер. Некоторые серверы имеют только одно имя процесса, другие могут иметь от 2 до N. Это означает, что мой целевой хост может повторяться для уникального списка имен процессов. Я хочу использовать оба динамических списка из этого выходного списка пар, и мне нужно, чтобы оба значения в каждом наблюдении были связаны и присвоены переменным. Мне не обязательно использовать динамический инвентарь, мне просто нужно решение. Мне также нужно передать на целевой хост и значение в {{processname #}} с помощью команды: или shell: modules. (Это уникально, нет модулей, связанных с этой необходимостью)
При необходимости у меня есть способ отфильтровать эти данные и вывести их в формате JSON или YAML, создав отдельный файл YML для каждого хоста. Хотя я бы предпочел обрабатывать их динамически; предварительная обработка списка приемлема.
Поскольку для ansible-playbook требуется некоторый известный список инвентаря хостов, я застреваю в понимании того, как я могу создать этот список из моего динамического вывода, когда я начинаю игру.
Что я сделал до сих пор: я попытался прочитать и попытаться установить эти пары, как в файлах /etc/ansible/hosts/host_vars/servername#.yml. Это крайне уродливо, так как мне приходится предварительно обрабатывать вывод данных в формате YML. Но он не дает мне списка хостов, на который можно ссылаться в моем учебнике. Так что, хотя кажется, что hostvar - логичный выбор, я не могу обойти его стороной.
Что мне нужно:
- The suggested format of the data? JSON? YAML? Other? (if I cannot read it in dynamically.
- Is putting this in host_vars correct?
- Last night I saw another answer using set_fact, would that help?
Спасибо за понимание. Я использую Ansible уже 3,5 недели! Я неплохо справился с использованием статической и динамической инвентаризации, но это меня ставит в тупик, поскольку инвентарный список неочевиден, укажите формат совпадающих пар.
Примечание: МНОГИЕ предлагали использовать host_vars, но мне кажется, что это зарезервировано для имен хостов и связанных значений портов и прокси. Я могу ошибаться.
===================================================================
ОБНОВЛЕНИЕ: Спасибо за помощь в правильном направлении. Я обновил наш скрипт инвентаризации, чтобы выводить список хостов в формате JSON. Первый новый вариант - вывод хостов в JSON. Пример: {"my_host": ["servername1", "servername2",]}
Вызов этого скрипта динамической инвентаризации отлично работает!
ansible all -m ping servername1 | УСПЕХ => {"изменено": false, "ping": "pong"} имя_сервера2 | УСПЕХ => {"изменено": false, "ping": "pong"}
Далее: Вторая новая опция в сценарии инвентаризации заключалась в добавлении нового переключателя для ввода имени хоста. Эта часть до сих пор меня смущает. Вот результат: showInv --host = servername1
{"servername1": ["processname1", "processname2", "processname3",]}
Последняя часть, которую мне не хватает, - это то, как я вызываю скрипт инвентаризации с определенным "--host = {{my_host}}" из моей playbook.
Похоже, мне нужно найти переменную для существующего имени хоста и передать ее обратно в сценарий инвентаризации в качестве параметра переключателя "--host ="