资源通知订阅相关接口
订阅资源变更通知(SubscribeResNotify)
创建资源变更通知订阅。订阅启用后,管理节点会在匹配的资源创建、更新或删除事件发生时向指定 webhook 地址投递通知。
API请求
URLs
POST zstack/v1/zwatch/resnotify/subscriptionsHeaders
Authorization: OAuth the-session-uuidBody
{
"params": {
"name": "zcf-sync",
"resourceTypes": [
"VmInstanceVO",
"HostVO",
"VolumeVO"
],
"eventTypes": [
"CREATE",
"UPDATE",
"DELETE"
],
"type": "WEBHOOK",
"webhookUrl": "http://example.com/webhook"
},
"systemTags": [],
"userTags": []
}Note: 上述示例中
systemTags、userTags字段可以省略。列出是为了表示body中可以包含这两个字段。Curl示例
curl -H "Content-Type: application/json;charset=UTF-8" -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" -X POST -d '{"params":{"name":"zcf-sync","resourceTypes":["VmInstanceVO","HostVO","VolumeVO"],"eventTypes":["CREATE","UPDATE","DELETE"],"type":"WEBHOOK","webhookUrl":"http://example.com/webhook"}}' http://localhost:8080/zstack/v1/zwatch/resnotify/subscriptions参数列表
| 名字 | 类型 | 位置 | 描述 | 可选值 | 起始版本 |
|---|---|---|---|---|---|
| name (可选) | String | body(包含在params结构中) |
资源变更通知订阅名称 | 5.1.0 | |
| description (可选) | String | body(包含在params结构中) |
资源变更通知订阅的详细描述 | 5.1.0 | |
| resourceTypes (可选) | List | body(包含在params结构中) |
需要订阅的资源类型列表,例如 ResourceVO、HostVO、VmInstanceVO 或 AuditsVO | 5.1.0 | |
| eventTypes (可选) | List | body(包含在params结构中) |
需要订阅的事件类型列表,可选 CREATE、UPDATE、DELETE | 5.1.0 | |
| type (可选) | String | body(包含在params结构中) |
通知订阅类型,当前支持 WEBHOOK |
|
5.1.0 |
| webhookUrl | String | body(包含在params结构中) |
接收资源变更通知的 webhook URL | 5.1.0 | |
| secret (可选) | String | body(包含在params结构中) |
用于生成 X-ZStack-Signature 签名的密钥 | 5.1.0 | |
| customHeaders (可选) | String | body(包含在params结构中) |
投递 webhook 时附加的自定义 HTTP 请求头,JSON 字符串格式 | 5.1.0 | |
| resourceUuid (可选) | String | body(包含在params结构中) |
资源UUID | 5.1.0 | |
| tagUuids (可选) | List | body(包含在params结构中) |
标签UUID列表 | 5.1.0 | |
| systemTags (可选) | List | body | 系统标签 | 5.1.0 | |
| userTags (可选) | List | body | 用户标签 | 5.1.0 |
API返回
返回示例
{
"inventory": {}
}| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| success | boolean | 订阅资源变更通知是否成功 | 5.1.0 |
| inventory | ResNotifySubscriptionInventory | 详情参考inventory | 5.1.0 |
| error | ErrorCode | 错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error | 5.1.0 |
#inventory
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| uuid | String | 资源变更通知订阅的UUID,唯一标识该订阅 | 5.1.0 |
| name | String | 资源变更通知订阅名称 | 5.1.0 |
| description | String | 资源变更通知订阅的详细描述 | 5.1.0 |
| resourceTypes | String | 订阅匹配的资源类型列表,以逗号分隔 | 5.1.0 |
| eventTypes | String | 订阅匹配的事件类型列表,以逗号分隔 | 5.1.0 |
| createDate | Timestamp | 创建时间 | 5.1.0 |
| lastOpDate | Timestamp | 最后一次修改时间 | 5.1.0 |
| type | ResNotifyType | 详情参考type | 5.1.0 |
| state | ResNotifySubscriptionState | 详情参考state | 5.1.0 |
| webhookRef | ResNotifyWebhookRefInventory | 详情参考webhookRef | 5.1.0 |
#type
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| WEBHOOK | ResNotifyType | 通过 HTTP webhook 投递资源变更通知 | 5.1.0 |
| WEBSOCKET | ResNotifyType | 通过 WebSocket 投递资源变更通知,当前预留 | 5.1.0 |
#state
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| Enabled | ResNotifySubscriptionState | 订阅已启用,会向匹配的通知端点投递事件 | 5.1.0 |
| Disabled | ResNotifySubscriptionState | 订阅已禁用,不会投递匹配事件 | 5.1.0 |
#webhookRef
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| uuid | String | webhook 引用的UUID,与资源变更通知订阅UUID一致 | 5.1.0 |
| webhookUrl | String | 接收资源变更通知的 webhook URL | 5.1.0 |
| secret | String | 用于生成 X-ZStack-Signature 签名的密钥 | 5.1.0 |
| customHeaders | String | 投递 webhook 时附加的自定义 HTTP 请求头,JSON 字符串格式 | 5.1.0 |
#error
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| code | String | 错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001 | 0.6 |
| description | String | 错误的概要描述 | 0.6 |
| details | String | 错误的详细信息 | 0.6 |
| elaboration | String | 保留字段,默认为null | 0.6 |
| opaque | LinkedHashMap | 保留字段,默认为null | 0.6 |
| cause | ErrorCode | 根错误,引发当前错误的源错误,若无原错误,该字段为null | 0.6 |
SDK示例
Java SDK
SubscribeResNotifyAction action = new SubscribeResNotifyAction();
action.name = "zcf-sync";
action.resourceTypes = asList("VmInstanceVO","HostVO","VolumeVO");
action.eventTypes = asList("CREATE","UPDATE","DELETE");
action.type = "WEBHOOK";
action.webhookUrl = "http://example.com/webhook";
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c";
SubscribeResNotifyAction.Result res = action.call();Python SDK
action = SubscribeResNotifyAction()
action.name = "zcf-sync"
action.resourceTypes = [VmInstanceVO, HostVO, VolumeVO]
action.eventTypes = [CREATE, UPDATE, DELETE]
action.type = "WEBHOOK"
action.webhookUrl = "http://example.com/webhook"
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"
res = action.call()删除资源变更通知订阅(DeleteResNotifySubscription)
删除指定的资源变更通知订阅,删除后该订阅不再接收资源变更事件并停止 webhook 投递。
API请求
URLs
DELETE zstack/v1/zwatch/resnotify/subscriptions/{uuid}Headers
Authorization: OAuth the-session-uuidCurl示例
curl -H "Content-Type: application/json;charset=UTF-8" -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" -X DELETE http://localhost:8080/zstack/v1/zwatch/resnotify/subscriptions/subscription-uuid?deleteMode=Permissive参数列表
| 名字 | 类型 | 位置 | 描述 | 可选值 | 起始版本 |
|---|---|---|---|---|---|
| uuid | String | url | 资源变更通知订阅的UUID,唯一标识该订阅 | 5.1.0 | |
| deleteMode (可选) | String | query | 删除模式,可选 Permissive 或 Enforcing,默认 Permissive | 5.1.0 | |
| systemTags (可选) | List | query | 系统标签 | 5.1.0 | |
| userTags (可选) | List | query | 用户标签 | 5.1.0 |
API返回
该API成功时返回一个空的JSON结构{},出错时返回的JSON结构包含一个error字段,例如:
{
"error": {
"code": "SYS.1001",
"description": "A message or a operation timeout",
"details": "Create VM on KVM timeout after 300s"
}
}SDK示例
Java SDK
DeleteResNotifySubscriptionAction action = new DeleteResNotifySubscriptionAction();
action.uuid = "subscription-uuid";
action.deleteMode = "Permissive";
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c";
DeleteResNotifySubscriptionAction.Result res = action.call();Python SDK
action = DeleteResNotifySubscriptionAction()
action.uuid = "subscription-uuid"
action.deleteMode = "Permissive"
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"
res = action.call()查询资源变更通知订阅(QueryResNotifySubscription)
查询资源变更通知订阅,可按 UUID 或查询条件获取订阅配置、状态以及 webhook 引用信息。
API请求
URLs
GET zstack/v1/zwatch/resnotify/subscriptions
GET zstack/v1/zwatch/resnotify/subscriptions/{uuid}Headers
Authorization: OAuth the-session-uuid可查询字段
运行CLI命令行工具,输入QueryResNotifySubscription并按Tab键查看所有可查询字段以及可跨表查询的资源名。
API返回
该API成功时返回一个空的JSON结构{},出错时返回的JSON结构包含一个error字段,例如:
{
"error": {
"code": "SYS.1001",
"description": "A message or a operation timeout",
"details": "Create VM on KVM timeout after 300s"
}
}更新资源变更通知订阅(UpdateResNotifySubscription)
更新资源变更通知订阅配置,包括订阅名称、资源类型、事件类型、状态、webhook 地址、签名密钥以及自定义请求头。
API请求
URLs
PUT zstack/v1/zwatch/resnotify/subscriptions/{uuid}/actionsHeaders
Authorization: OAuth the-session-uuidBody
{
"updateResNotifySubscription": {
"resourceTypes": [
"VmInstanceVO",
"HostVO",
"VolumeVO",
"ClusterVO"
],
"eventTypes": [
"CREATE",
"UPDATE",
"DELETE"
]
},
"systemTags": [],
"userTags": []
}Note: 上述示例中
systemTags、userTags字段可以省略。列出是为了表示body中可以包含这两个字段。Curl示例
curl -H "Content-Type: application/json;charset=UTF-8" -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" -X PUT -d '{"updateResNotifySubscription":{"resourceTypes":["VmInstanceVO","HostVO","VolumeVO","ClusterVO"],"eventTypes":["CREATE","UPDATE","DELETE"]}}' http://localhost:8080/zstack/v1/zwatch/resnotify/subscriptions/subscription-uuid/actions参数列表
| 名字 | 类型 | 位置 | 描述 | 可选值 | 起始版本 |
|---|---|---|---|---|---|
| uuid | String | url | 资源变更通知订阅的UUID,唯一标识该订阅 | 5.1.0 | |
| name (可选) | String | body(包含在updateResNotifySubscription结构中) |
资源变更通知订阅名称 | 5.1.0 | |
| description (可选) | String | body(包含在updateResNotifySubscription结构中) |
资源变更通知订阅的详细描述 | 5.1.0 | |
| resourceTypes (可选) | List | body(包含在updateResNotifySubscription结构中) |
需要订阅的资源类型列表,例如 ResourceVO、HostVO、VmInstanceVO 或 AuditsVO | 5.1.0 | |
| eventTypes (可选) | List | body(包含在updateResNotifySubscription结构中) |
需要订阅的事件类型列表,可选 CREATE、UPDATE、DELETE | 5.1.0 | |
| state (可选) | String | body(包含在updateResNotifySubscription结构中) |
订阅状态,可设置为 Enabled 或 Disabled |
|
5.1.0 |
| webhookUrl (可选) | String | body(包含在updateResNotifySubscription结构中) |
接收资源变更通知的 webhook URL | 5.1.0 | |
| secret (可选) | String | body(包含在updateResNotifySubscription结构中) |
用于生成 X-ZStack-Signature 签名的密钥 | 5.1.0 | |
| customHeaders (可选) | String | body(包含在updateResNotifySubscription结构中) |
投递 webhook 时附加的自定义 HTTP 请求头,JSON 字符串格式 | 5.1.0 | |
| systemTags (可选) | List | body | 系统标签 | 5.1.0 | |
| userTags (可选) | List | body | 用户标签 | 5.1.0 |
API返回
返回示例
{
"inventory": {}
}| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| success | boolean | 更新资源变更通知订阅是否成功 | 5.1.0 |
| inventory | ResNotifySubscriptionInventory | 详情参考inventory | 5.1.0 |
| error | ErrorCode | 错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error | 5.1.0 |
#inventory
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| uuid | String | 资源变更通知订阅的UUID,唯一标识该订阅 | 5.1.0 |
| name | String | 资源变更通知订阅名称 | 5.1.0 |
| description | String | 资源变更通知订阅的详细描述 | 5.1.0 |
| resourceTypes | String | 订阅匹配的资源类型列表,以逗号分隔 | 5.1.0 |
| eventTypes | String | 订阅匹配的事件类型列表,以逗号分隔 | 5.1.0 |
| createDate | Timestamp | 创建时间 | 5.1.0 |
| lastOpDate | Timestamp | 最后一次修改时间 | 5.1.0 |
| type | ResNotifyType | 详情参考type | 5.1.0 |
| state | ResNotifySubscriptionState | 详情参考state | 5.1.0 |
| webhookRef | ResNotifyWebhookRefInventory | 详情参考webhookRef | 5.1.0 |
#type
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| WEBHOOK | ResNotifyType | 通过 HTTP webhook 投递资源变更通知 | 5.1.0 |
| WEBSOCKET | ResNotifyType | 通过 WebSocket 投递资源变更通知,当前预留 | 5.1.0 |
#state
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| Enabled | ResNotifySubscriptionState | 订阅已启用,会向匹配的通知端点投递事件 | 5.1.0 |
| Disabled | ResNotifySubscriptionState | 订阅已禁用,不会投递匹配事件 | 5.1.0 |
#webhookRef
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| uuid | String | webhook 引用的UUID,与资源变更通知订阅UUID一致 | 5.1.0 |
| webhookUrl | String | 接收资源变更通知的 webhook URL | 5.1.0 |
| secret | String | 用于生成 X-ZStack-Signature 签名的密钥 | 5.1.0 |
| customHeaders | String | 投递 webhook 时附加的自定义 HTTP 请求头,JSON 字符串格式 | 5.1.0 |
#error
| 名字 | 类型 | 描述 | 起始版本 |
|---|---|---|---|
| code | String | 错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001 | 0.6 |
| description | String | 错误的概要描述 | 0.6 |
| details | String | 错误的详细信息 | 0.6 |
| elaboration | String | 保留字段,默认为null | 0.6 |
| opaque | LinkedHashMap | 保留字段,默认为null | 0.6 |
| cause | ErrorCode | 根错误,引发当前错误的源错误,若无原错误,该字段为null | 0.6 |
SDK示例
Java SDK
UpdateResNotifySubscriptionAction action = new UpdateResNotifySubscriptionAction();
action.uuid = "subscription-uuid";
action.resourceTypes = asList("VmInstanceVO","HostVO","VolumeVO","ClusterVO");
action.eventTypes = asList("CREATE","UPDATE","DELETE");
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c";
UpdateResNotifySubscriptionAction.Result res = action.call();Python SDK
action = UpdateResNotifySubscriptionAction()
action.uuid = "subscription-uuid"
action.resourceTypes = [VmInstanceVO, HostVO, VolumeVO, ClusterVO]
action.eventTypes = [CREATE, UPDATE, DELETE]
action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"
res = action.call()