Есть ли возможность перечислить группы в Ansible?

Насколько я знаю, у ansible есть опция с именем --list-hosts для перечисления хостов. Есть ли опция для перечисления групп хостов? Или любой другой способ пройти?

Ответ 1

Вы можете просто проверить переменную groups с помощью модуля debug:

ansible localhost -m debug -a 'var=groups.keys()'

Выше используется groups.keys(), чтобы получить только список групп. Вы можете отбросить часть .keys(), чтобы увидеть членство в группе:

ansible localhost -m debug -a 'var=groups'

Ответ 2

Примечание: - Для новых пользователей Ansible

Ansible имеет несколько специальных внутренних переменных, которые также известны как магические переменные.

По этой ссылке вы получите полный список магических переменных Magic Variables

Существует магическая переменная под названием "группы", которая содержит информацию о группе инвентаря. мы можем получить доступ к значению любой переменной (как пользовательской, так и внутренней), используя ответный модуль, называемый отладкой.

Я использую отдельный файл инвентаризации

$
$ ansible -i inventory.ini all -m debug -a "var=groups" 
$
centos-client.ansible.lab | SUCCESS => {
    "groups": {
        "all": [
            "centos-client.ansible.lab", 
            "ubuntu-client.ansible.lab"
        ], 
        "centos": [
            "centos-client.ansible.lab"
        ], 
        "ubuntu": [
            "ubuntu-client.ansible.lab"
        ], 
        "ungrouped": []
    }
}
ubuntu-client.ansible.lab | SUCCESS => {
    "groups": {
        "all": [
            "centos-client.ansible.lab", 
            "ubuntu-client.ansible.lab"
        ], 
        "centos": [
            "centos-client.ansible.lab"
        ], 
        "ubuntu": [
            "ubuntu-client.ansible.lab"
        ], 
        "ungrouped": []
    }
}

Ответ 3

Если вы не уверены, что хост действительно будет в инвентаре, вы можете использовать:

ansible -i hosts/ localhost -m debug -a 'var=groups'

-i где хранятся ваши файлы инвентаря
-m включить отладку модуля.
-a аргументы модуля.

Он выведет группу/хосты только один раз и не для каждого хоста в вашем инвентаре.

То же самое касается только получения списка групп в инвентаре:

ansible -i hosts/ localhost -m debug -a 'var=groups.keys()'

Ответ 4

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

$ ansible -i inventory/rhvh localhost -m debug -a 'var=groups.keys()
localhost | SUCCESS => {
    "groups.keys()": "dict_keys(['all', 'ungrouped', 'dc1-rhvh', 'dc2-rhvh', 'dc3-rhvh', 'dc4-rhvh', 'dc5-rhvh', 'rhvh', 'dc1', 'dc2', 'dc3', 'dc4', 'dc5', 'production'])"
}

Конечно, вы также можете просто grep содержимое файла инвентаризации:

$ grep -E '^\[' inventory/rhvh
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh:children]
[dc1:children]
[dc2:children]
[dc3:children]
[dc4:children]
[dc5:children]
[production:children]

Вы попадаете в ловушку, хотя для дразнить выход 2-го метода или вы можете использовать sed чтобы сделать это:

$ grep -E '^\[' inventory/rhvh | sed 's/:children//'
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh]
[dc1]
[dc2]
[dc3]
[dc4]
[dc5]

Ответ 5

Что-то вроде этого? cat ~/inventory/* | grep "\[.*\]"