问题描述
在 Ansible 执行剧本时,用户想了解跳过(skipped)、已解救(rescued)和已忽略(ignored)结果的含义。同时,用户想知道在什么情况下,这些结果会与0不同。
解决方案
请注意以下操作可能会因版本差异而有所变化。
在 Ansible 执行剧本过程中,有时会出现一些特殊的情况,导致剧本的执行结果中出现跳过、已解救和已忽略的状态。下面是对这三种状态的解释以及可能导致这些状态不等于0的可能情况。
跳过(skipped)
在剧本执行时,如果某个任务(task)的执行条件不满足,即条件为false,那么这个任务会被跳过,不会执行。在执行摘要(play recap)中,skipped 表示被跳过的任务数量。例如,在以下的剧本示例中,第一个任务的执行条件为 false,因此它会被跳过:
- hosts: localhost
tasks:
- name: This task will be skipped
debug:
msg: You will never see this message.
when: false
在执行摘要中,skipped 的数量将会增加 1。
已解救(rescued)
已解救是指在执行剧本过程中,某个任务由于发生错误而被捕获并解救的情况。这通常与错误处理相关。例如,在以下的剧本示例中,命令执行失败会被捕获并解救,并执行 rescue 下的 debug 任务:
- hosts: localhost
tasks:
- name: Failed command will be RESCUED
block:
- command: /usr/bin/false
rescue:
- debug:
msg: "{{ ansible_failed_result }}"
在执行摘要中,rescued 的数量将会增加 1。
已忽略(ignored)
已忽略是指在执行剧本过程中,某个命令虽然执行失败,但被设置为可以被忽略的情况。这意味着即使命令执行失败,剧本仍会继续执行下去。例如,在以下的剧本示例中,命令执行失败被设置为可以被忽略:
- hosts: localhost
tasks:
- name: Failed command will be IGNORED
command: /usr/bin/false
ignore_errors: true
在执行摘要中,ignored 的数量将会增加 1。
总结来说,跳过、已解救和已忽略是在 Ansible 执行剧本过程中与错误处理和任务条件相关的状态。它们表示了剧本执行过程中的特殊情况,帮助你了解任务的执行情况和可能的错误处理策略。
若需了解更多关于错误处理和使用 block/rescue 的详细信息,请参考以下文档:
– Ansible Playbooks 错误处理
– 使用块处理错误
在实际使用中,根据剧本的需求和错误处理策略,你可以根据情况来设置任务的条件、错误忽略或解救,以实现更灵活的剧本执行。