12.2.4.3. Operator 内での k8s Ansible モジュールのテスト


k8s Ansible モジュールをローカルで使用することに慣れたら、カスタムリソース (CR) の変更時に Operator 内で同じ Ansible ロジックをトリガーできます。この例では、Ansible ロールを、Operator が監視する特定の Kubernetes リソースにマップします。このマッピングは監視ファイルで実行されます。

12.2.4.3.1. Ansible ベース Operator のローカルでのテスト

Ansible ワークフローのテストをローカルで実行することに慣れたら、ローカルに実行される Ansible ベースの Operator 内でロジックをテストできます。

これを実行するには、Operator プロジェクトの上部ディレクトリーから operator-sdk run --local コマンドを使用します。このコマンドは ./watches.yaml ファイルから読み取り、 ~/.kube/config ファイルを使用して k8s Ansible モジュールが実行するように Kubernetes クラスターと通信します。

手順

  1. run --local コマンドは ./watches.yaml ファイルから読み取るため、Operator の作成者はいくつかのオプションを選択できます。role が単独で残される場合 (デフォルトでは /opt/ansible/roles/<name>)、ロールを Operator から /opt/ansible/roles/ ディレクトリーに直接コピーする必要があります。

    これは、現行ディレクトリーからの変更が反映されないために複雑になります。この代わりに、role フィールドを現行ディレクトリーを参照するように変更し、既存の行をコメントアウトします。

    - version: v1alpha1
      group: foo.example.com
      kind: Foo
      #  role: /opt/ansible/roles/Foo
      role: /home/user/foo-operator/Foo
    Copy to Clipboard Toggle word wrap
  2. カスタムリソース定義 (CRD) およびカスタムリソース (CR) Foo の適切なロールベースアクセス制御 (RBAC) 定義を作成します。operator-sdk コマンドは、deploy/ ディレクトリー内にこれらのファイルを自動生成します。

    $ oc create -f deploy/crds/foo_v1alpha1_foo_crd.yaml
    $ oc create -f deploy/service_account.yaml
    $ oc create -f deploy/role.yaml
    $ oc create -f deploy/role_binding.yaml
    Copy to Clipboard Toggle word wrap
  3. run --local コマンドを実行します。

    $ operator-sdk run --local
    [...]
    INFO[0000] Starting to serve on 127.0.0.1:8888
    INFO[0000] Watching foo.example.com/v1alpha1, Foo, default
    Copy to Clipboard Toggle word wrap
  4. Operator はリソース Foo でイベントを監視しているため、CR の作成により、Ansible ロールの実行がトリガーされます。deploy/cr.yaml ファイルを表示します。

    apiVersion: "foo.example.com/v1alpha1"
    kind: "Foo"
    metadata:
      name: "example"
    Copy to Clipboard Toggle word wrap

    spec フィールドは設定されていないため、Ansible は追加の変数なしで起動します。次のセクションでは、追加の変数が CR から Ansible に渡される方法について説明します。このため、Operator に同じでデフォルト値を設定することが重要になります。

  5. デフォルト変数 statepresent に設定し、Foo の CR インスタンスを作成します。

    $ oc create -f deploy/cr.yaml
    Copy to Clipboard Toggle word wrap
  6. namespace test が作成されていることを確認します。

    $ oc get namespace
    NAME          STATUS    AGE
    default       Active    28d
    kube-public   Active    28d
    kube-system   Active    28d
    test          Active    3s
    Copy to Clipboard Toggle word wrap
  7. deploy/cr.yaml ファイルを、state フィールドを absent に設定するように変更します。

    apiVersion: "foo.example.com/v1alpha1"
    kind: "Foo"
    metadata:
      name: "example"
    spec:
      state: "absent"
    Copy to Clipboard Toggle word wrap
  8. 変更を適用し、namespace が定義されていることを確認します。

    $ oc apply -f deploy/cr.yaml
    
    $ oc get namespace
    NAME          STATUS    AGE
    default       Active    28d
    kube-public   Active    28d
    kube-system   Active    28d
    Copy to Clipboard Toggle word wrap
トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat