Ansible에서 전체 줄 바꾸기

Ansible에서 전체 줄 바꾸기

저는 교체 모듈을 사용하여 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

관련 정보