해안벽 규칙 구성에 다음이 포함되어 있다고 가정합니다.
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'