5.4.4. operator_sdk.util Ansible コレクションを使用したカスタムリソースのステータス管理

Ansible ベースの Operator は、カスタムリソース (CR) status サブリソース を以前の Ansible 実行についての一般的な情報で自動的に更新します。これには、以下のように成功したタスクおよび失敗したタスクの数と関連するエラーメッセージが含まれます。

status:
  conditions:
    - ansibleResult:
      changed: 3
      completion: 2018-12-03T13:45:57.13329
      failures: 1
      ok: 6
      skipped: 0
    lastTransitionTime: 2018-12-03T13:45:57Z
    message: 'Status code was -1 and not [200]: Request failed: <urlopen error [Errno
      113] No route to host>'
    reason: Failed
    status: "True"
    type: Failure
  - lastTransitionTime: 2018-12-03T13:46:13Z
    message: Running reconciliation
    reason: Running
    status: "True"
    type: Running

さらに Ansible ベースの Operator は、Operator の作成者が operator_sdk.util コレクション に含まれる k8s_status Ansible モジュールでカスタムのステータス値を指定できるようにします。これにより、作成者は必要に応じ、任意のキー/値のペアを使って Ansible から status を更新できます。

デフォルトでは、Ansible ベースの Operator には、上記のように常に汎用的な Ansible 実行出力が含まれます。アプリケーションのステータスが Ansible 出力で更新 されない ようにする必要がある場合に、アプリケーションからステータスを手動で追跡することができます。

手順

  1. CR ステータスをアプリケーションから手動で追跡するには、manageStatus フィールドを false に設定して watches.yaml ファイルを更新します。

    - version: v1
      group: api.example.com
      kind: Test1
      role: Test1
      manageStatus: false
  2. operator_sdk.util.k8s_status Ansible モジュールを使用してサブリソースを更新します。たとえば、キー test1 および値 test2 を使用して更新するには、operator_sdk.util を以下のように使用することができます。

    - operator_sdk.util.k8s_status:
        api_version: app.example.com/v1
        kind: Test1
        name: "{{ meta.name }}"
        namespace: "{{ meta.namespace }}"
        status:
          test1: test2

    コレクションは、新たにスキャフォールディングされた Ansible Operator に含まれるロールの meta/main.yml で宣言することもできます。

    collections:
      - operator_sdk.util

    ロールのメタでコレクションを宣言すると、k8s_status モジュールを直接起動することができます。

    k8s_status:
      <snip>
      status:
        test1: test2

追加リソース