我使用 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
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