如何在 ansible playbook 的 when 条件下使用主机变量
How to use host variables in when condition in ansible playbook
仅当主机名具有变量 servers=admin
.
时,我才尝试执行我的任务
我正在尝试执行以下剧本,但遇到错误。
我正在尝试这个,因为它类似于 inventory_hostname in groups['production']
这样对我有用的东西。我想 运行 只有当服务器变量中有 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
是一个包含您在每个主机上声明的字符串的变量。如果你 运行 a takes 例如 host3
它将等于 admin,server3
。您正在寻找的条件是
when: "'admin' in servers"
# or
when: servers is search('admin')
现在,我认为您只是在重新发明轮子,因为正如您自己指出的那样,您可以通过小组更轻松、更清楚地实现这一目标。例如,与仅寻址组名相比,上述解决方案更难获得在 servers
变量中某处具有 admin
的所有服务器的列表。
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 groups['admin']
仅当主机名具有变量 servers=admin
.
我正在尝试执行以下剧本,但遇到错误。
我正在尝试这个,因为它类似于 inventory_hostname in groups['production']
这样对我有用的东西。我想 运行 只有当服务器变量中有 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
是一个包含您在每个主机上声明的字符串的变量。如果你 运行 a takes 例如 host3
它将等于 admin,server3
。您正在寻找的条件是
when: "'admin' in servers"
# or
when: servers is search('admin')
现在,我认为您只是在重新发明轮子,因为正如您自己指出的那样,您可以通过小组更轻松、更清楚地实现这一目标。例如,与仅寻址组名相比,上述解决方案更难获得在 servers
变量中某处具有 admin
的所有服务器的列表。
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 groups['admin']