我正试图执行 我的任务只有当主机名有变量server=admin时才会执行。 . 我试图执行下面的剧本,但我面临着错误。谁能帮帮我,我正在尝试类似的东西,这对我来说是有效的。像 - groups['production'] 中的 inventory_hostname。 . 我想只有当服务器变量中有admin时才运行任务。
我的主机文件 :
[production]
host1 servers=admin,server1
host2 servers=server2
host3 servers=admin,server3
host4 servers=server4
host5 servers=server5
host6 servers=admin,server6
我的任务:
- name: run cmd
shell: hostname
register: op
when:
- inventory_hostvars in servers['admin']
我的任务应该只在host1,host3和host6中运行。
servers
是一个变量,包含一个字符串,你在每个主机上声明。如果你在e.g上运行一个taks host3
它将等于 admin,server3
. 你要找的条件是
when: "'admin' in servers"
或
when: servers is search('admin')
现在,我认为你只是在重新发明轮子,因为正如你自己所指出的,你可以通过组来更容易和更清晰地实现这个目标。上面的解决方案会让你更难得到所有服务器的列表,比如说,你要得到一个有 admin
在...中 servers
变量,而不是只写一个组名。
my_admin_servers: "{{ groups['prod'] | map('extract', hostvars) | selectattr('servers', 'search', 'admin') | map(attribute='inventory_hostname') | list }}"
我是这样做的。
你的清单
[production]
host1
host2
host3
host4
host5
host6
[admin]
host1
host3
host6
还有你的新条件。
when: inventory_hostname in group['admin']