首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >需要跳过ansible中的失败,以便脚本继续执行,但希望在最后得到失败计数

需要跳过ansible中的失败,以便脚本继续执行,但希望在最后得到失败计数
EN

Stack Overflow用户
提问于 2020-07-13 12:18:08
回答 1查看 129关注 0票数 1

我是ansible的新手,我有一个场景,我的ansible脚本应该完全执行,即使发生了一些条件故障。在执行结束时,我想检查有多少条件失败了,因为失败了计数。

代码语言:javascript
运行
复制
PLAY RECAP **********************************************************************************************************************************************************************************************
10.0.*.***                 : ok=0   changed=  unreachable=0    failed=0    skipped=0   rescued=0    ignored=0

以下是我尝试过的:

我正在运行一部名为“角色”的游戏。

代码语言:javascript
运行
复制
- name: Checking access
  hosts: cluster
  tasks:
  - name: role call
    include_role:
      name: url_access

如果一个条件在剧本中失败,它应该继续执行,但是最后,失败的计数应该显示失败的数量。

角色的main.yml如下:

代码语言:javascript
运行
复制
- name: Access to google.com
  shell: >
    curl -s -o /dev/null -w "%{http_code}" google.com
  ignore_errors: yes
  register: access1

- debug:
    msg: "Access Failed to google.com"
  when: access1.stdout!="200"

- debug:
    msg: "Access Successful to google.com"
  when: access1.stdout=="200"

- name: Access to redhat.com
  shell: >
    curl -s -o /dev/null -w "%{http_code}" redhat.com
  ignore_errors: yes
  register: access2

- debug:
    msg: "Access Failed to redhat.com"
  when: access2.stdout!="301"

- debug:
    msg: "Access Successful to redhat.com"
  when: access2.stdout=="301"

这是我得到的输出

代码语言:javascript
运行
复制
TASK [url_access : Access to google.com] ************************************************************************************************************************************************
changed: [10.0.*.***]
changed: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
skipping: [10.0.*.***]
skipping: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
ok: [10.0.*.***] => {
    "msg": "Access Successful to google.com"
}
ok: [10.0.*.***] => {
    "msg": "Access Successful to google.com"
}

TASK [url_access : Access to redhat.com] ************************************************************************************************************************************************
changed: [10.0.*.***]
changed: [10.0.*.***]


TASK [url_access : debug] *******************************************************************************************************************************************************************************
ok: [10.0.*.***] => {
    "msg": "Access Failed to redhat.com"
}
ok: [10.0.*.***] => {
    "msg": "Access Failed to redhat.com"
}

TASK [url_access : debug] *******************************************************************************************************************************************************************************
skipping: [10.0.*.***]
skipping: [10.0.*.***]


PLAY RECAP **********************************************************************************************************************************************************************************************
10.0.*.***                 : ok=2   changed=2  unreachable=0    failed=0    skipped=2   rescued=0    ignored=0
10.0.*.***                 : ok=2   changed=2 unreachable=0    failed=0    skipped=2   rescued=0    ignored=0

我使用了“ignore_errors:是的”,所以我的剧本将被完全执行,但最终,跳过了计数,而我希望失败计数。

有没有办法让我的脚本完全执行,跳过失败,但最终我得到了失败计数而不是跳过的

EN

回答 1

Stack Overflow用户

发布于 2020-07-13 13:48:09

问:“有没有办法让我的脚本完全执行,跳过失败,但最终,我得到失败计数而不是跳过?”

答:使用区块,计算救援部分的错误数量。例如

代码语言:javascript
运行
复制
shell> cat playbook.yml
- hosts: localhost
  tasks:
    - block:
        - command: /bin/true
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - block:
        - command: /bin/false
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - block:
        - command: /bin/false
      rescue:
        - set_fact:
            errs: "{{ errs|default(0)|int + 1 }}"
    - debug:
        var: errs|default(0)|int

给出

代码语言:javascript
运行
复制
  errs|default(0)|int: '2'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62875688

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档