ansible 仅在任务失败的情况下运行救援

问题描述 投票:0回答:1

我正在尝试运行任务块并有救援语句,以防块中的任务失败。

- block:
    - name: Set shell session
      shell: xyz
    - fail:
        msg: shell failed
  rescue:
    set_fact:
      gist: "abc"
    shell: abc

我正在为 5 台服务器运行此程序,并发现如果 1 台服务器的块中的任务失败,则会为所有服务器运行救援块。我的要求是仅在块任务失败的情况下运行救援块。

我在这里做错了什么吗?有人可以指导吗?

ansible ansible-2.x ansible-facts
1个回答
0
投票

您描述的行为是预期的,因为您正在所有实例上运行

fail
任务。因此,在您的情况下,Ansible 在一台服务器上为失败的
rescue
运行
shell
,在其他服务器上为
fail
运行。

您应该从您的

fail
中删除
block
任务。另外,您的
rescue
块使用无效语法,因此它实际上不应该工作 - 任务应该定义为列表,而不是字典:

- block:
    - name: Set shell session
      shell: xyz
  rescue:
    - set_fact:
      gist: "abc"
    
    - shell: abc
© www.soinside.com 2019 - 2024. All rights reserved.