首页 > 解决方案 > ansible-inventory --list 主机组命令行

问题描述

我想从 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]

标签: ansibleansible-inventory

解决方案


您可以使用该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

推荐阅读