Ansible UNTIL 基于输出循环

问题描述 投票:0回答:1

我使用 UNTIL 逻辑来进行 Ansible 检查 beanstalk 的运行状况。预期的行为是,当运行状况或输出变为Green时,循环将结束。然而,输出似乎已经是绿色的,但循环仍然达到最后一次计数,并且 ansible 作业失败。这是我正在使用的 ansible UNTIL 循环

- name: CHECKING IF THE BEANSTALK IS HEALTHY
    shell: "eb status | grep Health | sed -e 's/Health://g' | sed 's/^ *//g'"
    register: result
    until: result.stdout.find("Green") != -1
    retries: 10
    delay: 60
    args:
      chdir: "{{ playbook_dir }}/{{ env }}/my-app"

我刚刚获得健康值,如果颜色是绿色,那么循环应该完成,但是在我使用的这段代码中,健康状况已经至少第四次循环检查为绿色,但仍然达到最后一次计数失败了。

这是实际检查

my-pc$ eb status | grep Health | sed -e 's/Health://g' | sed 's/^ *//g'
Grey

my-pc$ eb status | grep Health | sed -e 's/Health://g' | sed 's/^ *//g'
Grey

my-pc$ eb status | grep Health | sed -e 's/Health://g' | sed 's/^ *//g'
Grey

my-pc$ eb status | grep Health | sed -e 's/Health://g' | sed 's/^ *//g'
Green

未调整的实际输出

my-pc$ eb status
Environment details for: app-mong-lagot-ka
  Application name: lagot-ulo-mo
  Region: us-east-1
  Deployed Version: None
  Environment ID: e-potmaohab
  Platform: arn:aws:elasticbeanstalk:ap-northeast-1::platform/PHP 7.0 running on 64bit Amazon Linux/2.9.0
  Tier: WebServer-Standard-1.0
  CNAME: app-mong-lagot-ka.us-east-1.elasticbeanstalk.com
  Updated: 2020-02-28 20:43:14.348000+00:00
  Status: Ready
  Health: Green
loops ansible amazon-elastic-beanstalk
1个回答
0
投票

Ansible:如何

retries
until
具体术语在
stdout

我了解您喜欢重试任务,直到满足条件并且消息

Green
显示在
stdout
中。

基于文档和您的示例,一个最小的剧本

~/test$ echo 'Health: Grey' > health.log
---
- hosts: localhost
  become: false
  gather_facts: false

  tasks:

  - name: CHECKING IF HEALTHY
    shell: "grep Health health.log | sed -e 's/Health: //g'" # | sed 's/^ *//g'
    register: result
    until: result.stdout.find("Green") != -1
    retries: 10 # times
    delay: 1 # seconds

将产生

的输出
PLAY [localhost] ****************************************
FAILED - RETRYING: CHECKING IF HEALTHY (10 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (9 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (8 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (7 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (6 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (5 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (4 retries left).
FAILED - RETRYING: CHECKING IF HEALTHY (3 retries left).

并在

后立即停止
~/test$ echo 'Health: Green' > health.log

TASK [CHECKING IF HEALTHY] *******************
changed: [localhost]

PLAY RECAP ***********************************
localhost                  : ok=1    changed=1
© www.soinside.com 2019 - 2024. All rights reserved.