Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

用 ip 位置判斷是否要執行task #44

Open
changchichung opened this issue Jul 22, 2019 · 2 comments
Open

用 ip 位置判斷是否要執行task #44

changchichung opened this issue Jul 22, 2019 · 2 comments

Comments

@changchichung
Copy link

我有一個playbook ,其中有兩個 task是這樣
當user ip (ansible_default_ipv4.address) 在清單內 ( {{ iuser_list }} )時
會去加入一些文字到 /etc/environment
反之,則取消這一段文字

- name: add proxy to /etc/environment
  blockinfile:
    path: /etc/environment
    marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
    block: |
      all_proxy="{{ proxy_env }}"
      http_proxy="{{ proxy_env }}"
      https_proxy="{{ proxy_env }}"
      no_proxy="localhost,127.0.0.1,192.168.1.1/16,.abc.com,.def.com"
 when: item.ipv4 == ansible_default_ipv4.address
 with_items: "{{ iuser_list }}"

# remove proxy when user not in iuser_list 
- name: removeproxy from /etc/environment
  blockinfile:
    path: /etc/environment
  marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
    block: ""
  when: ansible_default_ipv4.address not in "item.ipv4"
  with_items: "{{ iuser_list }}"

我想請問 第一個task 已經成立 user 的電腦ip 有在 iuser_list 清單中了,可是為什麼第二個task 它還是會執行?

執行時的log

