가능 : 대상 파일이없는 경우에만 템플릿 복사


47

Ansible 1.6.6컴퓨터를 프로비저닝 하는 데 사용 하고 있습니다.

내 플레이 북에 Jinja2 템플릿에서 대상 파일을 생성 하는 템플릿 작업 이 있습니다 .

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf

somefile.conf이미 존재하는 경우 교체하고 싶지 않습니다 . Ansible로 가능합니까? 그렇다면 어떻게?

답변:


61

stat를 사용하여 파일 존재를 확인한 다음 파일이없는 경우에만 템플릿을 사용할 수 있습니다.

tasks:
  - stat: path=/etc/somefile.conf
    register: st
  - template: src=somefile.j2 dest=/etc/somefile.conf
    when: not st.stat.exists

42

템플릿 모듈 의 force 매개 변수를 사용할 수 있습니다 .

tasks:
    - template: src=somefile.j2 dest=/etc/somefile.conf force=no

또는 작업 이름 지정 ;-)

tasks:
    - name: Create file from template if it doesn't exist already.
      template: 
        src: somefile.j2
        dest:/etc/somefile.conf
        force: no

로부터 Ansible 템플릿 모듈 문서 :

force : 기본값은 yes이며 컨텐츠가 소스와 다른 경우 원격 파일을 대체합니다. 그렇지 않으면 대상이없는 경우에만 파일이 전송됩니다.

다른 답변 statforce 매개 변수가 작성된 후에 추가 되었으므로 사용 됩니다.


2
내 답변은 stat를 사용합니다. 질문 / 응답시 템플릿에 대해 사용할 수있는 강제 인수가 없었기 때문에
Teftin

10

먼저 대상 파일이 존재하는지 확인한 후 결과 출력에 따라 결정을 내릴 수 있습니다.

tasks:
  - name: Check that the somefile.conf exists
    stat:
      path: /etc/somefile.conf
    register: stat_result

  - name: Copy the template, if it doesnt exist already
    template:
      src: somefile.j2
      dest: /etc/somefile.conf
    when: stat_result.stat.exists == False   

1
이 : 작업의 IT 이름 때문에 나는이 대답을 선호
Asfand 콰지

-3

나에 따르면, 가장 쉬운 해결책은 템플릿 모듈에서 "force = no"속성을 사용하는 것입니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.