我有一個IP地址字符串中提取前三octects:192.168.10.2
Ansible:從IP地址
我想提取IP在Ansible的前三個字節,我試圖用這個表達式。
{{comp_ip | regex_replace("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"), "//1"}}
這不會產生任何結果。有人能糾正我出錯的地方嗎?
我有一個IP地址字符串中提取前三octects:192.168.10.2
Ansible:從IP地址
我想提取IP在Ansible的前三個字節,我試圖用這個表達式。
{{comp_ip | regex_replace("^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}"), "//1"}}
這不會產生任何結果。有人能糾正我出錯的地方嗎?
如果已經有了點分隔的IP地址,有是一種簡單的方法:
{{ comp_ip.split('.')[0:3] | join('.') }}
這是一個很酷的伎倆,很明顯。所以一般來說,我們可以通過管道使用任何python方法嗎? – spamulap12
不,管道用於過濾器,請參閱我的[其他](http://stackoverflow.com/a/39794185/2795592)答案以瞭解詳細信息。但是你可以用點符號來使用python的字符串和字符串方法。 –
你做得對,你只需要在正則表達式中使用括號來創建一個組。最好匹配整個ip
並結束您的正則表達式與$
,並且在您的代碼中將//1
更改爲\\1
。
變化正則表達式來自:
^[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}
爲了這個表達式:
^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$
這是全碼:
{{comp_ip | regex_replace('^([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3})\.[0-9]{1,3}$', '\\1')}}
謝謝,但它有一些問題與我膽汁的語法。 違規行似乎是: set_fact: net:{{comp_ip | regex_replace('^([0-9] {1,3}。[0-9] {1,3}。[0-9] {1,3})'),'\\ 1'}} ^這裏 – spamulap12
@ spamulap12嘗試更新的代碼。 – Ibrahim
沒有語法錯誤,但o/p沒有任何內容 {「net」:「(u'','\\\\ 1')」} – spamulap12
在要計算網絡地址,您可以使用Ansible IPADDR過濾這正好提供了這種功能的情況下: http://docs.ansible.com/ansible/latest/playbooks_filters_ipaddr.html
---
- hosts: localhost
vars:
my_ip: "{{ ansible_default_ipv4.network }}/{{ ansible_default_ipv4.netmask }}"
tasks:
- debug: msg="network {{ my_ip | ipaddr('network') }}"
- debug: msg="netmask {{ my_ip | ipaddr('netmask') }}"
你想'192.168.10'退換? – helloV
是的,那是正確的。 – spamulap12