仅当主机名具有变量server = admin 时,我才尝试执行我的任务。我正在尝试执行以下剧本,但遇到错误。有人可以帮我这个忙吗,我正在尝试类似于对我有用的东西,例如-groups ['production'] 中的stocking_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中运行。
答案 0 :(得分:3)
servers
是一个变量,其中包含您在每个主机上声明的字符串。如果您在host3
上运行taks,则它将等于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']