簡體   English   中英

如何在 ansible 劇本中的條件下使用主機變量

[英]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']

我的任務應該只在host1host3host6上運行。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM