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와 두 번째 캡처링 그룹이 이어집니다.

역참조가 잘못 해석될 위험이 있는 경우(예: 새 IP가 변수가 아닌 하드코딩된 경우) 다음 과 사용 사이의 \g혼동을 피하세요 .\1\1100

    replace: '\g<1>100.100.100.100\2'

관련 정보