ansibleを使用してサーバーを構築するためにいくつかのパイプラインを使用していますが、タスクの1つはサーバーがオンラインであることを確認することです(つまり、本番サーバーが予期せずインベントリリストに表示されることを意味します)。ポート443を確認してビルドパイプラインを停止します。これは、本番サーバーまたはライブサーバーが誤って触れないようにするためです。以下のコードを試しました。目的は、ポート443が閉じたときにプレイブックを「成功」してビルドパイプラインの次の作業を続行できるようにすることです。
- name: check server online or not
hosts: localhost
connection: local
tasks:
- name: check ESXI host connection to port 443
wait_for: host=ams-server-101 port=443 timeout=1
register: command_result
failed_when: "'Timeout' not in command_result"
- debug: var=command_result
しかし、これは期待どおりに機能しませんでした。したがって、私たちは次の解決策を使用しました(無効化方法)。
shell: echo "QUIT" | nc -w 3 ams-server-101 443 > /dev/null 2>&1 && echo Pass || echo Fail
register: shell_result
failed_when: shell_result.stdout == "Pass"
どんなアイデアがありますか? (たぶん他のモジュールを使うこともできます)
答え1
このモジュールは利用可能ですfail
:
tasks:
- wait_for:
host: ams-server-101
port: 443
timeout: 1
register: https_port_check
ignore_errors: true
- fail:
msg: 'HTTPS port is open'
when: not https_port_check.failed
あるいは、Patrickが提案したように、本当に素敵で短いですが、カスタム失敗メッセージはありません。
tasks:
- wait_for:
host: ams-server-101
port: 443
timeout: 1
register: https_port_check
failed_when: not https_port_check.failed
このような重要なチェックのためには、悪意のある失敗メッセージでユーザーを責めることが適切かもしれません。