沿岸壁の規則の構成に次のものが含まれているとします。
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
この問題を解決する方法はありますか?
答え1
提供した例では、アンカーを使用できます。
- 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と2番目のキャプチャグループが続きます。
逆参照が誤って解釈される危険性がある場合(たとえば、新しいIPが変数ではなくハードコーディングされている場合)、次と使用の間の\g
混乱を避けてください。\1
\1100
replace: '\g<1>100.100.100.100\2'