gpt4 book ai didi

mongodb - Ansible - 在 wait_for 时重复任务

转载 作者:可可西里 更新时间:2023-11-01 10:19:59 24 4
gpt4 key购买 nike

仍在学习@Ansible。尝试自动执行 MongoDB 恢复。

我有三台运行 MongoDB 的服务器。还原后,可以使用 shell 命令输出 MongoDB 服务器的状态(见下文)。

我想让 Ansible 做的是在输出中 10 分钟后出现字符串“lastHeartbeatMessage”时执行任务。

- name: Register MongoDB sync status
shell: mongo --eval "printjson(rs.status())"
register: mongoReplInfo

- debug: var=mongoReplInfo

- name: Copy rs.status to local log
local_action: copy content={{ mongoReplInfo }} dest=/tmp/mongoStatus

- name: Copy rs.status to server
copy: src=/tmp/mongoStatus dest=/tmp/mongoStatus

- name: Check if slave is still syncing
wait_for: path=/tmp/mongoStatus search_regex=lastHeartbeatMessage

- name: Succesfull sync
shell: 'run_succesfull_command'
when: lastHeartbeatMessage is absent after 10 min

- name: Failed sync
shell: 'run_succesfull_command'
when: lastHeartbeatMessage is present after 10 min

现在我正在使用 wait_for。但是状态只写入文件一次,并没有更新。我应该使用哪个模块来重复将 rs.status 输出到服务器的任务?

还是我完全错误地理解了这本剧本?

最佳答案

这是 do-until loop 的用例而不是 wait_for

以下将注册 mongoReplInfo 两次:立即和 600 秒后。然后您可以检查您的条件值。

- name: Register MongoDB sync status
shell: mongo --eval "printjson(rs.status())"
register: mongoReplInfo
until: false
retries: 2
delay: 600

但是您应该增加重试次数并检查until 参数中的条件,以便在满足条件时退出循环。就像在链接的文档章节中一样。

关于mongodb - Ansible - 在 wait_for 时重复任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40102069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com