在线文档

Document
PD3005 ZStack V3.0.1 开发手册 网络服务

其它文件格式:  电子书  


开发手册

版权声明

版权所有©上海云轴信息科技有限公司 2018。保留一切权利。

非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。

商标说明

ZStack商标和其他云轴商标均为上海云轴信息科技有限公司的商标。

本文档提及的其他所有商标或注册商标,由各自的所有人拥有。

注意

您购买的产品、服务或特性等应受上海云轴公司商业合同和条款的约束,本文档中描述的全部或部分产品、服务或特性可能不在您的购买或使用范围之内。除非合同另有约定,上海云轴公司对本文档内容不做任何明示或暗示的声明或保证。

由于产品版本升级或其他原因,本文档内容会不定期进行更新。除非另有约定,本文档仅作为使用指导,本文档中的所有陈述、信息和建议不构成任何明示或暗示的担保。

引言

产品版本

目前与本文档相对应的产品版本为:ZStack 2.3.1

读者对象

本文档详述了ZStack 2.3.1 RESTful API的使用规范,并提供所有API的详细定义。本文档主要适用于以下读者:

  • 架构设计师

  • 开发工程师

  • 测试工程师

  • 项目实施人员

  • 对ZStack有兴趣研究的相关人员

版本更新

2.3.1

2018/04/03主要更新:

  1. 网络拓扑

  2. 新版菜单导航、新版首页

  3. ZWatch:全新监控报警系统

  4. ZStack定制版ISO新增:基于CentOS 7.4深度定制版本

  5. 亲和组

  6. 增强vCenter接管功能:接管vCenter云盘、基于vCenter云路由网络提供网络服务

  7. 一个云主机加载多个ISO

  8. 多种策略创建云主机

  9. 一个二层网络可用于创建多个三层网络

  10. 操作日志/审计全新改版

  11. HTTPS安全访问UI管理界面

  12. 内部访问业务流量的负载均衡

  13. 优化自定义UI

  14. 多个场景新增进度条、操作助手和帮助文档,优化UI交互

  15. 优化部分业务逻辑

2.3.0

2018/02/08主要更新:

  1. 专有网络VPC

  2. 混合云灾备(混合云版支持)

  3. 大屏监控

  4. 用户自定义UI

  5. ImageStore类型镜像服务器支持Ceph类型主存储

  6. 支持vSwitch

  7. 支持vCenter资源同步

  8. ESXi云主机支持扁平网络

  9. 云主机更换操作系统

  10. 跨NFS存储数据迁移

  11. 虚拟IP支持QoS

  12. 支持AD认证

  13. 云主机自定义MAC地址

  14. 强化浏览器上传镜像功能

  15. 新增云盘镜像资源

  16. 数据云盘扩容

  17. 数据云盘规格支持QoS

  18. 停止NeverStop状态的云主机

  19. 开放云路由公网IP,并支持同一虚拟IP多网络服务复用

  20. 支持USB设备透传,强化外接设备透传功能

  21. 增加VDI SPICE流量优化选项

  22. 支持修改已设置的存储网络

  23. 支持设置VXLAN对普通账户的配额

  24. 支持ImageStore类型镜像服务器间的数据同步

  25. 管理节点数据库自动备份到远程服务器

  26. 多个场景新增进度条、操作助手和帮助文档,优化UI交互

  27. 优化部分业务逻辑

2.2

2017/10/16主要更新:

  1. 公有网络创建云主机

  2. 自定义DHCP模式

  3. 新增系统网络

  4. 云主机根云盘扩容

  5. 浏览器添加镜像(目前支持ImageStore类型镜像服务器)

  6. 管理节点高可用:多网络配置

  7. 跨Ceph存储数据迁移

  8. 增强Ceph存储功能

  9. 增强VDI功能

  10. LDAP自定义过滤规则

  11. 增强裸机管理

  12. 单集群支持多类型主存储(目前支持本地存储+NFS/SMP类型)

  13. 更换License支持本地上传

  14. 共享存储指定存储网络,增强云主机高可用

  15. 多个场景新增进度条、操作助手和帮助文档,优化UI交互

  16. 优化部分业务逻辑

2.1

2017/08/14主要更新:

  1. VDI

  2. 裸机管理

  3. GPU透传

  4. 智能报警

  5. 集群挂载多个主存储

  6. 新版定时器

  7. 静态路由

  8. User Data导入

  9. 云路由加载多个公有网络

  10. 增量升级

  11. 优化部分业务逻辑

系列索引

ZStack 2.3.1 开发手册系列索引如下:

  • 《ZStack 2.3.1 开发手册 云资源池》

  • 《ZStack 2.3.1 开发手册 硬件设施》

  • 《ZStack 2.3.1 开发手册 网络资源》

  • 《ZStack 2.3.1 开发手册 网络服务》

  • 《ZStack 2.3.1 开发手册 vCenter》

  • 《ZStack 2.3.1 开发手册 平台运维》

  • 《ZStack 2.3.1 开发手册 平台管理》

  • 《ZStack 2.3.1 开发手册 设置》

  • 《ZStack 2.3.1 开发手册 系统全局相关》

API规范概述

ZStack 2.3.1提供原生RESTful支持。您可以通过REST定义的架构设计原则和约束条件,并使用支持HTTP的编程语言进行开发。

HTTP方法 (HTTP Verbs)

当前API支持如下操作资源的方法:

|方法名|描述| |---|--| |GET| 获取资源信息。

  • 所有的查询API以及读API均使用该方法。

    | |POST| 创建一个资源。

    | |PUT|修改一个资源。-   所有对资源的修改操作,以及类RPC调用的操作,例如启动虚拟机,均使用该方法。

| |DELETE|删除一个资源。|

Parent topic: API规范概述

传参方式

URL、Query String、HTTP body三种方式均可用于传参。每种方式可以单独使用,也可以混合使用,具体使用哪种传参方式由具体API决定。

URL传参

当对某具体资源进行操作时,资源的UUID通过编码到URL的方式进行传参。

例如启动一个UUID为 f97143d60f1042c9badd9a1336d3c105的虚拟机,URL格式为:

zstack/v1/vm-instances/f97143d60f1042c9badd9a1336d3c105/actions

这里UUID编码到URL路径当中。

Query String传参

所有使用HTTP GET方法的API均使用Query String传参。

例如查询所有状态为Running的虚拟机, URL格式为:

zstack/v1/vm-instances?condition=state=Running

HTTP Body传参

当使用POST方法创建一个资源,或PUT方法修改一个资源时,除通过URL传参的部分外,剩余参数均通过HTTP Body传参。

例如在指定物理机上启动一个虚拟机:

``` PUT zstack/v1/vm-instances/f97143d60f1042c9badd9a1336d3c105/actions

{   "startVmInstance": {         "hostUuid": "8aef7e3a53b34eedaa05027a919156d9"    } } ```

这里虚拟机的UUID通过URL传参,参数hostUuid则通过HTTP Body传递。

Parent topic: API规范概述

HTTP Headers

当前API使用如下自定义HTTP Headers:

Authorization

除了少数API外(例如登录API),使用ZStack API前都需要一个会话(session),在调用API时通过Authorization HTTP Header传递会话UUID。该Header的格式为:

Authorization: OAuth 会话UUID

举例:

Authorization: OAuth 34cbfddd470a47d8bdb0727cd2182618

Note: OAuth和会话UUID之间用空格分隔。

X-Job-UUID

对于异步API,可以通过X-Job-UUID HTTP Header来指定该API Job的UUID,例如:

X-Job-UUID: d825b1a26f4e474b8c59306081920ff2

如果未指定该HTTP Header,ZStack会自动为API Job生成一个UUID。

Note:

X-Job-UUID必须为一个v4版本的UUID(即随机UUID)字符串去掉连接符-。ZStack会验证X-Job-UUID格式的合法性,并对非法的字符串返回一个400 Bad Request的错误。

X-Web-Hook

对于异步API,可以通过X-Web-Hook HTTP Header指定一个回调URL用于接收API 返回。通过使用回调URL的方法,调用者可以避免使用轮询去查询一个异步API的执行结果。举例:

X-Web-Hook: http://localhost:5000/api-callback

X-Job-Success

当使用了X-Web-Hook回调的方式获取异步API结果时,ZStack推送给回调URL的HTTP Post请求中会包含X-Job-Success HTTP Header指明该异步API的执行结果是成功还是失败。例如:

X-Job-Success: true

当值为true时执行成功,为false时执行失败。

Parent topic: API规范概述

HTTP返回码 (HTTP Status Code)

ZStack使用如下返回码:

|返回码|意义| |---|--| |200|API执行成功。| |202|API请求已被ZStack接受,用户需要通过轮询或Web Hook的方式获取API结果。该返回码只在调用异步API时出现。| |400|API请求未包含必要的参数或包含了非法的参数。具体信息可以从HTTP Response Body获得。| |404|URL不存在,通常是指定了错误的API URL。如果访问的URL是异步API返回的轮询地址,表示该轮询地址已经过期。| |405|API调用使用了错误的HTTP方法,例如在创建一个资源的时候用了GET方法而不是POST方法。| |500| ZStack RESTful终端遭遇了一个内部错误。| |503|API所执行的操作引发了一个错误,例如资源不足无法创建虚拟机。错误的具体信息可以从HTTP Response Body。|

Parent topic: API规范概述

API种类

ZStack的API分为同步API和异步API两种:

同步API

所有使用GET方法的API都是同步API,调用方收到的HTTP Response中直接包含了API的结果。例如:

``` GET zstack/v1/zones/f3fa7671894a40f6a73f5bfc7d90c126

{     "inventory": {         "uuid": "f3fa7671894a40f6a73f5bfc7d90c126",         "name": "zone1",         "description": "test",         "state": "Enabled",         "type": "zstack",         "createDate": "Jan 6, 2017 3:51:16 AM",         "lastOpDate": "Jan 6, 2017 3:51:16 AM"     } } ```

异步API

除了登录相关的API外,所有不使用GET方法的API都为异步API。用户调用一个异步API成功后会收到202返回码以及 Body中包含的一个轮询地址(location字段),用户需要周期性的GET该轮询地址以获得API的执行结果。例如:

``` Status Code: 202

Body:

{     "location": "http://localhost:8989/v1/api-jobs/967a26b7431c49c0b1d50d709ef1aef3" } ```

通常情况下GET一个轮询地址可以得到四种返回:

  1. 202返回码表示该API仍在处理中,用户需要继续轮询。

  2. 200返回码表示API执行成功,Body中包含API结果。

  3. 503返回码表示API执行失败,Body中包含错误码。

  4. 404返回码,则表示轮询地址已经过期,产生这种结果的原因可能是用户访问了一个错误的轮询地址,或者太久没有访问该轮询地址(例如超过2天没有访问),该轮询地址已经被删除。

异步API也可以用Web Hook的方式获得结果,具体方法见后面章节。

Parent topic: API规范概述

API操作

跟所有的RESTful API类似,绝大多数ZStack API执行的是CRUD(Create, Read, Update, Delete)操作,以及类RPC操作。

创建资源

所有资源的创建都使用POST方法,参数通过HTTP Body传递,例如创建一个虚拟机:

``` POST zstack/v1/vm-instances

Authorization: OAuth 0c234e29a2ad4ff4b0d97d4f3b47c6cf

{     "params": {         "l3NetworkUuids": ["37a701c7fe4a40758da15593aedd8aff"],         "defaultL3NetworkUuid": "37a701c7fe4a40758da15593aedd8aff",         "dataDiskOfferingUuids": [],         "name": "TestVm",         "description": "Test",         "systemTags": [],         "instanceOfferingUuid": "dd53f94b58924510b0122e40799a4114",         "type": "UserVm",         "imageUuid": "cc7b56780879409f98c1f992b75a12b0"     } } ```

查询资源

资源的查询使用GET方法,查询条件通过Query String传参,例如查询集群cluster1中名字不等于 web-vm的虚拟机:

``` GET zstack/v1/vm-instances?condition=name!=web-vm&condition=cluster.name=cluster1

Authorization: OAuth 0c234e29a2ad4ff4b0d97d4f3b47c6cf ```

如果已知资源的UUID,要直接获取该资源的信息,直接使用GET方法不加任何查询条件,例如:

``` GET zstack/v1/vm-instances/56f0fd314a2647ffb4f9565f6d05858e

Authorization: OAuth 0c234e29a2ad4ff4b0d97d4f3b47c6cf ```

返回UUID为56f0fd314a2647ffb4f9565f6d05858e虚拟机的信息。

删除资源

删除资源使用DELETE方法,被删除资源的UUID编码在URL中,例如:

``` DELETE zstack/v1/vm-instances/56f0fd314a2647ffb4f9565f6d05858e

Authorization: OAuth 0c234e29a2ad4ff4b0d97d4f3b47c6cf ```

删除UUID为56f0fd314a2647ffb4f9565f6d05858e的虚拟机。

修改资源与类RPC操作

但由于IaaS本身业务的性质,一部分操作更类似于RPC(远程调用)而非CRUD操作,例如启动虚拟机。根据RESTful API的一些较佳实践,ZStack将这些操作都归为资源的actions子资源,例如启动虚拟机、 停止虚拟机都是对虚拟机的actions子资源进行操作。举个例子:

启动虚拟机:

``` PUT zstack/v1/vm-instances/d46841bd4ebd47f8bf0bed85c3bdf0db/actions

{     "startVmInstance": {} } ```

停止虚拟机:

``` PUT zstack/v1/vm-instances/d46841bd4ebd47f8bf0bed85c3bdf0db/actions

{     "stopVmInstance": {} } ```

在上面的例子中,两个操作都访问的是相同的URL/v1/vminstances/d46841bd4ebd47f8bf0bed85c3bdf0db/actions, 具体的操作类型由包含在Body中的字段名表示,例如stopVmInstance,如果该API包含额外参数,则包含在操作字段名对应的map中。

资源操作的具体字段名和例子参考每个API的详细文档。

Parent topic: API规范概述

基本流程示例

在下例中,我们会创建一个Zone,以展示API使用的基本流程:

登录

使用API的第一步是登录以获取一个Session UUID,以供后续API调用使用。

``` PUT zstack/v1/accounts/login

body:

{     "logInByAccount": {         "password": "b109f3bbbc244eb82441917ed06d618b9008dd09b3befd1b5e07394c706a8bb980b1d7785e5976ec049b46df5f1326af5a2ea6d103fd07c95385ffab0cacbc86",         "accountName": "admin"     } } ```

这里的密码是用sha512哈希后的结果。

API返回如下:

``` status code: 200

body:

{     "inventory": {         "uuid": "00d038b699b74e76a01705918d48d939",         "accountUuid": "36c27e8ff05c4780bf6d2fa65700f22e",         "userUuid": "36c27e8ff05c4780bf6d2fa65700f22e",         "expiredDate": "Jan 1, 2017 11:31:06 AM",         "createDate": "Jan 1, 2017 9:31:06 AM"     }  } ```

返回内容中包含账户UUID等其他字段,我们需要的session UUID包含在字段uuid中:00d038b699b74e76a01705918d48d939

创建Zone

``` POST zstack/v1/zones

headers:

Authorization: OAuth 00d038b699b74e76a01705918d48d939

body:

{     "params": {         "name": "Zone1",         "description": "Test"     } } ```

由于创建Zone操作是一个异步API,API返回不是直接的结果,而是一个轮询地址:

``` status code: 202

body:

{     "location": "http://localhost:8989/v1/api-jobs/d0345d3ddcae485f8170572b15a2b581" } ```

用户需要周期性的轮询API结果:

``` GET http://localhost:8989/v1/api-jobs/d0345d3ddcae485f8170572b15a2b581

Authorization: OAuth 00d038b699b74e76a01705918d48d939 ```

如果API还未执行完成,上述GET操作得到的仍然是202返回码和上述轮询地址。当操作完成时,得到的结果如下:

``` status code: 200

body:

{     "inventory": {         "uuid": "f52fe55b64094ceb99b3893a238c4931",         "name": "Zone1",         "description": "Test",         "state": "Enabled",         "type": "zstack",         "createDate": "Jan 1, 2017 9:31:07 AM",         "lastOpDate": "Jan 1, 2017 9:31:07 AM"     } } ```

查询Zone

要获取创建的Zone的信息,可以用GET查询:

``` GET zstack/v1/zones/f52fe55b64094ceb99b3893a238c4931

Authorization: OAuth 00d038b699b74e76a01705918d48d939 ```

返回:

``` status code: 200

body:

{     "inventory": {         "uuid": "f52fe55b64094ceb99b3893a238c4931",         "name": "Zone1",         "description": "Test",         "state": "Enabled",         "type": "zstack",         "createDate": "Jan 1, 2017 9:31:07 AM",         "lastOpDate": "Jan 1, 2017 9:31:07 AM"     } } ```

登出

当所有API调用完毕,我们需要对已登录的session进行登出操作:

DELETE zstack/v1/accounts/sessions/00d038b699b74e76a01705918d48d939

返回

status code: 200

Parent topic: API规范概述

Webhook

对于异步API使用轮询的方式查询操作结果是一种低效的方式,为此ZStack提供Webhook的方式主动推送异步API结果给调用者。

要使用Webhook功能,调用者只需在HTTP Headers中指定X-Job-UUID和X-Web-Hook即可。以上面创建Zone为例,使用Webhook的API版本为:

``` POST zstack/v1/zones

headers:

Authorization: OAuth 00d038b699b74e76a01705918d48d939 X-Job-UUID: d0345d3ddcae485f8170572b15a2b581 X-Web-Hook: http://127.0.0.1:8989/rest-webhook

body:

{     "params": {         "name": "Zone1",         "description": "Test"     } } ```

API返回仍然是202返回码和一个轮询地址,但调用者无需再轮询。API执行成功后,结果会被推送到

http://127.0.0.1:8989/rest-webhook

``` POST http://127.0.0.1:8989/rest-webhook

headers:

X-Job-Success: true X-Job-UUID: d0345d3ddcae485f8170572b15a2b581

body:

{     "inventory": {         "uuid": "f52fe55b64094ceb99b3893a238c4931",         "name": "Zone1",         "description": "Test",         "state": "Enabled",         "type": "zstack",         "createDate": "Jan 1, 2017 9:31:07 AM",         "lastOpDate": "Jan 1, 2017 9:31:07 AM"     } } ```

推送的结果之中,X-Job-Success指明了API执行成功与否,X-Job-UUID包含值跟API调用时的X-Job-UUID相同,调用者可以对应结果和API。

Parent topic: API规范概述

查询API

用户可以用GET方法对一个资源进行查询,并且可以像MySQL一样指定多个查询条件、排序方式、选择字段、以及进行跨表查询等等。

支持超过400万个单项查询条件,以及400万阶乘的组合查询条件。

单表查询

例如:

GET zstack/v1/vm-instances?q=name=vm1

查询名字为vm1的虚拟机。

例如:

GET zstack/v1/vm-instances?q=name=vm1&q=state=Running

查询名字为vm1并且状态为Running的虚拟机。

这两个例子都是对虚拟机资源本身查询,反应到数据库层面还属于单表查询。

跨表查询

我们可以通过.进行跨表查询。

例如:

GET zstack/v1/vm-instances?q=vmNics.ip=192.168.10.100

查询IP地址为192.168.10.100的虚拟机,这里对虚拟机和网卡两张表进行了跨表查询。

例如:

GET zstack/v1/vm-instances?q=host.managementIp=10.10.20.3

查询IP为10.10.20.3上运行的所有虚拟机。这里对虚拟机和物理机两张表进行了跨表查询。

所有资源的查询API都支持下列参数

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |q (可选)|List|query|见查询条件。省略该字段将返回所有记录,返回记录数的上限受限于limit字段| |0.6| |limit (可选)|Integer|query|较多返回的记录数,类似MySQL的limit,默认值1000| |0.6| |start (可选)|Integer|query|起始查询记录位置,类似MySQL的offset。跟limit配合使用可以实现分页| |0.6| |count (可选)|Boolean|query|计数查询,相当于MySQL中的count()函数。当设置成true时,API只返回的是满足查询条件的记录数| |0.6| |groupBy (可选)|String|query|以字段分组,相当于MySQL中的group by关键字。例如groupBy=type| |1.9| |replyWithCount (可选)|Boolean|query|见分页查询| |0.6| |sort (可选)|String|query|以字段排序,等同于MySQL中的sort by关键字,例如sort=+ip。必须跟+或者-配合使用,+表示升序,-表示降序,后面跟排序字段名|`+`字段名,`-`字段名|0.6| |sortDirection (可选)|String|query|字段排序方向,必须跟sortBy配合使用|ascdesc|0.6| |fields (可选)|List|query|指定返回的字段,等同于MySQL中的select字段功能。例如fields=name,uuid,则只返回满足条件记录的name和uuid字段| |0.6|

查询条件

的查询条件类似于MySQL数据库。

例如:

uuid=bfa67f956afb430890aa49db14b85153 totalCapacity>2000 vmInstanceUuid not null

Note:

  • 字段名、查询操作符、匹配值三者之间不能有任何空格

  • 例如uuid = 25506342d1384c07b7342373a57475b9就是一个错误的查询条件,必须写为uuid=25506342d1384c07b7342373a57475b9

多个查询条件之间是关系。总共支持10个查询操作符:

  1. =: 等于,例如:

    vmInstanceUuid=c4981689088b40f98d2ade2548c323da

  2. !=: 不等于,例如:

    vmInstanceUuid!=c4981689088b40f98d2ade2548c323da

  3. >: 大于

  4. <: 小于

  5. >=: 大于等于

  6. <=: 小于等于

  7. ?=: in操作符,测试字段值是否在一个集合。集合中的值以,分隔。例如测试uuid是否属于某个集合:

    uuid?=25506342d1384c07b7342373a57475b9,bc58d68090ac42358c0cb0fe72e3287f

  8. !?=: not int操作符,测试字段值是否不属于一个集合。集合中的值以,分隔,例如测试name是否不等于VM1和VM2:

    name!?=VM1,VM2

  9. ~=: 字符串模糊匹配,相当于MySQL中的like操作。使用%匹配一个或多个字符,使用_匹配一个字符。 例如查询一个名字是以IntelCore开头的:

    name~=IntelCore%

  10. 或者查询一个名字是以IntelCore开头,以7结尾,中间模糊匹配一个字符:

    name~=IntelCore_7

    这样名字是IntelCoreI7IntelCoreM7的记录都会匹配上。

  11. !~=: 模糊匹配非操作。查询一个字段不能模糊匹配到某个字符串,匹配条件与~=相同。

  12. is null: 字段为null:

    name is null

  13. not null: 字段不为null:

    name not null

分页查询

startlimitreplyWithCount三个字段可以配合使用实现分页查询。

  • start指定起始查询位置。

  • limit指定查询返回的较大记录数。

  • replyWithCount被设置成true后,查询返回中会包含满足查询条件的记录总数,跟start值比较就可以得知还需几次分页。

例如:

总共有1000记录满足查询条件,使用如下组合:

start=0 limit=100 replyWithCount=true

则API返回将包含头100条记录,以及total字段等于1000,表示总共满足条件的记录为1000。

获取资源可查询字段

由于支持的查询条件数非常巨大,我们无法在文档中枚举所有的查询条件。

