Skip to main content
日本語は機械翻訳による参考訳です。内容に矛盾や不一致があった場合には、英語の内容が優先されます。

カスタムリソースを使用して復元する際にリソースを変更します

共同作成者 netapp-mwallis

リソース変換機能を使用すると、リソースの復元中にリソースを変更できます。これは、復元したバージョンを元のバージョンと異なるものにする必要がある場合に役立ちます。たとえば、仮想マシンを別のネットワークに復元する際に、そのIPアドレスを変更する場合などです。また、"Web UIを使用してリソースを復元する際に、リソースを変更します"

リソース変更の仕組み

`transformations`フィールドは、 `SnapshotRestore`、 `BackupRestore`、 `AppMirrorRelationship`、およびその他のリストアリソースで、リストアプロセス中にKubernetesリソースを変更できるようにします。これは、ホスト名、レジストリURL、リソース制限、または環境変数を変更することにより、アプリケーションや仮想マシンを新しいクラスターに適応させる際に役立ちます。

リソース変換では、 "RFC 6902"JSON Patch操作と "RFC 6901"JSON Pointerパスを使用して、Kubernetesリソース内の特定のフィールドをターゲットにして変更します。

リソース変換を含む復元オブジェクトの基本的な構造は以下のとおりです:

apiVersion: protect.trident.netapp.io/v1
kind: SnapshotRestore
metadata:
  name: my-restore
  namespace: target-namespace
spec:
  appVaultRef: my-vault
  appArchivePath: /path/to/snapshot
  namespaceMapping:
    - source: source-ns
      destination: target-ns
  transformations:
    - resource:
        kind: ConfigMap       # Required: resource kind
        group: ""             # Optional: API group (empty for core resources)
        version: ""           # Optional: API version
        name: ""              # Optional: specific resource name
      operations:
        - op: replace         # Operation type
          path: "/data/key"   # JSON Pointer path
          value: "new-value"  # New value (for add/replace/test)

サポートされているリソース

以下の条件に一致するリソースに対して、リソース変換を使用できます:

  • kind(必須):Kubernetesリソースの種類(例: ConfigMapDeploymentPod

  • group(オプション):API グループ(例: appsroute.openshift.io)- コアリソースの場合は省略

  • version(オプション):APIバージョン(例: v1v1beta1

  • name(オプション):名前で指定した特定のリソースにのみ適用します

メモ PersistentVolumeClaimsと名前空間の変更は現在サポートされていません。

サポートされている操作

リソースを変更するには、以下の操作を使用できます。

  • add:リソースに値を追加します。

  • copy:あるパスから別のパスへ値をコピーします。

  • move:リソース内で値を移動します。

  • remove:リソースから値を削除します。

  • replace:リソース内の値を置換します。

  • test:操作を実行する前にテストします。

リソースに値を追加する

`add`操作を使用して、指定されたパスに新しいフィールドまたは値を追加します。オブジェクトや配列にデータを追加できます。次の例では、Deploymentリソースにノードセレクタを追加します:
transformations:
  - resource:
      kind: Deployment
    operations:
      - op: add
        path: "/spec/template/spec/nodeSelector"
        value:
          "topology.kubernetes.io/zone": "us-east-1a"
          disktype: "ssd"

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation 'apps,v1,Deployment:add{"path":"/spec/template/spec/nodeSelector","value":{"topology.kubernetes.io/zone":"us-east-1a","disktype":"ssd"}}'

リソース内の値をコピーする

`copy`操作を使用して、同じリソース内のあるパスから別のパスに値をコピーします。ソースは変更されません。次の例では、ConfigMapオブジェクトのデータキーを複製します:
transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: copy
        from: "/data/source-key"
        path: "/data/backup-key"

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation ',v1,ConfigMap:copy{"from":"/data/source-key","path":"/data/backup-key"}'

リソース内で値を移動する

`move`操作を使用して、同じリソース内であるパスから別のパスに値を移動します。ソースが削除され、値が宛先に配置されます。次の例では、ConfigMapオブジェクトのデータキーの名前を変更します:
transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: move
        from: "/data/OLD_KEY"
        path: "/data/NEW_KEY"

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation ',v1,ConfigMap:move{"from":"/data/OLD_KEY","path":"/data/NEW_KEY"}'

リソースから値を削除する

`remove`操作を使用して、指定されたパスにあるフィールドまたは値を削除します。次の例では、ConfigMapリソースから注釈を削除します:
transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: remove
        path: "/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"
メモ 上記の例のパスでは、 `~1`は `/`のJSONポインターのエスケープシーケンスです。

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation ',v1,ConfigMap:remove{"path":"/metadata/annotations/kubectl.kubernetes.io~1last-applied-configuration"}'

リソース内の値を置き換える

`replace`操作を使用して、指定されたパスにあるリソース内の既存の値を置き換えます。JSONパスは既に存在している必要があります。次の例は、Routeオブジェクトのホスト名を変更します:
transformations:
  - resource:
      kind: Route
      group: route.openshift.io
    operations:
      - op: replace
        path: "/spec/host"
        value: "prod.example.com"

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation 'route.openshift.io,v1,Route:replace{"path":"/spec/host","value":"prod.example.com"}'

リソースの変更をテストする

パスの値が想定される値と一致するかどうかをテストするには、 `test`オペレーションを使用します。テストが失敗した場合、変更全体がロールバックされます。次の例では、 `environment`が `staging`である場合にのみ `database-host`を更新します:

transformations:
  - resource:
      kind: ConfigMap
    operations:
      - op: test
        path: "/data/environment"
        value: "staging"
      - op: replace
        path: "/data/database-host"
        value: "prod-db.example.com"

コマンドラインを使用してこの変換を実行するには、次のコマンドを使用します:

tridentctl-protect --transformation ',v1,ConfigMap:test{"path":"/data/environment","value":"staging"},replace{"path":"/data/database-host","value":"prod-db.example.com"}'