mcpField
H
huawei-cloud-cloudrobo-asset

huawei-cloud-cloudrobo-asset

github.com/huaweicloudクラウド・DevOps5967 回インストール2 日前に更新
リポジトリ

huawei-cloud-cloudrobo-asset について

CloudRobo CLI または Python SDK で CloudRobo プラットフォームのアセットを管理するスキルです。アセットとバージョンのライフサイクル、マーケット検索、ローカルファイルと OBS 間の入出力を扱います。

主な機能

  1. 01アセットとバージョンの作成・更新・削除
  2. 02リポジトリ、カタログ、アセットの検索
  3. 03タグと Action の管理
  4. 04権限とアセット系譜の確認
  5. 05マーケット検索と公開アセット一覧
  6. 06ローカルファイルと OBS 間の入出力

活用シーン

  1. 01アセットやバージョンの作成・更新
  2. 02マーケットのアセット検索と詳細確認
  3. 03ローカルのモデルやデータセットの登録
  4. 04バージョンの権限と親子関係の確認

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-cloudrobo-asset

インストール後、Claude Code で/huawei-cloud-cloudrobo-assetを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
acceptance-criteria.md
api-paths.md
cli-installation-guide.md
dataflow-diagram.md
edge-cases.md
iam-policies.md
validation-rules.md
verification-method.md
scripts/
test-cli-commands.sh
templates/
test-vars.json

詳細

Windows / PowerShell: 例では bash 構文を使用しています。Windows PowerShell で実行するには:

  • \ による行継続を1行にまとめるか、各行の末尾にバッククォートを付けます。
  • export NAME="value" の代わりに $env:NAME="value" で環境変数を設定します。
  • シングルクォートで囲んだ JSON '{"a":"b"}' はそのまま使用できます。

概要

cloudrobo-asset スキルは、CloudRobo プラットフォームのアセットのライフサイクル全体を管理します。 リポジトリとカタログの照会、アセットの CRUD(作成/一覧表示/表示/更新/削除/一括削除)、 バージョンの CRUD、タグ管理、Action の CRUD、権限の確認、マーケットプレイスの検索、 公式/コミュニティのアセット一覧表示、アセットの系譜、およびローカルと OBS 間のインポート/エクスポートに対応しています。

適用シナリオ:

  • アセットのライフサイクル — アセットとバージョンの作成、一覧表示、表示、更新、削除、一括削除
  • インポート/エクスポート — ローカルフォルダーをアセットとして OBS にインポートし、アセットのバージョンをローカルパスにエクスポート
  • マーケットプレイスでの検索 — マーケットプレイスのアセットを検索し、公式/コミュニティの公開アセットを一覧表示
  • タグ管理 — タグの追加/削除、プラットフォームで事前定義されたタグ一覧の照会
  • Action 管理 — アセットのバージョンに対する Action の作成/一覧表示/表示/更新/削除
  • 権限の確認 — アセットのバージョンに対するユーザーの権限を確認
  • 系譜 — アセットのバージョン間の親子関係を照会

アーキテクチャ:

