我是新来的ansible。
我有一个包含多行的文件,其中某些行引用了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替换模块,使用正则表达式和替换在行中查找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地址替换为我在replace中指定的IP地址
是否可以使用lineinfile或replace这样的模块从每行提取IP地址并将其递增,并替换ipaddr代替旧IP?
我正在运行ansible 2.6
答案 0 :(得分:1)
您可以从ansible剧本中调用python脚本来执行您感兴趣的任务。如果您要进行ip地址算术,则ipaddress module很有用。
例如:
---
- 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)
答案 1 :(得分:0)
尝试使用此正则表达式:
^(\d{1,3}\.){3}\d{1,3}
^
表示字符串的开头。