簡體   English   中英

在Ansible中搜索字典值

[英]Search Dictionary Values in Ansible

有這樣的字典:

ossec_datacenter:
  atlanta:
    hostname: 'server1.fakedomain.net'
    ip: '192.168.12.170'
    port: '1515'
  miami:
    hostname: 'server2.fakedomain.net'
    ip: '192.168.20.31'
    port: '1514'
  dallas:
    hostname: 'server2.fakedomain.net'
    ip: '192.168.20.20'
    port: '1515'

我如何在when子句中搜索此字典中的所有值?

我可以使用ossec_datacenter[ossec_dc]['hostname']訪問變量

但我想搜索所有值以確保不存在匹配。

換句話說,我不希望在該數據結構中的任何地方找到inventory_hostname和IP。

如果你想使用json_query(需要ansible 2.2),你可以這樣做來搜索ip和hostname:

    - name: find inventory_hostname
      set_fact:
        found: True
      with_items:
        - "{{ ossec_datacenter | json_query('*.ip') }}"
        - "{{ ossec_datacenter | json_query('*.hostname') }}"
      when: "inventory_hostname == item"

或者如果要搜索數據中心(ip,hostname或port)中的任何鍵:

- name: find inventory_hostname
  set_fact:
    found: True
  with_items: "{{ ossec_datacenter | json_query('*.*') }}"
  when: "inventory_hostname == item"

然后測試found var。

這是主機名的條件:

when: inventory_hostname not in (ossec_datacenter.values() | map(attribute='hostname') | list)

使用ansible_default_ipv4.address或其他一些關於IP地址的事實,並使用map(attribute='ip')減少你的dict來搜索IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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