S o, У нас есть сценарий, в котором нам нужна возможность выполнить пользовательскую команду на одном или нескольких хостах из группы с различными возможными значениями одной и той же переменной.
Например -
#Inventory:
[ServerGroup_1]
abc0001 node=node1
abc0002 node=node2
[ServerGroup_2]
abc0001 node=node3
abc0002 node=node4
[ServersGroups: children]
ServerGroup_1
ServerGroup_2
group_vars/ServerGroup_1
JAVA_HOME: /home/java
PORT: 9998
group_vars/ServerGroup_2
JAVA_HOME: /home/java
PORT: 9999
Цель состоит в том, чтобы выполнить команду оболочки ниже на хосте abc0001 с портами как 9998 и 9999 в рамках одного запуска playbook.
shell: {{ JAVA_HOME }} -Dprocess.port={{ PORT }}
В настоящее время каждый раз согласно Ansible поведение переменной по умолчанию, она выполняется только для порта 9999. Теперь, в качестве альтернативы, мы могли бы вручную разделить задачи и вызвать их дважды в нашей playbook, как описано здесь.
Но, если у нас есть 50 разных портов, которые было бы утомительно писать, а также нам нужна была бы конфигурация таким образом, чтобы она динамически выбиралась из файла инвентаризации или файлов переменных, поэтому для добавления любого нового экземпляра или запуска команды на другой порт, нам просто нужно добавить его в наши файлы инвентаря / переменных, а не писать отдельную задачу, охватывающую порт. Конечная конфигурация должна работать для всех возможных сценариев ios выполнения этой команды на одном хосте группы или на всех хостах из группы или в конкретной комбинации хоста и узла ....
ansible-playbook -i staging test_multinode.yml --limit=ServersGroups -l abc0001
Выше Запуск playbook должен выполнять команду оболочки для портов 9998 и 9999 на abc0001, а playbook должен быть достаточно гибким, если просто нужно сказать, что запускать процесс только для порта 9998 на abc0001.
Примечание: мы пробовали блок with_items путем установки переменной порта в файле инвентаризации для хоста, но эта настройка очень жесткая и не будет работать для других сценариев ios. Мы также пробовали hash_behavior = merge и hash_behavior = replace settings в ansible .cfg, не заметили никаких изменений.
Надеюсь, это имеет смысл, и у нас нет слишком сложных вещей! Пожалуйста, предложите несколько вариантов !!!