【问题标题】:Ansible - repeat a task while wait_forAnsible - 在 wait_for 时重复任务
【发布时间】:2017-02-27 08:42:40
【问题描述】:

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

还是我把这本剧本弄错了?

【问题讨论】:

    标签: mongodb ansible


    【解决方案1】:

    这是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参数中的条件,以便在满足条件时退出循环。就像在链接的文档章节中一样。

    【讨论】:

    • 感谢您为我指明正确的方向。 ` - 名称:检查是否仍在同步操作:shell mongo --eval "printjson(rs.status())" 注册:mongoStatus 直到:mongoStatus.stdout.find("lastHeartbeatMessage") != 1 次重试:50 延迟:10 run_once : true` 是我用的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多