ansible-инвентаризация —список групп хостов командная строка

#ansible #ansible-inventory

#ansible #ansible-инвентаризация

Вопрос:

Я хотел бы получить список имен групп хостов (только) из ansible-inventory, однако мне приходится использовать grep для сокращения списка на основе известных шаблонов имен групп — например

  • Чистый вывод, но грязная командная строка и необходимо заранее знать шаблон имени группы:

ansible-inventory -i inventory/production --list --yaml | grep webserver_.*:$

  • Очистите командную строку и не нужно знать шаблон имени группы, но беспорядочный вывод:

ansible-playbook my-playbook.yml -i inventory/production --list-hosts

Есть ли простой способ извлечь только имена групп из инвентаря?

Пример hosts.yml:

 # NGINX
webserver_1:
  hosts:
    ws1.public.example.com

webserver_2:
  hosts:
    ws2.public.example.com

webserver_2:
  hosts:
    ws2.public.example.com

# EC2 back-ends
backend_ec2_1:
  hosts:
    be1.internal.example.com

backend_ec2_2:
  hosts:
    be2.internal.example.com

backend_ec2_3:
  hosts:
    be3.internal.example.com
 

[Ansible v2.9.7]

Комментарии:

1. пожалуйста, добавьте образец инвентаризации

Ответ №1:

Вы можете использовать jq команду для анализа выходных данных json ansible-inventory --list , например:

 $ ansible-inventory -i hosts --list | jq .all.children
[
  "backend_ec2_1",
  "backend_ec2_2",
  "backend_ec2_3",
  "ungrouped",
  "webserver_1",
  "webserver_2"
]
 

Или, если вам нужны только голые имена:

 $ ansible-inventory -i hosts --list | jq -r '.all.children[]'
backend_ec2_1
backend_ec2_2
backend_ec2_3
ungrouped
webserver_1
webserver_2
 

Комментарии:

1. Хорошо, я собирался предложить использовать yq вчера, но ждал исправления этой ошибки 😊

2. У меня это не работает (с Ansible 2.10). Кажется, что они работают только для довольно плоских структур инвентаря.

Ответ №2:

В этой команде перечислены группы, определенные в инвентаре

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

Комментарии:

1. Это действительно хорошо работает, даже для сильно вложенных групп.