저는 교체 모듈을 사용하여 Ansible의 전체 라인을 교체하고 있습니다. 줄에는 큰따옴표와 작은따옴표가 포함되어 있습니다. 이스케이프 처리를 위해 "\\"를 추가해 보았지만 작동하지 않는 것 같습니다. 누군가 올바른 구문을 사용하도록 도와줄 수 있나요? 파일의 실제 줄은 기본적으로
<!-- <param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname=freeswitch user=freeswitch password='' options='-c client_min_messages=NOTICE'" /> -->
db 부분의 주석 처리를 제거하고 Postgres DB-info 변수로 바꿔야 합니다.
- name: "Update switch.conf.xml with Postgres DB info"
replace:
path: /etc/freeswitch/autoload_configs/switch.conf.xml
regexp: '^<!-- <param name="core-db-dsn" value="pgsql: .*$'
line: "<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB-Info }} user={{ DB-Info
}} password='{{ DB-Pass }}' options='-c client_min_messages=NOTICE'" />"
답변1
더 많은 옵션이 있습니다. 복잡한 표현식을 이스케이프 처리하지 않으려면 파일에 넣으세요. 예를 들어, 정규 표현식과 행을 (r*,l*) 파일 세트에 넣습니다.
shell> cat files/replace/r1
^<!-- <param name="core-db-dsn" value="pgsql:(.*)$
shell> cat files/replace/l1
<param name="core-db-dsn" value="pgsql://hostaddr=127.0.0.1 dbname={{ DB_Info }} user={{ DB_Info }} password='{{ DB_Pass }}' options='-c client_min_messages=NOTICE'" />
그러면 다음 작업이 완료됩니다.
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r1') }}"
replace: "{{ lookup('template', 'files/replace/l1') }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd
파일이 더 있으면 작업이 루프로 실행됩니다. 예를 들어
- replace:
path: switch.conf.xml
regexp: "{{ lookup('file', 'files/replace/r' ~ ansible_loop.index ) }}"
replace: "{{ lookup('template', 'files/replace/l' ~ ansible_loop.index) }}"
loop: "{{ lookup('fileglob', 'files/replace/r*', wantlist=True) }}"
loop_control:
extended: true
vars:
DB_Info: freeswitch2
DB_Pass: passwd
"glob"이 원하는 것과만 일치하는지 확인하세요. 임시 파일이나 백업 파일을 삭제하세요. 이 루프에는 1부터 시작하는 연속 인덱스가 있는 (r*,l*) 파일 세트가 필요합니다.
너무 많은 (r*,l*) 파일을 유지하지 않으려면 모든 정규식과 줄을 단일 파일에 넣고 파일 줄을 반복합니다. 예를 들어
- replace:
path: switch.conf.xml
regexp: "{{ item.0 }}"
replace: "{{ item.1 }}"
with_together:
- "{{ lookup('file', 'files/replace/r-all').splitlines() }}"
- "{{ lookup('template', 'files/replace/l-all').splitlines() }}"
loop_control:
label: "{{ item.0 }}"
vars:
DB_Info: freeswitch2
DB_Pass: passwd