用户可以使用命令行工具-cli的自动补全功能来查看一个资源可查询的字段以及可跨表查询的字段。

  • 以查询虚拟机为例,在-cli里输入QueryVmInstance并按Tab键补全,可以看到提示页面:

    ```

    systemTag=         userTag=           allocatorStrategy=     clusterUuid=           cpuNum=                cpuSpeed= createDate=            defaultL3NetworkUuid=  description=           groupBy=               hostUuid=              hypervisorType= imageUuid=             instanceOfferingUuid=  lastHostUuid=          lastOpDate=            memorySize=            name= platform=              rootVolumeUuid=        state=                 type= uuid=                  zoneUuid=

    [Parameters:] count=                 fields=                limit=                 replyWithCount=        sortBy=                sortDirection= start=                 timeout=
    ```

    • >>>QueryVmInstance  [Query Conditions:] allVolumes.            cluster.               host.                  image.                 instanceOffering.      rootVolume. vmNics.                zone.

  • 这里中间行:

    __systemTag__=         __userTag__=           allocatorStrategy=     clusterUuid=           cpuNum=                cpuSpeed= createDate=            defaultL3NetworkUuid=  description=           groupBy=               hostUuid=              hypervisorType= imageUuid=             instanceOfferingUuid=  lastHostUuid=          lastOpDate=            memorySize=            name= platform=              rootVolumeUuid=        state=                 type= uuid=                  zoneUuid=

    __systemTag____userTag__两个特殊查询条件外,其余均为虚拟机表的原生字段,用户可以在API的查询条件里面指定它们,并且可以在fields参数中指定这些字段来过滤其它不希望API返回的字段。

    例如:

    GET zstack/v1/vm-instances?q=cpuNum>5

    返回CPU数量多于5的虚拟机。

    GET zstack/v1/vm-instances?q=hypervisorType=KVM&fields=uuid&fields=name

    返回虚拟化类型为KVM的虚拟机,由于在fields指定了uuid和name两个字段,API返回中只会包含虚拟机的name和uuid。

    Note:

    只有资源的原生字段可以被fields选取,__userTag____systemTag__以及下面讲到的跨表字段均不能出现在fields参数中。

  • 提示的第一行:

    ```

    allVolumes.            cluster.               host.                  image.                 instanceOffering.      rootVolume. vmNics.                zone. ```

    指明了虚拟机资源可以跟哪些资源做跨表查询,例如:allVolumes代表云盘,cluster代表集群,vmNics代表网卡等。

    如需查看这些资源的具体字段,只需输入资源名加.号,并按Tab键补全。

    例如:

    ```

    vmNics.systemTag=         vmNics.userTag=           vmNics.createDate=            vmNics.deviceId=              vmNics.gateway= vmNics.ip=                    vmNics.l3NetworkUuid=         vmNics.lastOpDate=            vmNics.mac=                   vmNics.metaData= vmNics.netmask=               vmNics.uuid=                  vmNics.vmInstanceUuid=
    ```

    这里我们输入了资源vmNics并用.号表示我们要做一个跨表查询,Tab键为我们补全了vmNics资源的原生字段以及可跨表查询的其它资源。

    • 例如vmNics.ip表示网卡的原生字段ip

    • >>>QueryVmInstance vmNics. [Query Conditions:] vmNics.eip.                   vmNics.l3Network.             vmNics.loadBalancerListener.  vmNics.portForwarding.        vmNics.securityGroup. vmNics.vmInstance.

GET zstack/v1/vm-instances?q=vmNics.ip=192.168.0.100

    进行了一个跨表查询,条件是网卡表的**ip**字段,返回的结果是**ip**为*192.168.0.100*的虚拟机。  -   网卡资源同样可以跟其它资源进行跨表查询,例如**vmNics.eip**。      将网卡表和EIP表进行跨表:      ```     GET zstack/v1/vm-instances?q=vmNics.eip.ip=192.168.0.100     ```      进行了跨3表查询,返回的是EIP为*192.168.0.100*的虚拟机。

 

  • 通过资源间连续跨表,一个资源几乎跟系统中多个有逻辑关系的资源进行跨表,例如:

    ```

    zone.cluster.l2Network.l3Network.systemTag=    zone.cluster.l2Network.l3Network.userTag=      zone.cluster.l2Network.l3Network.createDate= zone.cluster.l2Network.l3Network.description=      zone.cluster.l2Network.l3Network.dnsDomain=        zone.cluster.l2Network.l3Network.l2NetworkUuid= zone.cluster.l2Network.l3Network.lastOpDate=       zone.cluster.l2Network.l3Network.name=             zone.cluster.l2Network.l3Network.state= zone.cluster.l2Network.l3Network.system=           zone.cluster.l2Network.l3Network.type=             zone.cluster.l2Network.l3Network.uuid= zone.cluster.l2Network.l3Network.zoneUuid=  ```

    分别跟zone, cluster, l2Network, l3Network多个资源进行跨表。

    Note:

    • 由于一个资源的逻辑关系存在环路,例如以虚拟机为主体可以跟网卡进行跨表,例如QueryVmInstance vmNics.,同时以网卡为查询主体也可以跟虚拟机进行跨表QueryVmNic vmInstance.,这样就会存在环路路径。

    • 例如 QueryVmInstance vmNics.vmInstance.name=vm1通过跨表查询了name=vm1的虚拟机,它的实际效果跟QueryVmInstance name=vm1完全等同。这里的跨表是无意义的,只会生产复杂的SQL语句导致低效的数据库查询。在使用中应该避免这种环路跨表查询。

    • >>>QueryVmInstance zone.cluster.l2Network.l3Network. [Query Conditions:] zone.cluster.l2Network.l3Network.ipRanges.         zone.cluster.l2Network.l3Network.l2Network.        zone.cluster.l2Network.l3Network.networkServices. zone.cluster.l2Network.l3Network.serviceProvider.  zone.cluster.l2Network.l3Network.vmNic.            zone.cluster.l2Network.l3Network.zone.

  • __systemTag____userTag__是两个特殊的查询条件,允许用户通过tag查询资源。

    例如:

    QueryVmInstance __systemTag__=staticIp:10.10.1.20

    查询具有staticIp:10.10.1.20这个tag的虚拟机。

Parent topic: API规范概述

网络服务相关接口

获取网络服务类型(GetNetworkServiceTypes)

API请求

URLs

GET zstack/v1/network-services/types

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 8a5a05acd4fb47b7839a9c50a74c3f1a" \ -X GET http://localhost:8080/zstack/v1/network-services/types

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |systemTags (可选)|List|query|系统标签| |0.6| |userTags (可选)|List|query|用户标签| |0.6|

API返回

返回示例

{ "serviceAndProviderTypes": { "SecurityGroup": [ "929ae57afd1b4815b04ecb25bd67fb02"     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |types|Map| |0.6| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6|

#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

GetNetworkServiceTypesAction action = new GetNetworkServiceTypesAction(); action.sessionId = "bcb01c0891bb48a1974e2004b3397678"; GetNetworkServiceTypesAction.Result res = action.call();

Python SDK

GetNetworkServiceTypesAction action = GetNetworkServiceTypesAction() action.sessionId = "35c50339c05b4d6c9b4461a478c17239" GetNetworkServiceTypesAction.Result res = action.call()

Parent topic: 网络服务相关接口

查询网络服务模块(QueryNetworkServiceProvider)

API请求

URLs

GET zstack/v1/network-services/providers

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 0305524eb18344ea95193f8283a7212f" \ -X GET http://localhost:8080/zstack/v1/network-services/providers

可查询字段

运行zstack-cli命令行工具,输入QueryNetworkServiceProvider并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "3cf04a2c5e1a4c4c8947545323e35d6a", "name": "SecurityGroup", "type": "SecurityGroup", "createDate": "Jun 7, 2017 9:21:03 PM", "lastOpDate": "Jun 7, 2017 9:21:03 PM", "networkServiceTypes": [ "SecurityGroup"       ], "attachedL2NetworkUuids": []     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |type|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |networkServiceTypes|Set| |0.6| |attachedL2NetworkUuids|Set| |0.6|

SDK示例

Java SDK

QueryNetworkServiceProviderAction action = new QueryNetworkServiceProviderAction(); action.conditions = asList(); action.sessionId = "3d4bfef1a32241528160058368824670"; QueryNetworkServiceProviderAction.Result res = action.call();

Python SDK

QueryNetworkServiceProviderAction action = QueryNetworkServiceProviderAction() action.conditions = [] action.sessionId = "db50128c5ab745e68c9b30c52d24ebf9" QueryNetworkServiceProviderAction.Result res = action.call()

Parent topic: 网络服务相关接口

查询网络服务与三层网络引用(QueryNetworkServiceL3NetworkRef)

API请求

URLs

GET zstack/v1/l3-networks/network-services/refs

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth aa530ebc39804e00b3df02b8862eaec3" \ -X GET http://localhost:8080/zstack/v1/l3-networks/network-services/refs

可查询字段

运行zstack-cli命令行工具,输入QueryNetworkServiceL3NetworkRef并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "l3NetworkUuid": "fc5bd613a8fd45ed9b96ff5d99ae6717", "networkServiceProviderUuid": "f79573afadc44f4fb83aaf67eeb98cde", "networkServiceType": "PortForwarding"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |l3NetworkUuid|String|三层网络UUID|0.6| |networkServiceProviderUuid|String|网络服务提供模块UUID|0.6| |networkServiceType|String| |0.6|

SDK示例

Java SDK

QueryNetworkServiceL3NetworkRefAction action = new QueryNetworkServiceL3NetworkRefAction(); action.conditions = asList(); action.sessionId = "01368722cb7e4c7eac03e7040f8b73e1"; QueryNetworkServiceL3NetworkRefAction.Result res = action.call();

Python SDK

QueryNetworkServiceL3NetworkRefAction action = QueryNetworkServiceL3NetworkRefAction() action.conditions = [] action.sessionId = "237996a7dddf4cf3a42f6ea15893bc76" QueryNetworkServiceL3NetworkRefAction.Result res = action.call()

Parent topic: 网络服务相关接口

挂载网络服务到三层网络(AttachNetworkServiceToL3Network)

API请求

URLs

POST zstack/v1/l3-networks/{l3NetworkUuid}/network-services

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "networkServices": { "95f60161f9d5483dbfe92a10d8795334": [ "PortForwarding"       ]     }   }, "systemTags": [], "userTags": [] }

上述示例中systemTags、userTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"networkServices":{"41083a0985973a62bf8e6086dff0a2df":["PortForwarding"]}}}' \ http://localhost:8080/zstack/v1/l3-networks/ae8e1e4d66003a08b748363b8ebb0be8/network-services

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |l3NetworkUuid|String|url|三层网络UUID| |0.6| |networkServices|Map|body(包含在params结构中)|网络服务| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

AttachNetworkServiceToL3NetworkAction action = new AttachNetworkServiceToL3NetworkAction(); action.l3NetworkUuid = "e1a80b4d97ca442b8f313739de6d7997"; action.networkServices = [a3b86894e3b948288ccb1886a4084f03:[PortForwarding]]; action.sessionId = "4de1ca63ca1a4a0db7d799093b387c76"; AttachNetworkServiceToL3NetworkAction.Result res = action.call();

Python SDK

AttachNetworkServiceToL3NetworkAction action = AttachNetworkServiceToL3NetworkAction() action.l3NetworkUuid = "38daee20c0264e41b58ea573c261f439" action.networkServices = [7fb4f50bf7c74c30951fb7adbb202a95:[PortForwarding]] action.sessionId = "4be26def099940f0979b1afaf414bba6" AttachNetworkServiceToL3NetworkAction.Result res = action.call()

Parent topic: 网络服务相关接口

从三层网络卸载网络服务(DetachNetworkServiceFromL3Network)

API请求

URLs

DELETE/v1/l3-networks/{l3NetworkUuid}/network-services

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 6c324aa381644b8b87d229ba3fdad834" \ -X DELETE http://localhost:8080/zstack/v1/l3-networks/0cf8b1d49cb34d9c8f3fb0f70a4ec20d/network-services?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |l3NetworkUuid|String|url|三层网络UUID| |0.6| |networkServices|Map|body|网络服务| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DetachNetworkServiceFromL3NetworkAction action = new DetachNetworkServiceFromL3NetworkAction(); action.l3NetworkUuid = "ce1dedf370494cd4b49c1dd1c845c96b"; action.networkServices = [76b66ca373834d0e8f4011f84dbf6006:[PortForwarding, EIP]]; action.sessionId = "095d243ad49d4717b99b49c6151c25c8"; DetachNetworkServiceFromL3NetworkAction.Result res = action.call();

Python SDK

DetachNetworkServiceFromL3NetworkAction action = DetachNetworkServiceFromL3NetworkAction() action.l3NetworkUuid = "a679835ba20342c5809e1be8ddf5e5c8" action.networkServices = [b78e8e4ca36b4eefa5c38140c7611ef3:[PortForwarding, EIP]] action.sessionId = "73aa0dad7996453f80331b833df6f320" DetachNetworkServiceFromL3NetworkAction.Result res = action.call()

Parent topic: 网络服务相关接口

安全组相关接口

Parent topic: 网络服务相关接口

创建安全组(CreateSecurityGroup)

API请求

URLs

POST zstack/v1/security-groups

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "name": "sp", "description": "test create security group"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"name":"sp","description":"test create security group"}}' \ http://localhost:8080/zstack/v1/security-groups

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)|用户指定的资源UUID,若指定,系统不会为该资源随机分配UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "7bb070cdebf44fd8af354f25344d758b", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:21:20 PM", "lastOpDate": "Jun 7, 2017 9:21:20 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

CreateSecurityGroupAction action = new CreateSecurityGroupAction(); action.name = "sp"; action.description = "test create security group"; action.sessionId = "b5032c14210c4668a3a2bcd341d80bbf"; CreateSecurityGroupAction.Result res = action.call();

Python SDK

CreateSecurityGroupAction action = CreateSecurityGroupAction() action.name = "sp" action.description = "test create security group" action.sessionId = "e34f8139af4548d5ade539ca2a5d7983" CreateSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

删除安全组(DeleteSecurityGroup)

API请求

URLs

DELETE zstack/v1/security-groups/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 6674ae438b8646d3b4a99a7fe7a48719" \ -X DELETE http://localhost:8080/zstack/v1/security-groups/6791f54e4fb147d1b26030723efe03bd?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body| -   Permissive::

如果删除过程中发生错误或者删除不被允许ZStack会停止删除操作

在这种情况下, 包含失败原因的错误代码会被返回

  • Enforcing:

ZStack会忽略所有错误和权限而直接删除资源;

在这种情况下, 删除操作总是会成功

| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

``` DeleteSecurityGroupAction action = new DeleteSecurityGroupAction(); action.uuid = "86efff16586b4d82bfea66deba85cc50"; action.deleteMode = "Permissive"; action.sessionId = "079653952584401b997df37fd7044433"; DeleteSecurityGroupAction.Result res = action.call();

```

Python SDK

DeleteSecurityGroupAction action = DeleteSecurityGroupAction() action.uuid = "59098134c4214c79a48ced0ed7952ecd" action.deleteMode = "Permissive" action.sessionId = "2fb58330c68d46f6aa700740d52b02c0" DeleteSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

查询安全组(QuerySecurityGroup)

API请求

URLs

GET zstack/v1/security-groups GET zstack/v1/security-groups/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 1f3fcf6a885148b69702e52d22de9606" \ -X GET http://localhost:8080/zstack/v1/security-groups?q=name=web&q=state=Enabled

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth a0c4c995a9e34c639cc72732bcd7bd2f" \ -X GET http://localhost:8080/zstack/v1/security-groups/af0d90237c084afaa16f997847579152

可查询字段

运行zstack-cli命令行工具,输入QuerySecurityGroup并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "6f757e65fed243babeac0be896e77caf", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:20:34 PM", "lastOpDate": "Jun 7, 2017 9:20:34 PM", "internalId": 0.0     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的结束端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QuerySecurityGroupAction action = new QuerySecurityGroupAction(); action.conditions = asList("name=web","state=Enabled"); action.sessionId = "604cf540e620468fa3fad7098196bb96"; QuerySecurityGroupAction.Result res = action.call();

Python SDK

QuerySecurityGroupAction action = QuerySecurityGroupAction() action.conditions = ["name=web","state=Enabled"] action.sessionId = "55a3657d35f14ee4b41401bd7ada15a7" QuerySecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

更新安全组(UpdateSecurityGroup)

API请求

URLs

