まだ@Ansibleを学んでいます。 MongoDBのリストアを自動化しようとしています。不可能 - wait_for中にタスクを繰り返す
私はMongoDBを実行する3台のサーバーを持っています。復元後、MongoDBサーバーの状態をシェルコマンドで出力することができます(下記参照)。
私がしたいこと出力が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
を出力するタスクをどのモジュールで繰り返す必要がありますか?
また、このプレイブックを間違った方法で使用していますか?
私に正しい方向を指してくれてありがとう。 ' - 名前:までmongoStatus :mongoStatus.stdout.find( "lastHeartbeatMessage")= 1回の リトライシェルモンゴ--eval "printjson(rs.status())" レジスタ:まだ アクションを同期する場合を確認します! 50 遅延:10 run_once:true' 私が使ったもの – Kevin