Agent / LLM
    │
    ├── CLI  →  cloudrobo asset <command>
    ├── SDK  →  AssetClient (Python)
                    │
                    ▼
              cloudrobo-asset-manager (REST API)
              /v1/repositories
              /v1/catalogs
              /v1/assets/*
              /v1/asset-service/search
              /v1/asset-service/publication-assets
              /v1/asset-tags
              │
              ├── OBS (import/export file transfer)
              └── cloudrobo-obs endpoint (configured separately)

すべての操作は cloudrobo-asset-manager バックエンドを対象とします。インポート/エクスポートには、 OBS ファイル転送用の cloudrobo-obs エンドポイントも必要です。

前提条件

CLI のインストール、AK/SK 認証、および設定については、references/cli-installation-guide.md を参照してください。 インポート/エクスポート操作では、~/.cloudrobo/config.yaml または CLOUDROBO_ENDPOINT_cloudrobo-obs 環境変数を使用して cloudrobo-obs エンドポイントを設定する必要があります。

ワークフロー

前提手順:catalog_id の取得

複数のシナリオで catalog_id が必要です。ユーザーから指定されていない場合にのみ実行します:

  1. 現在のワークスペースから取得(推奨): cloudrobo workspace current →
    asset_catalog_id フィールドを読み取ります(現在のワークスペースに紐付けられたカタログです)
  2. フォールバック — リポジトリとカタログの一覧表示: ワークスペースが設定されていない場合、または
    asset_catalog_id が空の場合:
    1. cloudrobo asset list-repositories → repository_id を取得します
    2. cloudrobo asset list-catalogs --repository-id <repo-id> → catalog_id を取得します
シナリオ 1:ローカルアセットのインポート

ローカルファイル(モデル、データセットなど)を CloudRobo アセットリポジトリにインポートします。

最短手順: local-path/README.md が有効なフロントマターとともに存在する場合(以前の export-asset で作成したものなど)、必要なのは --catalog-id(新規アセットの場合)または --asset-id(新しいバージョンの場合)のみです — その他のメタデータはすべてフロントマターから読み取られます。フロントマターがない場合は、catalog_id、name、type (シミュレーションの場合は sub_type も)を CLI で指定する必要があります。

  1. (新規アセットの作成時に catalog_id が不足している場合のみ)「前提条件:catalog_id の取得」を実行します
  2. インポートします:
    # With frontmatter (recommended — after export)
    cloudrobo asset import-asset --catalog-id <id> --local-path <path>
    # Without frontmatter
    cloudrobo asset import-asset --catalog-id <id> --name <name> --type <type> --local-path <path> [--sub-type <sub-type>] [--ext-metadata '{"key":"value"}']
    
    • local-path/README.md のフロントマターからメタデータ(name、type、sub_type、description、 status、tags、version、ext_metadata、parent_asset_version_id、generation_method)を自動的に読み取ります
    • フロントマターの値は CLI パラメーターより優先されます(catalog_id を除く。CLI でのみ指定可能)。どちらにもないフィールドがあるとエラーになります
    • --ext-metadata CLI パラメーターもサポートされます(フロントマターが優先されます)
    • API 呼び出し前に、タイプに応じて ext_metadata を事前検証します(model→model_type、dataset→annotation_status、 algorithm→engine+command、image→arch+device_type、simulation(sub_type=robot)→robot_type+robot_manufacturer)
    • アセットとバージョンを自動作成し、OBS にアップロードします
    • 既存アセットに新しいバージョンを追加する場合:--asset-id <existing-asset-id> を追加します
    • 既存バージョンをアップロードの再試行に再利用する場合:--asset-id <id> --version-id <vid> を追加します(ファイルを直接アップロードします。同名の OBS オブジェクトは冪等に上書きされます)

タイプの制約:

  • image タイプは import-asset ではサポートされません — image はローカルコードのアップロードを伴わない SWR 参照です。代わりに create-asset を使用してください(それ以外の場合、CLI は UsageError を発生させます)
  • algorithm タイプはサポートされています — algorithm をインポートすると、ローカルコードが OBS の code_dir にアップロードされます:
    # Mode 1: new asset
    cloudrobo asset import-asset --catalog-id <id> --name <name> --type algorithm --tags "Train" --ext-metadata '{"engine":{"image_url":"swr...","image_source":"custom"},"command":"python train.py"}' --local-path ./algo-dir
    # Mode 2: new version for existing algorithm asset (no --catalog-id needed)
    cloudrobo asset import-asset --asset-id <existing-algo-asset-id> --type algorithm --tags "Train" --ext-metadata '{"engine":{"image_url":"swr...","image_source":"custom"},"command":"python train.py"}' --local-path ./algo-dir
    
    Algorithm のインポートフロー(自動、Mode 1 と Mode 2):
    1. --tags が必須であることを検証します(指定可能な値:Data Processing / Train)
    2. Mode 2 では --ext-metadata が必須です(engine と command を含める必要があります)。指定しない場合は ValueError、無効な値を指定した場合は ValidationError が発生します
    3. catalog.url を取得します(Mode 2 ではアセット詳細から取得するため、--catalog-id は不要です)。code_dir = {catalog.url}/pending をプレースホルダーとしてアセットとバージョンを作成します(プリセットのイメージバックエンドでは code_dir が必要です)
    4. アセットとバージョンを作成し、asset_id と version_id を取得します
    5. ローカルコードを {catalog.url}/{asset_id}/{version_id}/ にアップロードします
    6. アセットレベルとバージョンレベルの両方の ext_metadata で、code_dir を実際のアップロード先パスに更新します(プレースホルダーの pending をクリアします)
    • algorithm では --asset-id --version-id(Mode 3)はサポートされません — ValueError が発生します(バージョンの再利用はサポートされていません。新しいバージョンには --asset-id を使用してください)
    • Mode 3 では SDK レイヤーでも image アセットが拒否されます(CLI だけではありません)— ValueError "import_asset does not support image assets" が発生します
  1. 検証します:cloudrobo asset show-asset --asset-id <asset-id>

エラーからの復旧: OBS へのアップロード時にインポートが失敗した場合(アセットとバージョンは作成されたものの、ファイルがアップロードされず、バージョンが CREATING ステータスのままの場合)、新しいバージョンを作成しないでください。復旧方法は 2 つあります:

  • バージョンを再利用する(推奨): list-versions --asset-id <id> で失敗したバージョンを確認し、 import-asset --asset-id <id> --version-id <vid> を再実行して直接アップロードします(すべてのファイルを再試行します。 アップロードに成功すると、バージョンは DRAFT に遷移します)
  • 削除して再試行する: delete-version --asset-id <id> --version-id <vid> を実行してから、 import-asset --asset-id <id> を再実行します
シナリオ 2:Marketplace のアセットを検索
  1. 検索:cloudrobo asset search-assets --keyword <keyword>
  2. 詳細を表示:cloudrobo asset show-asset --asset-id <asset-id>

公式/コミュニティを閲覧: cloudrobo asset list-publication-assets --type <type>

検索後にエクスポート: ユーザーがエクスポートをリクエストした場合に限ります。Marketplace アセットの権限に data_read が含まれていない場合、エクスポートは許可されません。cloudrobo asset export-asset --asset-id <id> --local-path <path>(デフォルトでは最新バージョンです。特定のバージョンを指定するには --version-id を追加します)。エクスポート時に、アセットのメタデータを含む YAML frontmatter 付きの README.md が自動生成されるため、最小限の CLI パラメーターでシームレスに再インポートできます。

シナリオ 3:ワークスペースのアセットを一覧表示
  1. (catalog_id がない場合のみ)「前提条件:catalog_id の取得」を実行します。
  2. 一覧表示:cloudrobo asset list-assets --catalog-id <catalog-id>
    • --type、--sub-type、--status で絞り込みます
    • または、リポジトリレベルのクエリには --catalog-id の代わりに --repository-id を使用します
シナリオ 4:アセットのバージョンを一覧表示
  1. asset_id がわかっている場合は、手順 3 に進みます
  2. (asset_id がない場合のみ)「前提条件:catalog_id の取得」を実行してから、 list-assets --catalog-id <id> で asset_id を特定します
  3. バージョンを一覧表示:cloudrobo asset list-versions --asset-id <asset-id>
シナリオ 5:拡張メタデータ付きのアセットを作成

model、dataset、simulation、algorithm、image タイプでは、作成時に ext_metadata が必要です。タイプごとの必須フィールドについては、 references/validation-rules.md を参照してください。

  1. (catalog_id がない場合のみ)「前提条件:catalog_id の取得」を実行します
  2. 作成:cloudrobo asset create-asset --catalog-id <id> --name <name> --type model --ext-metadata '{"model_type":"planning"}'
  3. バージョンを作成:cloudrobo asset create-version --asset-id <id> --version 1.0.0 --ext-metadata '{"model_type":"planning"}'

タスクシナリオタグの制約(algorithm/image タイプ):

  • 作成時に --tags が必須です(タスクシナリオタグを 1 つ以上指定)
  • algorithm で使用できるタグ:Data Processing、Train
  • image で使用できるタグ:Data Processing、Notebook、Online Deployment、Train
  • algorithm が image を参照する場合(ext_metadata.engine.asset_id)、algorithm のタグは image のタグのサブセットである必要があります(SDK が検証し、そうでない場合は ValidationError が発生します)
シナリオ 6:タグを管理
  1. 追加:cloudrobo asset add-tags --asset-id <id> --tags "tag1,tag2"
  2. 削除:cloudrobo asset delete-tag --asset-id <id> --tag <tag>
  3. 定義済みタグを照会:cloudrobo asset list-tags --language zh(--type/--sub-type での絞り込みは任意)

CLI コマンド形式の標準

cloudrobo asset <command> [OPTIONS]
機能説明例
コマンドグループcloudrobo assetcloudrobo asset list-assets
サブコマンドケバブケースlist-repositories、create-asset、import-asset
JSON パラメーター--ext-metadata '{"key":"value"}'--ext-metadata '{"model_type":"planning"}'
カンマ区切りのリスト--tags tag1,tag2--tags robot,arm
ドライラン--dry-run(対応している場合)実行せずにプレビュー
出力形式標準出力への JSONout(result)
UUID 識別子--asset-id、--version-id、--catalog-idUUID 形式が必要

コアコマンド

リポジトリとカタログ
コマンド主なパラメーターSDK メソッドAPI
list-repositories[--name] [--sort-dir] [--offset] [--limit]client.list_repositories(**params)GET /v1/repositories
list-catalogs--repository-id <id> [--name] [--sort-dir] [--offset] [--limit]client.list_catalogs(repository_id, **params)GET /v1/catalogs
show-catalog--catalog-id <id>client.show_catalog(catalog_id)GET /v1/catalogs/{catalog_id}
アセット管理
アセットを作成
cloudrobo asset create-asset --catalog-id <catalog-id> --type <type> [--name <name>] [--sub-type <sub-type>] [--description <desc>] [--status <status>] [--tags "tag1,tag2"] [--url <obs-or-swr-path>] [--ext-metadata '{"key":"value"}'] [--parent-asset-version-id <uuid>] [--generation-method <method>] [--dry-run]
  • SDK: client.create_asset(req: dict)
  • API: POST /v1/assets

注: algorithm/image タイプでは、--tags が必須です(タスクシナリオタグ)。

  • algorithm タグ:Data Processing、Train
  • image タグ:Data Processing、Notebook、Online Deployment、Train
  • algorithm がイメージを参照する場合(engine.asset_id)、algorithm のタグは image のタグのサブセットである必要があります(SDK が検証し、そうでない場合は ValidationError を発生させます)
  • --sub-type は simulation にのみ適用されます。algorithm/image では無視されます(クライアントは API 呼び出し前にこの値を削除します)
アセットを一覧表示
cloudrobo asset list-assets [--repository-id <id>] [--catalog-id <id>] [--type <type>] [--sub-type <sub-type>] [--status <status>] [--name <name>] [--tags "tag1,tag2"] [--mine] [--offset <n>] [--limit <n>]
# Either --repository-id OR --catalog-id filters the list. Full parameter list: see references/api-paths.md → List Assets
  • SDK: client.list_assets(**params)
  • API: GET /v1/assets

注: repository-id と catalog-id は、少なくともいずれか一方を指定する必要があります。両方を指定すると AND フィルターになります。

アセットを更新
cloudrobo asset update-asset --asset-id <asset-id> [--name <name>] [--description <desc>] [--status <status>] [--tags "tag1,tag2"] [--ext-metadata '{"key":"value"}'] [--dry-run]
  • SDK: client.update_asset(asset_id, req: dict)
  • API: PUT /v1/assets/{asset_id}

注: update-asset で変更できるのは name/description/status/tags/ ext-metadata のみです。CLI には catalog_id、type、sub_type、 url、parent_asset_version_id、generation_method のパラメーターがないため、 これらのフィールドは変更できません。

コマンド主なパラメーターSDK メソッドAPI
show-asset--asset-id <id>client.show_asset(asset_id)GET /v1/assets/{asset_id}
delete-asset--asset-id <id> [--dry-run]client.delete_asset(asset_id)DELETE /v1/assets/{asset_id}
batch-delete-assets--asset-ids "id1,id2" [--dry-run]client.batch_delete_assets({"asset_ids": [...]})POST /v1/assets/batch-delete
バージョン管理 版本管理
バージョンを作成
cloudrobo asset create-version --asset-id <asset-id> [--version <version>] [--description <desc>] [--status <status>] [--url <obs-or-swr-path>] [--ext-metadata '{"key":"value"}'] [--parent-asset-version-id <uuid>] [--generation-method <method>] [--dry-run]
  • SDK: client.create_asset_version(asset_id, req: dict)
  • API: POST /v1/assets/{asset_id}/versions
バージョンを一覧表示
cloudrobo asset list-versions --asset-id <asset-id> [--version <version>] [--exact-version <version>] [--sort-key <field>] [--sort-dir <asc|desc>] [--offset <n>] [--limit <n>] [--actions "FFT,LORA"] [--actions-operator <and|or>] [--ext-metadata <key=value>] [--action-status "ENABLE,DISABLE"]
  • SDK: client.list_asset_versions(asset_id, **params)
  • API: GET /v1/assets/{asset_id}/versions
バージョンを更新
cloudrobo asset update-version --asset-id <asset-id> --version-id <version-id> [--version <version>] [--description <desc>] [--status <status>] [--ext-metadata '{"key":"value"}'] [--dry-run]
  • SDK: client.update_asset_version(asset_id, version_id, req: dict)
  • API: PUT /v1/assets/{asset_id}/versions/{version_id}

注: update-version で変更できるのは version/description/status/ ext-metadata のみです。CLI には url、parent_asset_version_id、generation_method のパラメーターがないため、 これらのフィールドは変更できません。

コマンド主なパラメーターSDK メソッドAPI
show-version--asset-id <id> --version-id <vid>client.show_asset_version(asset_id, version_id)GET /v1/assets/{asset_id}/versions/{version_id}
delete-version--asset-id <id> --version-id <vid> [--dry-run]client.delete_asset_version(asset_id, version_id)DELETE /v1/assets/{asset_id}/versions/{version_id}
batch-delete-versions--asset-id <id> --version-ids "v1,v2" [--dry-run]client.batch_delete_asset_versions(asset_id, {"version_ids": [...]})POST /v1/assets/{asset_id}/versions/batch-delete
タグ管理 标签管理
コマンド主なパラメーターSDK メソッドAPI
add-tags--asset-id <id> --tags "t1,t2" [--dry-run]client.add_tags(asset_id, tags)POST /v1/assets/{asset_id}/tags
delete-tag--asset-id <id> --tag <tag> [--dry-run]client.delete_tag(asset_id, tag)DELETE /v1/assets/{asset_id}/tags/{tag}
list-tags--language <zh|en> [--type] [--sub-type]client.list_all_tags(language, type, sub_type)GET /v1/asset-tags
アクション管理
コマンド主なパラメーターSDK メソッドAPI
list-actions--asset-id <id> --version-id <vid>client.list_asset_actions(asset_id, version_id)GET /v1/assets/{asset_id}/versions/{version_id}/actions
show-action--asset-id <id> --version-id <vid> --action <name>client.show_asset_action(asset_id, version_id, action)GET .../actions/{action}
delete-action--asset-id <id> --version-id <vid> --action <name> [--dry-run]client.delete_asset_action(asset_id, version_id, action)DELETE .../actions/{action}

アクションの作成/更新(詳細):

cloudrobo asset create-action --asset-id <id> --version-id <vid> --action-info '{"action":"FFT","algorithm":{"asset_id":"...","version_id":"..."},"status":"ENABLE"}' [--dry-run]
# SDK: client.create_asset_action(asset_id, version_id, req)
# API: POST /v1/assets/{asset_id}/versions/{version_id}/actions
# action-info supports single action object {"action":"FFT",...} or batch {"actions":[{...},{...}]}

cloudrobo asset update-action --asset-id <id> --version-id <vid> --action <name> --action-info '{"status":"DISABLE"}' [--dry-run]
# SDK: client.update_asset_action(asset_id, version_id, action, req)
# API: PUT /v1/assets/{asset_id}/versions/{version_id}/actions/{action}
権限とリネージュ
コマンド主なパラメーターSDK メソッドAPI
check-permission--asset-id <id> --version-id <vid> --permissions "meta_read,data_read"client.check_asset_permission(asset_id, version_id, req)POST .../check-permission
show-lineage--asset-id <id> --version-id <vid> --type <children|parent>client.show_asset_tree(asset_id, version_id, type)GET .../tree?type=<children|parent>

有効な権限:meta_read、meta_write、data_read、data_write、data_usable リネージュ:children=親から子、parent=子から親。

マーケットプレイス
コマンド主なパラメーターSDK メソッドAPI
search-assets--keyword <kw> [--type] [--limit] [--offset]client.search_assets(req)POST /v1/asset-service/search
list-publication-assets[--type] [--sub-type] [--name] [--tags] [--status] [--capabilities] [--offset] [--limit]client.list_publication_assets(**params)GET /v1/asset-service/publication-assets

パラメーターの一覧:references/api-paths.md → List Publication Assets を参照

インポートとエクスポート
アセットのインポート
cloudrobo asset import-asset --local-path <local-folder> [--catalog-id <id>] [--name <name>] [--type <type>] [--sub-type <sub-type>] [--tags "tag1,tag2"] [--ext-metadata '{"key":"value"}'] [--asset-id <id>] [--version-id <vid>] [--dry-run]

タイプの制約:

  • image タイプはサポートされません — CLI は UsageError を発生させます。代わりに create-asset を使用してください
  • algorithm タイプはサポートされています(モード 1 とモード 2) — ローカルコードを {catalog.url}/{asset_id}/{version_id}/ にインポートします。作成時の code_dir プレースホルダーは {catalog.url}/pending で、その後アセットレベルとバージョンレベルの両方で実際のパスに更新されます。ユーザーは code_dir/boot_file を指定してはいけません。モード 2 ではアセットの詳細から catalog_id を取得するため、--catalog-id は不要です
  • モード 3(--asset-id --version-id)は algorithm ではサポートされません — ValueError が発生します

フロントマターのサポート:

  • local-path/README.md の YAML フロントマターを自動的に読み取ります
  • フィールド:name、type、sub_type、description、status、tags、version、ext_metadata、 parent_asset_version_id、generation_method
  • 優先順位:フロントマターが CLI パラメーターより優先されます(catalog_id を除く。catalog_id は CLI のみ)。どちらにもないフィールドはエラーになります
  • 新しいアセットに必須のフィールド:catalog_id(CLI のみ)、name(フロントマターまたは CLI)、type(フロントマターまたは CLI)
  • 新しいバージョン(--asset-id)に必須:ext_metadata(バックエンドは model/dataset/image/simulation で必須としています。--ext-metadata またはフロントマターで指定してください)
  • ext_metadata の事前検証:model/dataset/algorithm/image/simulation タイプは API 呼び出し前に検証されます(robot は simulation のサブタイプです)

モード:

  • --asset-id を指定しない場合:新しいアセットとバージョンを作成し、OBS にアップロードします。アップロード後、バージョンのステータスが CREATING の場合は、自動的に DRAFT に更新します
  • --asset-id のみを指定する場合:既存のアセットに新しいバージョンを作成し、OBS にアップロードします。ext_metadata が必須です(バックエンドは model/dataset/image/simulation で検証します。--ext-metadata またはフロントマターで指定してください)。アップロード後、バージョンのステータスが CREATING の場合は、自動的に DRAFT に更新します
  • --asset-id と --version-id を指定する場合:既存のバージョンを再利用し、ファイルを OBS に直接アップロードします(同じ名前のオブジェクトはべき等に上書きされます)。アップロード後、バージョンのステータスが CREATING の場合は、自動的に DRAFT に更新します。algorithm アセットではサポートされません(ValueError が発生します)

ステータスの流れ: --status が指定されていない場合、バックエンドはバージョンのステータスを CREATING にして作成します。OBS へのアップロードが成功した後、バージョンのステータスが CREATING のままであれば、SDK は update-version を自動的に呼び出して DRAFT に設定します。ユーザーがステータスを明示的に指定した場合(例:フロントマターで RELEASE を指定した場合)、アップロードは成功しますが、ステータスは自動的に変更されません。

アセットのエクスポート
cloudrobo asset export-asset --asset-id <id> --local-path <local-folder> [--version-id <version-id>] [--dry-run]

タイプの制約:

  • image タイプはサポートされません — ダウンロード可能なファイルがないため、ValueError が発生します(SWR の参照)。代わりに create-asset を使用してください
  • algorithm タイプはサポートされています — ext_metadata.code_dir の OBS パスからコードをダウンロードします。code_dir がない場合は、復旧方法の案内とともに RuntimeError が発生します

パスの要件: --local-path は既存のディレクトリである必要があります(見つからない場合は FileNotFoundError、ファイルの場合は ValueError が発生します)。SDK はダウンロードしたファイル用のサブディレクトリ {local-path}/{asset_id}/ をその中に作成します。

README.md の生成:

  • YAML フロントマターを含む <local-path>/<asset-id>/README.md を作成します
  • フロントマターのフィールド:name、type、sub_type、description、status、tags、version、 ext_metadata、parent_asset_version_id、generation_method
  • README.md がすでに存在する場合、本文の内容を保持し、フロントマターのみを置き換えます
  • 最小限の CLI パラメーターでシームレスに再インポートできます

パラメーターの確認

パラメーター必須説明例
--catalog-id条件付き(新規アセットのインポート、ほとんどのコマンド)カタログ UUIDb2c3d4e5-f6a7-...
--asset-idはい(アセット/バージョン操作)アセット UUIDa1b2c3d4-...
--version-idはい(バージョン操作)バージョン UUIDd4e5f6a7-b8c9-...
--type条件付き(フロントマターなしでインポートする場合)アセットタイプmodel、dataset、algorithm、image、simulation
--name条件付き(フロントマターなしでインポートする場合)アセット名my-model
--sub-type条件付き(simulation のみ)アセットの sub_type。algorithm/image では sub_type を受け付けなくなりました(指定されてもクライアントが削除します)simulation:robot、environment、object、scene
--local-pathはい(インポート/エクスポート)ローカルフォルダーのパス./my-model
--ext-metadata条件付き(model/dataset/algorithm/image/simulation)拡張メタデータ JSON{"model_type":"planning"}
--languageはい(list-tags)タグの言語zh、en
--permissionsはい(check-permission)権限リストmeta_read,data_read
--dry-runいいえ実行せずにプレビューフラグ
--descriptionいいえアセット/バージョンの説明My model description
--statusいいえアセット/バージョンのステータスCREATING、DRAFT、RELEASE など
--tags条件付き(algorithm/image の作成)タグリスト(カンマ区切り)。algorithm/image の作成時は必須です。algorithm のタグは、参照先の image タグのサブセットである必要があります。更新時は全置換されますData Processing,Train
--urlいいえOBS または SWR のパス(create-asset/create-version のみ)obs://bucket/path
--generation-methodいいえアセットの生成方法(create-asset/create-version のみ)manual
--parent-asset-version-idいいえ親バージョンの UUID(create-asset/create-version のみ)d4e5f6a7-...

変更を伴う操作(作成/更新/削除/インポート/エクスポート/一括削除)は、実行前に ユーザーの確認を受けてください。--dry-run を使用すると、安全に操作をプレビューできます。

参考ドキュメント

エッジケース

主なエッジケースには、catalog_id の欠落、OBS アップロード失敗時のインポート復旧、エクスポート時の 権限チェック、不変フィールドの検証、組み込みアセットとワークスペースアセットの区別、 capabilities フィルターのマッピングがあります。すべての項目については、エッジケースを 参照してください。

検証方法

# Specification compliance + functional testing
bash scripts/test-cli-commands.sh . --executor {cli|sdk|api}

テストケース:すべてのアセット操作を網羅した一覧については、templates/test-vars.json を参照してください。

検証チェックリスト
  • 作成/更新/インポート後:show-asset/show-version/list-actions で変更が反映されたことを確認します
  • list/search/check-permission の実行後:結果がフィルター条件と一致し、verdict に allow/deny が含まれていることを確認します
  • 削除前:ユーザーに確認します。削除は取り消せません
  • エクスポート後:ローカルディレクトリのファイル構造が OBS のソースと一致することを確認します

ベストプラクティス

  • 実行前にパラメーターを検証するには、create/update/delete/import/export で --dry-run を使用します
  • ext_metadata を指定してアセットを作成する前に、タイプごとの必須フィールドを references/validation-rules.md で確認します
  • ほとんどのシナリオでは、(create-asset ではなく)import-asset を使用します。全体のフロー(アセット+バージョン+OBS アップロード)が処理されます
  • インポートに失敗した場合は、空のバージョンが増えないよう、--asset-id --version-id を指定して既存のバージョンを再利用します
  • タグが有効であることを確認するため、タグを追加する前に list-tags で定義済みタグを照会します
  • アセットをスムーズに移行するには、export-asset の後に import-asset を使用します。エクスポートで frontmatter 付きの README.md が生成され、インポート時に自動で読み取られてメタデータに反映されます
  • frontmatter なしでインポートする場合、事前検証を通過するために、model/dataset/simulation タイプでは --ext-metadata を指定します

コメント