2017-02-07 1 views
1

다음 코드는 실행 후 kubernetest pod가 사라질 때까지 기다리는 코드입니다. 포드가 사라졌지만 스크립트가 오류와 함께 실패합니다. 포드가 사라질 때까지 기다렸다가 나머지 작업을 계속하고 싶습니다.grep 항목이 없을 때 grep 명령 실행에 실패했습니다.

- name: Check ms pod has disappeared 
    sudo: yes 
    run_once: true 
    when: ansible_hostname != "inception-{{ vms_subdomain }}" 
    shell: "kubectl get pod --namespace=vms | grep {{ item.key }}" 
    register: command_res 
    with_dict: "{{ microservices }}" 
    until: "command_res.rc == 1" 
    retries: 10 
    delay: 20 

TASK [sp-sif : Check ms resouce has disappeared] ******************************* 
Tuesday 07 February 2017 15:26:52 +0000 (0:00:02.051)  0:03:23.889 ****** 
FAILED - RETRYING: TASK: sp-sif : Check ms resouce has disappeared (5 retries left). 
FAILED - RETRYING: TASK: sp-sif : Check ms resouce has disappeared (4 retries left). 
FAILED - RETRYING: TASK: sp-sif : Check ms resouce has disappeared (3 retries left). 

failed: [kubernetes-master-vik202vmsservices-1] (item={'key': u'iwan', 'value': {u'streams': u'ncs-alarms'}}) => {"attempts": 4, "changed": true, "cmd": "kubectl get pod --namespace=vms | grep iwanms", "del 
ta": "0:00:00.048855", "end": "2017-02-07 15:28:26.707882", "failed": true, "item": {"key": "iwan", "value": {"streams": "ncs-alarmsf"}}, "rc": 1, "start": "2017-02-07 15:28:26.659027", "stderr": "", "stdout 
": "", "stdout_lines": [], "warnings": []} 
+0

이 작업은 적합하지 않습니다. 루프없이 수행하십시오 (예 : 'kubectl'에'-o json'을 추가하고 json으로 stdout을 구문 분석하여 모든 키를 즉시 검색하십시오. –

답변

1

나는 당신이 failed_when 명령, 예를 들어 작업을해야한다고 생각 :

- name: Check ms pod has disappeared 
    sudo: yes 
    run_once: true 
    #when: ansible_hostname != "inception-{{ vms_subdomain }}" 
    shell: "cat /tmp/runbmct2.sh|grep raulhugo" 
    register: command_res 
    #with_dict: "{{ microservices }}" 
    until: "command_res.rc == 1" 
    failed_when: "'NOT' in command_res.stdout" 
    retries: 10 
    delay: 20 
- name: Check the output 
    debug: var=command_res 

당신은 내가 당신의 작업 failed_when에 추가의 예에서 보듯이 " 'NOT'command_res.stdout에서" 만약 당신이 이것에 대해서 그리고 당신에게 다시 작별 인사를한다면 그것은 실패하지 않을 것입니다.

이 종류의 명령 grep을 사용하면 오류가 발생하는 위치를 명확히해야합니다.