Ansible:使用 ignore_errors 时失败任务的播放回顾中的增量计数

标签 ansible

我不仅尝试将 ansible 用作配置工具,而且还尝试能够轻松地跨一系列服务器执行大量验证检查。

因此,我在剧本的开头抓取了一堆不同的信息,然后对它们进行检查。

鉴于这些是验证检查而不是配置,我希望我的所有失败一次,而不是一次失败,剧本失败,必须解决它然后再次运行它,一遍又一遍地找到我的多个失败。

我可以通过在其中放置一个 ignore_errors 标志来继续运行剧本,但它不会增加剧本末尾的“失败”计数,我宁愿用户不必向上滚动所有输出以查找红色文本,或抓取日志以查看是否有错误,尤其是看到末尾有一个计数器作为完美的一目了然的引用。

我在 Ubuntu 版本 14.04 上使用版本 Ansible 2.4.2.0

这是我的剧本:

- name: Validates Preship configuration
  hosts:
    - active
    - dr
  become_user: root
  become: true
  become_method: su
  roles:
    - preShipValidation
  ignore_errors: yes

然后在将任务导入 main.yml 文件并运行一个单独的任务来填充我的 host_vars 之后,我运行以下任务:

- name: BIOS Version Check for Equus or Seneca 2000/2100
  assert:
    that:
      - '"2.0a" in dmidecode_bios_ver.stdout'
  when: '"2000" in appliance_model and
         "X10DRW" in motherboard_model'

运行时会得到以下输出(经过编辑以便于阅读)

TASK [preShipValidation : BIOS Version Check for Equus or Seneca 2000/2100] ******************************************************************************************************************
skipping: [server1] => {"changed": false, "skip_reason": "Conditional result was False"}
skipping: [server2] => {"changed": false, "skip_reason": "Conditional result was False"}
fatal: [server3]: FAILED! => {
    "assertion": "\"2.0a\" in dmidecode_bios_ver.stdout",
    "changed": false,
    "evaluated_to": false
}
...ignoring
ok: [server4] => {
    "changed": false,
    "msg": "All assertions passed"
}

PLAY RECAP ***********************************************************************************************************************************************************************************
server1                  : ok=11   changed=4    unreachable=0    failed=0
server2                  : ok=12   changed=4    unreachable=0    failed=0
server3                  : ok=10   changed=4    unreachable=0    failed=0
server4                  : ok=11   changed=4    unreachable=0    failed=0

关于如何获取失败计数以显示它忽略的错误的任何想法?

最佳答案

在您忽略的每个任务中,使用 register 标记将输出保存到一个变量,并创建一个额外的任务,如果注册变量的失败选项为 True,则将变量递增 1。

例如:

- name: Yum update
  yum:
    name: "*"
    state: latest
  register: result
  ignore_errors: True      

- name: Increment variable
  set_fact: failed_count={{ failed_count | int + 1 }}
  when: result.failed

请注意,此 failed_count 变量应在 playbook 开头初始化为 0。

关于Ansible:使用 ignore_errors 时失败任务的播放回顾中的增量计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49805434/

相关文章:

linux - 使用ansible更改远程服务器上所有脚本的权限

Ansible 循环遍历 glob

arrays - 如何将命令输出存储到 Ansible 中的数组中?

python - 尝试通过远程 api 调用运行 ansible playbook

ansible - 无法将 list 脚本解析为 list

ansible - 拆分变量在 Ansible 中不起作用

python - ansible 剧本的动态组分配

vagrant - 有没有办法从失败的地方重试剧本?

django - 与管理 git checkout for ansible 中使用的 key 相关的最佳实践有哪些?

automation - Ansible lineinfile 模块属性行未在服务器上添加环境变量