[英]Ansible replace ip address using regex by looping through a file line by line
我是新來的。
我有一個包含多行的文件,其中某些行引用了ipv4地址。 我的用例是用相同ip的增量版本替換每行中的ipaddress。
因此,例如,如果我的文件包含以下行:
該行的IP地址是10.1.1.1,用戶名test1
該行的IP地址為20.2.2.2,用戶名為test2
我想將其替換為:
該行的IP地址是10.1.1.2,用戶名test1
該行的IP地址為20.2.2.3,用戶名為test2
我正在使用Ansible replace模塊使用正則表達式和替換在行中找到ipv4地址。
- name: Increment and Replace Ip address and
replace:
path: "config/changed-ip.txt"
regexp: "{{ '([0-9]{1,3}[\\.]){3}[0-9]{1,3}' }}"
replace: "{{ 'x.x.x.x' }}"
上面的代碼用替換中指定的IP地址替換了所有ip地址。
有沒有一種方法可以從每行提取IP地址並增加它,並使用lineinfile或replace這樣的模塊來替換ipaddr代替舊的ip?
我正在運行ansible 2.6
嘗試使用此正則表達式:
^(\d{1,3}\.){3}\d{1,3}
^
表示字符串的開頭。
您可以從ansible劇本中調用python腳本來執行您感興趣的任務。如果要執行ip地址算術,則ipaddress模塊很有用。
例如:
---
- hosts: all
tasks:
- command: "python3 process_ip_addresses.py text"
隨附的python是:
from ipaddress import IPv4Address
import re
import sys
file_path = sys.argv[1]
with open(file_path) as f:
text = f.read()
ip_addresses = re.findall( r'[0-9]+(?:\.[0-9]+){3}', text )
replacement_ip_addresses = [str(IPv4Address(address) + 1) for address in ip_addresses]
for old_address, new_addresss in zip(ip_addresses, replacement_ip_addresses):
text = text.replace(old_address, new_addresss)
with open(file_path, "w") as f:
f.write(text)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.