Ansible - 在wait_for时重复任务

时间:2016-10-18 07:26:58

标签: mongodb ansible

还在学习@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输出到服务器的任务?

或者我是以错误的方式拍摄这本剧本?

1 个答案:

答案 0 :(得分:2)

这是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

但是您应该增加重试次数并检查array(24) { ["id"]=> string(4) "3478" ["joindate"]=> string(19) "2016-10-17 21:20:28" ["ip"]=> string(12) "xxx.xxx.xx.xx" ... } array(24) { ["id"]=> string(4) "3479" ["joindate"]=> string(19) "2016-10-17 21:20:28" ["ip"]=> string(12) "xxx.xxx.xx.xx" ... } 参数中的条件,以便在满足条件时退出循环。就像链接的doc章一样。