2016-10-13 4 views
2

내가 Ansible 플레이 북에서 다음을 수행하고자 존재하는 경우 쉘 명령을 실행하지 않습니다Ansible : 파일이

- name: "Generate variant html report" 
    shell: "<my command>" 
    with_items: "{{ variants | default([]) }}" 
    when: ({{ folderReports }}/{{ item }}).exists == False 

when 내부 내가 파일 경로를 만들 수있는 방법이 필요하고 있는지 확인 그것이 존재하는지의 여부. 내 첫 표현식을 둘러싸 기 위해 "(" ")"을 사용하려했지만 작동하지 않는 것 같습니다.

2016-10-13 16 : 22 : 48,130 p = 94292 u = sautomation | 치명적인 : [localhost] : FAILED! 조건부 검사 ({{folderReports}}/{{item}}) 존재 함 == True '오류가 발생했습니다 : templateing string 중 템플릿 오류가 발생했습니다 : 예기치 않은 오류 : "msg" '/'문자열 : {% if (/opt/diff-test1.diff).exists == True %} 참 {% else %} 거짓 {% endif %} \ n \ n 오류가 '/ opt/ansible/roles/stats/tasks/tasks/main.yml ': 45 행 3 행에 있지만 정확한 구문 문제에 따라 \ n 다른 위치에있을 수 있습니다. \ n \ n 문제가되는 행은 다음과 같습니다. \ n \ n \ N- 이름 : \ N^여기 \ "보고서 \ 생성"\ n "} 지정된 파일이 이미 존재하는 경우

+0

솔직히이 문제는 제목에 지정한 "* Jinja2/Anecessible nested expression *"과 관련이 없습니다. 내가 편집하여 오해의 소지가있는 태그 (Python, Jinja2)를 제거했습니다. – techraf

답변

2

가 실행에서 작업을 방지하기 위해, shell 모듈의 creates 매개 변수를 사용

- name: "Generate variant html report" 
    shell: "<my command>" 
    args: 
    creates: "{{ folderReports }}/{{ item }}" 
    with_items: "{{ variants | default([]) }}" 

.exists은 조건부에서 대상 노드의 파일이 아니라 변수 (사실)가 있는지 확인하기 때문에 오류가 발생합니다.

+0

나는 당신이 지금하는 말을 이해하지 못합니다. 그것은 정확히 당신이 질문에서 지정한 것입니다. 파일이 존재하지 않으면 작업이 실행되어야합니다 ('.exist == False'). "파일 **이 존재하면 **이 단계는 ** 실행되지 않습니다."와 동일합니다. – techraf

+0

죄송합니다, 귀하는 완전히 옳습니다. 게임의 다른 부분에서는 파일이있는 경우에만 작업을 수행해야합니다. 그렇게 할 수있는 방법이 있습니까? –

+0

두 단계 : 먼저 확인하려는 파일의 경로를 지정하여 ['find'] (https://docs.ansible.com/ansible/find_module.html) 모듈을 사용하여 파일이 존재하는지 확인한 다음 태스크는 'matched'의 반환 값을 기반으로 조건부를가집니다. – techraf