当grep项不存在时,命令grep在ansible中失败

时间:2017-02-07 18:46:21

标签: ansible

下面这段代码正在等待kubernetest pod在发布后消失。 pod确实消失但脚本因错误而失败。 我想等到pod消失,然后继续完成任务。

- 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": []}

1 个答案:

答案 0 :(得分:2)

我认为你应该使用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:“'''在command_res.stdout中”如果您在此处再次运行Playbook,它将不会失败。

当你使用这种命令grep时,你应该指出它会失败的地方。