2014-01-21 3 views
0

무언가는 압연에 유용합니다 (우리의 경우 JBoss). 플레이 북의 한 부분입니다소프트웨어의 조건부 설치 및

- name: copy jboss-eap-6.2.0.tar.gz to server 
    action: copy src=jboss-eap-6.2.0.tar.gz 
       dest=/tmp/jboss-eap-6.2.0.tar.gz 
       owner=root 
       group=root 

- name: Extracting jboss-eap-6.2.0.tar.gz 
    command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt 
가 (우리의 경우, 테스트가 /opt/jboss-eap-6.2.0을 경우 는 모든 시간을 작동하고, 보스가 이미 설치되어있을 때 나는 작전을 중지 Ansible 싶습니다 제외하고 매력처럼 작동

입니다 뭔가가 때 절에서 대상 서버에있는 경우 존재한다.이 작업을 수행 할 수있는 산뜻한 방법은 무엇입니까? 당신은 테스트를 제공 할 수 있습니까?

답변

2

를 만 다음 commandmodulecreates 매개 변수를 해결할 명령 실행을 건너 뛰고 싶었다면 이 문제는 대상 파일/디렉토리가 이미있는 경우 명령 실행을 건너 뛰도록 모듈에 지시합니다.

다음은 예입니다 :

- name: Extracting jboss-eap-6.2.0.tar.gz 
    command: creates=/opt/jboss_dir /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt 

당신의 특별한 경우가 약간 더 까다 롭습니다. 첫째, 보관함이 /tmp에 복사 중이기 때문에 다시 시작한 후에도 보관되지 않을 수 있습니다. 따라서 재생할 때마다 복사 할 수 있습니다. 둘째, jboss 디렉토리 존재 여부를 확인하기 위해서만 추가 작업을 수행해야 할 수도 있습니다.

다음 작업 것이다 : 아직 존재하지 않는 경우

  • /opt/jboss_dir 디렉토리를 만들고,이 작업의 결과가 changed 상태가 jbossDirectory 변수
  • jbossDirectory 경우에 저장됩니다, 아카이브가 될 것입니다 /tmp에 복사하는 것은
  • 같은 changed 상태는 아카이브의 추출 원인이됩니다

예시 플레이 북 :

- name: create jboss directory 
    file: state=directory dest=/opt/jboss_dir owner=root user=root 
    register: jbossDirectory 

- name: copy jboss-eap-6.2.0.tar.gz to server 
    copy: src=jboss-eap-6.2.0.tar.gz dest=/tmp/jboss-eap-6.2.0.tar.gz owner=root group=root 
    when: jbossDirectory|changed 

- name: extracti jboss-eap-6.2.0.tar.gz 
    command: /bin/tar xfz /tmp/jboss-eap-6.2.0.tar.gz -C /opt 
    when: jbossDirectory|changed 
관련 문제