更新时间:2024-11-22 GMT+08:00

创建私有hook版本

功能介绍

创建私有hook版本(CreatePrivateHookVersion)

创建私有hook版本,创建私有hook版本后需要调用UpdatePrivateHook API设置为默认版本才能生效。

  • 版本号遵循语义化版本号(Semantic Version),为用户自定义。

  • 若hook_name和hook_id同时存在,则资源编排服务会检查是否两个匹配,如果不匹配则会返回400。

  • 资源编排服务会对私有hook进行校验,如文件大小,策略文件语法校验等。若存在错误,则会创建失败。

URI

POST /v1/private-hooks/{hook_name}/versions

表1 路径参数

参数

是否必选

参数类型

描述

hook_name

String

私有hook的名字。此名字在domain_id+region下应唯一,可以使用中文、大小写英文、数字、下划线、中划线。首字符需为中文或者英文,区分大小写。

推荐用户使用三段命名空间:{自定义hook名称}-{hook应用场景}-hook。

请求参数

表2 请求Header参数

参数

是否必选

参数类型

描述

Client-Request-Id

String

用户指定的,对于此请求的唯一Id,用于定位某个请求,推荐使用UUID

表3 请求Body参数

参数

是否必选

参数类型

描述

hook_id

String

私有hook(private-hook)的唯一Id。

此Id由资源编排服务在生成私有hook的时候生成,为UUID。

由于私有hook名称仅仅在同一时间下唯一,即用户允许先生成一个叫HelloWorld的私有hook,删除,再重新创建一个同名私有hook。

对于团队并行开发,用户可能希望确保,当前我操作的私有hook就是我认为的那个,而不是其他队友删除后创建的同名私有hook。因此,使用Id就可以做到强匹配。

资源编排服务保证每次创建的私有hook所对应的Id都不相同,更新不会影响Id。如果给予的hook_id和当前hook的Id不一致,则返回400。

hook_version

String

私有hook的版本号。版本号必须遵循语义化版本号(Semantic Version),为用户自定义。

hook_version_description

String

私有hook版本的描述。可用于客户识别创建私有hook的版本。注意:hook版本为不可更新(immutable),所以该字段不可更新,如果需要更新,请删除后重建。

policy_uri

String

策略文件的OBS地址。内容仅支持OPA开源引擎识别的,以Rego(https://www.openpolicyagent.org/docs/latest/policy-language/)语言编写的策略模板。

请确保OBS地址所在局点与使用RFS服务局点一致。

策略文件当前支持单文件或zip压缩包,单文件需要以".rego"结尾,压缩包当前只支持zip格式,文件需要以.zip结尾。

关于策略文件的校验要求如下:

  • 文件必须是UTF8编码

  • 创建时会对大小、格式、语法等进行校验

  • 策略文件必须是UTF-8编码

  • 单文件或压缩包解压前后的大小应控制在1MB以内

  • 压缩包内的文件数量不能超过100个

  • 压缩包内的文件路径最长为2048

  • 压缩包内的文件名最长为255个字节

policy_uri和policy_body必须有且只有一个存在

policy_body

String

策略内容。仅支持OPA开源引擎识别的,以Rego(https://www.openpolicyagent.org/docs/latest/policy-language/)语言编写的策略模板。

policy_body和policy_uri 必须有且只有一个存在

响应参数

状态码: 400

表4 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表5 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 401

表6 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表7 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 403

表8 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表9 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 404

表10 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表11 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 409

表12 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表13 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 429

表14 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表15 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

状态码: 500

表16 响应Body参数

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

encoded_authorization_message

String

包含有关未经授权请求的信息。

details

Array of Detail objects

权限拒绝时服务返回的详细错误信息。

表17 Detail

参数

参数类型

描述

error_code

String

响应码

error_msg

String

响应消息

请求示例

  • 通过策略文件的uri在指定的私有hook下创建私有hook版本

    POST https://{endpoint}/v1/private-hooks/my-hello-world-hook-name/versions
    
    {
      "hook_version" : "0.0.1",
      "policy_uri" : "https://my_hello_world_bucket.{region}.myhuaweicloud.com/policy.rego",
      "hook_version_description" : "my first private hook version"
    }
  • 通过策略内容在指定的私有hook下创建私有hook版本

    POST https://{endpoint}/v1/private-hooks/my-hello-world-hook-name/versions
    
    {
      "hook_version" : "0.0.2",
      "policy_body" : "package policy\n\nimport rego.v1\n\nhook_result := {\n\"is_passed\": input.message == \"world\",\n\"err_msg\": \"The error msg when private hook is not passed the validation\",\n}",
      "hook_version_description" : "my second private hook version"
    }

响应示例

状态码

状态码

描述

201

创建成功,无数据返回

400

用户请求非法

401

用户身份认证失败

403

  1. 用户无权限调用此API

  2. 私有hook版本数量达到上限

404

私有hook不存在

409

创建冲突,同版本的私有hook版本已经存在

429

请求数量过多

500

服务器内部错误