无法在 playbook 中安装 ansible 代码
Unable to fit the ansible code in playbook
这是一个以 Yaml 格式存储的日志文件。
我的工作是找出属于主机类 ess 的主机名,在本例中答案是 host002。
hostinfo:
'host001':
ip: 192.168.43.10
hostclass: 'puppet'
'host002':
ip: 192.168.43.11
hostclass: 'ess'
'host003':
ip: 192.168.43.21
hostclass: 'mdb'
我从一些朋友那里得到了一个解决方案,但我无法适应我的 ansible 剧本。
- debug:
msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"
我正在编写我的剧本,这是错误的,但我无法弄清楚如何将代码放入我的剧本中。谁能帮我修改我的代码。
---
- hosts: somehost
gather_facts: no
vars_files:
file: sometext.yaml
name: sometext
- debug:
msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"
您使用 Ansible 的方式有误。可以编写一个复杂的查询(您可以为此使用 json_query 过滤器),但它会非常难以阅读和维护。
您需要做的:不要使用 hostclass: something
,而是使用群组。
群组就是为此而设计的。
您的库存应如下所示:
[puppet]
host001 ip=192.168.43.10
[ess]
host002 ip=192.168.43.11
[mdb]
host003 ip=192.168.43.21
[hostinfo:children]
puppet
ess
mdb
之后,如果需要,查询组就很简单了(例如groups.puppet
),并且很容易访问它们的变量:(hostvars[groups.puppet][0]).ip
这是您一直在寻找的代码:
(在查询之上,vars_files
也有问题)
tasks:
- include_vars:
file: ./sometext.yaml
name: sometext
- debug:
msg: "{{ sometext.hostinfo | dict2items | json_query('[?value.hostclass==`ess`] | [0].key') }}"
查询中的最后一个过滤器returns单个字符串,如果有多个hostclass
等于ess
的主机,则需要更改它,它会生成一个列表.
这是一个以 Yaml 格式存储的日志文件。
我的工作是找出属于主机类 ess 的主机名,在本例中答案是 host002。
hostinfo:
'host001':
ip: 192.168.43.10
hostclass: 'puppet'
'host002':
ip: 192.168.43.11
hostclass: 'ess'
'host003':
ip: 192.168.43.21
hostclass: 'mdb'
我从一些朋友那里得到了一个解决方案,但我无法适应我的 ansible 剧本。
- debug:
msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"
我正在编写我的剧本,这是错误的,但我无法弄清楚如何将代码放入我的剧本中。谁能帮我修改我的代码。
---
- hosts: somehost
gather_facts: no
vars_files:
file: sometext.yaml
name: sometext
- debug:
msg: "{{ hostinfo|dictsort|selectattr('1.hostclass', 'equalto', 'ess')|first|first }}"
您使用 Ansible 的方式有误。可以编写一个复杂的查询(您可以为此使用 json_query 过滤器),但它会非常难以阅读和维护。
您需要做的:不要使用 hostclass: something
,而是使用群组。
群组就是为此而设计的。
您的库存应如下所示:
[puppet]
host001 ip=192.168.43.10
[ess]
host002 ip=192.168.43.11
[mdb]
host003 ip=192.168.43.21
[hostinfo:children]
puppet
ess
mdb
之后,如果需要,查询组就很简单了(例如groups.puppet
),并且很容易访问它们的变量:(hostvars[groups.puppet][0]).ip
这是您一直在寻找的代码:
(在查询之上,vars_files
也有问题)
tasks:
- include_vars:
file: ./sometext.yaml
name: sometext
- debug:
msg: "{{ sometext.hostinfo | dict2items | json_query('[?value.hostclass==`ess`] | [0].key') }}"
查询中的最后一个过滤器returns单个字符串,如果有多个hostclass
等于ess
的主机,则需要更改它,它会生成一个列表.