是否有任何选项可以在 Ansible 中列出组?
Is there any option to list groups in Ansible?
据我所知,ansible 有一个名为 --list-hosts
的选项用于列出主机。有没有列出主机组的选项?或者有什么其他方式可以通过?
您可以使用 debug
模块简单地检查 groups
变量:
ansible localhost -m debug -a 'var=groups.keys()'
以上是使用 groups.keys()
获取组列表。您也可以删除 .keys()
部分以查看群组成员资格:
ansible localhost -m debug -a 'var=groups'
类似的东西?
cat ~/inventory/* | grep "\[.*\]"
Note:- For New Ansible Users
Ansible 有一些特殊的内部变量,也称为魔术变量。
从这个link你会得到魔法变量的完整列表Magic Variables
有一个名为 "groups" 的魔法变量,它保存着库存组信息。
我们可以使用名为 debug.
的 ansible 模块访问任何变量(用户定义的和内部的)的值
I am Using Separate Inventory File
$
$ 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": []
}
}
如果您不确定主机是否真的在清单中,您可以使用:
ansible -i hosts/ localhost -m debug -a 'var=groups'
-i
您的库存文件存放的地方
-m
启用模块调试。
-a
模块参数。
它只会输出一次组/主机,而不是您清单中的每个主机。
获取清单中的组列表也是如此:
ansible -i hosts/ localhost -m debug -a 'var=groups.keys()'
方法 #1 - 使用 Ansible
如果您只想要给定清单文件中的组列表,您可以使用其他几个答案中提到的 magic variables。
在这种情况下,您可以使用 groups
魔法变量,特别是只显示此散列(键 + 值)中的 keys()
。键是所有组的名称。
注意: 通过以 localhost
为目标,我们在处理清单文件时强制此命令仅针对单个主机 运行。
$ 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'])"
}
方法 #2 - 使用 grep
& sed
您当然也可以 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]
虽然你要梳理第二种方法的输出,但你还是会遇到麻烦,或者你可以使用 sed
来做到这一点:
$ grep -E '^\[' inventory/rhvh | sed 's/:children//'
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh]
[dc1]
[dc2]
[dc3]
[dc4]
[dc5]
列出群组
使用工具 built-in 到 Ansible + jq,这给你一些相当接近的东西:
ansible-inventory --list | jq "keys"
与手动解析库存文件相比,此方法的一个优势在于它充分利用了您的 ansible.cfg
文件(可以指向一个或多个库存文件、库存文件目录等)。
我机器上的示例输出(local_redis_all
是本地定义的 Ansible 组):
[
"_meta",
"all",
"local_redis_all",
]
如果您更喜欢 plain-text 形式,请使用 ansible-inventory --list | jq -r "keys | .[]"
之类的方法。它会给你这样的输出:
_meta
all
local_redis_all
列出主机
这不是原始问题的一部分,但无论如何将其包含在这里,因为它可能对我的一些读者有用。对 JSON 输出使用以下命令(注意:该命令实际上为每个组输出一个 JSON 数组,我还没有找到用 jq
展平这些的方法 - 建议是欢迎):
ansible-inventory --list | jq ".[].hosts | map(.)?
这会为您提供与此类似的输出:
[
"redis-01",
"redis-02",
"redis-03"
]
同样,原始文本格式(每行一个主机):ansible-inventory --list | jq -r ".[].hosts | .[]?"
这给你这样的输出:
redis-01
redis-02
redis-03
另一种查看主机的方法是在 ansible
关键字后按 tab
。
据我所知,ansible 有一个名为 --list-hosts
的选项用于列出主机。有没有列出主机组的选项?或者有什么其他方式可以通过?
您可以使用 debug
模块简单地检查 groups
变量:
ansible localhost -m debug -a 'var=groups.keys()'
以上是使用 groups.keys()
获取组列表。您也可以删除 .keys()
部分以查看群组成员资格:
ansible localhost -m debug -a 'var=groups'
类似的东西?
cat ~/inventory/* | grep "\[.*\]"
Note:- For New Ansible Users
Ansible 有一些特殊的内部变量,也称为魔术变量。
从这个link你会得到魔法变量的完整列表Magic Variables
有一个名为 "groups" 的魔法变量,它保存着库存组信息。 我们可以使用名为 debug.
的 ansible 模块访问任何变量(用户定义的和内部的)的值I am Using Separate Inventory File
$
$ 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": []
}
}
如果您不确定主机是否真的在清单中,您可以使用:
ansible -i hosts/ localhost -m debug -a 'var=groups'
-i
您的库存文件存放的地方
-m
启用模块调试。
-a
模块参数。
它只会输出一次组/主机,而不是您清单中的每个主机。
获取清单中的组列表也是如此:
ansible -i hosts/ localhost -m debug -a 'var=groups.keys()'
方法 #1 - 使用 Ansible
如果您只想要给定清单文件中的组列表,您可以使用其他几个答案中提到的 magic variables。
在这种情况下,您可以使用 groups
魔法变量,特别是只显示此散列(键 + 值)中的 keys()
。键是所有组的名称。
注意: 通过以 localhost
为目标,我们在处理清单文件时强制此命令仅针对单个主机 运行。
$ 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'])"
}
方法 #2 - 使用 grep
& sed
您当然也可以 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]
虽然你要梳理第二种方法的输出,但你还是会遇到麻烦,或者你可以使用 sed
来做到这一点:
$ grep -E '^\[' inventory/rhvh | sed 's/:children//'
[dc1-rhvh]
[dc2-rhvh]
[dc3-rhvh]
[dc4-rhvh]
[dc5-rhvh]
[rhvh]
[dc1]
[dc2]
[dc3]
[dc4]
[dc5]
列出群组
使用工具 built-in 到 Ansible + jq,这给你一些相当接近的东西:
ansible-inventory --list | jq "keys"
与手动解析库存文件相比,此方法的一个优势在于它充分利用了您的 ansible.cfg
文件(可以指向一个或多个库存文件、库存文件目录等)。
我机器上的示例输出(local_redis_all
是本地定义的 Ansible 组):
[
"_meta",
"all",
"local_redis_all",
]
如果您更喜欢 plain-text 形式,请使用 ansible-inventory --list | jq -r "keys | .[]"
之类的方法。它会给你这样的输出:
_meta
all
local_redis_all
列出主机
这不是原始问题的一部分,但无论如何将其包含在这里,因为它可能对我的一些读者有用。对 JSON 输出使用以下命令(注意:该命令实际上为每个组输出一个 JSON 数组,我还没有找到用 jq
展平这些的方法 - 建议是欢迎):
ansible-inventory --list | jq ".[].hosts | map(.)?
这会为您提供与此类似的输出:
[
"redis-01",
"redis-02",
"redis-03"
]
同样,原始文本格式(每行一个主机):ansible-inventory --list | jq -r ".[].hosts | .[]?"
这给你这样的输出:
redis-01
redis-02
redis-03
另一种查看主机的方法是在 ansible
关键字后按 tab
。