如果输出包含给定的字符串则跳过错误

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

我在 linux 中使用 ansible,我正在实现一个调用某些角色的剧本。

playbook.yml

---
- hosts: my_hosts_group
  gather_facts: no
  roles:
    - start-app
    - run-app
    - stop-app

start-app

- name: Start app
  command: sh startApp.sh

run-app

- name: Run app
  command: sh runApp.sh

stop-app

- name: Stop app
  command: sh stopApp.sh

发生的事情是,如果应用程序已经启动,当我运行角色

start-app
时,我收到以下输出错误:

“服务器实例可能已经在运行”。

在此之后剧本的执行失败,它停止不执行其他 2 个角色(

run-app
stop-app
)。

我想做一些改变,在 ansible 方面(不是 sh):

  1. 发生此错误时(应用程序已经启动并且当我收到上述输出错误时),我想忽略此错误并继续执行剧本,并继续执行其他角色。
  2. 如果
    start-app
    角色没有失败,它应该像往常一样继续下一个角色(正常行为)。
  3. 如果
    start-app
    角色失败,出于任何其他原因,它应该失败并且剧本执行应该停止(正常行为)。

到目前为止我所做的是改变启动应用程序角色中的一些东西:

- name: Start app
  ignore_errors: yes
  command: sh startApp.sh
  register: start_result
  failed_when: "'instance of the server may already be running' not in start_result.stdout"

但我不确定这是否正确。

现在我得到了这个输出:

task: [start-app: Start App]
changed: [host1]
changed: [host2]

你能帮我找到更好的方法吗?

ansible ansible-inventory
© www.soinside.com 2019 - 2024. All rights reserved.