ansible资源清册--列出主机组命令行

ansible资源清册--列出主机组命令行,ansible,ansible-inventory,Ansible,Ansible Inventory,我想从ansible清单中获得主机组名列表(仅限),但是我必须使用grep根据已知的组名模式来缩减列表-例如 输出干净但命令行混乱,需要提前了解组名模式: ansible inventory-i inventory/production-list-yaml | grep webserver.*:$ 清理命令行,不需要知道组名模式,但输出混乱: ansible playbook my-playbook.yml-i库存/生产--列出主机 是否有一种干净的方法从库存中提取组名 示例hosts.

我想从ansible清单中获得主机组名列表(仅限),但是我必须使用grep根据已知的组名模式来缩减列表-例如

  • 输出干净但命令行混乱,需要提前了解组名模式:
ansible inventory-i inventory/production-list-yaml | grep webserver.*:$

  • 清理命令行,不需要知道组名模式,但输出混乱:
ansible playbook my-playbook.yml-i库存/生产--列出主机

是否有一种干净的方法从库存中提取组名

示例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]

您可以使用
jq
命令解析来自
Ansible清单--list
的json输出,如下所示:

$ 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

请添加示例inventoryNice,我昨天打算建议使用
yq
,但正在等待