Ansible - 実際に失敗したタスクを成功としてマークする方法

Ansible - 実際に失敗したタスクを成功としてマークする方法

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

このような重要なチェックのためには、悪意のある失敗メッセージでユーザーを責めることが適切かもしれません。

関連情報