我正在尝试运行任务块并有救援语句,以防块中的任务失败。
- block:
- name: Set shell session
shell: xyz
- fail:
msg: shell failed
rescue:
set_fact:
gist: "abc"
shell: abc
我正在为 5 台服务器运行此程序,并发现如果 1 台服务器的块中的任务失败,则会为所有服务器运行救援块。我的要求是仅在块任务失败的情况下运行救援块。
我在这里做错了什么吗?有人可以指导吗?
您描述的行为是预期的,因为您正在所有实例上运行
fail
任务。因此,在您的情况下,Ansible 在一台服务器上为失败的 rescue
运行 shell
,在其他服务器上为 fail
运行。
您应该从您的
fail
中删除 block
任务。另外,您的 rescue
块使用无效语法,因此它实际上不应该工作 - 任务应该定义为列表,而不是字典:
- block:
- name: Set shell session
shell: xyz
rescue:
- set_fact:
gist: "abc"
- shell: abc