Ansible - 正確なIPアドレスの変更

Ansible - 正確なIPアドレスの変更

沿岸壁の規則の構成に次のものが含まれているとします。

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'

関連情報