我正在尝试编辑netcfg.yaml并更新名称服务器地址:
目前它有这个:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.1.222/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8,8.8.4.4]
我可以用lineinfile编辑所有的行,除了上面的最后一行:addresses: [8.8.8.8.,8.8.4.4]
我试过这个:
regexp:'地址:[[0-9]{1}[.][0-9]{1}[.][0-9]{1}[.][0-9]{1}]'
Ansible playbook没有显示任何错误,但它没有识别它来修改值。
3条答案
按热度按时间e4eetjau1#
您的模式是地址之间缺少逗号
,
,您可以尝试以下模式:addresses: \[(\d\.\d\.\d\.\d\,?)*\]
参见here演示。
c2e8gylq2#
您可以编写转义第一个
\[
的模式,并可选地重复匹配,
,后跟数字和点。如果要匹配1个或多个数字,可以使用
\d+
说明
\baddresses: \[
匹配单词addresses
后跟: [
\d\.\d\.\d\.\d
匹配4个数字,中间带一个点(?:,\d\.\d\.\d\.\d)*
可选重复匹配,
和前一个模式]
逐字匹配参见regex demo。
jbose2ul3#
通过 regex 更新此类文件中的IP是非常危险的。在这个简单的例子中有两个属性 addresses。读取YAML字典,更新并写回它会更实用。
声明要更新的内容。例如,从 ethernets 更新每个接口中的名称服务器的地址
给定用于测试的(固定)文件
声明变量
然后读文件
给予
更新字典
给予
写入文件
给予
完整的测试行动手册示例