我不仅尝试将 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/