[英]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
是一個變量,其中包含您在每個主機上聲明的字符串。 如果您在例如host3
上運行任務,它將等於admin,server3
。 您正在尋找的條件是
when: "'admin' in servers"
或者
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 group['admin']
您上一條評論中有錯字。 它應該如下所示:
何時:組中的inventory_hostname ['admin']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.