2016-08-11 1 views
0
  1. 다음과 같이 3 가지 작업이 있습니다.각 작업의 종료 상태를 얻는 방법

    --- 
    
        - name: Instance provisioning 
        local_action: 
         module: ec2 
         region: "{{ vpc_region }}" 
         key_name: "{{ ec2_keypair }}" 
         instance_type: "{{ instance_type }}" 
         image: "{{ ec2_image}}" 
         zone: "{{ public_az }}" 
         volumes: 
         - device_name: "{{ device }}" 
          volume_type: "{{ instance_volumetype }}" 
          volume_size: "{{ volume }}" 
          delete_on_termination: "{{ state }}" 
         instance_tags: 
         Name: "{{ instance_name }}_{{ release_name }}_APACHE" 
         environment: "{{ env_type }}" 
         vpc_subnet_id: "{{ public_id }}" 
         assign_public_ip: "{{ public_ip_assign }}" 
         group_id: "{{ sg_apache }},{{ sg_internal }}" 
         wait: "{{ wait_type }}" 
        register: ec2 
    
        - name: adding group to inventory file 
        lineinfile: 
         dest: "/etc/ansible/hosts" 
         regexp: "^\\[{{ release_name }}\\]" 
         line: "[{{ release_name }}]" 
         state: present 
    
        - name: adding apache ip to hosts 
        lineinfile: 
         dest: "/etc/ansible/hosts" 
         line: "{{ item.private_ip }} name=apache dns={{ item.public_dns_name }} 
        with_items: ec2.instances 
    

    이제는 성공 여부에 관계없이 각 작업의 종료 상태를 확인하고 싶습니다.

  2. 작업 중 하나라도 실패하면 다른 작업을 실행해서는 안됩니다.

ansible 각본

답변

0

어쩌면 playbook blocks를 작성하고 오류 처리 당신을 도울 것입니다 어떻게 조언을 주시기 바랍니다?

+0

모두 안녕을하자, 그래서 pls는 나의 더 잘 이해하기위한 샘플 예제를 공유 할 수 있습니다. – kumar

1

각 작업에 변수를 등록한 후 다음 작업에서 확인하십시오. http://docs.ansible.com/ansible/playbooks_tests.html#task-results

+0

실패한 작업이 이미 기본 동작으로 끝난 후 장부에 실패 할 때 왜 그렇게할까요? – smiller171

+0

플레이 북에 포함되지 않았지만 실패한 작업을 계속 수행 할 수 있도록 작업에 "failed_when : False"를 포함시키는 것이 매우 쉽습니다. 그것은 이유 일 것입니다. 작업이 실패 할 때 항상 게임 플레이 북이 실패하는 것은 아닙니다. 실제로 게임 플레이 북을 잘 디자인한다면 우연히 그런 일이 일어나기를 원하지 않을 것입니다. – Petro026

+0

이것은 그가 묻는 것의 반대입니다. 왜냐하면 그는 작업이 실패 할 경우 전체 플레이 북을 실패하기를 원하기 때문입니다. 또한 믿을 수 없을만큼 나쁜 습관입니다. 거의 언제나 실패를 당하면 멈추기를 원합니다. 왜냐하면 그것은 당신이 선언 한 상태에 도달하는 것이 불가능하기 때문입니다. 실패 후에해야 할 정리가 있으면 블록에서 오류 처리를 사용하여이를 실행합니다. – smiller171

0

이것은 이미 Ansible의 기본 동작입니다. 작업이 실패하면 플레이 북은 작업을 중단하고보고합니다. 이 주변의 추가 기능을 빌드 할 필요가 없습니다.

0

쿠마

태스크가 변경된 경우, 코드에서

--- 

    - name: Instance provisioning 
    local_action: 
     module: ec2 
     region: "{{ vpc_region }}" 
     key_name: "{{ ec2_keypair }}" 
     instance_type: "{{ instance_type }}" 
     image: "{{ ec2_image}}" 
     zone: "{{ public_az }}" 
     volumes: 
     - device_name: "{{ device }}" 
      volume_type: "{{ instance_volumetype }}" 
      volume_size: "{{ volume }}" 
      delete_on_termination: "{{ state }}" 
     instance_tags: 
     Name: "{{ instance_name }}_{{ release_name }}_APACHE" 
     environment: "{{ env_type }}" 
     vpc_subnet_id: "{{ public_id }}" 
     assign_public_ip: "{{ public_ip_assign }}" 
     group_id: "{{ sg_apache }},{{ sg_internal }}" 
     wait: "{{ wait_type }}" 
    register: ec2 

    - name: adding group to inventory file 
    lineinfile: 
     dest: "/etc/ansible/hosts" 
     regexp: "^\\[{{ release_name }}\\]" 
     line: "[{{ release_name }}]" 
     state: present 
    when: ec2 | changed 
    register: fileoutput 

    - name: adding apache ip to hosts 
    lineinfile: 
     dest: "/etc/ansible/hosts" 
     line: "{{ item.private_ip }} name=apache dns={{ item.public_dns_name }} 
    with_items: ec2.instances 
    when: fileoutput | changed 

각각의 변수 모든 작업이 등록 할이 성공 또는 실패 인 경우 각 작업의 출력을 확인하려면

True이면 Followed Task가 실행되고 그렇지 않으면 해당 Task가 건너 뜁니다.

0

첫 번째 작업에서는 출력을 ec2에 등록해야합니다. 이제 작업이 실패하면 실패 모듈을 사용하여 재생을 중지합니다.

Ex.

register: ec2 

fail: 
    when: "ec2.rc == 1" 

여기서 rc는 명령의 리턴 코드입니다. 우리는 실패로 1을, 성공으로는 0을 가정합니다.

모든 작업 후에 실패 모듈을 사용하십시오. 나는 내가 링크를 통해 갈 때 정말 빠른 생각을받지 ansible하는 초보자이야 이후

이 .. 당신을 위해 작동하는지 알려

관련 문제