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 中运行:

  • 将 \ 续行符合并为一行,或在行尾加上反引号。
  • 使用 $env:NAME="value" 设置环境变量,而不是使用 export 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 后端。导入/导出还需要 cloudrobo-obs 端点来传输 OBS 文件。

前置条件 前置条件

CLI 安装、AK/SK 身份验证和配置请参见 references/cli-installation-guide.md。导入/导出操作要求在 ~/.cloudrobo/config.yaml 中配置 cloudrobo-obs 端点,或通过 CLOUDROBO_ENDPOINT_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 存在且包含有效的 frontmatter(例如来自之前的 export-asset),则只需提供 --catalog-id(新建资产)或 --asset-id(新建版本) ——其他元数据均从 frontmatter 读取。若没有 frontmatter,则必须通过 CLI 提供 catalog_id、name、type (模拟场景还需提供 sub_type)。

  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 frontmatter 中的元数据(name、type、sub_type、description、 status、tags、version、ext_metadata、parent_asset_version_id、generation_method)
    • frontmatter 中的值会覆盖 CLI 参数(catalog_id 除外,只能通过 CLI 提供);两者都缺少的字段会触发错误
    • 也支持 --ext-metadata CLI 参数(frontmatter 会覆盖该参数)
    • 调用 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 对象会以幂等方式覆盖)

类型限制:

  • import-asset 不支持 image 类型——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 导入流程(自动,模式 1 和模式 2):
    1. 校验是否提供了必需的 --tags(允许值:Data Processing / Train)
    2. 模式 2 需要 --ext-metadata(必须包含 engine 和 command);未提供会抛出 ValueError,提供了无效值会抛出 ValidationError
    3. 获取 catalog.url(模式 2:从资产详情获取,无需 --catalog-id);使用占位路径 code_dir = {catalog.url}/pending 创建资产/版本(预设的 image 后端需要 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(模式 3)——会抛出 ValueError(不支持重用版本;请使用 --asset-id 创建新版本)
    • 模式 3 也会在 SDK 层拒绝 image 资产(不仅限于 CLI)——会抛出 ValueError "import_asset does not support image assets"
  1. 验证:cloudrobo asset show-asset --asset-id <asset-id>

错误恢复: 如果导入在 OBS 上传阶段失败(已创建资产和版本,但文件尚未上传,版本状态仍为 CREATING),请勿创建新版本。有两种恢复策略:

  • 重用版本(推荐): 使用 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:搜索广场资产
  1. 搜索:cloudrobo asset search-assets --keyword <keyword>
  2. 查看详情:cloudrobo asset show-asset --asset-id <asset-id>

浏览官方/社区资产: cloudrobo asset list-publication-assets --type <type>

搜索后导出: 仅当用户请求导出时才导出。如果广场资产权限不包含 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 筛选
    • 或使用 --repository-id 代替 --catalog-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
子命令kebab-caselist-repositories、create-asset、import-asset
JSON 参数--ext-metadata '{"key":"value"}'--ext-metadata '{"model_type":"planning"}'
逗号分隔列表--tags tag1,tag2--tags robot,arm
试运行--dry-run(支持时)预览但不执行
输出格式JSON 输出到标准输出out(result)
UUID 标识符--asset-id、--version-id、--catalog-id必须使用 UUID 格式

核心命令

仓库与目录
命令关键参数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 引用 image(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
Action Management Action 管理
CommandKey ParamsSDK MethodAPI
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}

创建/更新 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}
Permission & Lineage 权限与血缘
CommandKey ParamsSDK MethodAPI
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 = 从子级到父级。

Marketplace 广场
CommandKey ParamsSDK MethodAPI
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

Import & Export 导入导出
导入资产
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

Frontmatter 支持:

  • 自动读取 local-path/README.md YAML frontmatter
  • 字段:name、type、sub_type、description、status、tags、version、ext_metadata、 parent_asset_version_id、generation_method
  • 优先级:frontmatter 会覆盖 CLI 参数(catalog_id 除外,仅支持 CLI);两者都缺少的字段会触发错误
  • 新建资产的必填字段:catalog_id(仅限 CLI)、name(frontmatter 或 CLI)、type(frontmatter 或 CLI)
  • 新建版本(--asset-id)的必填字段:ext_metadata(后端要求 model/dataset/image/simulation 提供此字段;通过 --ext-metadata 或 frontmatter 传入)
  • ext_metadata 预验证:在调用 API 前验证 model/dataset/algorithm/image/simulation 类型(robot 是 simulation 的子类型)

模式:

  • 未指定 --asset-id:创建新资产和版本,并上传到 OBS;上传后,如果版本状态为 CREATING,则自动更新为 DRAFT
  • 仅指定 --asset-id:为现有资产创建新版本并上传到 OBS;必须提供 ext_metadata(后端会验证 model/dataset/image/simulation 类型;通过 --ext-metadata 或 frontmatter 传入);上传后,如果版本状态为 CREATING,则自动更新为 DRAFT
  • 同时指定 --asset-id 和 --version-id:复用现有版本,直接将文件上传到 OBS(同名对象会以幂等方式覆盖);上传后,如果版本状态为 CREATING,则自动更新为 DRAFT;不支持 algorithm 资产(会引发 ValueError)

**状态流转:**未指定 --status 时,后端会将版本状态设为 CREATING。OBS 上传成功后,如果版本状态仍为 CREATING,SDK 会自动调用 update-version 将其设为 DRAFT。如果用户明确指定状态(例如在 frontmatter 中指定 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 frontmatter 的 <local-path>/<asset-id>/README.md
  • Frontmatter 字段:name、type、sub_type、description、status、tags、version、 ext_metadata、parent_asset_version_id、generation_method
  • 如果 README.md 已存在,则保留正文内容,仅替换 frontmatter
  • 支持通过最少的 CLI 参数无缝重新导入

参数确认

参数必填描述示例
--catalog-id条件必填(导入新资产及大多数命令)目录 UUIDb2c3d4e5-f6a7-...
--asset-id是(资产/版本操作)资产 UUIDa1b2c3d4-...
--version-id是(版本操作)版本 UUIDd4e5f6a7-b8c9-...
--type条件必填(不含 frontmatter 的导入)资产类型model、dataset、algorithm、image、simulation
--name条件必填(不含 frontmatter 的导入)资产名称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-...

变更操作(create/update/delete/import/export/batch-delete)应在执行前由用户确认。可以使用 --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 验证更改已生效
  • 列出/搜索/检查权限后:验证结果符合筛选条件,且 verdict 包含 allow/deny
  • 删除前:向用户确认——删除不可撤销
  • 导出后:检查本地目录的文件结构是否与 OBS 源一致

最佳实践

  • 使用 --dry-run 配合 create/update/delete/import/export,在执行前验证参数
  • 使用 ext_metadata 创建资产前,请参阅 references/validation-rules.md,了解各类型的必填字段
  • 大多数情况下使用 import-asset(而不是 create-asset)——它会处理完整流程(资产 + 版本 + OBS 上传)
  • 导入失败时,使用 --asset-id --version-id 重用现有版本,避免累积空版本
  • 添加标签前,使用 list-tags 查询预定义标签,确保标签有效
  • 使用 export-asset 后接 import-asset,即可无缝迁移资产——导出会生成带有 frontmatter 的 README.md,导入会自动读取它以填充元数据
  • 导入不带 frontmatter 的内容时,对于 model/dataset/simulation 类型,请提供 --ext-metadata 以 通过预校验

评论

支持 Markdown