Replace
Ansible - 更改確切的 IP 地址
假設shorewall規則配置包含
ACCEPT net:1.234.5.253 all tcp 3306 ACCEPT net:1.234.5.2 all tcp 80 ACCEPT net:1.234.5.2 all tcp 80 ACCEPT net:1.2.3.4,1.234.5.22,1.1.1.1 all tcp 3306
我想用 ansible 替換它們
- name: Replace old ips in /etc/shorewall/rules replace: path: /etc/shorewall/rules regexp: '{{ oldip }}' replace: '{{ newip }}' backup: 'yes'
變數是
vars: oldip: 1.234.5.2 newip: 100.100.100.100
我得到的輸出是正確的,但我期望替換 ip 的精確匹配而不是這個輸出
ACCEPT net:100.100.100.10053 all tcp 3306 ACCEPT net:100.100.100.100 all tcp 80 ACCEPT net:100.100.100.100 all tcp 80 ACCEPT net:1.2.3.4,100.100.100.1002,1.1.1.1 all tcp 3306
有什麼辦法可以解決嗎?
在您提供的範例中,您可以使用錨點:
- name: Replace old ips in /etc/shorewall/rules replace: path: /etc/shorewall/rules regexp: '(\D){{ oldip }}(\D)' replace: '\1{{ newip }}\2' backup: 'yes'
搜尋一個非數字,然後是舊 IP,然後是另一個非數字。
替換為找到的第一個非數字,然後是新 IP 和第二個擷取組。
如果存在反向引用被誤解的任何風險(例如,如果您的新 IP 是硬編碼而不是在變數中),請使用
\g
以避免混淆\1
and\1100
:replace: '\g<1>100.100.100.100\2'