TASK [proxy : add proxy to /etc/environment] ***************************************************************************************************************
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:ef', u'host': u'dcpc051', u'ipv4': u'192.168.28.51', u'user': [u'tsengyi'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:c1', u'host': u'dcpc052', u'ipv4': u'192.168.28.52', u'user': [u'hsiaoch'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:bd', u'host': u'dcpc053', u'ipv4': u'192.168.28.53', u'user': [u'chenp'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:7c', u'host': u'dcpc057', u'ipv4': u'192.168.28.57', u'user': [u'guot'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'host': u'dcpc058', u'ipv4': u'192.168.28.58', u'user': [u'depot'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'30:85:a9:a6:2a:ad', u'host': u'pc051', u'ipv4': u'192.168.1.51', u'user': [u'tsaib'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'c8:9c:dc:62:2d:dd', u'host': u'pc053', u'ipv4': u'192.168.1.53', u'user': [u'hsuje'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'10:bf:48:d6:0d:08', u'host': u'pc055', u'ipv4': u'192.168.1.55', u'user': [u'chenhu'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:09:c2:db', u'host': u'pc062', u'user': [u'chengc'], u'ipv4': u'192.168.1.62', u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:ce', u'host': u'pc079', u'ipv4': u'192.168.1.79', u'user': [u'huangyi'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:5c', u'host': u'pc081', u'ipv4': u'192.168.1.81', u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:42', u'host': u'pc083', u'ipv4': u'192.168.1.83', u'user': [u'liuya'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:5c', u'host': u'pc085', u'ipv4': u'192.168.1.85', u'user': [u'wup'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:cb', u'host': u'pc086', u'ipv4': u'192.168.1.86', u'user': [u'tsaihp'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:f0', u'host': u'pc087', u'ipv4': u'192.168.1.87', u'user': [u'huc'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:75', u'host': u'pc091', u'ipv4': u'192.168.1.91', u'user': [u'tsaoc'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'74:d0:2b:99:fb:5f', u'host': u'pc095', u'ipv4': u'192.168.1.95', u'user': [u'hsuli'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'c8:9c:dc:62:2d:1a', u'host': u'pc099', u'ipv4': u'192.168.1.99', u'user': [u'guot'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:c3', u'host': u'pc101', u'ipv4': u'192.168.1.101', u'user': [u'tsaiw'], u'iuser': True}) 
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:a9', u'host': u'pc105', u'ipv4': u'192.168.1.105', u'user': [u'wul'], u'iuser': True})
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:46', u'host': u'pc106', u'ipv4': u'192.168.1.106', u'user': [u'chaow'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:f0:33', u'host': u'pc109', u'ipv4': u'192.168.1.109', u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:25', u'host': u'pc112', u'ipv4': u'192.168.1.112', u'user': [u'suhany'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:6f', u'host': u'pc114', u'ipv4': u'192.168.1.114', u'user': [u'liwa'], u'iuser': True}) 
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:aa', u'host': u'pc120', u'ipv4': u'192.168.1.120', u'user': [u'wany'], u'iuser': True}) 

TASK [proxy : removeproxy from /etc/environment] ***********************************************************************************************************
changed: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:ef', u'host': u'dcpc051', u'ipv4': u'192.168.28.51', u'user': [u'tsengyi'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:c1', u'host': u'dcpc052', u'ipv4': u'192.168.28.52', u'user': [u'hsiaoch'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:bd', u'host': u'dcpc053', u'ipv4': u'192.168.28.53', u'user': [u'chenp'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:7c', u'host': u'dcpc057', u'ipv4': u'192.168.28.57', u'user': [u'guot'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'host': u'dcpc058', u'ipv4': u'192.168.28.58', u'user': [u'depot'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'30:85:a9:a6:2a:ad', u'host': u'pc051', u'ipv4': u'192.168.1.51', u'user': [u'tsaib'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'c8:9c:dc:62:2d:dd', u'host': u'pc053', u'ipv4': u'192.168.1.53', u'user': [u'hsuje'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'10:bf:48:d6:0d:08', u'host': u'pc055', u'ipv4': u'192.168.1.55', u'user': [u'chenhu'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:09:c2:db', u'host': u'pc062', u'user': [u'chengc'], u'ipv4': u'192.168.1.62', u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:ce', u'host': u'pc079', u'ipv4': u'192.168.1.79', u'user': [u'huangyi'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:5c', u'host': u'pc081', u'ipv4': u'192.168.1.81', u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:42', u'host': u'pc083', u'ipv4': u'192.168.1.83', u'user': [u'liuya'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:5c', u'host': u'pc085', u'ipv4': u'192.168.1.85', u'user': [u'wup'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:cb', u'host': u'pc086', u'ipv4': u'192.168.1.86', u'user': [u'tsaihp'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:f0', u'host': u'pc087', u'ipv4': u'192.168.1.87', u'user': [u'huc'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ec:75', u'host': u'pc091', u'ipv4': u'192.168.1.91', u'user': [u'tsaoc'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'74:d0:2b:99:fb:5f', u'host': u'pc095', u'ipv4': u'192.168.1.95', u'user': [u'hsuli'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'c8:9c:dc:62:2d:1a', u'host': u'pc099', u'ipv4': u'192.168.1.99', u'user': [u'guot'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:c3', u'host': u'pc101', u'ipv4': u'192.168.1.101', u'user': [u'tsaiw'], u'iuser': True})
skipping: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ed:a9', u'host': u'pc105', u'ipv4': u'192.168.1.105', u'user': [u'wul'], u'iuser': True}) 
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:46', u'host': u'pc106', u'ipv4': u'192.168.1.106', u'user': [u'chaow'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:f0:33', u'host': u'pc109', u'ipv4': u'192.168.1.109', u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:25', u'host': u'pc112', u'ipv4': u'192.168.1.112', u'user': [u'suhany'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ee:6f', u'host': u'pc114', u'ipv4': u'192.168.1.114', u'user': [u'liwa'], u'iuser': True})
ok: [pc105.abc.com] => (item={u'hwaddress': u'f4:4d:30:45:ef:aa', u'host': u'pc120', u'ipv4': u'192.168.1.120', u'user': [u'wany'], u'iuser': True})

TASK [proxy : Add proxy to git] ****************************************************************************************************************************
changed: [pc105.abc.com] => (item={u'opt': u'http.proxy', u'prot': u'http'})
changed: [pc105.abc.com] => (item={u'opt': u'https.proxy', u'prot': u'https'})

TASK [proxy : Set git to https] ****************************************************************************************************************************
changed: [pc105.abc.com]

TASK [proxy : log role name to file] ***********************************************************************************************************************
changed: [pc105.abc.com]

TASK [proxy : add motd hook for package list] **************************************************************************************************************
ok: [pc105.abc.com]

PLAY RECAP *************************************************************************************************************************************************
pc105.abc.com         : ok=9    changed=4    unreachable=0    failed=0 
@changchichung
Copy link
Author

changchichung commented Jul 22, 2019

有改出一版可以正確執行的
先把原先清單中的 ipv4 單獨做出一個list 然後去判斷client 的ip 是否在這個iplist 中

- name: get internet user list
  set_fact:
    iuser_list: "{{ ch['client_hosts']['abc.com'] |selectattr('iuser', 'defined')| list }}"

- name: create iuser_ip_list
  set_fact:
    iuser_ip_list: "{{ iuser_list|map(attribute='ipv4')|list }}"

- name: add proxy to /etc/environment
  blockinfile:
    path: /etc/environment
    marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
    block: |
      all_proxy="{{ proxy_env }}"
      http_proxy="{{ proxy_env }}"
      https_proxy="{{ proxy_env }}"
      no_proxy="localhost,127.0.0.1,192.168.1.1/16,.def.com.tw,.abc.com"
  when: ansible_default_ipv4.address in iuser_ip_list

# remove proxy when user not in iuser_list 
- name: remove proxy from /etc/environment
  blockinfile:
    path: /etc/environment
    marker: "<!-- {mark} ANSIBLE MANAGED BLOCK -->"
    block: ""
  when: ansible_default_ipv4.address not in iuser_ip_list

不過我還是弄不懂,為什麼原來的寫法不行?這兩個task的寫法是互斥的呀,怎麼會兩個task都執行?

@changchichung
Copy link
Author

自我反省一下觀念
在原來的list 中,資料長這個樣子

hwaddress: f4:4d:30:45:ee:6f', host: pc114', ipv4: 192.168.1.114', user: [liwa'], iuser: True
hwaddress: f4:4d:30:45:ef:aa', host: pc120', ipv4: 192.168.1.120', user: [wany'], iuser: True

在第一個task中,因為是用 in list 去做比對,所以很正常的一直比對到有符合的資料,然後開始進行task
但是在第二個task中,用的是not in ,於是第一筆資料就符合條件,於是也開始執行task

我的解法就是後來貼的,單獨把ip 做成一個list ,然後比對ip 就好,這樣子就不會出現上面說的情況了
也歡迎其他先進提供不同思維的解決方法..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant