在ansible中,關於如何引用自定義的變數,一直讓我很頭疼
尤其是有牽涉到從外部導入yaml檔案時,更是常常讓我不知道到底該怎麼抓出想要的變數
這次還是用selectattr 來處理,希望下次能夠記得…
首先是導入的yaml檔案,內容長這樣
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| client_hosts: abc.com: - host: hqdc021 ipv4: 192.168.11.21 - host: hqdc022 ipv4: 192.168.11.22 - host: hqdc023 ipv4: 192.168.11.23 - host: hqdc024 ipv4: 192.168.11.24 - host: hqdc025 iuser: True ipv4: 192.168.11.25 user: [yangj] - host: hqdc026 ipv4: 192.168.11.26 user: [changp, joy] - host: hqdc027 ipv4: 192.168.11.27 xyz.com: - host: dc021 iuser: True ipv4: 192.168.1.21 user: [tim] - host: dc022 ipv4: 192.168.1.22 - host: dc023 ipv4: 192.168.1.23 - host: dc024 ipv4: 192.168.1.24 - host: dc025 ipv4: 192.168.1.25 user: [eric] - host: dc026 ipv4: 192.168.1.26 user: [erica] - host: dc027 ipv4: 192.168.1.27
|
在playbook中,首先先導入這個檔案
1 2 3 4
| - name: load client_host include_vars: file: client_hosts.yml name: ch
|
然後用這個剛剛導入的檔案,去做出想要的清單
像底下這個,就是指定了client_hosts的 abc.com 這個域名底下,iuser有被定義的資料,再轉成list
1 2 3
| - name: get internet user list set_fact: iuser_list: "{{ ch['client_host']['abc.com']|selectattr('iuser','defined')|list }}"
|
然後就可以用來做condition了
1 2 3 4 5 6 7 8 9 10 11
| - name: copy environment block to /etc/environment copy: content: | PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games" all_proxy="{{ proxy_env }}" http_proxy="{{ proxy_env }}" https_proxy="{{ proxy_env }}" no_proxy="localhost,127.0.0.1,192.168.1.1/16,.xyz.com,.abc.com" dest: /etc/environment when: item.ipv4 == ansible_default_ipv4.address with_items: "{{ iuser_list }}"
|