私は可用性のために複数のホストを持つシステムを持っています。私はただ一つのホストでAnsibleプレイブックを実行する必要があります。ただし、これらのホストのうちのいくつかには到達できない場合があります。私はhost1、host2、host3を持っているとしましょう... host1に到達できない場合、私はAnonymousにhost2を試して欲しいと思います。もしhost2が到達可能で、Anipalがいくつかのbashスクリプトをうまく実行するならば、私はAnsibleが残りのホストをスキップするようにします。助言がありますか?1つのホストで成功した場合、実行可能なプレイブックを終了するにはどうすればよいですか?
1
A
答えて
-1
到達可能ではないホストは考えられませんが、セットアップフェーズでは到達不能なホストのリストは削除されます。
ホストの残りのリストでは、そのbashスクリプトの特定のタスクに対して 'run_once:yes'を使用します。利用可能なホストから最初に一致するホストを選択します。
1
これはおそらく最適な解決策ではありませんが、より良い解決策を見つけることができませんでした。
- (オプション)完全に(あなたがホストの事実を収集する必要がない場合)はスキップする必要のあるホストをスキップし、
False
からgather_facts
を設定します。 serial
を1に設定すると、デフォルトの5台のホストではなく、一度に1台のホストで完全に再生されます。- 再生の最後にホストファクト(例では
done
)をTrue
に設定するか、より具体的な条件(コマンド出力)が必要な場合はregister
を使用してください。 - 変数が
True
に設定されているときに実行される(またはregister
を使用した場合は期待値を持つ)再生を開始するときに、すべてのホストに対してend_play
meta
を使用します。全てhostvars
(インベントリ内のすべてのホストのために設定されているすべての変数を含むPythonの辞書)をループにfor
:私は値をこのように抽出するJinja2 template languageを使用します。if
ホストがTrue
に設定された変数を持つかどうかを確認し、その場合は文字列True
を返します。default
done
がホストに対して定義されていない場合(エラー'dict object' has no attribute 'done'
)、デフォルト値を設定するフィルタ。たとえば、
:
- hosts: all
serial: 1
gather_facts: False
tasks:
- meta: end_play
when: "{% for item in hostvars.values() %}{% if item.done|default(False) %}True{% endif %}{% endfor %}"
# The rest of the play goes here
- set_fact:
done: True
関連する問題
- 1. イベントが終了した場合、メソッドを実行するにはどうすればよいですか?
- 2. 不可能 - 別のプレイブック/モジュールを実行するにはどうすればよいですか?
- 3. 実行可能なプレイブックから1つのタスクとハンドラを実行する
- 4. 1つの機能が別の機能を終了したらどうすればよいですか?
- 5. リエントラントでないLinux機能(選択)が実行を終了しない場合はどうなりますか?
- 6. AppDelegateにタスクがない場合、バックグラウンドでタスクを終了するにはどうすればよいですか?
- 7. 反復可能な終了からの終了成功した応答で観察可能
- 8. 可能性:あるプレイブック内の他のホストでタスクを実行するにはどうすればよいですか?
- 9. 可能:プレイブックに空の広告枠グループを作成するにはどうすればよいですか?
- 10. スレッドが終了した後でQt関数を実行するにはどうすればよいですか?
- 11. 終了したメソッド呼び出しに投稿された実行可能ファイルを削除するにはどうすればよいですか?
- 12. ユーザーエージェントプロセスが終了したときにコードを実行するにはどうすればよいですか?
- 13. Electronアプリを1つの実行可能ファイルにパッケージ化するにはどうすればいいですか?
- 14. 即座に終了した2つのコードでは、1行目が終了する前に2行目が終了する可能性はありますか?
- 15. phoenixで実行可能なリリースビルドを実行するにはどうすればよいですか?
- 16. 1つのリストに可能な組み合わせを1つずつ追加するにはどうすればよいですか?たとえば
- 17. Python:プロセスを実行し、1時間以内に終了しない場合は終了します。
- 18. 成功した終了コードでJobExecutionDeciderを終了する方法
- 19. UWPアプリケーションをプログラムで終了または終了するにはどうすればよいですか? (Windows 10)
- 20. autofacでライフタイムスコープが終了する前にロジックを実行するにはどうすればよいですか?
- 21. livewiresモジュールで初めてプログラミングする場合、実行可能なゲームの開始ページを作成するにはどうすればよいですか?
- 22. Powershellで実行可能ファイルのパラメータのリストを作成するにはどうすればよいですか?
- 23. 実行可能なJavaプログラムを作成するにはどうすればよいですか?
- 24. 強制終了アプリなしでAndroidでデーモンスレッドを終了するにはどうすればいいですか?
- 25. perl 6でスタンドアロンの実行可能ファイルを作成するにはどうすればよいですか?
- 26. Microsoft.WindowsAzure.Storage.DataMovement.TransferManagerのCopyDirectoryAsyncがいつ終了したかを確認するにはどうすればよいですか?
- 27. 実行可能なプレイブックのホスト情報がありません
- 28. シグナルを受け取った場合、私のプログラムの終了コードはどうすればよいですか?
- 29. 1つのドメインで2つのWebアプリケーションを実行するにはどうすればよいですか?それは可能ですか?
- 30. プロセスを終了するときにlogout()を実行するにはどうすればよいですか?
は、あなたが "一部" の定義にはどうすればよい "* *成功したいくつかのbashスクリプトを実行しますか"? – techraf
「到達不能」をどのように定義しますか? sshが到達不能なホストを自動的にスキップします。 – sm4rk0
@ sm4rk0私はそれが答えにどのように影響するのだろうかと不思議です。試行を続けるか停止するかは、謎の「いくつかの」スクリプトの実行が成功するかどうかという唯一の決定要因です。あなたの意見では、「到達不能」の定義はどのような役割を果たしますか? – techraf