PUT zstack/v1/security-groups/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "updateSecurityGroup": { "name": "new sg", "description": "for test update"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updateSecurityGroup":{"name":"new sg","description":"for test update"}}' \ http://localhost:8080/zstack/v1/security-groups/549bb03c235a3fa8aa18fb79539d4862/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateSecurityGroup结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateSecurityGroup结构中)|资源的详细描述| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "def8dff9ec5046e39f57193f488d716a", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:20:15 PM", "lastOpDate": "Jun 7, 2017 9:20:15 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

UpdateSecurityGroupAction action = new UpdateSecurityGroupAction(); action.uuid = "b60e66856f6c4f7ca16854cfd170fb99"; action.name = "new sg"; action.description = "for test update"; action.sessionId = "8c23751364b746628177641202ff0999"; UpdateSecurityGroupAction.Result res = action.call();

Python SDK

UpdateSecurityGroupAction action = UpdateSecurityGroupAction() action.uuid = "f6fc05d6ba854530bd8141733d6db4ad" action.name = "new sg" action.description = "for test update" action.sessionId = "f75e99d861ca4660925d72313692d663" UpdateSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

改变安全组状态(ChangeSecurityGroupState)

API请求

URLs

PUT zstack/v1/security-groups/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "changeSecurityGroupState": { "stateEvent": "disable"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"changeSecurityGroupState":{"stateEvent":"disable"}}' \ http://localhost:8080/zstack/v1/security-groups/85a1d77188d836eab47b34e7129fb5fb/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |stateEvent|String|body(包含在changeSecurityGroupState结构中)|安全组状态|enabledisable|0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "eebb81d825214555a61567f8811fca15", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:20:16 PM", "lastOpDate": "Jun 7, 2017 9:20:16 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

ChangeSecurityGroupStateAction action = new ChangeSecurityGroupStateAction(); action.uuid = "9389a923cd8c4cacb12e57b979fa1e5f"; action.stateEvent = "disable"; action.sessionId = "772deba87e7847459e5b1f428531bee2"; ChangeSecurityGroupStateAction.Result res = action.call();

Python SDK

ChangeSecurityGroupStateAction action = ChangeSecurityGroupStateAction() action.uuid = "1ecf0093245b4a6a948d5d09983f0193" action.stateEvent = "disable" action.sessionId = "eb76404af2f140f993ae68bb22a80781" ChangeSecurityGroupStateAction.Result res = action.call()

Parent topic: 安全组相关接口

挂载安全组到L3网络(AttachSecurityGroupToL3Network)

API请求

URLs

POST zstack/v1/security-groups/{securityGroupUuid}/l3-networks/{l3NetworkUuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST http://localhost:8080/zstack/v1/security-groups/0551a95211783295879d083216cb493b/l3-networks/35aa9f6e9a2b3f849d1631ba89d0b27d

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |l3NetworkUuid|String|url|三层网络UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "5870eab620d2487d8d0320eabe185718", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:20:28 PM", "lastOpDate": "Jun 7, 2017 9:20:28 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

AttachSecurityGroupToL3NetworkAction action = new AttachSecurityGroupToL3NetworkAction(); action.securityGroupUuid = "eef2d772f4e94997816fdf8512a8233a"; action.l3NetworkUuid = "6761570f790c400596839da61767f890"; action.sessionId = "efb745c9a7204e9a941608059f3c3a10"; AttachSecurityGroupToL3NetworkAction.Result res = action.call();

Python SDK

AttachSecurityGroupToL3NetworkAction action = AttachSecurityGroupToL3NetworkAction() action.securityGroupUuid = "ae9aebcc28d1490293382c661d123c16" action.l3NetworkUuid = "cd2fdc4303e34ead806a492d18d4b5fa" action.sessionId = "9938bf24e1b24c39ab4dc3edc0aeb38d" AttachSecurityGroupToL3NetworkAction.Result res = action.call()

Parent topic: 安全组相关接口

从L3网络卸载安全组(DetachSecurityGroupFromL3Network)

API请求

URLs

DELETE/v1/security-groups/{securityGroupUuid}/l3-networks/{l3NetworkUuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 6edcc17febe04b9fb77059cf096f2cc5" \ -X DELETE http://localhost:8080/zstack/v1/security-groups/08d569c03f8343168f2ae80861db92f3/l3-networks/af8199498a9e4ab1be6d1fea8ec7fbee?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |l3NetworkUuid|String|url|三层网络UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "6cf7a5c5d89b4094ad912a555319d4d0", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:21:06 PM", "lastOpDate": "Jun 7, 2017 9:21:06 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

DetachSecurityGroupFromL3NetworkAction action = new DetachSecurityGroupFromL3NetworkAction(); action.securityGroupUuid = "823d378084fa445c8d180895db4dd8c1"; action.l3NetworkUuid = "cf6dd2bbd5f940d0976e8c2cd2c063c9"; action.sessionId = "915660a10fc74d509d5ef72caf5892bd"; DetachSecurityGroupFromL3NetworkAction.Result res = action.call();

Python SDK

DetachSecurityGroupFromL3NetworkAction action = DetachSecurityGroupFromL3NetworkAction() action.securityGroupUuid = "726d6b2f8a674da681f32c66102494df" action.l3NetworkUuid = "f32da69be7ce4918bb81b8a7ce891177" action.sessionId = "933ada040fb14b94941997381877bacc" DetachSecurityGroupFromL3NetworkAction.Result res = action.call()

Parent topic: 安全组相关接口

获取网卡列表清单(GetCandidateVmNicForSecurityGroup)

获取可应用安全组的网卡列表清单。

API请求

URLs

GET zstack/v1/security-groups/{securityGroupUuid}/vm-instances/candidate-nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth aec584233a724de089d05b8090e5a296" \ -X GET http://localhost:8080/zstack/v1/security-groups/584e70f6d3504c7a811df5eeba61839c/vm-instances/candidate-nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |systemTags (可选)|List|query|系统标签| |0.6| |userTags (可选)|List|query|用户标签| |0.6|

API返回

返回示例

{ "inventories": [     { "uuid": "9f66ee89d3a149d0aea0fd3453ab0d04", "vmInstanceUuid": "93304413cb814c6aa61a29ca799b627e", "l3NetworkUuid": "5fdc29bd6b5e4409b65aaa04daecdef8", "ip": "192.168.0.123", "mac": "fa:ef:34:5c:6c:00", "netmask": "255.255.255.0", "gateway": "192.168.0.1", "internalName": "eth0", "deviceId": 0.0     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |vmInstanceUuid|String|云主机UUID|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String| |0.6| |mac|String| |0.6| |netmask|String| |0.6| |gateway|String| |0.6| |metaData|String| |0.6| |deviceId|Integer| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

GetCandidateVmNicForSecurityGroupAction action = new GetCandidateVmNicForSecurityGroupAction(); action.securityGroupUuid = "4060760487504ea3b1ad25bcbabacff5"; action.sessionId = "488b3f4cc8ea4868ab0a7874c4d6358e"; GetCandidateVmNicForSecurityGroupAction.Result res = action.call();

Python SDK

GetCandidateVmNicForSecurityGroupAction action = GetCandidateVmNicForSecurityGroupAction() action.securityGroupUuid = "c30e353b2fe0408ca3ee09a5495b5fa4" action.sessionId = "acaa2edf939e47b1a399b413f6b26400" GetCandidateVmNicForSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

添加虚拟机网卡到安全组(AddVmNicToSecurityGroup)

API请求

URLs

POST zstack/v1/security-groups/{securityGroupUuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "vmNicUuids": [ "8432b2608a8a4f639cc56a8c65ee42ef"     ]   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"vmNicUuids":["c37875cec7133f41adbeb336cdd33ef8"]}}' \ http://localhost:8080/zstack/v1/security-groups/f52566f939f635629a43cd3e27f78dd9/vm-instances/nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |vmNicUuids|List|body(包含在params结构中)|云主机网卡的uuid列表| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

AddVmNicToSecurityGroupAction action = new AddVmNicToSecurityGroupAction(); action.securityGroupUuid = "b651075ffcac475c91d3edaa5e9ade75"; action.vmNicUuids = asList("ff0f6c13311b46ddb186a95c0d18350a"); action.sessionId = "605fca0559284eff95d78e418508ff2f"; AddVmNicToSecurityGroupAction.Result res = action.call();

Python SDK

AddVmNicToSecurityGroupAction action = AddVmNicToSecurityGroupAction() action.securityGroupUuid = "2da1519b9b39451e8742aadaa9241952" action.vmNicUuids = [bda4ceec2917426cb9ee20b3bcb20653] action.sessionId = "863d503abfbc4334846d67c1eac375f9" AddVmNicToSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

从安全组删除虚拟机网卡(DeleteVmNicFromSecurityGroup)

API请求

URLs

DELETE/v1/security-groups/{securityGroupUuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth fef87c7ddd824e23a817b37ee1a474c3" \ -X DELETE http://localhost:8080/zstack/v1/security-groups/42d79eb7efde4f4eac0f2cd12d38b344/vm-instances/nics?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |vmNicUuids|List|body|网卡的uuid列表| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteVmNicFromSecurityGroupAction action = new DeleteVmNicFromSecurityGroupAction(); action.securityGroupUuid = "35d7f5a25c1849a7b52427abd038fc85"; action.vmNicUuids = asList("c9fea96817ae4426bce5edd2d9334ad1"); action.sessionId = "468111841e8b4f10a9547d691d2579bd"; DeleteVmNicFromSecurityGroupAction.Result res = action.call();

Python SDK

DeleteVmNicFromSecurityGroupAction action = DeleteVmNicFromSecurityGroupAction() action.securityGroupUuid = "3e4569a2fe33476e8833ae7429255b31" action.vmNicUuids = [114ba4cfdd5d497cba940f934bb3eed7] action.sessionId = "eb642269cc5840c986c378a7946d98fb" DeleteVmNicFromSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

查询应用了安全组的网卡列表(QueryVmNicInSecurityGroup)

API请求

URLs

GET zstack/v1/security-groups/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 3f2df305cc614ecb9d0b93480cf84b33" \ -X GET http://localhost:8080/zstack/v1/security-groups/vm-instances/nics

可查询字段

运行zstack-cli命令行工具,输入QueryVmNicInSecurityGroup并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "9bac6b3729ae4915bc9f4cee67753774", "vmNicUuid": "7d0784059df64a11aef748e18b0d5fa7", "securityGroupUuid": "d3ace95b1236482896f5d1921638ada5", "vmInstanceUuid": "ace37e89d86c4994942f858a67172a0d", "createDate": "Jun 7, 2017 9:20:32 PM", "lastOpDate": "Jun 7, 2017 9:20:32 PM"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |vmNicUuid|String|云主机网卡UUID|0.6| |securityGroupUuid|String|安全组UUID|0.6| |vmInstanceUuid|String|云主机UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryVmNicInSecurityGroupAction action = new QueryVmNicInSecurityGroupAction(); action.conditions = asList(); action.sessionId = "fc82274e695143118923150b6008bef2"; QueryVmNicInSecurityGroupAction.Result res = action.call();

Python SDK

QueryVmNicInSecurityGroupAction action = QueryVmNicInSecurityGroupAction() action.conditions = [] action.sessionId = "32b2bfd366774b67a51ebdeb374df1cc" QueryVmNicInSecurityGroupAction.Result res = action.call()

Parent topic: 安全组相关接口

添加规则到安全组(AddSecurityGroupRule)

API请求

URLs

POST zstack/v1/security-groups/{securityGroupUuid}/rules

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "rules": [       {         "type": "Ingress",         "startPort": 22.0,         "endPort": 22.0,         "protocol": "TCP",         "allowedCidr": "0.0.0.0/0"       }     ],     "remoteSecurityGroupUuids": [       "32647e8a0a5e4efca703b0fec190ab54"     ]   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"rules":[{"type":"Ingress","startPort":22.0,"endPort":22.0,"protocol":"TCP","allowedCidr":"0.0.0.0/0"}],"remoteSecurityGroupUuids":["7d4337c2b18339ffb6f5d1023fc2ea42"]}}' \ http://localhost:8080/zstack/v1/security-groups/00fdf47ec62b316a8f17c80d0ee59a01/rules

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |securityGroupUuid|String|url|安全组UUID| |0.6| |rules|List|body(包含在params结构中)|安全组中的规则| |0.6| |remoteSecurityGroupUuids (可选)|List|body(包含在params结构中)|应用组间策略的远端安全组UUID| |2.1| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "5949aece9cd64d5a939d6dc5e2c1f327",     "name": "web",     "description": "for test",     "state": "Enabled",     "createDate": "Sep 22, 2017 12:24:11 PM",     "lastOpDate": "Sep 22, 2017 12:24:11 PM",     "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer| -   如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; -   如果协议是ICMP, 它是ICMP类型(type)

|0.6| |endPort|Integer| -   如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; -   如果协议是ICMP,它是ICMP类型(type)

|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String| -   允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义。 -   如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR -   如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR

|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

AddSecurityGroupRuleAction action = new AddSecurityGroupRuleAction(); action.securityGroupUuid = "11a632fb43434d9582a736f538af41a0"; action.rules = asList([type:Ingress, startPort:22.0, endPort:22.0, protocol:TCP, allowedCidr:0.0.0.0/0]); action.remoteSecurityGroupUuids = asList("22ee23f9b3924d13a11eabbe8786f0dc"); action.sessionId = "96d2a0445f4241bd823141c281fb4b3e"; AddSecurityGroupRuleAction.Result res = action.call();

Python SDK

AddSecurityGroupRuleAction action = AddSecurityGroupRuleAction() action.securityGroupUuid = "38aa7db9d299456f8c2410a1148bb18c" action.rules = [[type:Ingress, startPort:22.0, endPort:22.0, protocol:TCP, allowedCidr:0.0.0.0/0]] action.remoteSecurityGroupUuids = [b4e32c0abbfb428798b48ea2cbe8103d] action.sessionId = "3435114ce8294deea437496ccf78a1d8" AddSecurityGroupRuleAction.Result res = action.call()

Parent topic: 安全组相关接口

查询安全组规则(QuerySecurityGroupRule)

API请求

URLs

GET zstack/v1/security-groups/rules GET zstack/v1/security-groups/rules/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 9aa7adfe564e4acda956ef90430b0f1b" \ -X GET http://localhost:8080/zstack/v1/security-groups/rules?q=endPort=22&q=state=Enabled

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 36a86c5b46784b169fe82d7c990ae1a7" \ -X GET http://localhost:8080/zstack/v1/security-groups/rules/ae59353d95f744b5b4396e1783ddb918

可查询字段

运行zstack-cli命令行工具,输入QuerySecurityGroupRule并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "b3a99fc1548b41778258153cfd70f4b7", "securityGroupUuid": "629d55f78c9f4b0e8e3504b9834ca1bb", "type": "Ingress", "startPort": 22.0, "endPort": 22.0, "protocol": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:25 PM", "lastOpDate": "Jun 7, 2017 9:20:25 PM"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的结束端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QuerySecurityGroupRuleAction action = new QuerySecurityGroupRuleAction(); action.conditions = asList("endPort=22","state=Enabled"); action.sessionId = "362452e4e8a746ce981a5a54c7390445"; QuerySecurityGroupRuleAction.Result res = action.call();

Python SDK

QuerySecurityGroupRuleAction action = QuerySecurityGroupRuleAction() action.conditions = ["endPort=22","state=Enabled"] action.sessionId = "37e099aa344c40ca947d11dff7ec2b91" QuerySecurityGroupRuleAction.Result res = action.call()

Parent topic: 安全组相关接口

删除安全组规则(DeleteSecurityGroupRule)

API请求

URLs

DELETE zstack/v1/security-groups/rules

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 56ec3e843f8e48d1b3cf9e848885dc81" \ -X DELETEhttp://localhost:8080/zstack/v1/security-groups/rules?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |ruleUuids|List|body|安全组规则的uuid列表| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "06abc64deb0b4c8c9dc8831743e34662", "name": "web", "description": "for test", "state": "Enabled", "createDate": "Jun 7, 2017 9:20:23 PM", "lastOpDate": "Jun 7, 2017 9:20:23 PM", "internalId": 0.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|SecurityGroupInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |attachedL3NetworkUuids|Set| |0.6| |rules|List|详情参考rules|0.6|

#rules

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |securityGroupUuid|String|安全组UUID|0.6| |type|String|流量类型|0.6| |startPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |endPort|Integer|如果协议是TCP/UDP, 它是端口范围(port range)的起始端口号; 如果协议是ICMP, 它是ICMP类型(type)|0.6| |protocol|String|流量协议类型|0.6| |state|String|规则的可用状态, 当前版本未实现|0.6| |allowedCidr|String|允许的CIDR,根据流量类型的不同, 允许的CIDR有不同的含义,如果流量类型是Ingress, 允许的CIDR是允许访问虚拟机网卡的源CIDR,如果流量类型是Egress, 允许的CIDR是允许从虚拟机网卡离开并到达的目的地CIDR|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

DeleteSecurityGroupRuleAction action = new DeleteSecurityGroupRuleAction(); action.ruleUuids = asList("5a88c1873bbf48e4a018f03f6bd055b6"); action.sessionId = "f42c32dbfc214bc58fb057d2c9cb63b1"; DeleteSecurityGroupRuleAction.Result res = action.call();

Python SDK

DeleteSecurityGroupRuleAction action = DeleteSecurityGroupRuleAction() action.ruleUuids = [a9b41667676244e5b3da07d866869b31] action.sessionId = "f8b0b8d01d8c4adc8058083e9f48a8a9" DeleteSecurityGroupRuleAction.Result res = action.call()

Parent topic: 安全组相关接口

虚拟IP相关接口

Parent topic: 网络服务相关接口

创建虚拟IP(CreateVip)

API请求

URLs

POST zstack/v1/vips

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "name": "vip1",     "l3NetworkUuid": "15788630ef6644af99c5378edf4e54da",     "requiredIp": "10.0.0.2"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"name":"vip1","l3NetworkUuid":"b75e7bddf2803f6c85f8450b01262546","requiredIp":"10.0.0.2"}}' \ http://localhost:8080/zstack/v1/vips

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |l3NetworkUuid|String|body(包含在params结构中)|三层网络UUID| |0.6| |allocatorStrategy (可选)|String|body(包含在params结构中)|分配策略| |0.6| |requiredIp (可选)|String|body(包含在params结构中)|请求的IP| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)|资源UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "0666c81cc10147cabd991b41e6e65ffd",     "name": "vip1",     "ipRangeUuid": "1cffbf5a10014ffaa619b862ce1c1a81",     "l3NetworkUuid": "aba59f205cf343ee9795d108b58ddab1",     "ip": "192.168.0.1",     "state": "Enabled",     "gateway": "127.0.0.1",     "netmask": "255.255.0.0",     "peerL3NetworkUuid": [       "7c13756c0ffc4d95b1e734c39a346930"     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|VipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String|IPv4类型的IP地址|0.6| |state|String|状态(启用,禁用)|0.6| |gateway|String|网关|0.6| |netmask|String|子网掩码|0.6| |serviceProvider|String|提供VIP服务的服务提供者|0.6| |peerL3NetworkUuid|String|L3私有网络或VPC的L3网络的UUID|0.6| |useFor|String|用途,例如:端口转发|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

CreateVipAction action = new CreateVipAction(); action.name = "vip1"; action.l3NetworkUuid = "7207335fc5704a2092f0e3d98e5a136e"; action.requiredIp = "10.0.0.2"; action.sessionId = "55f4aefe028a4f9a8ee71fc61b3d0902"; CreateVipAction.Result res = action.call();

Python SDK

CreateVipAction action = CreateVipAction() action.name = "vip1" action.l3NetworkUuid = "f91eb962d42a4fad9cc1b372e6f4748b" action.requiredIp = "10.0.0.2" action.sessionId = "5de60a25e0a3410babbc3e56acd7266c" CreateVipAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

删除虚拟IP(DeleteVip)

API请求

URLs

DELETE/v1/vips/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 191031ca5ac34d5e92e1a86cde878edf" \ -X DELETE http://localhost:8080/zstack/v1/vips/38791fa2927b459cbeff033db96c3479?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body|删除模式| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteVipAction action = new DeleteVipAction(); action.uuid = "8da4c26b4089423f93cbce8ab804f9e9"; action.deleteMode = "Permissive"; action.sessionId = "772f7846b7c24d9b933deb8b03fc3024"; DeleteVipAction.Result res = action.call();

Python SDK

DeleteVipAction action = DeleteVipAction() action.uuid = "addc2d7cb578402f9ce1569402338c1b" action.deleteMode = "Permissive" action.sessionId = "429360288ef140afaeb86961b638ea62" DeleteVipAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

查询虚拟IP(QueryVip)

API请求

URLs

GET zstack/v1/vips GET zstack/v1/vips/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth fbe1443215334b0aa609b5417f5f36ab" \ -X GET http://localhost:8080/zstack/v1/vips?q=uuid=ba1cf7be9f20433fa5091bec091ba22d

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 39036aee2ef641afac5b253aae2377be" \ -X GET http://localhost:8080/zstack/v1/vips/a077653982cb422daa06e6c2d840b140

可查询字段

运行zstack-cli命令行工具,输入QueryVip并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{   "inventories": [     {       "uuid": "8c5eb4938be549218fda4c87de4d8cad",       "name": "new name",       "ipRangeUuid": "7d0dda5b1c4f40069ec4cfd6b66bdf48",       "l3NetworkUuid": "a81054a6807e47a09922473e9ab376cb",       "ip": "192.168.0.1",       "state": "Enabled",       "gateway": "127.0.0.1",       "netmask": "255.255.0.0",       "peerL3NetworkUuid": [         "64ef7a2ea9ec4095b343ea239a7ba344"       ]       }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String|IPv4类型的IP地址|0.6| |state|String|状态(启用,禁用)|0.6| |gateway|String|网关|0.6| |netmask|String|子网掩码|0.6| |serviceProvider|String|提供VIP服务的服务提供者|0.6| |peerL3NetworkUuid|String|L3私有网络或VPC的L3网络的UUID|0.6| |useFor|String|用途,例如:端口转发|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryVipAction action = new QueryVipAction(); action.conditions = asList("uuid=0a573b1c687246ff970c04ef5d0eaf07"); action.sessionId = "bf2f206d12d742d3a9182ea663e12265"; QueryVipAction.Result res = action.call();

Python SDK

QueryVipAction action = QueryVipAction() action.conditions = ["uuid=5a3bf1e979944ea4a958fdac5a8bcef2"] action.sessionId = "bc563fd71d014e84a49f1d280ef020ff" QueryVipAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

更新虚拟IP(UpdateVip)

API请求

URLs

PUT zstack/v1/vips/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

``` {   "updateVip": {     "name": "new name"   },   "systemTags": [],   "userTags": [] }

```

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updateVip":{"name":"new name"}}' \ http://localhost:8080/zstack/v1/vips/cb7f47adc9e0386d952990c88835048c/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateVip结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateVip结构中)|资源的详细描述| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "afc62fc544524344804c558156b57938",     "name": "new name",     "ipRangeUuid": "cbe101ec40844785ac64f0693e56122a",     "l3NetworkUuid": "06272fa02c0b4776a0fb1bab6171ba34",     "ip": "192.168.0.1",     "state": "Enabled",     "gateway": "127.0.0.1",     "netmask": "255.255.0.0",     "peerL3NetworkUuid": [       "e35c8f6a65d14e8492e6fb72382dc1b4"     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|VipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String|IPv4类型的IP地址|0.6| |state|String|状态(启用,禁用)|0.6| |gateway|String|网关|0.6| |netmask|String|子网掩码|0.6| |serviceProvider|String|提供VIP服务的服务提供者|0.6| |peerL3NetworkUuid|String|L3私有网络或VPC的L3网络的UUID|0.6| |useFor|String|用途,例如:端口转发|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

UpdateVipAction action = new UpdateVipAction(); action.uuid = "dbea243ee5c04eb5b68f8905baec42c6"; action.name = "new name"; action.sessionId = "b9f7110e36c147e7abcfbd0215c56368"; UpdateVipAction.Result res = action.call();

Python SDK

UpdateVipAction action = UpdateVipAction() action.uuid = "620313f8f6724571addc8ef00959d951" action.name = "new name" action.sessionId = "4632313cde0a4cbaa67c7ff2109ebe60" UpdateVipAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

更改虚拟IP启用状态(ChangeVipState)

API请求

URLs

PUT zstack/v1/vips/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "changeVipState": {     "stateEvent": "enable"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"changeVipState":{"stateEvent":"enable"}}' \ http://localhost:8080/zstack/v1/vips/5dae8db6e42831a1a219768d1f16abb5/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |stateEvent|String|body(包含在changeVipState结构中)|状态事件| -   enable -   disable

|0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "50be5da2ebcc41b1aa0413b611f2a723",     "name": "vip1",     "ipRangeUuid": "6c8c280a596846a3967c1202cc049770",     "l3NetworkUuid": "df62c1dedde04fffbd591dc737a10772",     "ip": "192.168.0.1",     "state": "Enabled",     "gateway": "127.0.0.1",     "netmask": "255.255.0.0",     "peerL3NetworkUuid": [       "bdb49f66946143538608b8feb6b3c35a"     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|VipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String|IPv4类型的IP地址|0.6| |state|String|状态(启用,禁用)|0.6| |gateway|String|网关|0.6| |netmask|String|子网掩码|0.6| |serviceProvider|String|提供VIP服务的服务提供者|0.6| |peerL3NetworkUuid|String|L3私有网络或VPC的L3网络的UUID|0.6| |useFor|String|用途,例如:端口转发|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

ChangeVipStateAction action = new ChangeVipStateAction(); action.uuid = "2165a4d5e45441088244ff4fa3614412"; action.stateEvent = "enable"; action.sessionId = "2e1079fe6f4f45dab2f97f86d5a0fbc8"; ChangeVipStateAction.Result res = action.call();

Python SDK

ChangeVipStateAction action = ChangeVipStateAction() action.uuid = "0191aa0014ae4b24ac7a87886a6d5527" action.stateEvent = "enable" action.sessionId = "1549fc2b0547482fb562020512ad89b6" ChangeVipStateAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

获取虚拟IP所有业务端口列表(GetVipUsedPorts)

获取虚拟IP上所有业务的端口列表。业务类型包含负载均衡、端口转发、IPsec隧道。

API请求

URLs

GET zstack/v1/vips/{uuid}/usedports

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth e7b86195e5f74c698dc5d0521b0ad25d" \ -X GET http://localhost:8080/zstack/v1/vips/d8474e0dbfe84d47a449bb34979cbcb9/usedports?protocol=TCP

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|query|VIP UUID| |2.2| |protocol|String|query|协议| -   tcp -   udp

|2.2| |systemTags (可选)|List|query| | |2.2| |userTags (可选)|List|query| | |2.2|

API返回

返回示例

{   "inventories": [     {       "uuid": "4f5f926580f4452a897b05b8f99e67ec",       "protcol": "tcp",       "usedPorts": [         "100",         "200",         "201",         "202",         "204",         "1000"       ]     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.2| |inventories|List|详情参考inventories|2.2|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.2| |description|String|错误的概要描述|2.2| |details|String|错误的详细信息|2.2| |elaboration|String|保留字段,默认为null|2.2| |opaque|LinkedHashMap|保留字段,默认为null|2.2| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.2|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|VIP UUID|2.2| |protcol|String| |2.2| |usedPorts|List| |2.2|

SDK示例

Java SDK

GetVipUsedPortsAction action = new GetVipUsedPortsAction(); action.uuid = "771a6f6fae9d49dca26ae309d137549e"; action.protocol = "TCP"; action.sessionId = "ef2bbc8896fa4368a4da1c4b2e39a9d8"; GetVipUsedPortsAction.Result res = action.call();

Python SDK

GetVipUsedPortsAction action = GetVipUsedPortsAction() action.uuid = "66313677af4e42fe8926703d89cf0164" action.protocol = "TCP" action.sessionId = "62f7ea6470954497966345142873bbfa" GetVipUsedPortsAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

设置虚拟IP限速(SetVipQos)

API请求

URLs

PUT zstack/v1/vips/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "setVipQos": {     "port": 22.0,     "outboundBandwidth": 1048576.0,     "inboundBandwidth": 1048576.0   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"setVipQos":{"port":22.0,"outboundBandwidth":1048576.0,"inboundBandwidth":1048576.0}}' \ http://localhost:8080/zstack/v1/vips/9b500046ab303d42a8d8a17565b5673b/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |port (可选)|Integer|body(包含在setVipQos结构中)|端口| |2.3| |outboundBandwidth (可选)|Long|body(包含在setVipQos结构中)|出流量带宽限制| |2.3| |inboundBandwidth (可选)|Long|body(包含在setVipQos结构中)|入流量带宽限制。对于参数inboundBandwidth和outboundBandwidth,两者至少要设置一个。| |2.3| |systemTags (可选)|List|body|系统标签| |2.3| |userTags (可选)|List|body|用户标签| |2.3|

Note: 对于参数inboundBandwidthoutboundBandwidth,两者至少要设置一个。

API返回

返回示例

{   "inventory": {     "uuid": "dd9459fe90ff4ae0b26ab3cbf1f1e3a2",     "vipUuid": "e82e583934b441aaaf37039ff5eba877",     "port": 80.0,     "inboundBandwidth": 1048576.0,     "outboundBandwidth": 1048576.0   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|VipQosInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |vipUuid|String|虚拟IP UUID|2.3| |port|Integer|端口|2.3| |inboundBandwidth|Long|出流量带宽限制|2.3| |outboundBandwidth|Long|入流量带宽限制|2.3| |type|String|限速单位类型|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

SetVipQosAction action = new SetVipQosAction(); action.uuid = "9b500046ab303d42a8d8a17565b5673b"; action.port = 22.0; action.outboundBandwidth = 1048576.0; action.inboundBandwidth = 1048576.0; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; SetVipQosAction.Result res = action.call();

Python SDK

SetVipQosAction action = SetVipQosAction() action.uuid = "9b500046ab303d42a8d8a17565b5673b" action.port = 22.0 action.outboundBandwidth = 1048576.0 action.inboundBandwidth = 1048576.0 action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" SetVipQosAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

获取虚拟IP限速(GetVipQos)

API请求

URLs

GET zstack/v1/vip/{uuid}/vip-qos

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X GET http://localhost:8080/zstack/v1/vip/e7bd5b22962e33ba8608533f18f10bd1/vip-qos

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid (可选)|String|url|资源的UUID,唯一标示该资源| |2.3| |systemTags (可选)|List|query|系统标签| |2.3| |userTags (可选)|List|query|用户标签| |2.3|

API返回

返回示例

{   "inventories": [     {       "uuid": "5a0b0e4ab75c4fffa890cf085add862f",       "vipUuid": "23349810e3874c2dad85042db1ac11dc",       "port": 80.0,       "inboundBandwidth": 1048576.0,       "outboundBandwidth": 1048576.0     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventories|List|详情参考inventories|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |vipUuid|String|虚拟IP UUID|2.3| |port|Integer|端口|2.3| |inboundBandwidth|Long|出流量带宽限制|2.3| |outboundBandwidth|Long|入流量带宽限制|2.3| |type|String|限速单位类型|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

GetVipQosAction action = new GetVipQosAction(); action.uuid = "e7bd5b22962e33ba8608533f18f10bd1"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; GetVipQosAction.Result res = action.call();

Python SDK

GetVipQosAction action = GetVipQosAction() action.uuid = "e7bd5b22962e33ba8608533f18f10bd1" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" GetVipQosAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

取消虚拟IP限速(DeleteVipQos)

API请求

URLs

DELETE zstack/v1/vips/{uuid}/vip-qos

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X DELETE http://localhost:8080/zstack/v1/vips/cbfc39af27633b31927fa0c259bfde80/vip-qos?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |port (可选)|Integer|body|端口| |2.3| |systemTags (可选)|List|body|系统标签| |2.3| |userTags (可选)|List|body|用户标签| |2.3|

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

DeleteVipQosAction action = new DeleteVipQosAction(); action.uuid = "cbfc39af27633b31927fa0c259bfde80"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; DeleteVipQosAction.Result res = action.call();

Python SDK

DeleteVipQosAction action = DeleteVipQosAction() action.uuid = "cbfc39af27633b31927fa0c259bfde80" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" DeleteVipQosAction.Result res = action.call()

Parent topic: 虚拟IP相关接口

弹性IP相关接口

Parent topic: 网络服务相关接口

创建弹性IP(CreateEip)

API请求

URLs

POST zstack/v1/eips

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "name": "Test-EIP", "vipUuid": "7fdf1752627948afb2418f93825c478b", "vmNicUuid": "be5532b08b7a48949667b654468dc5a5"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth c0bd88f213cf42bc8b8fd42d1b269d50" \ -X POST -d '{"params":{"name":"Test-EIP","vipUuid":"f1b1901cefa939d7bf5775ec71735637","vmNicUuid":"bb64d3fc676b3b5cbdf0d768eb7d05a1"}}' \ http://localhost:8080/zstack/v1/eips

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|弹性IP名称| |0.6| |description (可选)|String|body(包含在params结构中)|弹性IP的详细描述| |0.6| |vipUuid|String|body(包含在params结构中)|VIP UUID| |0.6| |vmNicUuid (可选)|String|body(包含在params结构中)|云主机网卡UUID| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)|资源UUID。若指定,云主机会使用该字段值作为UUID| |0.6| |systemTags (可选)|List|body|EIP的系统标签| |0.6| |userTags (可选)|List|body|EIP的用户标签| |0.6|

API返回

返回示例

{ "inventory": { "name": "Test-EIP", "vmNicUuid": "07f9715b85da40d9bd17e5f4277304bd", "vipUuid": "acc6dc9271f54e58ab94e4a1069bc7e5"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|EipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |vipUuid|String|VIP UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |state|String| |0.6| |vipIp|String| |0.6| |guestIp|String| |0.6|

SDK示例

Java SDK

CreateEipAction action = new CreateEipAction(); action.name = "Test-EIP"; action.vipUuid = "a600144228904c709d9d36a7d8e7bc50"; action.vmNicUuid = "c6ef3b3fc5c54033ad07514e3ee71199"; action.sessionId = "284027438a4e46d4abb185a30eaac6ff"; CreateEipAction.Result res = action.call();

Python SDK

CreateEipAction action = CreateEipAction() action.name = "Test-EIP" action.vipUuid = "8e6507f39d6f40479f48a974a9d6afd2" action.vmNicUuid = "91ad47c708e140fd83348182a3f098a6" action.sessionId = "9bdd3970d72144c8899edb0158a4ed6d" CreateEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

删除弹性IP(DeleteEip)

API请求

URLs

DELETE/v1/eips/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 45ccb9eb4add405d9059fb45990a6e8c" \ -X DELETE http://localhost:8080/zstack/v1/eips/468cb75384344acd87f22610d07080e5?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|弹性IP的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body|删除模式| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteEipAction action = new DeleteEipAction(); action.uuid = "7ff634c9d79c48ca976a34ce53951c76"; action.deleteMode = "Permissive"; action.sessionId = "44b7b711d77b4dfa91257db5b9a61585"; DeleteEipAction.Result res = action.call();

Python SDK

DeleteEipAction action = DeleteEipAction() action.uuid = "e0699e3693ea429180371be5ca95e49e" action.deleteMode = "Permissive" action.sessionId = "ee71c70ee83a4ef8876f86d3876dbc8f" DeleteEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

查询弹性IP(QueryEip)

API请求

URLs

GET zstack/v1/eips GET zstack/v1/eips/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth ecbf8328397545a890cb7f299016ff65" \ -X GET http://localhost:8080/zstack/v1/eips

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 58e98c60b171447b8c1940b5a8a1ad0f" \ -X GET http://localhost:8080/zstack/v1/eips/66803656d159456dacda9c074945e40d

可查询字段

运行zstack-cli命令行工具,输入QueryEip并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "name": "Test-EIP", "vmNicUuid": "67dfb04014b64489addb9ff7db5c7eb8", "vipUuid": "e5bafce543e044419a8ffad7d416201e"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |vipUuid|String|VIP UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |state|String| |0.6| |vipIp|String| |0.6| |guestIp|String| |0.6|

SDK示例

Java SDK

QueryEipAction action = new QueryEipAction(); action.conditions = asList(); action.sessionId = "02a7bb80af0a43ea8cecb01e8361f4a3"; QueryEipAction.Result res = action.call();

Python SDK

QueryEipAction action = QueryEipAction() action.conditions = [] action.sessionId = "84b2e52f0e2a41d09b428627b6266f28" QueryEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

更新弹性IP(UpdateEip)

API请求

URLs

PUT zstack/v1/eips/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "updateEip": { "name": "Test-EIP"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 48675e997cc24705a248f756bd4c617c" \ -X PUT -d '{"updateEip":{"name":"Test-EIP"}}' \ http://localhost:8080/zstack/v1/eips/4d153a67262f341cbb4d5351ec844ab7/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|弹性IP的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateEip结构中)|弹性IP名称| |0.6| |description (可选)|String|body(包含在updateEip结构中)|弹性IP的详细描述| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "name": "Test-EIP", "vmNicUuid": "cb1779456b2e47ecb436385e9731fa92", "vipUuid": "b092230e024e4d4bab4f8919ee6b4848"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|EipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |vipUuid|String|VIP UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |state|String| |0.6| |vipIp|String| |0.6| |guestIp|String| |0.6|

SDK示例

Java SDK

UpdateEipAction action = new UpdateEipAction(); action.uuid = "81ab4053a9484332b8e1aafa7e00a399"; action.name = "Test-EIP"; action.sessionId = "08c50da7ac034e6f9461785af2f94a7e"; UpdateEipAction.Result res = action.call();

Python SDK

UpdateEipAction action = UpdateEipAction() action.uuid = "e510fba3a1c646559d1db59f9b37c751" action.name = "Test-EIP" action.sessionId = "2d0aff43d9fe4294b16069f6762d0832" UpdateEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

更改弹性IP启用状态(ChangeEipState)

API请求

URLs

PUT zstack/v1/eips/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "changeEipState": {     "stateEvent": "enable"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth ba708ad93aa54eb696ea994d412d539a" \ -X PUT -d '{"changeEipState":{"stateEvent":"enable"}}' \ http://localhost:8080/zstack/v1/eips/e6c715aaa65c39aa948d88e548a5f044/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|弹性IP的UUID,唯一标示该资源| |0.6| |stateEvent|String|body(包含在changeEipState结构中)|状态事件| -   enable -   disable

|0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-EIP",     "vmNicUuid": "8384e17c064a4b3f819421beb695891d",     "vipUuid": "4ab30bbbf55f4bcda38acd573335d6d7",     "state": "Enabled"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|EipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |vipUuid|String|VIP UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |state|String| |0.6| |vipIp|String| |0.6| |guestIp|String| |0.6|

SDK示例

Java SDK

ChangeEipStateAction action = new ChangeEipStateAction(); action.uuid = "ae4f106e8e884788bf73ee2e863a2ad3"; action.stateEvent = "enable"; action.sessionId = "c35fc61e1a784c41a17cb9a0fe9cd2a5"; ChangeEipStateAction.Result res = action.call();

Python SDK

ChangeEipStateAction action = ChangeEipStateAction() action.uuid = "b5b5cd464d2d48cca37352fb904e5226" action.stateEvent = "enable" action.sessionId = "17f673d897dc47fb845c48fba7af7942" ChangeEipStateAction.Result res = action.call()

Parent topic: 弹性IP相关接口

获取可绑定指定弹性IP的云主机网卡(GetEipAttachableVmNics)

API请求

URLs

GET zstack/v1/eips/{eipUuid}/vm-instances/candidate-nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth dd4a7d40a7e246879ea53fff9fb6dc02" \ -X GET http://localhost:8080/zstack/v1/eips/6bd0a6a4e5dd4f618ff314289acc112f/vm-instances/candidate-nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |eipUuid (可选)|String|url|弹性IP UUIDNote: eipUuid或vipUuid必须有一个被指定

| |0.6| |vipUuid (可选)|String|query|VIP UUIDNote: eipUuid或vipUuid必须有一个被指定

| |0.6| |systemTags (可选)|List|query|系统标签| |0.6| |userTags (可选)|List|query|用户标签| |0.6|

API返回

返回示例

{ "inventories": [     { "uuid": "dd925b4d561d4f6ab54450716291eb0d", "vmInstanceUuid": "e2bdb483661d4d9592d102438813a07a", "usedIpUuid": "2741b30ead744c4389c7157220fa65d8", "l3NetworkUuid": "bf4292cd423448a0b67bdc69a187e81a", "ip": "192.168.1.10", "mac": "00:0c:29:bd:99:fc", "netmask": "255.255.255.0", "gateway": "192.168.1.1", "deviceId": 0.0, "createDate": "Jun 7, 2017 9:20:18 PM", "lastOpDate": "Jun 7, 2017 9:20:18 PM"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |vmInstanceUuid|String|云主机UUID|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String| |0.6| |mac|String| |0.6| |netmask|String| |0.6| |gateway|String| |0.6| |metaData|String| |0.6| |deviceId|Integer| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

GetEipAttachableVmNicsAction action = new GetEipAttachableVmNicsAction(); action.eipUuid = "281f3fe6c8bc42d7a2b7911db8bc8a9b"; action.sessionId = "05d5744919984e6680655fcfc85e6dd9"; GetEipAttachableVmNicsAction.Result res = action.call();

Python SDK

GetEipAttachableVmNicsAction action = GetEipAttachableVmNicsAction() action.eipUuid = "998c40730b1b4dd19ca464d7d30f432c" action.sessionId = "7682cccdd2c74324b1a82232cd730657" GetEipAttachableVmNicsAction.Result res = action.call()

Parent topic: 弹性IP相关接口

绑定弹性IP(AttachEip)

API请求

URLs

POST zstack/v1/eips/{eipUuid}/vm-instances/nics/{vmNicUuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 094156414ecb4950a1a9a800dee0e6bc" \ -X POST http://localhost:8080/zstack/v1/eips/b7b3d87e803434f3b597638377830e68/vm-instances/nics/3fb731573096397c90dbe65781d5b616

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |eipUuid|String|url|弹性IP UUID| |0.6| |vmNicUuid|String|body|云主机网卡UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

AttachEipAction action = new AttachEipAction(); action.eipUuid = "dfee2872f32f4eab81cce8be02d564f7"; action.vmNicUuid = "77439a0f6c464053937fdfc12531647e"; action.sessionId = "80a49201196649f296e8b1c3b03d2284"; AttachEipAction.Result res = action.call();

Python SDK

AttachEipAction action = AttachEipAction() action.eipUuid = "080064a02ea9470a9364bdc255c1cfa6" action.vmNicUuid = "e255a04227b94b5181eda063e1f8b17a" action.sessionId = "beebaac6f3fe4ac99db525f8775b5a61" AttachEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

解绑弹性IP(DetachEip)

API请求

URLs

DELETE/v1/eips/{uuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 7e5d824e15c64e1ca2fc3eca9e315c41" \ -X DELETE http://localhost:8080/zstack/v1/eips/6e1a3bdbe38045658546a6b7fb3df990/vm-instances/nics?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|弹性IP的UUID,唯一标示该资源| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "name": "Test-EIP", "vmNicUuid": "04c0bc3e4c1d44c8aac1fd2e1be10d81", "vipUuid": "8284fce519774899a3ba01e304df6c3b"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|EipInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |vipUuid|String|VIP UUID|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |state|String| |0.6| |vipIp|String| |0.6| |guestIp|String| |0.6|

SDK示例

Java SDK

DetachEipAction action = new DetachEipAction(); action.uuid = "9a8c75df80524b13adf769626703efc0"; action.sessionId = "e7b6f5ef6d134d058e7d85e3ccd226a8"; DetachEipAction.Result res = action.call();

Python SDK

DetachEipAction action = DetachEipAction() action.uuid = "28ddb9165c1444a7a7aa5119a5ceb926" action.sessionId = "47e371f392934e3f8edbc49031fcf376" DetachEipAction.Result res = action.call()

Parent topic: 弹性IP相关接口

端口转发相关接口

Parent topic: 网络服务相关接口

创建端口转发规则(CreatePortForwardingRule)

API请求

URLs

POST zstack/v1/port-forwarding

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "vipUuid": "214cf4f562bf40b98a7c954081f94f03", "vipPortStart": 22.0, "protocolType": "TCP", "vmNicUuid": "84590db8896d4e498bf69d35239a31cc", "name": "pf1"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"vipUuid":"1c4824bb6043388cac7499dd481ecaa4","vipPortStart":22.0,"protocolType":"TCP","vmNicUuid":"0611006103d335dfbfc0f9bb2a46d541","name":"pf1"}}' \ http://localhost:8080/zstack/v1/port-forwarding

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |vipUuid|String|body(包含在params结构中)|VIP UUID| |0.6| |vipPortStart|Integer|body(包含在params结构中)|VIP的起始端口号| |0.6| |vipPortEnd (可选)|Integer|body(包含在params结构中)|VIP的结束端口号; 如果忽略不设置, 会默认设置为vipPortStart| |0.6| |privatePortStart (可选)|Integer|body(包含在params结构中)|客户IP(虚拟机网卡的IP地址)的起始端口号; 如果忽略不设置, 会默认设置为vipPortStart| |0.6| |privatePortEnd (可选)|Integer|body(包含在params结构中)|客户IP(虚拟机网卡的IP地址)的结束端口号; 如果忽略不设置, 会默认设置为vipPortEnd| |0.6| |protocolType|String|body(包含在params结构中)|网络流量协议类型| -   TCP -   UDP

|0.6| |vmNicUuid (可选)|String|body(包含在params结构中)|云主机网卡UUID| |0.6| |allowedCidr (可选)|String|body(包含在params结构中)|源CIDR; 端口转发规则只作用于源CIDR的流量; 如果忽略不设置, 会默认设置为to 0.0.0.0/0| |0.6| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)|用户指定的资源UUID,若指定,系统不会为该资源随机分配UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "895a8ce93d274db78e2ef1462f8b8a29", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "6151c96fd2ac4d6cbd8f8eedffc06de5", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "581ea3b08aef4096ac24e160f1ab0f8e", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:10 PM", "lastOpDate": "Jun 7, 2017 9:20:10 PM"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|PortForwardingRuleInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

``` CreatePortForwardingRuleAction action = new CreatePortForwardingRuleAction(); action.vipUuid = "966f9f294e094243bcfaf7eeee70aeae"; action.vipPortStart = 22.0; action.protocolType = "TCP"; action.vmNicUuid = "ace8c962d59248e38fadac5df9a108a7"; action.name = "pf1"; action.sessionId = "5f4df8c7fae44602b5f7e5d376904d6b"; CreatePortForwardingRuleAction.Result res = action.call();

```

Python SDK

CreatePortForwardingRuleAction action = CreatePortForwardingRuleAction() action.vipUuid = "1d130b0bb1e44aafa76d6280479f5399" action.vipPortStart = 22.0 action.protocolType = "TCP" action.vmNicUuid = "78c6172984874e5e9cdd3bf0248080ca" action.name = "pf1" action.sessionId = "4a3371ccd0cc4cdfa75ae46aeec14f41" CreatePortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

删除端口转发规则(DeletePortForwardingRule)

API请求

URLs

DELETE/v1/port-forwarding/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 064a2c25381042d6b623c12e26418e78" \ -X DELETE http://localhost:8080/zstack/v1/port-forwarding/495b48a2bcf745e1ac584be6e366f0ab?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body| -   Permissive:

如果删除过程中发生错误或者删除不被允许ZStack会停止删除操作;

在这种情况下, 包含失败原因的错误代码会被返回.

  • Enforcing:

ZStack会忽略所有错误和权限而直接删除资源;

在这种情况下, 删除操作总是会成功.

| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeletePortForwardingRuleAction action = new DeletePortForwardingRuleAction(); action.uuid = "42154ff320ea407dbc8b48088e541dcb"; action.deleteMode = "Permissive"; action.sessionId = "2b5cb5c82fb846669cd2c5e557bb140e"; DeletePortForwardingRuleAction.Result res = action.call();

Python SDK

DeletePortForwardingRuleAction action = DeletePortForwardingRuleAction() action.uuid = "a8ac2d430d71487ea47419950e39ee4a" action.deleteMode = "Permissive" action.sessionId = "156eb3cd301546828a925386f331eb34" DeletePortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

查询端口转发规则(QueryPortForwardingRule)

API请求

URLs

GET zstack/v1/port-forwarding GET zstack/v1/port-forwarding/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 959a6d98336c4575a31212834d8ccc4d" \ -X GET http://localhost:8080/zstack/v1/port-forwarding?q=name=pf1&q=state=Enabled

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 0389ba8bf3c44bf8a9c5ee89d066fbdc" \ -X GET http://localhost:8080/zstack/v1/port-forwarding/3d9c9dbbea944e039d55e706aacb6899

可查询字段

运行zstack-cli命令行工具,输入QueryPortForwardingRule并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "c5cf6d7df3164418b3fe5c7569eb1dea", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "b5166a0c9adb4aaf8088022b5336209a", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "8aa417eb4537475b815b289240e0c0c2", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:21:17 PM", "lastOpDate": "Jun 7, 2017 9:21:17 PM"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryPortForwardingRuleAction action = new QueryPortForwardingRuleAction(); action.conditions = asList("name=pf1","state=Enabled"); action.sessionId = "4311e616ca8b4bb19d0792be1e08f3b8"; QueryPortForwardingRuleAction.Result res = action.call();

Python SDK

QueryPortForwardingRuleAction action = QueryPortForwardingRuleAction() action.conditions = ["name=pf1","state=Enabled"] action.sessionId = "b9745425f62d43289db77d9bfd117b35" QueryPortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

更新端口转发规则(UpdatePortForwardingRule)

API请求

URLs

PUT zstack/v1/port-forwarding/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "updatePortForwardingRule": { "name": "pf2", "description": "new rule"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updatePortForwardingRule":{"name":"pf2","description":"new rule"}}' \ http://localhost:8080/zstack/v1/port-forwarding/07eb042c2f5837a99f4018c3ee7e4137/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updatePortForwardingRule结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updatePortForwardingRule结构中)|资源的详细描述| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "420edb331ec34871a416e570fa4faf8b", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "8282dbb28b70416790bd83d08d3718ba", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "2e63ec7524074e9dad1255d5e02f0697", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:38 PM", "lastOpDate": "Jun 7, 2017 9:20:38 PM"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|PortForwardingRuleInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

UpdatePortForwardingRuleAction action = new UpdatePortForwardingRuleAction(); action.uuid = "b180491f86cd4de4befd11df26ebc4b1"; action.name = "pf2"; action.description = "new rule"; action.sessionId = "1130b06d95ed438386c8199cfae9e55b"; UpdatePortForwardingRuleAction.Result res = action.call();

Python SDK

UpdatePortForwardingRuleAction action = UpdatePortForwardingRuleAction() action.uuid = "fe896714482549eaac0cd07a6661664a" action.name = "pf2" action.description = "new rule" action.sessionId = "0992d35c275a4def8bcbb013653b65f9" UpdatePortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

改变端口转发规则的状态(ChangePortForwardingRuleState)

API请求

URLs

PUT zstack/v1/port-forwarding/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "changePortForwardingRuleState": { "stateEvent": "disable"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"changePortForwardingRuleState":{"stateEvent":"disable"}}' \ http://localhost:8080/zstack/v1/port-forwarding/d391cd5c4b57369daa48190ec0e193f6/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |stateEvent|String|body(包含在changePortForwardingRuleState结构中)|端口转发规则的状态| -   enable -   disable

|0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "59d724e1f8e8417693fbc14d124ce801", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "f9c5cbc8662d43408dc704003d4f70ad", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "1b41288698ac45149f352ab6c8de2531", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:26 PM", "lastOpDate": "Jun 7, 2017 9:20:26 PM"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|PortForwardingRuleInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

ChangePortForwardingRuleStateAction action = new ChangePortForwardingRuleStateAction(); action.uuid = "4a721a0136d94428951072e3314b5187"; action.stateEvent = "disable"; action.sessionId = "ce7e78520ff34fbd8dcc181fba226ee0"; ChangePortForwardingRuleStateAction.Result res = action.call();

Python SDK

ChangePortForwardingRuleStateAction action = ChangePortForwardingRuleStateAction() action.uuid = "a694cfa2057e4bd087a076e6f970f8cf" action.stateEvent = "disable" action.sessionId = "abbfa65e2f3040038dc85a68ffa37c8b" ChangePortForwardingRuleStateAction.Result res = action.call()

Parent topic: 端口转发相关接口

获取云主机网卡列表(GetPortForwardingAttachableVmNics)

获取可应用端口转发规则的云主机网卡列表。

API请求

URLs

GET zstack/v1/port-forwarding/{ruleUuid}/vm-instances/candidate-nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b6d8f8edb4aa48f388591c2dc83fabe9" \ -X GET http://localhost:8080/zstack/v1/port-forwarding/039e99f4cf9741adabaf972914fa9a30/vm-instances/candidate-nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |ruleUuid|String|url|规则的uuid| |0.6| |systemTags (可选)|List|query|系统标签| |0.6| |userTags (可选)|List|query|用户标签| |0.6|

API返回

返回示例

{ "inventories": [     { "uuid": "2eb90e57e12f400ba8349742840eb9f9", "vmInstanceUuid": "efa24e175ba34c1196f9818ea6f56e5f", "l3NetworkUuid": "39e4eeeb2b1e4bb885922cb5c6585277", "ip": "192.168.0.123", "mac": "fa:ef:34:5c:6c:00", "netmask": "255.255.255.0", "gateway": "192.168.0.1", "internalName": "eth0", "deviceId": 0.0     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |vmInstanceUuid|String|云主机UUID|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String| |0.6| |mac|String| |0.6| |netmask|String| |0.6| |gateway|String| |0.6| |metaData|String| |0.6| |deviceId|Integer| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

GetPortForwardingAttachableVmNicsAction action = new GetPortForwardingAttachableVmNicsAction(); action.ruleUuid = "5980282a68024f039ddfe379b43e49b1"; action.sessionId = "e309fcb7cb0545a3b802a21acfa4b397"; GetPortForwardingAttachableVmNicsAction.Result res = action.call();

Python SDK

GetPortForwardingAttachableVmNicsAction action = GetPortForwardingAttachableVmNicsAction() action.ruleUuid = "530c24831aaf4ff6bda365c774952576" action.sessionId = "595b1267d25d4c709c081ecb3ea2f00e" GetPortForwardingAttachableVmNicsAction.Result res = action.call()

Parent topic: 端口转发相关接口

挂载规则到虚拟机网卡上(AttachPortForwardingRule)

API请求

URLs

POST zstack/v1/port-forwarding/{ruleUuid}/vm-instances/nics/{vmNicUuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST http://localhost:8080/zstack/v1/port-forwarding/4c74c079f5b836e1912d20914953d722/vm-instances/nics/05c384cc720e32e4b57e93daea1c5b91

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |ruleUuid|String|url|规则的uuid| |0.6| |vmNicUuid|String|url|云主机网卡UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "8727976deceb42e898d9efc50863564a", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "2aa6a4055ce94c319894dfddc330376f", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "39f90e4259784eee880e1cbef31c88da", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:32 PM", "lastOpDate": "Jun 7, 2017 9:20:32 PM"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|PortForwardingRuleInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

AttachPortForwardingRuleAction action = new AttachPortForwardingRuleAction(); action.ruleUuid = "b34b406cf94f432eb0755a9201798d1f"; action.vmNicUuid = "be5e6e16b1f0428a833d3152699766ea"; action.sessionId = "14dc12a577f14f1b9622850e00f06884"; AttachPortForwardingRuleAction.Result res = action.call();

Python SDK

AttachPortForwardingRuleAction action = AttachPortForwardingRuleAction() action.ruleUuid = "3b83c27e561643778396b003a6294cea" action.vmNicUuid = "4892663d34c642f8854306188276e890" action.sessionId = "e1b52fc03d0f479c8da456abd4fd6e6b" AttachPortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

从虚拟机网卡卸载规则(DetachPortForwardingRule)

API请求

URLs

DELETE/v1/port-forwarding/{uuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth a6a2c933ccf449c99bd49481e9636751" \ -X DELETE http://localhost:8080/zstack/v1/port-forwarding/484d4bed50ab4c18a670982952ccfe61/vm-instances/nics?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "uuid": "dc6ec21666fb42e6be62455f8e5a7307", "name": "TestAttachRule", "description": "test atatch rule", "vipIp": "192.168.0.187", "guestIp": "10.0.0.244", "vipUuid": "72dfbe63f95147048a98e514ecbd3ee8", "vipPortStart": 33.0, "vipPortEnd": 33.0, "privatePortStart": 33.0, "privatePortEnd": 33.0, "vmNicUuid": "f06654fb4bd6485ebfba84398c98966f", "protocolType": "TCP", "state": "Enabled", "allowedCidr": "0.0.0.0/0", "createDate": "Jun 7, 2017 9:20:02 PM", "lastOpDate": "Jun 7, 2017 9:20:02 PM"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|PortForwardingRuleInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |vipIp|String|VIP的IP地址|0.6| |guestIp|String|虚拟机网卡的IP地址|0.6| |vipUuid|String|VIP UUID|0.6| |vipPortStart|Integer|VIP的起始端口号|0.6| |vipPortEnd|Integer|VIP的结束端口号|0.6| |privatePortStart|Integer|客户IP的起始端口号|0.6| |privatePortEnd|Integer|客户IP的结束端口号|0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |protocolType|String|网络流量的协议类型|0.6| |state|String|规则可用状态|0.6| |allowedCidr|String|源CIDR; 端口转发规则只作用于源CIDR的流量|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

DetachPortForwardingRuleAction action = new DetachPortForwardingRuleAction(); action.uuid = "307d4bf5fed34a859ade0af30c6720f9"; action.sessionId = "8c78997bf11344d79b49a2254ab88bb8"; DetachPortForwardingRuleAction.Result res = action.call();

Python SDK

DetachPortForwardingRuleAction action = DetachPortForwardingRuleAction() action.uuid = "c284fc4425ea4467b81dad21df147a8e" action.sessionId = "545a07392cb2409e9888f8737da4ddfc" DetachPortForwardingRuleAction.Result res = action.call()

Parent topic: 端口转发相关接口

负载均衡相关接口

Parent topic: 网络服务相关接口

创建负载均衡器(CreateLoadBalancer)

API请求

URLs

POST zstack/v1/load-balancers

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "name": "Test-Lb", "vipUuid": "59a98484f6fe43b9af1d782f725f40ac"   }, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 855586410b7b4c0cba21bfd5ed2df4fb" \ -X POST -d '{"params":{"name":"Test-Lb","vipUuid":"d7720f0981853e91b37678e4acb1d4f0"}}' http://localhost:8080/zstack/v1/load-balancers

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |vipUuid|String|body(包含在params结构中)|VIP UUID| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)|资源UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

CreateLoadBalancerAction action = new CreateLoadBalancerAction(); action.name = "Test-Lb"; action.vipUuid = "861b79a91e894ea68f77ffd7007bb57d"; action.sessionId = "056fdb04a78544fd9a43f757d6af4700"; CreateLoadBalancerAction.Result res = action.call();

Python SDK

CreateLoadBalancerAction action = CreateLoadBalancerAction() action.name = "Test-Lb" action.vipUuid = "3b1839e4bef9437a9b0cf28789951009" action.sessionId = "b21c8f46991440d48be3dcf5c4a36f15" CreateLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

删除负载均衡器(DeleteLoadBalancer)

API请求

URLs

DELETE/v1/load-balancers/listeners/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 1ac325e9a263466d88a9bdf44c64ce96" \ -X DELETE http://localhost:8080/zstack/v1/load-balancers/listeners/db191bc52926462eb21d24b30db7971f?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteLoadBalancerListenerAction action = new DeleteLoadBalancerListenerAction(); action.uuid = "2e7918e14cb345888cb57769f117fb91"; action.sessionId = "efa96e940fce42c58c5e43885ce1f37f"; DeleteLoadBalancerListenerAction.Result res = action.call();

Python SDK

``` DeleteLoadBalancerListenerAction action = DeleteLoadBalancerListenerAction() action.uuid = "be721492004a49038940201562070e1e" action.sessionId = "4a6baa8346204970bf3ce9397f48504a" DeleteLoadBalancerListenerAction.Result res = action.call()

```

Parent topic: 负载均衡相关接口

查询负载均衡器(QueryLoadBalancer)

API请求

URLs

GET zstack/v1/load-balancers GET zstack/v1/load-balancers/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 18a70c9589fa4d93a59a228488e459fb" \ -X GET http://localhost:8080/zstack/v1/load-balancers

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b3fd9ebb07e44e61be3c1f4d24710f9d" \ -X GET http://localhost:8080/zstack/v1/load-balancers/2bc2a3e1855249c6ad436556915253d5

可查询字段

运行zstack-cli命令行工具,输入QueryLoadBalancer并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "name": "Test-Lb", "uuid": "36c2ba1d4a86409693a2de40fa0473ca", "vipUuid": "8807c418b3b74ee5991006bcc4c670e4"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |vipUuid|String|VIP UUID|0.6| |listeners|List|详情参考listeners|0.6|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryLoadBalancerAction action = new QueryLoadBalancerAction(); action.conditions = asList(); action.sessionId = "d649f3ea966e437db93b2049bef206ca"; QueryLoadBalancerAction.Result res = action.call();

Python SDK

QueryLoadBalancerAction action = QueryLoadBalancerAction() action.conditions = [] action.sessionId = "244697b709b0490ab8d8d37e6f94592f" QueryLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

刷新负载均衡器(RefreshLoadBalancer)

API请求

URLs

PUT zstack/v1/load-balancers/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{ "refreshLoadBalancer": {}, "systemTags": [], "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b1e125550d924d17a0efa1bb6dd36806" \ -X PUT -d '{"refreshLoadBalancer":{}}' \ http://localhost:8080/zstack/v1/load-balancers/9fb0a5a16d06393db160485b0b79fd49/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "name": "Test-Lb", "uuid": "ee6de94ed5bf49c8b09a7bd3e5965c60", "vipUuid": "691e275592d84c898c1d495febf42a9a"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |vipUuid|String|VIP UUID|0.6| |listeners|List|详情参考listeners|0.6|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

RefreshLoadBalancerAction action = new RefreshLoadBalancerAction(); action.uuid = "cad53be6896e43cf8aef4021d165f56d"; action.sessionId = "fec73392481a4edaa2738131516ef0d7"; RefreshLoadBalancerAction.Result res = action.call();

Python SDK

RefreshLoadBalancerAction action = RefreshLoadBalancerAction() action.uuid = "3556da2f1d3b47e48ec3068a5c3055ba" action.sessionId = "9947fe6582f44b5a961143d08f49a2eb" RefreshLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

创建负载均衡监听器(CreateLoadBalancerListener)

API请求

URLs

POST zstack/v1/load-balancers/{loadBalancerUuid}/listeners

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "name": "Test-Listener",     "instancePort": 80.0,     "loadBalancerPort": 80.0,     "protocol": "http"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"name":"Test-Listener","instancePort":80.0,"loadBalancerPort":80.0,"protocol":"http"}}' \ http://localhost:8080/zstack/v1/load-balancers/192b3fe960d63e078ced8f59529a25ad/listeners

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |loadBalancerUuid|String|url|负载均衡器UUID| |0.6| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |云主机端口 (可选)|Integer|body(包含在params结构中)| | |0.6| |loadBalancerPort|int|body(包含在params结构中)|负载均衡器端口| |0.6| |protocol (可选)|String|body(包含在params结构中)|协议| -   tcp -   http -   https

|2.3| |certificateUuid (可选)|String|body(包含在params结构中)| | |2.3.2| |resourceUuid (可选)|String|body(包含在params结构中)|资源UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "e82212513e2f3644885d98ce164ee687",     "name": "Test-Listener",     "loadBalancerUuid": "f7b267e9a5683ba5981b79196ca65d47",     "instancePort": 80.0,     "loadBalancerPort": 80.0,     "protocol": "http"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerListenerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6| |certificateRefs|List|详情参考certificateRefs|2.3.2|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#certificateRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3| |listenerUuid|String| |2.3| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

CreateLoadBalancerListenerAction action = new CreateLoadBalancerListenerAction(); action.loadBalancerUuid = "192b3fe960d63e078ced8f59529a25ad"; action.name = "Test-Listener"; action.instancePort = 80.0; action.loadBalancerPort = 80.0; action.protocol = "http"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; CreateLoadBalancerListenerAction.Result res = action.call();

Python SDK

CreateLoadBalancerListenerAction action = CreateLoadBalancerListenerAction() action.loadBalancerUuid = "192b3fe960d63e078ced8f59529a25ad" action.name = "Test-Listener" action.instancePort = 80.0 action.loadBalancerPort = 80.0 action.protocol = "http" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" CreateLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

删除负载均衡监听器(DeleteLoadBalancerListener)

API请求

URLs

DELETE/v1/load-balancers/listeners/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 1ac325e9a263466d88a9bdf44c64ce96" \ -X DELETE http://localhost:8080/zstack/v1/load-balancers/listeners/db191bc52926462eb21d24b30db7971f?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteLoadBalancerListenerAction action = new DeleteLoadBalancerListenerAction(); action.uuid = "2e7918e14cb345888cb57769f117fb91"; action.sessionId = "efa96e940fce42c58c5e43885ce1f37f"; DeleteLoadBalancerListenerAction.Result res = action.call();

Python SDK

DeleteLoadBalancerListenerAction action = DeleteLoadBalancerListenerAction() action.uuid = "be721492004a49038940201562070e1e" action.sessionId = "4a6baa8346204970bf3ce9397f48504a" DeleteLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

查询负载均衡监听器(QueryLoadBalancerListener)

API请求

URLs

GET zstack/v1/load-balancers/listeners GET zstack/v1/load-balancers/listeners/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 6d7ca1c2f39440d5a4110962854c3234" \ -X GET http://localhost:8080/zstack/v1/load-balancers/listeners

curl \ -H "Content-Type: application/json" \ -H "Authorization: OAuth 057112ec0d5e4bcd9193b1f9499169eb" \ -X GET http://localhost:8080/zstack/v1/load-balancers/listeners/cdf776df1cb04ae6a3cf1fb1330dab2d

可查询字段

运行zstack-cli命令行工具,输入QueryLoadBalancerListener并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "uuid": "be2f6e299e364f5cb71e52f11eeee34e", "name": "Test-Listener", "loadBalancerUuid": "90a89f6ec62b4acf9ccb770b453fddc5", "instancePort": 80.0, "loadBalancerPort": 80.0, "protocol": "http"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryLoadBalancerListenerAction action = new QueryLoadBalancerListenerAction(); action.conditions = asList(); action.sessionId = "c616bc4ee56648b6a921b2da70fe7798"; QueryLoadBalancerListenerAction.Result res = action.call();

Python SDK

QueryLoadBalancerListenerAction action = QueryLoadBalancerListenerAction() action.conditions = [] action.sessionId = "529b237f77cd4130b861ebe99a30c983" QueryLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

更新负载均衡监听器(UpdateLoadBalancerListener)

API请求

URLs

PUT zstack/v1/load-balancers/listeners/{uuid}

Headers

Authorization: OAuth the-session-uuid

Body

{   "updateLoadBalancerListener": {     "name": "Test-Listener",     "description": "desc info"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updateLoadBalancerListener":{"name":"Test-Listener","description":"desc info"}}' \ http://localhost:8080/zstack/v1/load-balancers/listeners/6566eed5ab7432d2956b1c093d25daab

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateLoadBalancerListener结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateLoadBalancerListener结构中)|资源的详细描述| |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "uuid": "84735dfea01d359196587f35314a1e17",     "name": "Test-Listener",     "description": "desc info",     "loadBalancerUuid": "c8f77d0df3c83e449f0d372dbe80bd09",     "instancePort": 80.0,     "loadBalancerPort": 80.0,     "protocol": "http"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerListenerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

UpdateLoadBalancerListenerAction action = new UpdateLoadBalancerListenerAction(); action.uuid = "6566eed5ab7432d2956b1c093d25daab"; action.name = "Test-Listener"; action.description = "desc info"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; UpdateLoadBalancerListenerAction.Result res = action.call();

Python SDK

UpdateLoadBalancerListenerAction action = UpdateLoadBalancerListenerAction() action.uuid = "6566eed5ab7432d2956b1c093d25daab" action.name = "Test-Listener" action.description = "desc info" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" UpdateLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

获取云主机网卡(GetCandidateVmNicsForLoadBalancer)

获取可供负载均衡器添加的云主机网卡。

API请求

URLs

GET zstack/v1/load-balancers/listeners/{listenerUuid}/vm-instances/candidate-nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth e75a29e482104fd094dde90d69b212c6" \ -X GET http://localhost:8080/zstack/v1/load-balancers/listeners/4fe68eaa71ec47699c19b7819bd52f80/vm-instances/candidate-nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |listenerUuid|String|url|负载均衡监听器UUID| |0.6| |systemTags (可选)|List|query|系统标签| |0.6| |userTags (可选)|List|query|用户标签| |0.6|

API返回

返回示例

{ "inventories": [     { "uuid": "241c356448ea4dfab7e95dd1e52a163d", "vmInstanceUuid": "5d0f9bee14d94943a4e6ec34c599dc19", "usedIpUuid": "2974a99c5bc2481cb54759c83fea8f52", "l3NetworkUuid": "a3dfb2211d6e4d538a73bb3453876654", "ip": "192.168.1.10", "mac": "00:0c:29:bd:99:fc", "netmask": "255.255.255.0", "gateway": "192.168.1.1", "deviceId": 0.0, "createDate": "Jun 7, 2017 9:21:22 PM", "lastOpDate": "Jun 7, 2017 9:21:22 PM"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |vmInstanceUuid|String|云主机UUID|0.6| |l3NetworkUuid|String|三层网络UUID|0.6| |ip|String| |0.6| |mac|String| |0.6| |netmask|String| |0.6| |gateway|String| |0.6| |metaData|String| |0.6| |deviceId|Integer| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

GetCandidateVmNicsForLoadBalancerAction action = new GetCandidateVmNicsForLoadBalancerAction(); action.listenerUuid = "939a6fd54937468b9b9c27c4d3903c6e"; action.sessionId = "af93732431cf45e7828b579fcb9e46bc"; GetCandidateVmNicsForLoadBalancerAction.Result res = action.call();

Python SDK

GetCandidateVmNicsForLoadBalancerAction action = GetCandidateVmNicsForLoadBalancerAction() action.listenerUuid = "a100b63272ff460eb0301f5759ff2fce" action.sessionId = "423e456aac8041aa9bfdf4ce26ab32ce" GetCandidateVmNicsForLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

添加云主机网卡到负载均衡器(AddVmNicToLoadBalancer)

API请求

URLs

POST zstack/v1/load-balancers/listeners/{listenerUuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Body

{ "params": { "vmNicUuids": [ "aadbfdd8413545d9a1d53d8a0cfa58a8"     ]   }, "systemTags": [], "userTags": [] }

上述示例中systemTags、userTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 47ac995879a9490f83b6b6ef79bca99f" \ -X POST -d '{"params":{"vmNicUuids":["f141d926d13b34cc905507ce7aa9a479"]}}' \ http://localhost:8080/zstack/v1/load-balancers/listeners/21e488793c5831a0842d72a63bcdaf04/vm-instances/nics

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |vmNicUuids|List|body(包含在params结构中)|云主机网卡UUID| |0.6| |listenerUuid|String|url|负载均衡监听器UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

AddVmNicToLoadBalancerAction action = new AddVmNicToLoadBalancerAction(); action.vmNicUuids = asList("01741d3cc9d0422197b2176f3c977d52"); action.listenerUuid = "fd774b08700545ddaa5938fb2ccf4320"; action.sessionId = "ed5ea413b2354a94ac7b427528f88d26"; AddVmNicToLoadBalancerAction.Result res = action.call()

Python SDK

AddVmNicToLoadBalancerAction action = AddVmNicToLoadBalancerAction() action.vmNicUuids = [9b08b7603be945d2928a08a0e8d1fc00] action.listenerUuid = "874bcad239a645af8cd69ed267a48809" action.sessionId = "a70b5f9862424ceb8ea8e2c7d679e0df" AddVmNicToLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

从负载均衡器移除云主机网卡(RemoveVmNicFromLoadBalancer)

API请求

URLs

DELETE/v1/load-balancers/listeners/{listenerUuid}/vm-instances/nics

Headers

Authorization: OAuth the-session-uuid

Curl示例

``` curl -H "Content-Type: application/json" \ -H "Authorization: OAuth a846184b54d845dbb85e50ba35364b6e" \ -X DELETE http://localhost:8080/zstack/v1/load-balancers/listeners/9fda51c382d841e0a47a4195f8dac67b/vm-instances/nics?

```

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |vmNicUuids|List|body|云主机网卡UUID| |0.6| |listenerUuid|String|url|负载均衡监听器UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{ "inventory": { "name": "Test-Lb", "uuid": "40f1e1e109d34feaa119ad14b7ed5638", "vipUuid": "d3968f8dd2764d988f09b251617b2cf9"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |description|String|资源的详细描述|0.6| |state|String| |0.6| |vipUuid|String|VIP UUID|0.6| |listeners|List|详情参考listeners|0.6|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

RemoveVmNicFromLoadBalancerAction action = new RemoveVmNicFromLoadBalancerAction(); action.vmNicUuids = asList("6d6c33021c0a432c9030046c3a24be6e"); action.listenerUuid = "0a11bad9fdb84538953689a5c4430126"; action.sessionId = "867ccf6fbe934fe19e8bb5ba861de7fd"; RemoveVmNicFromLoadBalancerAction.Result res = action.call();

Python SDK

RemoveVmNicFromLoadBalancerAction action = RemoveVmNicFromLoadBalancerAction() action.vmNicUuids = [ef9de345e68f4e6aa51164eff6ee5249] action.listenerUuid = "04f42584e0a14afdb382e0961f057076" action.sessionId = "46c7dabf668943faa1bb8b6be0d60397" RemoveVmNicFromLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

更新负载均衡器(UpdateLoadBalancer)

API请求

URLs

PUT zstack/v1/load-balancers/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "updateLoadBalancer": {     "name": "Test-Lb",     "description": "info"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updateLoadBalancer":{"name":"Test-Lb","description":"info"}}' \ http://localhost:8080/zstack/v1/load-balancers/a355359f46d13e5ab64d6eeff66aedbf/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateLoadBalancer结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateLoadBalancer结构中)|资源的详细描述| |0.6| |resourceUuid (可选)|String|body(包含在updateLoadBalancer结构中)| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

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

UpdateLoadBalancerAction action = new UpdateLoadBalancerAction(); action.uuid = "a355359f46d13e5ab64d6eeff66aedbf"; action.name = "Test-Lb"; action.description = "info"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; UpdateLoadBalancerAction.Result res = action.call();

Python SDK

UpdateLoadBalancerAction action = UpdateLoadBalancerAction() action.uuid = "a355359f46d13e5ab64d6eeff66aedbf" action.name = "Test-Lb" action.description = "info" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" UpdateLoadBalancerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

创建证书(CreateCertificate)

API请求

URLs

POST zstack/v1/certificates

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "name": "www.domain.com",     "certificate": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXN0NeVqvSByclLTLgfhte1i6dwKFaCUxB2w9sTtkUNLKfnmjlQ9yo/E5D8PreGVyJZXDG7CZOPg0D9Ysd4Jxr5QKk4cUupgN0bFEKKB8L2ASPBE3jyZrqw5s+xxJZel0xh8Y+x6eewZyxkIKCZhqnwPM5rStS3v8ySusY6ZehmKX6L9oeXVPofas7/SATVYlCHlt8p+lWOO7JrWjwkOaSU9+QOxsqhaE2wJaV3Gvl0ti01JzWQYFxJhv3fCQXb7yQ0mUkFbVbJStFsdiLK6KpDIMl9RBcY2ayJZ0LBm9WxGFEYDOKBdnXr3hY6QlGYCOjDjgOmblYdaycZPV8aGftAgMBAAECggEAUmi35Dzd6DuS8rpe+/Vt95+eFAv5/OcIi0MdocSDfSg8qcBXvEqDCTYrpfp1pWwisf3k9FbiyB0ckMKKNbOXUf1MSOSmw5kQQ5liYrhAQyHBhR4J0UqWhoTGQoCp9xdS7i9maw26kqDipl+GifYdCNVqjVBRAZegMprbcRupU1fS74Hn9SQ6Ax4Oqzo9+YhojosXEQ4Nd7F5L7wg4zhelfT8tpFR5zZoADX2CQVlEdeGWMqdSTar/O0N7wnTJL4hbQ1g5MYIlElsw+4c1cN310Nyt1b1413Shr8Uhj3s1Byx7S3J1F65PZ81DFjrtHNfUzFEO9xTjdX6GaF8ZeB5QQKBgQD/7p+5xYSFyYC11QPJ6gWnnlv0DZNZlJ8+bjgCNZh7k4qTDsr4x5DF8g+2wI/iNlNgh9AfKacLc8CGn52Ck0mZsxEb6gBuKjOJh55085UAFsk18vUo5j2uq4P+TwTLn7T12ZszRMHrCKmFvatUysvetomarCDHMYiiT3YpXvwk3QKBgQDXRd/3eGCFVOvdDycGnUvSBadvmoaypaZJ5Nh6wxPm7T6bMTmyGzfdwuanGrQr14q6zAESnTCR7MdQCPxoDpuHwSxUAg8FaQz127Ypjv7yW6HgnpMv8B3DUrS5Zas0J2vnUpM6qSuto8FWaN4ecG2uJNVATqqHpkXSfloQIhDWUQKBgFv1ZbbeXaukp3auP1pBmB6OLAQZDKTXXhCUkdNZZpyget40JoIVUtONElBcCFcDphm9Mu6/jKH0yWyV1YahXYS4bqFVByqOR05XSHxFOXh6t3mG/sffUrJ8NkUeJ17y15auxbE6N2M4DZFcgT9KTs6LUA4fYvevuKR5YL+kvXyRAoGBAJI4iRdLsav+8bKWjziD8TM32fIJcQK5V4kLoytHhCYv8X1yYzEiIcFEmGzay5SX9EhLN1NQZ+RGg19Oqzt26Je+U4DAYTmYkFATK9lwoqU2Lm8m5u0B2QWKEO15LF/hgv597TlEHUH1X+Z0lqLwVN+bbyoeBODcxMJkRoJ80RjxAoGAWmOWuTULarSl8ZymvsxlFIiosWGEnv5VnWoOg8RRalvYD16JLLMMpqnEUiMz8I5B/Tqnm45nppAfnYM6cn8Awr9P6GuFJptFTV48iaR8bFJ8cEi2QMeOkQFhVfr1gWUKiKCtrY7g6a9UELm//SNGPXdjSSQ0vU/O8YsxmIi0Dx4\u003d\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDlzCCAn+gAwIBAgIJAPdiQszRKI/MMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzAeFw0xODAzMjkxMjQ5NDVaFw0xOTAzMjkxMjQ5NDVaMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANc3Q15Wq9IHJyUtMuB+G17WLp3AoVoJTEHbD2xO2RQ0sp+eaOVD3Kj8TkPw+t4ZXIllcMbsJk4+DQP1ix3gnGvlAqThxS6mA3RsUQooHwvYBI8ETePJmurDmz7HEll6XTGHxj7Hp57BnLGQgoJmGqfA8zmtK1Le/zJK6xjpl6GYpfov2h5dU+h9qzv9IBNViUIeW3yn6VY47smtaPCQ5pJT35A7GyqFoTbAlpXca+XS2LTUnNZBgXEmG/d8JBdvvJDSZSQVtVslK0Wx2IsroqkMgyX1EFxjZrIlnQsGb1bEYURgM4oF2deveFjpCUZgI6MOOA6ZuVh1rJxk9XxoZ+0CAwEAAaNQME4wHQYDVR0OBBYEFCLaAR9gaKBopzVqzBu3pUrKm027MB8GA1UdIwQYMBaAFCLaAR9gaKBopzVqzBu3pUrKm027MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAuGNv9qZud6UEDfypuHUkGHzECKltEv+S/CgZPXcs1W8zumQjXE7IpFffrAsM9wf51R8dBLaIdnAn6YMuANdrH5L/lALzhrfOwuT6hvEDWznrN7Ea7XANICBactyEpXFxg6eTuFNgWb41IXFJmD225jN82OcFVSQO5/zFfqvnAB6Rz47HV4qKJxs0ZuuAvnbAUf0++pqhxFfjD0TeLPGCB5gNdipprPRJCBiTMFKUN+IJPjjRWcSy1FH8rAZhzNUYtDtwFX4dVoS+CKPaIEurUMCxPzFlgy3VLQU99Mhnn3lxDt9N4OOFCVpLyohfkXLmU5mJGPbs/HT3gl2k+mjt8\u003d\n-----END CERTIFICATE-----"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

``` curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"name":"www.domain.com","certificate":"-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXN0NeVqvSByclLTLgfhte1i6dwKFaCUxB2w9sTtkUNLKfnmjlQ9yo/E5D8PreGVyJZXDG7CZOPg0D9Ysd4Jxr5QKk4cUupgN0bFEKKB8L2ASPBE3jyZrqw5s+xxJZel0xh8Y+x6eewZyxkIKCZhqnwPM5rStS3v8ySusY6ZehmKX6L9oeXVPofas7/SATVYlCHlt8p+lWOO7JrWjwkOaSU9+QOxsqhaE2wJaV3Gvl0ti01JzWQYFxJhv3fCQXb7yQ0mUkFbVbJStFsdiLK6KpDIMl9RBcY2ayJZ0LBm9WxGFEYDOKBdnXr3hY6QlGYCOjDjgOmblYdaycZPV8aGftAgMBAAECggEAUmi35Dzd6DuS8rpe+/Vt95+eFAv5/OcIi0MdocSDfSg8qcBXvEqDCTYrpfp1pWwisf3k9FbiyB0ckMKKNbOXUf1MSOSmw5kQQ5liYrhAQyHBhR4J0UqWhoTGQoCp9xdS7i9maw26kqDipl+GifYdCNVqjVBRAZegMprbcRupU1fS74Hn9SQ6Ax4Oqzo9+YhojosXEQ4Nd7F5L7wg4zhelfT8tpFR5zZoADX2CQVlEdeGWMqdSTar/O0N7wnTJL4hbQ1g5MYIlElsw+4c1cN310Nyt1b1413Shr8Uhj3s1Byx7S3J1F65PZ81DFjrtHNfUzFEO9xTjdX6GaF8ZeB5QQKBgQD/7p+5xYSFyYC11QPJ6gWnnlv0DZNZlJ8+bjgCNZh7k4qTDsr4x5DF8g+2wI/iNlNgh9AfKacLc8CGn52Ck0mZsxEb6gBuKjOJh55085UAFsk18vUo5j2uq4P+TwTLn7T12ZszRMHrCKmFvatUysvetomarCDHMYiiT3YpXvwk3QKBgQDXRd/3eGCFVOvdDycGnUvSBadvmoaypaZJ5Nh6wxPm7T6bMTmyGzfdwuanGrQr14q6zAESnTCR7MdQCPxoDpuHwSxUAg8FaQz127Ypjv7yW6HgnpMv8B3DUrS5Zas0J2vnUpM6qSuto8FWaN4ecG2uJNVATqqHpkXSfloQIhDWUQKBgFv1ZbbeXaukp3auP1pBmB6OLAQZDKTXXhCUkdNZZpyget40JoIVUtONElBcCFcDphm9Mu6/jKH0yWyV1YahXYS4bqFVByqOR05XSHxFOXh6t3mG/sffUrJ8NkUeJ17y15auxbE6N2M4DZFcgT9KTs6LUA4fYvevuKR5YL+kvXyRAoGBAJI4iRdLsav+8bKWjziD8TM32fIJcQK5V4kLoytHhCYv8X1yYzEiIcFEmGzay5SX9EhLN1NQZ+RGg19Oqzt26Je+U4DAYTmYkFATK9lwoqU2Lm8m5u0B2QWKEO15LF/hgv597TlEHUH1X+Z0lqLwVN+bbyoeBODcxMJkRoJ80RjxAoGAWmOWuTULarSl8ZymvsxlFIiosWGEnv5VnWoOg8RRalvYD16JLLMMpqnEUiMz8I5B/Tqnm45nppAfnYM6cn8Awr9P6GuFJptFTV48iaR8bFJ8cEi2QMeOkQFhVfr1gWUKiKCtrY7g6a9UELm//SNGPXdjSSQ0vU/O8YsxmIi0Dx4\u003d\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDlzCCAn+gAwIBAgIJAPdiQszRKI/MMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzAeFw0xODAzMjkxMjQ5NDVaFw0xOTAzMjkxMjQ5NDVaMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANc3Q15Wq9IHJyUtMuB+G17WLp3AoVoJTEHbD2xO2RQ0sp+eaOVD3Kj8TkPw+t4ZXIllcMbsJk4+DQP1ix3gnGvlAqThxS6mA3RsUQooHwvYBI8ETePJmurDmz7HEll6XTGHxj7Hp57BnLGQgoJmGqfA8zmtK1Le/zJK6xjpl6GYpfov2h5dU+h9qzv9IBNViUIeW3yn6VY47smtaPCQ5pJT35A7GyqFoTbAlpXca+XS2LTUnNZBgXEmG/d8JBdvvJDSZSQVtVslK0Wx2IsroqkMgyX1EFxjZrIlnQsGb1bEYURgM4oF2deveFjpCUZgI6MOOA6ZuVh1rJxk9XxoZ+0CAwEAAaNQME4wHQYDVR0OBBYEFCLaAR9gaKBopzVqzBu3pUrKm027MB8GA1UdIwQYMBaAFCLaAR9gaKBopzVqzBu3pUrKm027MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAuGNv9qZud6UEDfypuHUkGHzECKltEv+S/CgZPXcs1W8zumQjXE7IpFffrAsM9wf51R8dBLaIdnAn6YMuANdrH5L/lALzhrfOwuT6hvEDWznrN7Ea7XANICBactyEpXFxg6eTuFNgWb41IXFJmD225jN82OcFVSQO5/zFfqvnAB6Rz47HV4qKJxs0ZuuAvnbAUf0++pqhxFfjD0TeLPGCB5gNdipprPRJCBiTMFKUN+IJPjjRWcSy1FH8rAZhzNUYtDtwFX4dVoS+CKPaIEurUMCxPzFlgy3VLQU99Mhnn3lxDt9N4OOFCVpLyohfkXLmU5mJGPbs/HT3gl2k+mjt8\u003d\n-----END CERTIFICATE-----"}}' http://localhost:8080/zstack/v1/certificates

```

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|资源名称| |0.6| |certificate|String|body(包含在params结构中)| | |2.3.2| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |resourceUuid (可选)|String|body(包含在params结构中)| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "name": "www.domain.com",     "certificate": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXN0NeVqvSByclLTLgfhte1i6dwKFaCUxB2w9sTtkUNLKfnmjlQ9yo/E5D8PreGVyJZXDG7CZOPg0D9Ysd4Jxr5QKk4cUupgN0bFEKKB8L2ASPBE3jyZrqw5s+xxJZel0xh8Y+x6eewZyxkIKCZhqnwPM5rStS3v8ySusY6ZehmKX6L9oeXVPofas7/SATVYlCHlt8p+lWOO7JrWjwkOaSU9+QOxsqhaE2wJaV3Gvl0ti01JzWQYFxJhv3fCQXb7yQ0mUkFbVbJStFsdiLK6KpDIMl9RBcY2ayJZ0LBm9WxGFEYDOKBdnXr3hY6QlGYCOjDjgOmblYdaycZPV8aGftAgMBAAECggEAUmi35Dzd6DuS8rpe+/Vt95+eFAv5/OcIi0MdocSDfSg8qcBXvEqDCTYrpfp1pWwisf3k9FbiyB0ckMKKNbOXUf1MSOSmw5kQQ5liYrhAQyHBhR4J0UqWhoTGQoCp9xdS7i9maw26kqDipl+GifYdCNVqjVBRAZegMprbcRupU1fS74Hn9SQ6Ax4Oqzo9+YhojosXEQ4Nd7F5L7wg4zhelfT8tpFR5zZoADX2CQVlEdeGWMqdSTar/O0N7wnTJL4hbQ1g5MYIlElsw+4c1cN310Nyt1b1413Shr8Uhj3s1Byx7S3J1F65PZ81DFjrtHNfUzFEO9xTjdX6GaF8ZeB5QQKBgQD/7p+5xYSFyYC11QPJ6gWnnlv0DZNZlJ8+bjgCNZh7k4qTDsr4x5DF8g+2wI/iNlNgh9AfKacLc8CGn52Ck0mZsxEb6gBuKjOJh55085UAFsk18vUo5j2uq4P+TwTLn7T12ZszRMHrCKmFvatUysvetomarCDHMYiiT3YpXvwk3QKBgQDXRd/3eGCFVOvdDycGnUvSBadvmoaypaZJ5Nh6wxPm7T6bMTmyGzfdwuanGrQr14q6zAESnTCR7MdQCPxoDpuHwSxUAg8FaQz127Ypjv7yW6HgnpMv8B3DUrS5Zas0J2vnUpM6qSuto8FWaN4ecG2uJNVATqqHpkXSfloQIhDWUQKBgFv1ZbbeXaukp3auP1pBmB6OLAQZDKTXXhCUkdNZZpyget40JoIVUtONElBcCFcDphm9Mu6/jKH0yWyV1YahXYS4bqFVByqOR05XSHxFOXh6t3mG/sffUrJ8NkUeJ17y15auxbE6N2M4DZFcgT9KTs6LUA4fYvevuKR5YL+kvXyRAoGBAJI4iRdLsav+8bKWjziD8TM32fIJcQK5V4kLoytHhCYv8X1yYzEiIcFEmGzay5SX9EhLN1NQZ+RGg19Oqzt26Je+U4DAYTmYkFATK9lwoqU2Lm8m5u0B2QWKEO15LF/hgv597TlEHUH1X+Z0lqLwVN+bbyoeBODcxMJkRoJ80RjxAoGAWmOWuTULarSl8ZymvsxlFIiosWGEnv5VnWoOg8RRalvYD16JLLMMpqnEUiMz8I5B/Tqnm45nppAfnYM6cn8Awr9P6GuFJptFTV48iaR8bFJ8cEi2QMeOkQFhVfr1gWUKiKCtrY7g6a9UELm//SNGPXdjSSQ0vU/O8YsxmIi0Dx4\u003d\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDlzCCAn+gAwIBAgIJAPdiQszRKI/MMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzAeFw0xODAzMjkxMjQ5NDVaFw0xOTAzMjkxMjQ5NDVaMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANc3Q15Wq9IHJyUtMuB+G17WLp3AoVoJTEHbD2xO2RQ0sp+eaOVD3Kj8TkPw+t4ZXIllcMbsJk4+DQP1ix3gnGvlAqThxS6mA3RsUQooHwvYBI8ETePJmurDmz7HEll6XTGHxj7Hp57BnLGQgoJmGqfA8zmtK1Le/zJK6xjpl6GYpfov2h5dU+h9qzv9IBNViUIeW3yn6VY47smtaPCQ5pJT35A7GyqFoTbAlpXca+XS2LTUnNZBgXEmG/d8JBdvvJDSZSQVtVslK0Wx2IsroqkMgyX1EFxjZrIlnQsGb1bEYURgM4oF2deveFjpCUZgI6MOOA6ZuVh1rJxk9XxoZ+0CAwEAAaNQME4wHQYDVR0OBBYEFCLaAR9gaKBopzVqzBu3pUrKm027MB8GA1UdIwQYMBaAFCLaAR9gaKBopzVqzBu3pUrKm027MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAuGNv9qZud6UEDfypuHUkGHzECKltEv+S/CgZPXcs1W8zumQjXE7IpFffrAsM9wf51R8dBLaIdnAn6YMuANdrH5L/lALzhrfOwuT6hvEDWznrN7Ea7XANICBactyEpXFxg6eTuFNgWb41IXFJmD225jN82OcFVSQO5/zFfqvnAB6Rz47HV4qKJxs0ZuuAvnbAUf0++pqhxFfjD0TeLPGCB5gNdipprPRJCBiTMFKUN+IJPjjRWcSy1FH8rAZhzNUYtDtwFX4dVoS+CKPaIEurUMCxPzFlgy3VLQU99Mhnn3lxDt9N4OOFCVpLyohfkXLmU5mJGPbs/HT3gl2k+mjt8\u003d\n-----END CERTIFICATE-----"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|CertificateInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |certificate|String|证书内容|2.3.2| |description|String|资源的详细描述|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |listeners|List|详情参考listeners|0.6|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3.2| |listenerUuid|String| |2.3.2| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

CreateCertificateAction action = new CreateCertificateAction(); action.name = "www.domain.com"; action.certificate = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXN0NeVqvSByclLTLgfhte1i6dwKFaCUxB2w9sTtkUNLKfnmjlQ9yo/E5D8PreGVyJZXDG7CZOPg0D9Ysd4Jxr5QKk4cUupgN0bFEKKB8L2ASPBE3jyZrqw5s+xxJZel0xh8Y+x6eewZyxkIKCZhqnwPM5rStS3v8ySusY6ZehmKX6L9oeXVPofas7/SATVYlCHlt8p+lWOO7JrWjwkOaSU9+QOxsqhaE2wJaV3Gvl0ti01JzWQYFxJhv3fCQXb7yQ0mUkFbVbJStFsdiLK6KpDIMl9RBcY2ayJZ0LBm9WxGFEYDOKBdnXr3hY6QlGYCOjDjgOmblYdaycZPV8aGftAgMBAAECggEAUmi35Dzd6DuS8rpe+/Vt95+eFAv5/OcIi0MdocSDfSg8qcBXvEqDCTYrpfp1pWwisf3k9FbiyB0ckMKKNbOXUf1MSOSmw5kQQ5liYrhAQyHBhR4J0UqWhoTGQoCp9xdS7i9maw26kqDipl+GifYdCNVqjVBRAZegMprbcRupU1fS74Hn9SQ6Ax4Oqzo9+YhojosXEQ4Nd7F5L7wg4zhelfT8tpFR5zZoADX2CQVlEdeGWMqdSTar/O0N7wnTJL4hbQ1g5MYIlElsw+4c1cN310Nyt1b1413Shr8Uhj3s1Byx7S3J1F65PZ81DFjrtHNfUzFEO9xTjdX6GaF8ZeB5QQKBgQD/7p+5xYSFyYC11QPJ6gWnnlv0DZNZlJ8+bjgCNZh7k4qTDsr4x5DF8g+2wI/iNlNgh9AfKacLc8CGn52Ck0mZsxEb6gBuKjOJh55085UAFsk18vUo5j2uq4P+TwTLn7T12ZszRMHrCKmFvatUysvetomarCDHMYiiT3YpXvwk3QKBgQDXRd/3eGCFVOvdDycGnUvSBadvmoaypaZJ5Nh6wxPm7T6bMTmyGzfdwuanGrQr14q6zAESnTCR7MdQCPxoDpuHwSxUAg8FaQz127Ypjv7yW6HgnpMv8B3DUrS5Zas0J2vnUpM6qSuto8FWaN4ecG2uJNVATqqHpkXSfloQIhDWUQKBgFv1ZbbeXaukp3auP1pBmB6OLAQZDKTXXhCUkdNZZpyget40JoIVUtONElBcCFcDphm9Mu6/jKH0yWyV1YahXYS4bqFVByqOR05XSHxFOXh6t3mG/sffUrJ8NkUeJ17y15auxbE6N2M4DZFcgT9KTs6LUA4fYvevuKR5YL+kvXyRAoGBAJI4iRdLsav+8bKWjziD8TM32fIJcQK5V4kLoytHhCYv8X1yYzEiIcFEmGzay5SX9EhLN1NQZ+RGg19Oqzt26Je+U4DAYTmYkFATK9lwoqU2Lm8m5u0B2QWKEO15LF/hgv597TlEHUH1X+Z0lqLwVN+bbyoeBODcxMJkRoJ80RjxAoGAWmOWuTULarSl8ZymvsxlFIiosWGEnv5VnWoOg8RRalvYD16JLLMMpqnEUiMz8I5B/Tqnm45nppAfnYM6cn8Awr9P6GuFJptFTV48iaR8bFJ8cEi2QMeOkQFhVfr1gWUKiKCtrY7g6a9UELm//SNGPXdjSSQ0vU/O8YsxmIi0Dx4\u003d\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDlzCCAn+gAwIBAgIJAPdiQszRKI/MMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzAeFw0xODAzMjkxMjQ5NDVaFw0xOTAzMjkxMjQ5NDVaMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANc3Q15Wq9IHJyUtMuB+G17WLp3AoVoJTEHbD2xO2RQ0sp+eaOVD3Kj8TkPw+t4ZXIllcMbsJk4+DQP1ix3gnGvlAqThxS6mA3RsUQooHwvYBI8ETePJmurDmz7HEll6XTGHxj7Hp57BnLGQgoJmGqfA8zmtK1Le/zJK6xjpl6GYpfov2h5dU+h9qzv9IBNViUIeW3yn6VY47smtaPCQ5pJT35A7GyqFoTbAlpXca+XS2LTUnNZBgXEmG/d8JBdvvJDSZSQVtVslK0Wx2IsroqkMgyX1EFxjZrIlnQsGb1bEYURgM4oF2deveFjpCUZgI6MOOA6ZuVh1rJxk9XxoZ+0CAwEAAaNQME4wHQYDVR0OBBYEFCLaAR9gaKBopzVqzBu3pUrKm027MB8GA1UdIwQYMBaAFCLaAR9gaKBopzVqzBu3pUrKm027MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAuGNv9qZud6UEDfypuHUkGHzECKltEv+S/CgZPXcs1W8zumQjXE7IpFffrAsM9wf51R8dBLaIdnAn6YMuANdrH5L/lALzhrfOwuT6hvEDWznrN7Ea7XANICBactyEpXFxg6eTuFNgWb41IXFJmD225jN82OcFVSQO5/zFfqvnAB6Rz47HV4qKJxs0ZuuAvnbAUf0++pqhxFfjD0TeLPGCB5gNdipprPRJCBiTMFKUN+IJPjjRWcSy1FH8rAZhzNUYtDtwFX4dVoS+CKPaIEurUMCxPzFlgy3VLQU99Mhnn3lxDt9N4OOFCVpLyohfkXLmU5mJGPbs/HT3gl2k+mjt8\u003d\n-----END CERTIFICATE-----"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; CreateCertificateAction.Result res = action.call();

Python SDK

CreateCertificateAction action = CreateCertificateAction() action.name = "www.domain.com" action.certificate = "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDXN0NeVqvSByclLTLgfhte1i6dwKFaCUxB2w9sTtkUNLKfnmjlQ9yo/E5D8PreGVyJZXDG7CZOPg0D9Ysd4Jxr5QKk4cUupgN0bFEKKB8L2ASPBE3jyZrqw5s+xxJZel0xh8Y+x6eewZyxkIKCZhqnwPM5rStS3v8ySusY6ZehmKX6L9oeXVPofas7/SATVYlCHlt8p+lWOO7JrWjwkOaSU9+QOxsqhaE2wJaV3Gvl0ti01JzWQYFxJhv3fCQXb7yQ0mUkFbVbJStFsdiLK6KpDIMl9RBcY2ayJZ0LBm9WxGFEYDOKBdnXr3hY6QlGYCOjDjgOmblYdaycZPV8aGftAgMBAAECggEAUmi35Dzd6DuS8rpe+/Vt95+eFAv5/OcIi0MdocSDfSg8qcBXvEqDCTYrpfp1pWwisf3k9FbiyB0ckMKKNbOXUf1MSOSmw5kQQ5liYrhAQyHBhR4J0UqWhoTGQoCp9xdS7i9maw26kqDipl+GifYdCNVqjVBRAZegMprbcRupU1fS74Hn9SQ6Ax4Oqzo9+YhojosXEQ4Nd7F5L7wg4zhelfT8tpFR5zZoADX2CQVlEdeGWMqdSTar/O0N7wnTJL4hbQ1g5MYIlElsw+4c1cN310Nyt1b1413Shr8Uhj3s1Byx7S3J1F65PZ81DFjrtHNfUzFEO9xTjdX6GaF8ZeB5QQKBgQD/7p+5xYSFyYC11QPJ6gWnnlv0DZNZlJ8+bjgCNZh7k4qTDsr4x5DF8g+2wI/iNlNgh9AfKacLc8CGn52Ck0mZsxEb6gBuKjOJh55085UAFsk18vUo5j2uq4P+TwTLn7T12ZszRMHrCKmFvatUysvetomarCDHMYiiT3YpXvwk3QKBgQDXRd/3eGCFVOvdDycGnUvSBadvmoaypaZJ5Nh6wxPm7T6bMTmyGzfdwuanGrQr14q6zAESnTCR7MdQCPxoDpuHwSxUAg8FaQz127Ypjv7yW6HgnpMv8B3DUrS5Zas0J2vnUpM6qSuto8FWaN4ecG2uJNVATqqHpkXSfloQIhDWUQKBgFv1ZbbeXaukp3auP1pBmB6OLAQZDKTXXhCUkdNZZpyget40JoIVUtONElBcCFcDphm9Mu6/jKH0yWyV1YahXYS4bqFVByqOR05XSHxFOXh6t3mG/sffUrJ8NkUeJ17y15auxbE6N2M4DZFcgT9KTs6LUA4fYvevuKR5YL+kvXyRAoGBAJI4iRdLsav+8bKWjziD8TM32fIJcQK5V4kLoytHhCYv8X1yYzEiIcFEmGzay5SX9EhLN1NQZ+RGg19Oqzt26Je+U4DAYTmYkFATK9lwoqU2Lm8m5u0B2QWKEO15LF/hgv597TlEHUH1X+Z0lqLwVN+bbyoeBODcxMJkRoJ80RjxAoGAWmOWuTULarSl8ZymvsxlFIiosWGEnv5VnWoOg8RRalvYD16JLLMMpqnEUiMz8I5B/Tqnm45nppAfnYM6cn8Awr9P6GuFJptFTV48iaR8bFJ8cEi2QMeOkQFhVfr1gWUKiKCtrY7g6a9UELm//SNGPXdjSSQ0vU/O8YsxmIi0Dx4\u003d\n-----END PRIVATE KEY-----\n-----BEGIN CERTIFICATE-----\nMIIDlzCCAn+gAwIBAgIJAPdiQszRKI/MMA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzAeFw0xODAzMjkxMjQ5NDVaFw0xOTAzMjkxMjQ5NDVaMGIxCzAJBgNVBAYTAkNOMQ8wDQYDVQQIDAZaU1RBQ0sxCzAJBgNVBAcMAlNIMQ0wCwYDVQQKDARaU1kIMQwwCgYDVQQLDANkZXYxGDAWBgNVBAMMD2Rldi56c3Rhawhjay5pbzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANc3Q15Wq9IHJyUtMuB+G17WLp3AoVoJTEHbD2xO2RQ0sp+eaOVD3Kj8TkPw+t4ZXIllcMbsJk4+DQP1ix3gnGvlAqThxS6mA3RsUQooHwvYBI8ETePJmurDmz7HEll6XTGHxj7Hp57BnLGQgoJmGqfA8zmtK1Le/zJK6xjpl6GYpfov2h5dU+h9qzv9IBNViUIeW3yn6VY47smtaPCQ5pJT35A7GyqFoTbAlpXca+XS2LTUnNZBgXEmG/d8JBdvvJDSZSQVtVslK0Wx2IsroqkMgyX1EFxjZrIlnQsGb1bEYURgM4oF2deveFjpCUZgI6MOOA6ZuVh1rJxk9XxoZ+0CAwEAAaNQME4wHQYDVR0OBBYEFCLaAR9gaKBopzVqzBu3pUrKm027MB8GA1UdIwQYMBaAFCLaAR9gaKBopzVqzBu3pUrKm027MAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAAuGNv9qZud6UEDfypuHUkGHzECKltEv+S/CgZPXcs1W8zumQjXE7IpFffrAsM9wf51R8dBLaIdnAn6YMuANdrH5L/lALzhrfOwuT6hvEDWznrN7Ea7XANICBactyEpXFxg6eTuFNgWb41IXFJmD225jN82OcFVSQO5/zFfqvnAB6Rz47HV4qKJxs0ZuuAvnbAUf0++pqhxFfjD0TeLPGCB5gNdipprPRJCBiTMFKUN+IJPjjRWcSy1FH8rAZhzNUYtDtwFX4dVoS+CKPaIEurUMCxPzFlgy3VLQU99Mhnn3lxDt9N4OOFCVpLyohfkXLmU5mJGPbs/HT3gl2k+mjt8\u003d\n-----END CERTIFICATE-----" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" CreateCertificateAction.Result res = action.call()

Parent topic: 负载均衡相关接口

删除证书(DeleteCertificate)

API请求

URLs

DELETE zstack/v1/certificates/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X DELETE http://localhost:8080/zstack/v1/certificates/378bccfaa21d3b7fbb7b9bb014d1541c

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

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

DeleteCertificateAction action = new DeleteCertificateAction(); action.uuid = "378bccfaa21d3b7fbb7b9bb014d1541c"; action.deleteMode = "Permissive"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; DeleteCertificateAction.Result res = action.call();

Python SDK

DeleteCertificateAction action = DeleteCertificateAction() action.uuid = "378bccfaa21d3b7fbb7b9bb014d1541c" action.deleteMode = "Permissive" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" DeleteCertificateAction.Result res = action.call()

Parent topic: 负载均衡相关接口

查询证书(QueryCertificate)

API请求

URLs

GET zstack/v1/certificates GET zstack/v1/certificates/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X GET http://localhost:8080/zstack/v1/certificates

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X GET http://localhost:8080/zstack/v1/certificates/658b7eeb6e2e3ea28c4243ae24e20e07

可查询字段

运行zstack-cli命令行工具,输入QueryCertificate并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{   "inventories": [     {       "name": "www.domain.com",       "certificate": "-----BEGIN PRIVATE KEY-----MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDIpe/zscx2QwunyYPHusMCt/5n4LWSi4pzfsUfvzo4txTe7WwWZ4H3iEA7RwSkg49xx3Rn6jh9S0RMncqUjTxPUjlZKoN0w+nU2AsxXhbV8AiS3UoWJcZUtlfLAjeUKajy1F5hyxHsKJlmOozAcXObunzuaWkKvjchqMSX54+E02h7JNtzv9lagr0MsB4hkraanlpQWr4mv3N7D8kBz9wplMeJXeo4awls3kygiN63TnIQ5hzF7jNxR3uSFYQtUfLnzKcj4aIma62tDf6pkpQ3S+SprGs/OkGvEldNus6FXTO7ixFyORM27ka3Rmv6SYQQquV+950xfb42n9s2UE0pAgMBAAECggEAd0Ixye3O8ifNgLAE1K0MBcyouMNWCMFJzHX34nO9vkILdKk3imWBWUgxrUn713CezOjZJn6PjuEyujs7UmpUA22Cyp27PqbHkAvNM02SUxx1bB19UIapSGaM7gvmTvkoAxT4+DVD9NL4wktgp22HYnNImEgs+AaxLB9sokEvC6mxP23pv7LfnK4EDH2b+1pbE++VheVIBZxK+mTdxPRgwQBJv2VtK0LRDndnRU8gmB5O0KBnep3sCsAKmWtAJf37L9lWgc9QC7LysnuMsZ10KuoeQndVetsAazBARHhUdLd1fWQqbLklC6NtcLodoS+umuvHArKx6LungK4cmNyGZQKBgQD8abrSQXOJuNNx7N+EJjn3hjc3FOrSAgGY7LCiQ/qEP8EkWslxotRHKqKqz78oq4RApT/fBV17HqPe67IJ5xhwYlIUASzs8WvigRV6ITSZv92G8iOSdW7ALZzF4q+tc2RgPvW/pZPaHoxfNU6TC/QW35qAslPWab7Tel9cGb030wKBgQDLf+OLfUfhJUq8mZ3L8U1p1QLpSJNx282hGVg+OXwpuQQZ5qrxkhzF/xBYCjmMQMEfxLtRJxYTPgkHcTp9ozl4ICXdmHpL8V+E5PBQjbCBNCbE8kjXngCc0wiKsLJIUWmKoVRoq7dAaUz3INzkp0tujf8aa7DzC+1C4+j5nvFlkwKBgCTAKClQyke1F2Qw/uI4xpvZeNSWQRJOpHjljVoy15jFx5NJfKcE9C9gb8q68LQ1NM5MwR3xpAi3D1j3rDZw5UgHqLes7CObiv+xl7TufMAeBV0OiEtcucFVYswVE0sH0AeLYzCCJSLO69U457XVObbS26X9UOOZBeW4nYXFYZ1tAoGBAJgnShIcnObZRDUZwqMfC5uqud+E9UF3cBsY4SK9RnnHrSpUjtHKRps/5498LaURMZS4OroluFqw0n1vCqWvqiOIHee+vwoTMjEiIBCKsEMapDYzVYVpzNl07HkOPm7V+Ey/7WXJpl2RngtU1fRcpYjGwMuXY5mF/GM8FxC055bjAoGATYqGLqNhbZ0SVhgSs/2vHMlJYaHwJLlYPS+9OWk5JycvYSbfa9/rc2jblieuE5MseHQFqU0BRVeHqY4dqpQpeO45fC5h9vqC4Lp2LaXbwtxv5Z0cb/o8ecXuSXeF/G2PQvhK44IQFb9RSLuQBUMp/gX6UNVS0dP+7dDpim5n2zY\u003d-----END PRIVATE KEY----------BEGIN CERTIFICATE-----MIID4zCCAsugAwIBAgIJAJWhNGBNfAtTMA0GCSqGSIb3DQEBCwUAMIGHMQswCQYDVQQGEwJDTjELMAkGA1UECAwCU0gxCzAJBgNVBAcMAlNIMQ8wDQYDVQQKDAZaU1RBQ0sxDDAKBgNVBAsMA0RldjEZMBcGA1UEAwwQc2hpeGluLnpzdGFjay5pbzEkMCIGCSqGSIb3DQEJARYVc2hpeGluLnJ1YW5AenN0YWNrLmlvMB4XDTE4MDMyMDA0NDYwM1oXDTE5MDMyMDA0NDYwM1owgYcxCzAJBgNVBAYTAkNOMQswCQYDVQQIDAJTSDELMAkGA1UEBwwCU0gxDzANBgNVBAoMBlpTVEFDSzEMMAoGA1UECwwDRGV2MRkwFwYDVQQDDBBzaGl4aW4uenN0YWNrLmlvMSQwIgYJKoZIhvcNAQkBFhVzaGl4aW4ucnVhbkB6c3RhY2suaW8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIpe/zscx2QwunyYPHusMCt/5n4LWSi4pzfsUfvzo4txTe7WwWZ4H3iEA7RwSkg49xx3Rn6jh9S0RMncqUjTxPUjlZKoN0w+nU2AsxXhbV8AiS3UoWJcZUtlfLAjeUKajy1F5hyxHsKJlmOozAcXObunzuaWkKvjchqMSX54+E02h7JNtzv9lagr0MsB4hkraanlpQWr4mv3N7D8kBz9wplMeJXeo4awls3kygiN63TnIQ5hzF7jNxR3uSFYQtUfLnzKcj4aIma62tDf6pkpQ3S+SprGs/OkGvEldNus6FXTO7ixFyORM27ka3Rmv6SYQQquV+950xfb42n9s2UE0pAgMBAAGjUDBOMB0GA1UdDgQWBBTg8PjTZJmWSDA9GPTJ7K5wWTPVsjAfBgNVHSMEGDAWgBTg8PjTZJmWSDA9GPTJ7K5wWTPVsjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQDH5POu4FmmAsHXe49gL6Y6Kdcti2FTBYse7ru05V4URGsU5Dab25mATqp7z7WCiv9pTdlC0KoJieML7rpLiLskBBLpToU8bUigX96q5dmMtDbLSmGeYfhHj9tHeYuGv0U2eRcN2Jo6xlHrl6X3RazO/h/9mCW6sLAGgaJ9MyQAiqRfYaO+ToBqdbHmBEwmueaOO7wFy9UbU7F/CdeEzblKdWRMKQgf5yxA6pXYghjPWWNAqElxnnXskBmjMhYaDfGCQuRK5Ma362ax0i8UGqYfMnflBgy1qX8+f7VjyWokK4tcjep72TTYkIVBGbwBMqk2U2v5qslBRmM5+pmAESJq-----END CERTIFICATE-----"     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |certificate|String|证书内容|2.3.2| |description|String|资源的详细描述|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |listeners|List|详情参考listeners|0.6|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3.2| |listenerUuid|String| |0.6| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

QueryCertificateAction action = new QueryCertificateAction(); action.conditions = asList(); action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; QueryCertificateAction.Result res = action.call();

Python SDK

QueryCertificateAction action = QueryCertificateAction() action.conditions = [] action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" QueryCertificateAction.Result res = action.call()

Parent topic: 负载均衡相关接口

添加证书到负载均衡(AddCertificateToLoadBalancerListener)

API请求

URLs

POST zstack/v1/load-balancers/listeners/{listenerUuid}/certificate

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "certificateUuid": "707589c97d89315691794dbdadb1252f"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"certificateUuid":"707589c97d89315691794dbdadb1252f"}}' \ http://localhost:8080/zstack/v1/load-balancers/listeners/706687a8f42538e99a8519b9cbd61440/certificate

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |certificateUuid|String|body(包含在params结构中)| | |2.3.2| |listenerUuid|String|url| | |2.3.2| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-Lb-Listener",     "loadBalancerUuid": "5f6148b3eafc37e59a6cfcb30f3bd8b8",     "vmNicRefs": [       {         "listenerUuid": "5f6148b3eafc37e59a6cfcb30f3bd8b8",         "vmNicUuid": "202ca851ff3e30d0b43a6176008a7bed"       }     ],     "certificateRefs": [       {         "listenerUuid": "5f6148b3eafc37e59a6cfcb30f3bd8b8",         "certificateUuid": "fb20f7baabb93cc9a2e0e713c5dfd870"       }     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerListenerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6| |certificateRefs|List|详情参考certificateRefs|2.3.2|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#certificateRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3.2| |listenerUuid|String| |2.3.2| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

AddCertificateToLoadBalancerListenerAction action = new AddCertificateToLoadBalancerListenerAction(); action.certificateUuid = "707589c97d89315691794dbdadb1252f"; action.listenerUuid = "706687a8f42538e99a8519b9cbd61440"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; AddCertificateToLoadBalancerListenerAction.Result res = action.call();

Python SDK

AddCertificateToLoadBalancerListenerAction action = AddCertificateToLoadBalancerListenerAction() action.certificateUuid = "707589c97d89315691794dbdadb1252f" action.listenerUuid = "706687a8f42538e99a8519b9cbd61440" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" AddCertificateToLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

从负载均衡移除证书(RemoveCertificateFromLoadBalancerListener)

API请求

URLs

DELETE zstack/v1/load-balancers/listeners/{listenerUuid}/certificate

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X DELETE http://localhost:8080/zstack/v1/load-balancers/listeners/7b49bf59591335e8a9e3aa35c0949c0a/certificate

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |certificateUuid|String|body| | |2.3.2| |listenerUuid|String|url| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-Lb-Listener",     "loadBalancerUuid": "12c0b22525323a3d98d77a0fc722dfe6",     "vmNicRefs": [       {         "listenerUuid": "12c0b22525323a3d98d77a0fc722dfe6",         "vmNicUuid": "e1fffed46c7c329ea08eef0cf3162319"       }     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|LoadBalancerListenerInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |loadBalancerUuid|String|负载均衡器UUID|0.6| |instancePort|Integer| |0.6| |loadBalancerPort|Integer| |0.6| |protocol|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |vmNicRefs|List|详情参考vmNicRefs|0.6| |certificateRefs|List|详情参考certificateRefs|0.6|

#vmNicRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |0.6| |listenerUuid|String| |0.6| |vmNicUuid|String|云主机网卡UUID|0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#certificateRefs

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3.2| |listenerUuid|String| |2.3.2| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

RemoveCertificateFromLoadBalancerListenerAction action = new RemoveCertificateFromLoadBalancerListenerAction(); action.certificateUuid = "ae54af269496365d99c558a7f4137a6c"; action.listenerUuid = "7b49bf59591335e8a9e3aa35c0949c0a"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; RemoveCertificateFromLoadBalancerListenerAction.Result res = action.call();

Python SDK

RemoveCertificateFromLoadBalancerListenerAction action = RemoveCertificateFromLoadBalancerListenerAction() action.certificateUuid = "ae54af269496365d99c558a7f4137a6c" action.listenerUuid = "7b49bf59591335e8a9e3aa35c0949c0a" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" RemoveCertificateFromLoadBalancerListenerAction.Result res = action.call()

Parent topic: 负载均衡相关接口

更新证书信息(UpdateCertificate)

API请求

URLs

PUT zstack/v1/certificates/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "updateCertificate": {     "name": "Test-Cer",     "description": "info"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"updateCertificate":{"name":"Test-Cer","description":"info"}}' \ http://localhost:8080/zstack/v1/certificates/e7fbc0a186d838f7b6fb0ae5133300ec/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateCertificate结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateCertificate结构中)|资源的详细描述| |0.6| |resourceUuid (可选)|String|body(包含在updateCertificate结构中)| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-Cer",     "certificate": "123456789",     "description": "Certificate for lb"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|CertificateInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |name|String|资源名称|0.6| |uuid|String|资源的UUID,唯一标示该资源|0.6| |certificate|String|证书内容|0.6| |description|String|资源的详细描述|0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |listeners|List|详情参考listeners|2.3|

#listeners

|名字|类型|描述|起始版本| |--|--|--|----| |id|Long| |2.3.2| |listenerUuid|String| |2.3| |certificateUuid|String| |2.3.2| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

SDK示例

Java SDK

UpdateCertificateAction action = new UpdateCertificateAction(); action.uuid = "e7fbc0a186d838f7b6fb0ae5133300ec"; action.name = "Test-Cer"; action.description = "info"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; UpdateCertificateAction.Result res = action.call();

Python SDK

UpdateCertificateAction action = UpdateCertificateAction() action.uuid = "e7fbc0a186d838f7b6fb0ae5133300ec" action.name = "Test-Cer" action.description = "info" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" UpdateCertificateAction.Result res = action.call()

Parent topic: 负载均衡相关接口

IPsec相关接口

Parent topic: 网络服务相关接口

创建IPsec连接(CreateIPsecConnection)

API请求

URLs

POST zstack/v1/ipsec

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "name": "Test-IPSec",     "l3NetworkUuid": "a4097ba23a7e38339029e1839bb415e1",     "peerAddress": "100.64.10.10",     "authMode": "psk",     "authKey": "auth",     "vipUuid": "cefa2f4e56ef33e496ccbb5879850f76",     "peerCidrs": [       "192.168.100.0/24"     ],     "ikeAuthAlgorithm": "sha1",     "ikeEncryptionAlgorithm": "aes-128",     "ikeDhGroup": 2.0,     "policyAuthAlgorithm": "sha1",     "policyEncryptionAlgorithm": "aes-128",     "policyMode": "tunnel",     "transformProtocol": "esp"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"name":"Test-IPSec","l3NetworkUuid":"a4097ba23a7e38339029e1839bb415e1","peerAddress":"100.64.10.10","authMode":"psk","authKey":"auth","vipUuid":"cefa2f4e56ef33e496ccbb5879850f76","peerCidrs":["192.168.100.0/24"],"ikeAuthAlgorithm":"sha1","ikeEncryptionAlgorithm":"aes-128","ikeDhGroup":2.0,"policyAuthAlgorithm":"sha1","policyEncryptionAlgorithm":"aes-128","policyMode":"tunnel","transformProtocol":"esp"}}' \ http://localhost:8080/zstack/v1/ipsec

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |name|String|body(包含在params结构中)|资源名称| |0.6| |description (可选)|String|body(包含在params结构中)|资源的详细描述| |0.6| |l3NetworkUuid (可选)|String|body(包含在params结构中)|三层网络UUID| |2.3| |peerAddress|String|body(包含在params结构中)|对端地址| |0.6| |authMode (可选)|String|body(包含在params结构中)|认证模式| -   psk -   certs

|0.6| |authKey|String|body(包含在params结构中)|认证密钥| |0.6| |vipUuid|String|body(包含在params结构中)|VIP UUID| |0.6| |peerCidrs (可选)|List|body(包含在params结构中)|对端CIDR| |2.3| |ikeAuthAlgorithm (可选)|String|body(包含在params结构中)|IKE验证算法| -   md5 -   sha1 -   sha256 -   sha384 -   sha512

|0.6| |ikeEncryptionAlgorithm (可选)|String|body(包含在params结构中)|IKE加密算法| -   3des -   aes-128 -   aes-192 -   aes-256

|0.6| |ikeDhGroup (可选)|int|body(包含在params结构中)|IKE完整前向保密| |0.6| |policyAuthAlgorithm (可选)|String|body(包含在params结构中)|ESP认证算法| -   md5 -   sha1 -   sha256 -   sha384 -   sha512

|0.6| |policyEncryptionAlgorithm (可选)|String|body(包含在params结构中)|ESP加密算法| -   3des -   aes-128 -   aes-192 -   aes-256

|0.6| |pfs (可选)|String|body(包含在params结构中)|完全正向保密| -   dh-group2 -   dh-group5 -   dh-group14 -   dh-group15 -   dh-group16 -   dh-group17 -   dh-group18 -   dh-group19 -   dh-group20 -   dh-group21 -   dh-group22 -   dh-group23 -   dh-group24 -   dh-group25 -   dh-group26

|0.6| |policyMode (可选)|String|body(包含在params结构中)|工作模式| -   tunnel -   transport

|0.6| |transformProtocol (可选)|String|body(包含在params结构中)|传输安全协议| -   esp -   ah -   ah-esp

|0.6| |resourceUuid (可选)|String|body(包含在params结构中)|资源UUID| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-IPSec",     "peerAddress": "100.64.10.10",     "authKey": "auth",     "vipUuid": "f368016d45f73360a8a8cd3ecbf9efb3",     "peerCidrs": [       {         "uuid": "199b04405d1e3fef83fd67a7a1f77bb3",         "cidr": "192.168.100.0/24",         "connectionUuid": "6deaa1c0ffd43f8eb3ebe2e8e7e66811",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ],     "l3NetworkRefs": [       {}     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|IPsecConnectionInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |peerAddress|String| |0.6| |authMode|String| |0.6| |authKey|String| |0.6| |vipUuid|String|VIP UUID|0.6| |ikeAuthAlgorithm|String| |0.6| |ikeEncryptionAlgorithm|String| |0.6| |ikeDhGroup|Integer| |0.6| |policyAuthAlgorithm|String| |0.6| |policyEncryptionAlgorithm|String| |0.6| |pfs|String| |0.6| |policyMode|String| |0.6| |transformProtocol|String| |0.6| |state|String| |0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |peerCidrs|List|详情参考peerCidrs|0.6| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |cidr|String| |0.6| |connectionUuid|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

CreateIPsecConnectionAction action = new CreateIPsecConnectionAction(); action.name = "Test-IPSec"; action.l3NetworkUuid = "a4097ba23a7e38339029e1839bb415e1"; action.peerAddress = "100.64.10.10"; action.authMode = "psk"; action.authKey = "auth"; action.vipUuid = "cefa2f4e56ef33e496ccbb5879850f76"; action.peerCidrs = asList("192.168.100.0/24"); action.ikeAuthAlgorithm = "sha1"; action.ikeEncryptionAlgorithm = "aes-128"; action.ikeDhGroup = 2.0; action.policyAuthAlgorithm = "sha1"; action.policyEncryptionAlgorithm = "aes-128"; action.policyMode = "tunnel"; action.transformProtocol = "esp"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; CreateIPsecConnectionAction.Result res = action.call();

Python SDK

CreateIPsecConnectionAction action = CreateIPsecConnectionAction() action.name = "Test-IPSec" action.l3NetworkUuid = "a4097ba23a7e38339029e1839bb415e1" action.peerAddress = "100.64.10.10" action.authMode = "psk" action.authKey = "auth" action.vipUuid = "cefa2f4e56ef33e496ccbb5879850f76" action.peerCidrs = [192.168.100.0/24] action.ikeAuthAlgorithm = "sha1" action.ikeEncryptionAlgorithm = "aes-128" action.ikeDhGroup = 2.0 action.policyAuthAlgorithm = "sha1" action.policyEncryptionAlgorithm = "aes-128" action.policyMode = "tunnel" action.transformProtocol = "esp" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" CreateIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

删除IPsec连接(DeleteIPsecConnection)

API请求

URLs

DELETE/v1/ipsec/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 7a0f46ecc5c841eeb833dc5d3320f320" \ -X DELETE http://localhost:8080/zstack/v1/ipsec/2129331f3b7d4dbfb78f1751f6b47957?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |deleteMode (可选)|String|body|删除模式| |0.6| |systemTags (可选)|List|body|系统标签| |0.6| |userTags (可选)|List|body|用户标签| |0.6|

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

DeleteIPsecConnectionAction action = new DeleteIPsecConnectionAction(); action.uuid = "2935596566fa421f833a801d501dbb53"; action.deleteMode = "Permissive"; action.sessionId = "7392673bd2244ad2a63280e81f9a7014"; DeleteIPsecConnectionAction.Result res = action.call();

Python SDK

DeleteIPsecConnectionAction action = DeleteIPsecConnectionAction() action.uuid = "808078c31bdd499591bc009b8ae3446f" action.deleteMode = "Permissive" action.sessionId = "fcafdabd9a5e47c5ae7ff92c121173f9" DeleteIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

更新IPsec连接(UpdateIPsecConnection)

API请求

URLs

PUT zstack/v1/ipsec/{uuid}

Headers

Authorization: OAuth the-session-uuid

Body

{   "updateIPsecConnection": {     "name": "test Ipsec",     "description": "info",     "deleteMode": "Permissive"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 4dca24d8fce24355a048290b7adf5889" \ -X PUT -d '{"updateIPsecConnection":{"name":"test Ipsec","description":"info"}}' \ http://localhost:8080/zstack/v1/ipsec/1bcf0b898cf33f05b29edeb54a87ed82

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |0.6| |name (可选)|String|body(包含在updateIPsecConnection结构中)|资源名称| |0.6| |description (可选)|String|body(包含在updateIPsecConnection结构中)|资源的详细描述| |0.6| |deleteMode (可选)|String|body(包含在updateIPsecConnection结构中)| | |0.6| |systemTags (可选)|List|body| | |0.6| |userTags (可选)|List|body| | |0.6|

API返回

返回示例

{   "inventory": {     "name": "Test-IPSec",     "description": "desc info ",     "peerAddress": "100.64.10.10",     "authKey": "auth",     "vipUuid": "8db7a95857db4771b309933783a6975e",     "peerCidrs": [       {         "uuid": "c58723c6002240f9a57c6e47b3e3f11c",         "cidr": "192.168.100.0/24",         "connectionUuid": "d58eaa352bf74465ac18e6a86d89298e",         "createDate": "Sep 22, 2017 12:24:59 PM",         "lastOpDate": "Sep 22, 2017 12:24:59 PM"       }     ],     "l3NetworkRefs": [       {}     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventory|IPsecConnectionInventory|详情参考inventory|0.6|

#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|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |peerAddress|String| |0.6| |authMode|String| |0.6| |authKey|String| |0.6| |vipUuid|String|VIP UUID|0.6| |ikeAuthAlgorithm|String| |0.6| |ikeEncryptionAlgorithm|String| |0.6| |ikeDhGroup|Integer| |0.6| |policyAuthAlgorithm|String| |0.6| |policyEncryptionAlgorithm|String| |0.6| |pfs|String| |0.6| |policyMode|String| |0.6| |transformProtocol|String| |0.6| |state|String| |0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |peerCidrs|List|详情参考peerCidrs|0.6| |l3NetworkRefs||List||详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |cidr|String| |0.6| |connectionUuid|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

UpdateIPsecConnectionAction action = new UpdateIPsecConnectionAction(); action.uuid = "cedcb7a02f1548cbb8a68665cab0b191"; action.name = "test Ipsec"; action.description = "info"; action.deleteMode = "Permissive"; action.sessionId = "4e74102f098948cf97781ee6604b1571"; UpdateIPsecConnectionAction.Result res = action.call();

Python SDK

UpdateIPsecConnectionAction action = UpdateIPsecConnectionAction() action.uuid = "dba5bbf127124fe2a3def62bcb96743d" action.name = "test Ipsec" action.description = "info" action.deleteMode = "Permissive" action.sessionId = "cc93dbb3278c4a699f2f1635eb756caf" UpdateIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

查询IPsec连接(QueryIPSecConnection)

API请求

URLs

GET zstack/v1/ipsec GET zstack/v1/ipsec/{uuid}

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth 4c96297b4d134027b936f8933ff49340"  -X GET http://localhost:8080/zstack/v1/ipsec

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b94b692454d1447b82aa06a3d872d0d6" \ -X GET http://localhost:8080/zstack/v1/ipsec/bc2318751b5648eb98982f2428e691ea

可查询字段

运行zstack-cli命令行工具,输入QueryIPSecConnection并按Tab键查看所有可查询字段以及可跨表查询的资源名。

API返回

返回示例

{ "inventories": [     { "name": "Test-IPSec", "peerAddress": "100.64.10.10", "authKey": "auth", "vipUuid": "c2cc681608bc444288aa4bb6ebc674ac", "peerCidrs": [         { "uuid": "95c8eadec32b46e5b123958c32273778", "cidr": "192.168.100.0/24", "connectionUuid": "0b61bea0d4f04d5abcc74fdb67d83509", "createDate": "Jun 7, 2017 9:21:14 PM", "lastOpDate": "Jun 7, 2017 9:21:14 PM"         }       ],       "l3NetworkRefs": [         {}       ]     }   ] }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|0.6| |inventories|List|详情参考inventories|0.6|

#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|

#inventories

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |name|String|资源名称|0.6| |description|String|资源的详细描述|0.6| |peerAddress|String| |0.6| |authMode|String| |0.6| |authKey|String| |0.6| |vipUuid|String|VIP UUID|0.6| |ikeAuthAlgorithm|String| |0.6| |ikeEncryptionAlgorithm|String| |0.6| |ikeDhGroup|Integer| |0.6| |policyAuthAlgorithm|String| |0.6| |policyEncryptionAlgorithm|String| |0.6| |pfs|String| |0.6| |policyMode|String| |0.6| |transformProtocol|String| |0.6| |state|String| |0.6| |status|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6| |peerCidrs|List|详情参考peerCidrs|0.6| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|0.6| |cidr|String| |0.6| |connectionUuid|String| |0.6| |createDate|Timestamp|创建时间|0.6| |lastOpDate|Timestamp|最后一次修改时间|0.6|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

QueryIPSecConnectionAction action = new QueryIPSecConnectionAction(); action.conditions = asList(); action.sessionId = "2da0145074b749de95a5f7e6197dedf5"; QueryIPSecConnectionAction.Result res = action.call();

Python SDK

QueryIPSecConnectionAction action = QueryIPSecConnectionAction() action.conditions = [] action.sessionId = "39df08f032b9490a853c60158dee9140" QueryIPSecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

更改IPsec连接状态(ChangeIPSecConnectionState)

API请求

URLs

PUT zstack/v1/ipsec/{uuid}/actions

Headers

Authorization: OAuth the-session-uuid

Body

{   "changeIPSecConnectionState": {     "stateEvent": "enable"   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X PUT -d '{"changeIPSecConnectionState":{"stateEvent":"enable"}}' \ http://localhost:8080/zstack/v1/ipsec/76424bb25d3a37c9961fff1116bc06da/actions

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |stateEvent|String|body(包含在changeIPSecConnectionState结构中)| | -   enable -   disable

|2.3| |systemTags (可选)|List|body|系统标签| |2.3| |userTags (可选)|List|body|用户标签| |2.3|

API返回

返回示例

{   "inventory": {     "uuid": "13b5a2cd8c5c30a9a47ba95802cf4e1a",     "name": "IPSec-1",     "state": "Enabled"   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|IPsecConnectionInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |name|String|资源名称|2.3| |description|String|资源的详细描述|2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |peerAddress|String| |2.3| |authMode|String| |2.3| |authKey|String| |2.3| |vipUuid|String|VIP UUID|2.3| |ikeAuthAlgorithm|String| |2.3| |ikeEncryptionAlgorithm|String| |2.3| |ikeDhGroup|Integer| |2.3| |policyAuthAlgorithm|String| |2.3| |policyEncryptionAlgorithm|String| |2.3| |pfs|String| |2.3| |policyMode|String| |2.3| |transformProtocol|String| |2.3| |state|String| |2.3| |status|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3| |peerCidrs|List|详情参考peerCidrs|2.3| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |cidr|String| |2.3| |connectionUuid|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

ChangeIPSecConnectionStateAction action = new ChangeIPSecConnectionStateAction(); action.uuid = "76424bb25d3a37c9961fff1116bc06da"; action.stateEvent = "enable"; action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; ChangeIPSecConnectionStateAction.Result res = action.call();

Python SDK

ChangeIPSecConnectionStateAction action = ChangeIPSecConnectionStateAction() action.uuid = "76424bb25d3a37c9961fff1116bc06da" action.stateEvent = "enable" action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" ChangeIPSecConnectionStateAction.Result res = action.call()

Parent topic: IPsec相关接口

添加三层网络到IPsec连接(AttachL3NetworksToIPsecConnection)

API请求

URLs

POST zstack/v1/ipsec/{uuid}/l3networks

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "l3NetworkUuids": [       "4b0779efacdc39a5b2dd4799e2452720"     ]   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"l3NetworkUuids":["4b0779efacdc39a5b2dd4799e2452720"]}}' \ http://localhost:8080/zstack/v1/ipsec/8f6fa5c86fd13968b8d8666f4b117aca/l3networks

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |l3NetworkUuids|List|body(包含在params结构中)| | |2.3| |resourceUuid (可选)|String|body(包含在params结构中)| | |2.3| |systemTags (可选)|List|body| | |2.3| |userTags (可选)|List|body| | |2.3|

API返回

返回示例

{   "inventory": {     "uuid": "3293505dd7de3a2aacca821c4a9d8b5e",     "name": "Test-IPSec",     "peerAddress": "100.64.10.10",     "authKey": "auth",     "vipUuid": "58d827fb56cb3fc394c89429c28c29a4",     "peerCidrs": [       {         "uuid": "185878e63f1c39c48de641f55f8a870b",         "cidr": "192.168.100.0/24",         "connectionUuid": "3293505dd7de3a2aacca821c4a9d8b5e",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ],     "l3NetworkRefs": [       {         "uuid": "a1e9c14d5d9736c0885b6cc67238873e",         "connectionUuid": "3293505dd7de3a2aacca821c4a9d8b5e",         "l3NetworkUuid": "43253fb59d8c36b49f684278747bf209",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|IPsecConnectionInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |name|String|资源名称|2.3| |description|String|资源的详细描述|2.3| |peerAddress|String| |2.3| |authMode|String| |2.3| |authKey|String| |2.3| |vipUuid|String|VIP UUID|2.3| |ikeAuthAlgorithm|String| |2.3| |ikeEncryptionAlgorithm|String| |2.3| |ikeDhGroup|Integer| |2.3| |policyAuthAlgorithm|String| |2.3| |policyEncryptionAlgorithm|String| |2.3| |pfs|String| |2.3| |policyMode|String| |2.3| |transformProtocol|String| |2.3| |state|String| |2.3| |status|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3| |peerCidrs|List|详情参考peerCidrs|2.3| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |cidr|String| |2.3| |connectionUuid|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

AttachL3NetworksToIPsecConnectionAction action = new AttachL3NetworksToIPsecConnectionAction(); action.uuid = "8f6fa5c86fd13968b8d8666f4b117aca"; action.l3NetworkUuids = asList("4b0779efacdc39a5b2dd4799e2452720"); action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; AttachL3NetworksToIPsecConnectionAction.Result res = action.call();

Python SDK

AttachL3NetworksToIPsecConnectionAction action = AttachL3NetworksToIPsecConnectionAction() action.uuid = "8f6fa5c86fd13968b8d8666f4b117aca" action.l3NetworkUuids = [4b0779efacdc39a5b2dd4799e2452720] action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" AttachL3NetworksToIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

从IPsec连接删除三层网路(DetachL3NetworksFromIPsecConnection)

API请求

URLs

DELETE zstack/v1/ipsec/{uuid}/l3networks

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X DELETE http://localhost:8080/zstack/v1/ipsec/ad4996bae0fb374bbbf696422f64e4aa/l3networks?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |l3NetworkUuids|List|body| | |2.3| |systemTags (可选)|List|body| | |2.3| |userTags (可选)|List|body| | |2.3|

API返回

返回示例

{     "inventory": {         "authKey": "123456",         "authMode": "psk",         "createDate": "Jan 30, 2018 2:26:00 PM",         "description": "",         "ikeAuthAlgorithm": "sha1",         "ikeDhGroup": 2,         "ikeEncryptionAlgorithm": "3des",         "l3NetworkRefs": [             {                 "connectionUuid": "8430a82e1293406fb10de06567af6f1d",                 "createDate": "Jan 30, 2018 2:29:55 PM",                 "l3NetworkUuid": "3533e0dcd01d4e2aa8697048e152c5d8",                 "lastOpDate": "Jan 30, 2018 2:29:55 PM",                 "uuid": "33b116666cc14ec68da8108969dfdef1"             }         ],         "lastOpDate": "Jan 30, 2018 2:26:05 PM",         "name": "IPsec",         "peerAddress": "10.128.22.3",         "peerCidrs": [             {                 "cidr": "192.168.127.1/24",                 "connectionUuid": "8430a82e1293406fb10de06567af6f1d",                 "createDate": "Jan 30, 2018 2:26:00 PM",                 "lastOpDate": "Jan 30, 2018 2:26:00 PM",                 "uuid": "74069e473ff74b4a9a33ecadce3c0425"             }         ],         "pfs": "dh-group2",         "policyAuthAlgorithm": "sha1",         "policyEncryptionAlgorithm": "3des",         "policyMode": "tunnel",         "state": "Enabled",         "status": "Ready",         "transformProtocol": "esp",         "uuid": "8430a82e1293406fb10de06567af6f1d",         "vipUuid": "334aa31bdac34f7d83ebfdd7ab2f83a7"     },     "success": true }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|IPsecConnectionInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |name|String|资源名称|2.3| |description|String|资源的详细描述|2.3| |peerAddress|String| |2.3| |authMode|String| |2.3| |authKey|String| |2.3| |vipUuid|String|VIP UUID|2.3| |ikeAuthAlgorithm|String| |2.3| |ikeEncryptionAlgorithm|String| |2.3| |ikeDhGroup|Integer| |2.3| |policyAuthAlgorithm|String| |2.3| |policyEncryptionAlgorithm|String| |2.3| |pfs|String| |2.3| |policyMode|String| |2.3| |transformProtocol|String| |2.3| |state|String| |2.3| |status|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3| |peerCidrs|List|详情参考peerCidrs|2.3| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |cidr|String| |2.3| |connectionUuid|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

DetachL3NetworksFromIPsecConnectionAction action = new  DetachL3NetworksFromIPsecConnectionAction(); action.uuid = "ad4996bae0fb374bbbf696422f64e4aa"; action.l3NetworkUuids = asList("a835701f0df63d14ad1281eb9cc1a768"); action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; DetachL3NetworksFromIPsecConnectionAction.Result res = action.call();

Python SDK

DetachL3NetworksFromIPsecConnectionAction action = DetachL3NetworksFromIPsecConnectionAction() action.uuid = "ad4996bae0fb374bbbf696422f64e4aa" action.l3NetworkUuids = [a835701f0df63d14ad1281eb9cc1a768] action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" DetachL3NetworksFromIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

添加远端CIDR到IPsec连接(AddRemoteCidrsToIPsecConnection)

API请求

URLs

POST zstack/v1/ipsec/{uuid}/remote-cidrs

Headers

Authorization: OAuth the-session-uuid

Body

{   "params": {     "peerCidrs": [       "192.168.100.0/24"     ]   },   "systemTags": [],   "userTags": [] }

Note: 上述示例中systemTagsuserTags字段可以省略。列出是为了表示body中可以包含这两个字段。

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X POST -d '{"params":{"peerCidrs":["192.168.100.0/24"]}}' \ http://localhost:8080/zstack/v1/ipsec/053658b061363df4be557d13ee0baaef/remote-cidrs

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |peerCidrs|List|body(包含在params结构中)| | |2.3| |resourceUuid (可选)|String|body(包含在params结构中)| | |2.3| |systemTags (可选)|List|body| | |2.3| |userTags (可选)|List|body| | |2.3|

API返回

返回示例

{   "inventory": {     "uuid": "55c06a7088a5341c8b4ebed294282bfe",     "name": "Test-IPSec",     "peerAddress": "100.64.10.10",     "authKey": "auth",     "vipUuid": "a66955e81e893c0f81effba08f1f2f94",     "peerCidrs": [       {         "uuid": "15b9949bc0553aeeaf53e96a1b437e7c",         "cidr": "192.168.100.0/24",         "connectionUuid": "55c06a7088a5341c8b4ebed294282bfe",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ],     "l3NetworkRefs": [       {         "uuid": "1223ba4c4d0533feb975ff45027ab47f",         "connectionUuid": "55c06a7088a5341c8b4ebed294282bfe",         "l3NetworkUuid": "163595b272913065b082d890a68d96a7",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|IPsecConnectionInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |name|String|资源名称|2.3| |description|String|资源的详细描述|2.3| |peerAddress|String| |2.3| |authMode|String| |2.3| |authKey|String| |2.3| |vipUuid|String|VIP UUID|2.3| |ikeAuthAlgorithm|String| |2.3| |ikeEncryptionAlgorithm|String| |2.3| |ikeDhGroup|Integer| |2.3| |policyAuthAlgorithm|String| |2.3| |policyEncryptionAlgorithm|String| |2.3| |pfs|String| |2.3| |policyMode|String| |2.3| |transformProtocol|String| |2.3| |state|String| |2.3| |status|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3| |peerCidrs|List|详情参考peerCidrs|2.3| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |cidr|String| |2.3| |connectionUuid|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

AddRemoteCidrsToIPsecConnectionAction action = new AddRemoteCidrsToIPsecConnectionAction(); action.uuid = "053658b061363df4be557d13ee0baaef"; action.peerCidrs = asList("192.168.100.0/24"); action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; AddRemoteCidrsToIPsecConnectionAction.Result res = action.call();

Python SDK

AddRemoteCidrsToIPsecConnectionAction action = AddRemoteCidrsToIPsecConnectionAction() action.uuid = "053658b061363df4be557d13ee0baaef" action.peerCidrs = [192.168.100.0/24] action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" AddRemoteCidrsToIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

删除远端CIDR(RemoveRemoteCidrsFromIPsecConnection)

从IPsec连接删除远端CIDR。

API请求

URLs

DELETE zstack/v1/ipsec/{uuid}/remote-cidrs

Headers

Authorization: OAuth the-session-uuid

Curl示例

curl -H "Content-Type: application/json" \ -H "Authorization: OAuth b86c9016b4f24953a9edefb53ca0678c" \ -X DELETE http://localhost:8080/zstack/v1/ipsec/2428fc093ea93b6fb4eda5cc921da355/remote-cidrs?

参数列表

|名字|类型|位置|描述|可选值|起始版本| |--|--|--|--|---|----| |uuid|String|url|资源的UUID,唯一标示该资源| |2.3| |peerCidrs|List|body| | |2.3| |resourceUuid (可选)|String|body| | |2.3| |systemTags (可选)|List|body| | |2.3| |userTags (可选)|List|body| | |2.3|

API返回

返回示例

{   "inventory": {     "uuid": "a069f4ee49c835869e046204ff5eba8f",     "name": "Test-IPSec",     "peerAddress": "100.64.10.10",     "authKey": "auth",     "vipUuid": "6af41f780abb3c69b122c29cc3948bab",     "peerCidrs": [       {         "uuid": "d0cb54ce25053f629623baef345f4bd0",         "cidr": "192.168.100.0/24",         "connectionUuid": "a069f4ee49c835869e046204ff5eba8f",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ],     "l3NetworkRefs": [       {         "uuid": "4e539c9cd56b37d4bb27c6244169fc55",         "connectionUuid": "a069f4ee49c835869e046204ff5eba8f",         "l3NetworkUuid": "7c63cc15a47b3c90a0350bd8c6e6906e",         "createDate": "Nov 14, 2017 10:20:57 PM",         "lastOpDate": "Nov 14, 2017 10:20:57 PM"       }     ]   } }

|名字|类型|描述|起始版本| |--|--|--|----| |error|ErrorCode|错误码,若不为null,则表示操作失败, 操作成功时该字段为null。 详情参考error|2.3| |inventory|IPsecConnectionInventory|详情参考inventory|2.3|

#error

|名字|类型|描述|起始版本| |--|--|--|----| |code|String|错误码号,错误的全局唯一标识,例如SYS.1000, HOST.1001|2.3| |description|String|错误的概要描述|2.3| |details|String|错误的详细信息|2.3| |elaboration|String|保留字段,默认为null|2.3| |opaque|LinkedHashMap|保留字段,默认为null|2.3| |cause|ErrorCode|根错误,引发当前错误的源错误,若无原错误,该字段为null|2.3|

#inventory

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |name|String|资源名称|2.3| |description|String|资源的详细描述|2.3| |peerAddress|String| |2.3| |authMode|String| |2.3| |authKey|String| |2.3| |vipUuid|String|VIP UUID|2.3| |ikeAuthAlgorithm|String| |2.3| |ikeEncryptionAlgorithm|String| |2.3| |ikeDhGroup|Integer| |2.3| |policyAuthAlgorithm|String| |2.3| |policyEncryptionAlgorithm|String| |2.3| |pfs|String| |2.3| |policyMode|String| |2.3| |transformProtocol|String| |2.3| |state|String| |2.3| |status|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3| |peerCidrs|List|详情参考peerCidrs|2.3| |l3NetworkRefs|List|详情参考l3NetworkRefs|2.3|

#peerCidrs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |cidr|String| |2.3| |connectionUuid|String| |2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

#l3NetworkRefs

|名字|类型|描述|起始版本| |--|--|--|----| |uuid|String|资源的UUID,唯一标示该资源|2.3| |connectionUuid|String| |2.3| |l3NetworkUuid|String|三层网络UUID|2.3| |createDate|Timestamp|创建时间|2.3| |lastOpDate|Timestamp|最后一次修改时间|2.3|

SDK示例

Java SDK

RemoveRemoteCidrsFromIPsecConnectionAction action = new  RemoveRemoteCidrsFromIPsecConnectionAction(); action.uuid = "2428fc093ea93b6fb4eda5cc921da355"; action.peerCidrs = asList("192.168.100.0/24"); action.sessionId = "b86c9016b4f24953a9edefb53ca0678c"; RemoveRemoteCidrsFromIPsecConnectionAction.Result res = action.call();

Python SDK

RemoveRemoteCidrsFromIPsecConnectionAction action = RemoveRemoteCidrsFromIPsecConnectionAction() action.uuid = "2428fc093ea93b6fb4eda5cc921da355" action.peerCidrs = [192.168.100.0/24] action.sessionId = "b86c9016b4f24953a9edefb53ca0678c" RemoveRemoteCidrsFromIPsecConnectionAction.Result res = action.call()

Parent topic: IPsec相关接口

术语表

区域(Zone)

ZStack中较大的一个资源定义,包括集群、二层网络、主存储等资源。

集群(Cluster)

一个集群是类似物理主机(Host)组成的逻辑组。在同一个集群中的物理主机必须安装相同的操作系统(虚拟机管理程序,Hypervisor),拥有相同的二层网络连接,可以访问相同的主存储。在实际的数据中心,一个集群通常对应一个机架(Rack)。

管理节点(Management Node)

安装系统的物理主机,提供UI管理、云平台部署功能。

计算节点(Compute Node)

也称之为物理主机(或物理机),为云主机实例提供计算、网络、存储等资源的物理主机。

主存储(Primary Storage)

用于存储云主机磁盘文件的存储服务器。支持本地存储、NFS、 Ceph、FusionStor、Shared Mount Point等类型。

镜像服务器(Backup Storage)

也称之为备份存储服务器,主要用于保存镜像模板文件。建议单独部署镜像服务器。

镜像仓库(Image Store)

镜像服务器的一种类型,可以为正在运行的云主机快速创建镜像,高效管理云主机镜像的版本变迁以及发布,实现快速上传、下载镜像,镜像快照,以及导出镜像的操作。

云主机(VM Instance)

运行在物理机上的虚拟机实例,具有独立的IP地址,可以访问公共网络,运行应用服务。

镜像(Image)

云主机或云盘使用的镜像模板文件,镜像模板包括系统云盘镜像和数据云盘镜像。

云盘(Volume)

云主机的数据盘,给云主机提供额外的存储空间,共享云盘可挂载到一个或多个云主机共同使用。

计算规格(Instance Offering)

启动云主机涉及到的CPU数量、内存、网络设置等规格定义。

云盘规格(Disk Offering)

创建云盘容量大小的规格定义。

二层网络(L2 Network)

二层网络对应于一个二层广播域,进行二层相关的隔离。一般用物理网络的设备名称标识。

三层网络(L3 Network)

云主机使用的网络配置,包括IP地址范围、网关、DNS等。

公有网络(Public Network)

由因特网信息中心分配的公有IP地址或者可以连接到外部互联网的IP地址。

私有网络(Private Network)

云主机连接和使用的内部网络。

L2NoVlanNetwork

物理主机的网络连接不采用Vlan设置。

L2VlanNetwork

物理主机节点的网络连接采用Vlan设置,Vlan需要在交换机端提前进行设置。

VXLAN网络池(VXLAN Network Pool)

VXLAN网络中的 Underlay 网络,一个 VXLAN 网络池可以创建多个 VXLAN Overlay 网络(即 VXLAN 网络),这些 Overlay 网络运行在同一组 Underlay 网络设施上。

VXLAN网络(VXLAN)

使用 VXLAN 协议封装的二层网络,单个 VXLAN 网络需从属于一个大的 VXLAN 网络池,不同 VXLAN 网络间相互二层隔离。

云路由(vRouter)

云路由通过定制的Linux云主机来实现的多种网络服务。

安全组(Security Group)

针对云主机进行第三层网络的防火墙控制,对IP地址、网络包类型或网络包流向等可以设置不同的安全规则。

弹性IP(EIP)

公有网络接入到私有网络的IP地址。

快照(Snapshot)

某一个时间点上某一个磁盘的数据备份。包括自动快照和手动快照两种类型。

相关文档

咨询

021-61733682

400-962-2212