我正在尝试使用清单文件中指定的python解析ansible变量,如下所示:
static
我希望能够解析Web服务器中的主机foo.example.com的[webservers]
foo.example.com type=news
bar.example.com type=sports
[dbservers]
mongodb.local type=mongo region=us
mysql.local type=mysql region=eu
和dbservers中的主机mongodb.local的type=news
。对此的任何帮助将不胜感激
答案 0 :(得分:1)
下面的戏
- name: List type=news hosts in the group webservers
debug:
msg: "{{ hostvars[item].inventory_hostname }}"
loop: "{{ groups['webservers'] }}"
when: hostvars[item].type == "news"
- name: List type=mongo and region=us hosts in the group dbservers
debug:
msg: "{{ hostvars[item].inventory_hostname }}"
loop: "{{ groups['dbservers'] }}"
when:
- hostvars[item].type == "mongo"
- hostvars[item].region == "us"
给予:
"msg": "foo.example.com"
"msg": "mongodb.local"
答案 1 :(得分:0)
我建议您看看how ansible itsef is parsing ini files to turn them into an inventory object
,而不是重新发明轮子。您还可以使用非常简单的剧本(如@vladimirbotka的建议)轻松地以json格式获取此信息,或重写inventory in yaml,这将更易于使用任何外部工具进行解析
inventory.yaml
---
all:
children:
webservers:
hosts:
foo.example.com:
type: news
bar.example.com:
type: sports
dbservers:
hosts:
mongodb.local:
type: mongo
region: us
mysql.local:
type: mysql
region: eu
答案 2 :(得分:0)
如果剧本将在主机上运行:
foo.example.com
您只需指定“ {{type}}”即可获得“ type = news”。如果要在“何时”条件下使用,则只需指出“类型” 如果该剧本将在主机上运行:
mongodb.local
然后,在这种情况下,“ type”的值将自动为=“ mongo”,“ region”将自动为=“ us”
如果变量的值在您指定的主机文件中定义,则将在指定的主机上自动确定
因此,该剧本可以在所有主机上执行,并且如果您获得“ type”的值,例如:
- debug:
msg: "{{type}}"
在每个主机上,您将获得在主机文件中定义的唯一值
我不确定我是否正确理解了这个问题,但是如果这意味着在foo.example.com主机上,则有必要从“ webservers”组中获取具有“ type = news”的服务器列表,那么答案已经给出。