問題:
由於線上機器是多家廠商的且網卡會有公網IP和內網IP都綁定情形,並且有些服務必須保證監聽內網IP,但在host清單文件配置中有可能是內網IP,也有可能是公網IP。
使用:變量 {{ ansible_all_ipv4_addresses }} 會獲取機器所有IP,但沒有排序
使用: 變量 {{ ansible_default_ipv4['address'] }} 則是網卡默認IP,經驗證此時有可能是內網IP也有可能是公網IP
解決:
安裝:netaddr 模塊
yum install -y python-netaddr pip3 install netaddr
對變量 ansible_all_ip_addresses
使用 ipaddr
過濾
{{ ansible_all_ipv4_addresses | ipaddr('private') | first }} or {{ ansible_all_ipv4_addresses | ipaddr('10.0.0.0/8') | first }}
參考:
https://docs.ansible.com/ansible/2.3/playbooks_filters_ipaddr.html
https://docs.ansible.com/ansible/2.3/playbooks_filters.html#filters
https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters_ipaddr.html
https://stackoverflow.com/questions/34730239/how-to-get-host-private-network-address-in-ansible
https://www.cnblogs.com/carriezhangyan/p/10950970.html