6.2. Validation サービスのカスタムルールの作成


Validation サービスは Open Policy Agent (OPA) ポリシールールを使用して、移行に対する各仮想マシン (VM) の適合性を確認します。Validation サービスは、各仮想マシンの concerns リストを生成します。これは、Provider Inventory サービスに仮想マシン属性として保存されます。Web コンソールには、プロバイダーインベントリー内の各仮想マシンの concerns が表示されます。

カスタムルールを作成して、Validation サービスのデフォルトルールセットを拡張できます。たとえば、仮想マシンに複数のディスクがあるかどうかを確認するルールを作成できます。

6.2.1. Rego ファイルについて

検証ルールは、Open Policy Agent (OPA) のネイティブクエリー言語である Rego で記述されます。ルールは、Validation Pod の /usr/share/opa/policies/io/konveyor/forklift/<provider> ディレクトリーに .rego ファイルとして保存されます。

各検証ルールは、個別の .rego ファイルに定義され、特定の条件をテストします。条件が true と評価された場合、ルールは {“category", “label", “assessment"} ハッシュを concerns に追加します。concerns のコンテンツは、仮想マシンのインベントリーレコードの concerns キーに追加されます。Web コンソールには、プロバイダーインベントリー内の各仮想マシンの concerns キーのコンテンツが表示されます。

次の .rego ファイルの例では、VMware 仮想マシンのクラスターで有効になっている分散リソーススケジューリングを確認します。

drs_enabled.rego の例

Copy to Clipboard Toggle word wrap
package io.konveyor.forklift.vmware 
1


has_drs_enabled {
    input.host.cluster.drsEnabled 
2

}

concerns[flag] {
    has_drs_enabled
    flag := {
        "category": "Information",
        "label": "VM running in a DRS-enabled cluster",
        "assessment": "Distributed resource scheduling is not currently supported by OpenShift Virtualization. The VM can be migrated but it will not have this feature in the target environment."
    }
}

1
各検証ルールはパッケージ内で定義されます。パッケージの namespace は、VMware の場合が io.konveyor.forklift.vmware、Red Hat Virtualization の場合が io.konveyor.forklift.ovirt です。
2
クエリーパラメーターは、Validation サービス JSON の input キーに基づいています。

6.2.2. デフォルトの検証ルールの確認

カスタムルールを作成する前に、Validation サービスのデフォルトルールを確認して、既存のデフォルト値を再定義するルールを作成しないようにする必要があります。

例: デフォルトのルールに default valid_input = false の行が含まれていて、default valid_input = true の行が含まれるカスタムルールを作成した場合、Validation サービスは起動しません。

手順

  1. Validation Pod のターミナルに接続します。

    Copy to Clipboard Toggle word wrap
    $ oc rsh <validation_pod>
  2. プロバイダーの OPA ポリシーディレクトリーに移動します。

    Copy to Clipboard Toggle word wrap
    $ cd /usr/share/opa/policies/io/konveyor/forklift/<provider> 
    1
    1
    vmware または ovirt を指定します。
  3. デフォルトポリシーを検索します。

    Copy to Clipboard Toggle word wrap
    $ grep -R "default" *

6.2.3. 検証ルールの作成

ルールを含む設定マップカスタムリソース (CR) を Validation サービスに適用して、検証ルールを作成します。

重要
  • 既存のルールと同じ 名前 でルールを作成すると、Validation サービスは、それらのルールで OR 操作を実行します。
  • デフォルトのルールと矛盾するルールを作成すると、Validation サービスは開始しません。

検証ルールの例

検証ルールは、Provider Inventory サービスが収集する仮想マシン (VM) 属性に基づいています。

たとえば、VMware API はこのパス (MOR:VirtualMachine.config.extraConfig["numa.nodeAffinity"]) を使用して、VMware 仮想マシンに NUMA ノードアフィニティーが設定されているかどうかを確認します。

Provider Inventory サービスは、この設定を簡素化し、テスト可能な属性を、リストの値で返します。

Copy to Clipboard Toggle word wrap
"numaNodeAffinity": [
    "0",
    "1"
],

この属性に基づいて Rego クエリーを作成し、それを forklift-validation-config 設定マップに追加します。

Copy to Clipboard Toggle word wrap
`count(input.numaNodeAffinity) != 0`

手順

  1. 以下の例に従って設定マップ CR を作成します。

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: <forklift-validation-config>
      namespace: openshift-mtv
    data:
      vmware_multiple_disks.rego: |-
        package <provider_package> 
    1
    
    
        has_multiple_disks { 
    2
    
          count(input.disks) > 1
        }
    
        concerns[flag] {
          has_multiple_disks 
    3
    
            flag := {
              "category": "<Information>", 
    4
    
              "label": "Multiple disks detected",
              "assessment": "Multiple disks detected on this VM."
            }
        }
    EOF
    1
    プロバイダーパッケージ名を指定します。使用できる値は、VMware の場合が io.konveyor.forklift.vmware、Red Hat Virtualization の場合が io.konveyor.forklift.ovirt です。
    2
    concerns の名前と Rego クエリーを指定します。
    3
    concerns の名前と flag パラメーターの値を指定します。
    4
    使用できる値は CriticalWarning、および Information です。
  2. forklift-controller デプロイメントを 0 にスケーリングして、Validation Pod を停止します。

    Copy to Clipboard Toggle word wrap
    $ oc scale -n openshift-mtv --replicas=0 deployment/forklift-controller
  3. forklift-controller デプロイメントを 1 にスケーリングして、Validation Pod を起動します。

    Copy to Clipboard Toggle word wrap
    $ oc scale -n openshift-mtv --replicas=1 deployment/forklift-controller
  4. Validation Pod ログをチェックして、Pod が起動したことを確認します。

    Copy to Clipboard Toggle word wrap
    $ oc logs -f <validation_pod>

    カスタムルールがデフォルトのルールと競合する場合、Validation Pod は起動しません。

  5. 移行元プロバイダーを削除します。

    Copy to Clipboard Toggle word wrap
    $ oc delete provider <provider> -n openshift-mtv
  6. 移行元プロバイダーを追加して、新規ルールを適用します。

    Copy to Clipboard Toggle word wrap
    $ cat << EOF | oc apply -f -
    apiVersion: forklift.konveyor.io/v1beta1
    kind: Provider
    metadata:
      name: <provider>
      namespace: openshift-mtv
    spec:
      type: <provider_type> 
    1
    
      url: <api_end_point> 
    2
    
      secret:
        name: <secret> 
    3
    
        namespace: openshift-mtv
    EOF
    1
    使用できる値は、ovirtvsphere、および openstack です。
    2
    API エンドポイント URL を指定します。たとえば、vSphere の場合は https://<vCenter_host>/sdk、RHV の場合は https://<engine_host>/ovirt-engine/api、OpenStack の場合は https://<identity_service>/v3 です。
    3
    プロバイダーの Secret CR の名前を指定します。

カスタムルールを作成した後、ルールのバージョンを更新して、Inventory サービスが変更を検出し、仮想マシンを検証できるようにする必要があります。

6.2.4. インベントリールールバージョンの更新

Provider Inventory サービスが変更を検出して Validation サービスをトリガーするように、ルールを更新するたびにインベントリールールのバージョンを更新する必要があります。

ルールバージョンは、各プロバイダーの rules_version.rego ファイルに記録されます。

手順

  1. 現在のルールバージョンを取得します。

    Copy to Clipboard Toggle word wrap
    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1

    出力例

    Copy to Clipboard Toggle word wrap
    {
       "result": {
           "rules_version": 5
       }
    }

  2. Validation Pod のターミナルに接続します。

    Copy to Clipboard Toggle word wrap
    $ oc rsh <validation_pod>
  3. /usr/share/opa/policies/io/konveyor/forklift/<provider>/rules_version.rego ファイルでルールバージョンを更新します。
  4. Validation Pod ターミナルからログアウトします。
  5. 更新されたルールバージョンを検証します。

    Copy to Clipboard Toggle word wrap
    $ GET https://forklift-validation/v1/data/io/konveyor/forklift/<provider>/rules_version 
    1

    出力例

    Copy to Clipboard Toggle word wrap
    {
       "result": {
           "rules_version": 6
       }
    }

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat, Inc.