关于 huawei-cloud-cloudrobo-asset
用于通过 CloudRobo CLI 或 Python SDK 管理 CloudRobo 平台资产的技能,面向维护资产仓库和目录的用户。涵盖资产与版本生命周期、市场搜索,以及本地文件和 OBS 之间的导入导出。
主要功能
- 01资产与版本的增删改查
- 02仓库、目录和资产查询
- 03标签与 Action 管理
- 04权限和资产谱系查询
- 05市场搜索及发布资产列表
- 06本地文件与 OBS 导入导出
适用场景
- 01创建或更新资产及其版本
- 02搜索市场资产并查看详情
- 03将本地模型或数据集导入资产仓库
- 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.mdapi-paths.mdcli-installation-guide.mddataflow-diagram.mdedge-cases.mdiam-policies.mdvalidation-rules.mdverification-method.mdscripts/test-cli-commands.shtemplates/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。仅当用户未提供时才执行:
- 从当前工作空间获取(首选):
cloudrobo workspace current→ 读取asset_catalog_id字段(绑定到当前工作空间的目录) - 备用方案 — 列出仓库和目录: 如果未配置工作空间,或
asset_catalog_id为空:cloudrobo asset list-repositories→ 获取repository_idcloudrobo 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)。
- (仅在新建资产且缺少 catalog_id 时)执行“前置条件:获取 catalog_id”
- 导入:
# 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.mdfrontmatter 中的元数据(name、type、sub_type、description、 status、tags、version、ext_metadata、parent_asset_version_id、generation_method) - frontmatter 中的值会覆盖 CLI 参数(catalog_id 除外,只能通过 CLI 提供);两者都缺少的字段会触发错误
- 也支持
--ext-metadataCLI 参数(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 时,会将本地代码上传到 OBScode_dir:
Algorithm 导入流程(自动,模式 1 和模式 2):# 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- 校验是否提供了必需的
--tags(允许值:Data Processing/Train) - 模式 2 需要
--ext-metadata(必须包含engine和command);未提供会抛出 ValueError,提供了无效值会抛出 ValidationError - 获取 catalog.url(模式 2:从资产详情获取,无需
--catalog-id);使用占位路径code_dir = {catalog.url}/pending创建资产/版本(预设的 image 后端需要 code_dir) - 创建资产/版本 → 获取 asset_id + version_id
- 将本地代码上传到
{catalog.url}/{asset_id}/{version_id}/ - 将资产级和版本级 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"
- 校验是否提供了必需的
- 验证:
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:搜索广场资产
- 搜索:
cloudrobo asset search-assets --keyword <keyword> - 查看详情:
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:列举空间资产
- (仅当缺少 catalog_id 时)执行“前置步骤:获取 catalog_id”
- 列举:
cloudrobo asset list-assets --catalog-id <catalog-id>- 使用
--type、--sub-type、--status筛选 - 或使用
--repository-id代替--catalog-id,查询仓库级资产
- 使用
场景 4:列举资产版本
- 如果已知 asset_id,跳至步骤 3
- (仅当缺少 asset_id 时)执行“前置步骤:获取 catalog_id”,然后使用
list-assets --catalog-id <id>查找asset_id - 列举版本:
cloudrobo asset list-versions --asset-id <asset-id>
场景 5:创建含扩展元数据的资产
创建 model、dataset、simulation、algorithm、image 类型的资产时,必须提供 ext_metadata。请参阅
references/validation-rules.md,了解各类型所需字段。
- (仅当缺少 catalog_id 时)执行“前置步骤:获取 catalog_id”
- 创建:
cloudrobo asset create-asset --catalog-id <id> --name <name> --type model --ext-metadata '{"model_type":"planning"}' - 创建版本:
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:标签管理
- 添加:
cloudrobo asset add-tags --asset-id <id> --tags "tag1,tag2" - 删除:
cloudrobo asset delete-tag --asset-id <id> --tag <tag> - 查询预定义标签:
cloudrobo asset list-tags --language zh(可选使用--type/--sub-type筛选)
CLI 命令格式标准
cloudrobo asset <command> [OPTIONS]
| 功能 | 说明 | 示例 |
|---|---|---|
| 命令组 | cloudrobo asset | cloudrobo asset list-assets |
| 子命令 | kebab-case | list-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 管理
| Command | Key Params | SDK Method | 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} |
创建/更新 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 权限与血缘
| Command | Key Params | SDK Method | 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 = 从子级到父级。
Marketplace 广场
| Command | Key Params | SDK Method | 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
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.mdYAML 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 | 条件必填(导入新资产及大多数命令) | 目录 UUID | b2c3d4e5-f6a7-... |
--asset-id | 是(资产/版本操作) | 资产 UUID | a1b2c3d4-... |
--version-id | 是(版本操作) | 版本 UUID | d4e5f6a7-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 安全地预览操作。
参考文档
- CLI 安装指南 — cloudrobo CLI 的安装和配置
- IAM 策略 — 最小权限凭证模型
- 验证方法 — 验证方法详情
- 数据流图 — Mermaid 数据流图
- 验收标准 — 验收标准
- API 路径 — 通过 SDK 源码发现的 REST API 路径
- 验证规则 — 字段验证、ext_metadata 规则、参数交互
- 边界情况 — 边界情况和错误处理
边界情况
主要边界情况包括:缺少 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以 通过预校验