Automation Ansible-如何';循环';万一失败,一个可靠的任务?

Automation Ansible-如何';循环';万一失败,一个可靠的任务?,automation,ansible,Automation,Ansible,我对Ansible playbook有一个问题,特别是它的任务之一。任务如下所示: - name: Start Integration Server script: "{{ instDir_path }}start_All.sh" - name: Wait for Integration Server to start wait_for: port: 5515 delay: 10 它所做的是运行start\u All.sh,这是一个简单的脚本,实际上启动了两台服务器。一

我对Ansible playbook有一个问题,特别是它的任务之一。任务如下所示:

- name: Start Integration Server
  script: "{{ instDir_path }}start_All.sh"
- name: Wait for Integration Server to start
  wait_for:
    port: 5515
    delay: 10
它所做的是运行
start\u All.sh
,这是一个简单的脚本,实际上启动了两台服务器。一号服务器每次启动都很快很好。第二个有时会出现问题,无法在anslibles
wait\u for
的300秒默认延迟内启动。我不想更改默认值,而是希望有如下内容:

- name: Start Integration Server
  script: "{{ instDir_path }}start_All.sh"
- name: Wait for Integration Server to start
  wait_for:
    port: 5515
    delay: 10
如果服务器已启动-完成并转到下一个剧本 如果服务器启动失败-运行
stop_All.sh
以正确关闭第一台服务器,然后再次运行
START_All.sh
并重复
wait_for
过程,直到服务器正确启动。或者可能不是一次又一次,但它必须尝试启动服务器至少3次

这在Ansible中可能吗? 这个集成服务器(我想是SoftwareAG)应该在运行期间创建了锁文件。因此,您可以尝试:

# wait until the lock file is present
- wait_for:
    path: /var/lock/file.lock
    state: present
来自ansible文档:

检查文件或搜索字符串是否存在或是否已启动时 在继续之前,请确保文件或字符串已存在(不存在) 将检查文件是否缺失或已删除


Ansible意味着尽可能具有声明性。为什么不在start_all.sh内安装所有这些拐杖?