[技术分享] 【华为云Stack ManageOne运营面北向对接】如何使用订单接口管理私有镜像

1 订单接口说明

ManageOne中,用户通过申请订单的方式对云资源进行申请、变更、释放操作,实现对云资源生命周期的管理,订单接口具有以下特点:

  1. 订单支持关联审批流程(最大支持五级审批,详情参考ManageOne用户指南),用户完成资源配置并提交后,如果审批通过,Manageone会自动完成订单实施;

  2. 订单接口对云服务接口(经加固后对外开放的OpenStack接口)进行了一定程度的封装,通过调用订单接口,可以同步完成云资源的多个操作,如,申请虚拟机的同时,为虚拟机挂载数据盘,绑定弹性IP;

  3. 通过订单接口申请、释放云资源时,会同步扣除、恢复租户配额,当租户配额不够时,会导致订单实施失败;

  4. 订单接口只提供资源的申请,延期,变更,释放功能,不提供云服务的查询,操作(如虚拟机的开关机,列表查询等)功能,不能独立使用,需要配合云服务接口使用,也就是说,您需要通过ManageOne订单接口申请,延期,变更,释放云资源,使用云服务接口查询,操作云资源

说明:

    云服务接口也支持申请云资源,与使用ManageOne订单接口的区别是:

  • 通过云服务接口创建的资源,在ManageOne页面上,可以查询,操作这些资源,但不能执行变更(如扩容,减容),释放云资源的操作

  • ManageOne中为该租户设置的配额也将不再生效(即使用云服务接口申请、释放资源,ManageOne中对应租户的配额不会变化),这也意味着,如果您不加约束,租户可以超配额申请资源



2 订单接口使用场景

如第1部分所述,ManageOne订单接口是在云服务接口的基础上封装得到的,包含了ManageOne自身的运营特性,例如产品、服务、区域、配额等,使用上有一定的约束,如果您希望通过调用接口实现对华为云Stack中云资源的生命周期管理,请参考以下几个场景进行评估,符合以下任何一种场景的,建议您选择使用ManageOne订单接口进行对接:

  1. 如果您公司购买了并部署了华为云Stack产品,您希望通过自动化工具实现云服务资源的自动化发放,从而提高资源申请效率;

  2. 如果您购买了并部署了华为云Stack产品,公司围绕IT资产的运营运维有一整套流程,您希望已有的流程平台(如ITSM、BOSS等)能够与华为云Stack进行对接,实现现有流程与云服务的整合,在简化服务的申请周期,提高应用上线效率的同时,还能够实现云资源的全流程监控;

  3. 如果您是云服务提供商,将华为云Stack提供的云服务,按照租户的形式租售给了客户,客户希望实现云服务的自动化发放,需要您提供对接接口;

  4. 如果您是云服务提供商,希望现有运营平台能够与华为云Stack对接,实现租户的自动化创建,并为每个租户预置指定类型的云资源,租户的日常运维由运维部门通过ManageOne进行运维。

如果您购买了多家厂商的云平台,希望通过一套云管理软件进行纳管,建议您直接对接云服务接口进行对接,这样可以屏蔽ManageOne的运营特性,只关注云服务特性,对接起来更加灵活。

3 对接准备

  1. 订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。

  2. 请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息

4 订单接口对接步骤

我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:

  1. 通过用户名和密码调用鉴权接口获取Token和user_id。

  2. (可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project

  3. 根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。

  4. 选择需要申请的云服务类型,比如云硬盘的service_type为evs。

  5. 订购接口还需要product_id,因此通过查询可用产品列表接口获取。

  6. 根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 6.5.x 云服务Params参数说明》。

  7. 组合订购接口所需的所有参数,调用接口完成订购

下面给出通过订单接口创建、释放私有镜像的详细步骤

5 申请私有镜像

私有镜像的制作来源于用户申请的虚拟机,即将虚拟机转换为镜像,这样后续申请虚拟机时可以选择自己的私有镜像申请虚拟机,省去了很多初始化配置的工作。这里先给出涉及到的接口清单,如下:

序号

接口功能

URL

涉及到的接口文档

调用接口使用的域名(样例)

1

鉴权

【POST】/v3/auth/tokens

《ManageOne 6.5.X OTenantSecurity服务API参考.doc》

sc.demo.com

2

查询用户关联的project列表

【GET】/rest/vdc/v3.0/users/{user_id}/projects

《ManageOne 6.5.X 运营面API参考.doc》

sc.demo.com
3

查询project详情,获取该project关联的资源池信息

【GET】/rest/vdc/v3.1/projects/{project_id}

《ManageOne 6.5.X 运营面API参考.doc》

sc.demo.com

4

查询可申请的产品列表

【GET】/rest/product/v3.0/apply/products

《ManageOne 6.5.X 运营面API参考.doc》

sc.demo.com

5

查询云资源池可用分区

【GET】/rest/serviceaccess/v3.0/available-zones

《ManageOne 6.5.X 运营面API参考.doc》

sc.demo.com

6

创建订购

【GET】/rest/subscription/v3.0/subscriptions

《ManageOne 6.5.X 运营面API参考.doc》

《ManageOne 6.5.x 云服务Params参数说明》

sc.demo.com

7

查询订单详情

【GET】/rest/order/v3.0/orders/{order_id}

《ManageOne 6.5.X 运营面API参考.doc》

sc.demo.com
8

查询弹性云服务器列表

【GET】/v2.1/{tenant_id}/servers


《华为云Stack 6.5.X API接口参考.chm》>计算>ECS

ecs.sa-fb-1.demo.com

9

查询弹性云服务器详情

【GET】/v2.1/{tenant_id}/servers/{server_id}


《华为云Stack 6.5.X API接口参考.chm》>计算>ECS

ecs.sa-fb-1.demo.com

10

弹性云服务器电源操作

【POST】/v2/{tenant_id}/servers/{server_id}/action


《华为云Stack 6.5.X API接口参考.chm》>计算>ECS

ecs.sa-fb-1.demo.com

具体接口调用步骤如下:

步骤 1 获取token

调用示例:

URL:https://{ManageOne运营侧API对外域名}/v3/auth/tokens
请求方法:POST
请求头:
Content-Type: application/json;charset=UTF-8
Accept: application/json;charset=UTF-8
Connection: keep-alive
请求体:
{
	"auth": {
		"identity": {
			"methods": [
				"password"
			],
			"password": {
				"user": {
					"domain": {
						"name": "租户名"
					},
					"name": "tenantName",
					"password": "password"
				}
			}
		},
		"scope": {
			"project": {
				"domain": {
					"name": "租户名"
				},
				"id": "项目Id"
			}
		}
	}
}

响应消息如下:

响应头:

X-Subject-Token→MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=

响应体:
{
	"token": {
		"expires_at": "2019-09-09T07:38:55.643000Z",
		"methods": [
			"password"
		],
		"catalog": [],
		"roles": [
			{
				"name": "vdc_adm",
				"id": "880ed0477e684b1db7634572ecf19c5c"
			},
			{
				"name": "te_admin",
				"id": "7849dd0fc806417c908bb21ea93b5def"
			},
			{
				"name": "tag_adm",
				"id": "7ef11d3399a44a56b722b3c017478e34"
			},
			{
				"name": "approv_adm",
				"id": "5528afb8b7c946b5bda00a10ca041748"
			},
			{
				"name": "vdc_owner",
				"id": "2034341ae2b44fee94c244a8069cde0b"
			}
		],
		"project": {
			"domain": {
				"name": "xssvdc",
				"id": "15488ac7aec547a68d9451c91173c68c"
			},
			"name": "xssvdc",
			"id": "27a008f1b83e4dfdbf1143dd336006df"
		},
		"issued_at": "2019-09-08T07:38:55.643000Z",
		"user": {
			"domain": {
				"name": "xssvdc",
				"id": "15488ac7aec547a68d9451c91173c68c"
			},
			"name": "xssvdc",
			"id": "b54310fb838b4f8ebf1e9d23bf9691d5"   //用户Id
		}
	}
}

从响应头中我们可以获得X-Subject-Token的值,即为我们所需要的token的值;

从响应体中还可以获得用户的Id,以便后续查询用户关联的所有的project

步骤2 查询用户关联的project(可选)

创建资源时,需要指定该资源所属的project,若一个租户下有多个project,第三方平台需要指明需要使用的project,此时需要查询该用户关联的project,若仅涉及单个project,则不涉及此操作。

需要说明的是,当选择某个project创建资源时,需要用该project参考步骤1去获取token。

调用示例如下:

URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/users/{user_id}/projects
请求方法:GET
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=

请求体:无
响应体:

{
	"total": 1,
	"projects": [
		{
			"domain_id": "15488ac7aec547a68d9451c91173c68c",
			"tenant_id": "39d881e6-e6a6-4516-8d8e-83446abc263b",
			"role_name": null,
			"tenant_name": "tt002",
			"regions": [
				{
					"region_status": "normal",
					"region_id": "dg-tky-1",
					"region_name": {
						"en_us": "东莞",
						"zh_cn": "东莞"
					}
				}
			],
			"level": "2",
			"role_id": null,
			"name": "pj002",
			"iam_project_name": "pj002",
			"description": null,
			"id": "4313bc0e240e4086995e606f6601b730",
			"enabled": true
		},
		{
			"domain_id": "15488ac7aec547a68d9451c91173c68c",
			"tenant_id": "1cfbb21d-3e45-4a0a-887f-c9e6ab215cec",
			"role_name": null,
			"tenant_name": "test001",
			"regions": [
				{
					"region_status": "normal",
					"region_id": "dg-tky-1",
					"region_name": {
						"en_us": "东莞",
						"zh_cn": "东莞"
					}
				}
			],
			"level": "2",
			"role_id": null,
			"name": "test001",
			"iam_project_name": "test001",
			"description": null,
			"id": "147c59f42277405e854e7a3123dea3a9",
			"enabled": true
		}
	]
}

步骤 3 查询资源池信息

创建、变更、删除资源时,需要指定资源所在的region、资源池、可用分区,我们可以通过查询project详情获取该project关联的region、资源池、可用分区信息,接口调用示例如下:

URL: https://{ManageOne运营侧API对外域名}/rest/vdc/v3.1/projects/{project_id}
请求方法:GET
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无
响应体:
{
	"project": {
		"domain_id": "15488ac7aec547a68d9451c91173c68c",
		"tenant_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9",
		"tenant_name": "xssvdc",
		"regions": [
			{
				"region_status": "normal",
				"cloud_infras": [
					{
						"cloud_infra_status": null,
						"cloud_infra_name": null,
						"cloud_infra_type": null,
						"azs": [],
						"cloud_infra_id": null
					},
					{
						"cloud_infra_status": "normal",
						"cloud_infra_name": "OpenStack_dg-tky-1",
						"cloud_infra_type": "FUSION_CLOUD",
						"azs": [
							{
								"az_status": "normal",
								"az_name": "华为",
								"az_id": "az0.dc0"
							}
						],
						"cloud_infra_id": "FUSION_CLOUD_dg-tky-1"
					},
					{
						"cloud_infra_status": "normal",
						"cloud_infra_name": "VMware_dg-tky-1",
						"cloud_infra_type": "VMWARE",
						"azs": [],
						"cloud_infra_id": "VMWARE_dg-tky-1"
					}
				],
				"region_id": "dg-tky-1",
				"region_name": {
					"en_us": "东莞",
					"zh_cn": "东莞"
				}
			}
		],
		"is_shared": false,
		"name": "xssvdc",
		"tenant_type": "vdc",
		"region_name": null,
		"id": "27a008f1b83e4dfdbf1143dd336006df",
		"enabled": true
	}
}

此处我们可以获得region_id、cloud_infra_id、az_id,需要注意的是,创建资源时指定的AZ必须与cloud_infra_id、region_id匹配,不能交叉混用!!!

步骤4 查询产品列表

不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type),常用类型有:

service_type

云服务名称

ecs

弹性云服务器

evs

云硬盘

ims

镜像服务

vpc

虚拟私有云

vfw

虚拟防火墙

elb

弹性负载均衡

as

弹性伸缩

bms

裸金属服务

调用示例如下:

URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/apply/products?service_type={ecs,evs,ims,vpc,vfw,elb,as,bms}&region_id={region_id}&start=1&limit=4
请求方法:GET
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无

响应体(本示例为查询ecs,请结合实际情况,选择需要查询的产品类别):
{
	"total": 2,
	"products": [
		{
			"product_id": "825d46284622441884854db2013c66a0",
			"service_type": "ecs",
			"create_vdc_id": "all",
			"create_user_id": "406f2fd692ac4feab83ff56eace1af2a",
			"icon_id": "defaulticonecs",
			"catalog_id": "1",
			"region_id": "dg-tky-1",
			"params": "{\"region_id\":\"dg-tky-1\",\"isHana\":false,\"availableZone\":{\"availableZoneId\":\"az0.dc0\",\"isLocked\":true,\"azName\":\"华为\",\"azType\":\"KVM\"},\"is_support_disaster\":{\"isDisaster\":\"userDefine\",\"isLocked\":true},\"hostSpecType\":{\"hostSpecServiceType\":\"normal\",\"isLocked\":true},\"flavor\":{\"flavorRef\":\"c89d4da4-fdad-4de7-81ba-42ef89ec4ca8\",\"isLocked\":true},\"root_volume\":{\"volumetype\":\"IPSAN\",\"isLocked\":true,\"volumeName\":\"SATA\"},\"image\":{\"imageRef\":\"833c9fe8-d27d-4238-a7e3-e43a683159a8\",\"imageType\":\"gold\",\"isLocked\":true},\"cloudArea\":{\"isLocked\":true}}",
			"name": "{\"en_US\":\"ecs_2b93\",\"zh_CN\":\"ecs_2b93\"}",
			"description": "{\"zh_CN\":\"\"}",
			"create_time": 1567400783000,
			"publish_status": "publish",
			"deletable_status": "normal",
			"is_default": false,
			"resource_pool_id": "",
			"project_id": "",
			"az_id": "az0.dc0",
			"secret_params": null,
			"product_type": null
		},
		{
			"product_id": "71347fb04fed43b5bb1eea9527f845ae",
			"service_type": "ecs",
			"create_vdc_id": "all",
			"create_user_id": "138539a4c8604121be05c1f932e947fe",
			"icon_id": "defaulticonecs",
			"catalog_id": "1",
			"region_id": "dg-tky-1",
			"params": "{}",
			"name": "{\"en_US\":\"ECS\",\"zh_CN\":\"弹性云服务器\"}",
			"description": "{\"zh_CN\": \"由CPU、内存、磁盘等组成的随时可获取、弹性可扩展、按需使用的虚拟的计算服务器。\",\"en_US\": \"Provides scalable virtual compute servers consisting of CPUs, memory, and disks resources.\"}",
			"create_time": 1560197802000,
			"publish_status": "publish",
			"deletable_status": "normal",
			"is_default": true,
			"resource_pool_id": "",
			"project_id": "",
			"az_id": "",
			"secret_params": null,
			"product_type": null
		}
	]
}

响应体中,is_default字段值为true的产品表示,该产品为系统预置产品,没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,直接对订单进行实施

步骤 5 查询虚拟机列表

查询虚拟机列表,请求示例如下:

URL: https://{ecs对外访问域名}/v2.1/{tenant_id}/servers(project_id需要与获取token时指定的project的Id一致)
请求方法:GET
请求头:
Content-Type: application/json;charset=UTF-8
Accept: application/json;charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无
响应体:
{
	"servers": [
		{
			"name": "vm_yqb1",
			"links": [
				{
					"rel": "self",
					"href": "https://compute.localdomain.com:8001/v2.1/servers/b3a7db10-38c8-407c-9ee9-8f4d078f3c07"
				},
				{
					"rel": "bookmark",
					"href": "https://compute.localdomain.com:8001/servers/b3a7db10-38c8-407c-9ee9-8f4d078f3c07"
				}
			],
			"id": "b3a7db10-38c8-407c-9ee9-8f4d078f3c07"
		},
		{
			"name": "lxd",
			"links": [
				{
					"rel": "self",
					"href": "https://compute.localdomain.com:8001/v2.1/servers/24f6b74e-0a33-490e-86e9-f9f79ca8bb3c"
				},
				{
					"rel": "bookmark",
					"href": "https://compute.localdomain.com:8001/servers/24f6b74e-0a33-490e-86e9-f9f79ca8bb3c"
				}
			],
			"id": "24f6b74e-0a33-490e-86e9-f9f79ca8bb3c"
		}
	]
}


步骤6 查询指定虚拟机详情,获取虚拟机状态

URL: https://{ecs对外访问域名}/v2.1/{tenant_id}/servers/{server_id}(project_id需要与获取token时指定的project的Id一致,server_id由上一步获得)
请求方法:GET
请求头:
Content-Type: application/json;charset=UTF-8
Accept: application/json;charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无
响应体:
{
	"server": {
		"tenant_id": "openstack",
		"image": "",
		"addresses": {
			"68269e6e-4a27-441b-8029-35373ad50bd9": [
				{
					"addr": "192.168.0.3",
					"version": 4
				}
			]
		},
		"metadata": {},
		"created": "2012-08-20T21:11:09Z",
		"hostId": "65201c14a29663e06d0748e561207d998b343e1d164bfa0aafa9c45d",
		"flavor": {
			"links": [
				{
					"rel": "bookmark",
					"href": "http://openstack.example.com/openstack/flavors/1"
				}
			],
			"id": "1"
		},
		"user_id": "fake",
		"name": "new-server-test",
		"progress": 0,
		"links": [
			{
				"rel": "self",
				"href": "http://openstack.example.com/v2/openstack/servers/893c7791-f1df-4c3d-8383-3caae9656c62"
			},
			{
				"rel": "bookmark",
				"href": "http://openstack.example.com/openstack/servers/893c7791-f1df-4c3d-8383-3caae9656c62"
			}
		],
		"id": "893c7791-f1df-4c3d-8383-3caae9656c62",
		"updated": "2012-08-20T21:11:09Z",
		"status": "ACTIVE"
	}
}

可以看到,虚拟机状态为运行中(status字段值为ACTIVE)

步骤7 关闭虚拟机

URL: https://{ecs对外访问域名}/v2/{tenant_id}/servers/{server_id}/action(project_id需要与获取token时指定的project的Id一致,server_id由上一步获得)
请求方法:POST
请求头:
Content-Type: application/json;charset=UTF-8
Accept: application/json;charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:
{
	"os-stop": {
		"type": "SOFT"
	}
}
响应体:
无

完成对虚拟机状态检查,设置后,我们就可以申请私有镜像了,需要的参数有:

序号

参数名称

参考值

备注

1

operate_type

apply

申请,固定值apply

2

service_type

ims

镜像服务,固定值ims

3

region_id

sa-fb-11

区域id,步骤3中获取

4

tenancy

30

服务有效期,单位天,永久有效则填写0

5

product_id


产品id,步骤4中,查找IMS的产品id

6

tenant_id


云服务中的tenant_id和manageOne中的project_id相同,需要与步骤1中指定的project相同

7

time_zone

GMT+08:00

当地时区

8

params


配置ims所需参数,见后续表格说明


  • params参数说明

参数

类型

必选

值域

描述

name

String

只能由中文、字母、数字、空格、“_”、“-”、“.”组成,且首尾不能为空格,长度为[1-128]个字符。

私有镜像名称。

count

Integer

-

申请私有镜像的数量。

display

Object

-

订单页面呈现的内容。

description

String

-

私有镜像的用户填写的描述信息。

instance_id

String

只能由字母、数字、中划线组成,长度为36位,中划线只用于连接。                                   格式为:{8位字符串}-{4位字符串}-{4位字符串}-{4位字符串}-{12位字符串}。

镜像ID,唯一。通过虚拟机申请私有镜像时必选。

参考步骤5,注意ECS需要关机才可申请IMS

min_disk

Integer

-

系统盘的大小,不小于镜像文件的系统盘大小。                                                             外部文件方式申请私有镜像时必选。

image_url

String

外部文件对接swift时格式为\\{ip}\{文件目录}\{文件名称}。                                  外部文件对接obs时格式为{桶名}:{外部文件名}

镜像文件所在地的url。

外部文件对接swift和obs申请私有镜像时必选。

hw_firmware_type

String

bios或uefi

镜像虚拟机启动方式。

注册ISO格式镜像,一般情况下,选择BIOS。当操作系统支持UEFI启动且制作的镜像用于创建大于2T系统盘的ECS时,选择UEFI启动。

注册非ISO格式镜像,启动模式和源镜像的启动模式保持一致。                                            外部文件对接swift和obs申请私有镜像时必选。

os_version

String

存在的支持的操作系统版本,如Ubuntu 18.04 server 64bit

操作系统版本。

只用于外部文件场景,可选。不选择时,系统会自动对镜像的操作系统进行识别,如果操作系统不在支持的范围内或无法识别,对于Linux的镜像,将镜像的操作系统会设置为Other(64 bit);对于Windows镜像,则上传失败。

architecture

String

存在的支持的处理器架构,如x86_64。

处理器架构。

外部文件申请私有镜像时必选。

is_config

boolean

true/false

是否进行后台自动化配置。若选择了,系统会根据不同的操作系统进行不同的配置。

外部文件方式申请私有镜像时必选。

cloudinit

boolean

true/false

是否支持cloud-init。

外部文件方式申请私有镜像时必选。

is_config_init

boolean

false

外部文件方式申请私有时必选。

trans_mode

String

shared

传输模式。

外部对接swift时必选。

user_name

String

-

用户名。

外部文件对接swift时申请私有镜像时必选。

另外,由于安全需要,文件名对应到密码要放入订单接口的“secret_params“字段中,格式如下:

"secret_params": "{\"password\":\"MyPassword\"}"

domain

String

-

域名。

外部文件对接swift时申请私有镜像时可选。


  • display参数说明

参数

类型

必选

值域

描述

zh_CN

List<Resource>

-

中文显示内容。

en_US

List<Resource>

-

英文显示内容。


  • Resource参数说明

参数

类型

必选

值域

描述

label

String

-

显示key值。

value

由type值确定

-

显示value值。

type

String

-

显示value的类型。

步骤8 创建订单,申请私有镜像

订单接口中的params参数说明,请参考《ManageOne 6.5.x 云服务Params参数说明》

申请私有镜像请求示例如下:

URL:  https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions
请求方法:POST
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:
{
	"subscriptions": [
		{
			"operate_type": "apply",
			"project_id": "c898048bfcd640cda49f5090eb82566f",
			"product_id": "a177114dbf394016a921f6d85327acaf",
			"region_id": "cn-sz-1",
			"time_zone": "GMT+08:00",
			"tenancy": "13",
			"service_type": "ims",
			"params": "{\"name\":\"ims-lva5\",\"count\":1,\"display\":{\"en_US\":[{\"label\":\"Apply Type\",\"type\":\"string\",\"value\":\"Apply for private image\"},{\"label\":\"Source\",\"type\":\"string\",\"value\":\"ECS\"},{\"label\":\"Name\",\"type\":\"string\",\"value\":\"ims-lva5\"},{\"label\":\"Description\",\"type\":\"string\",\"value\":\"\"}],\"zh_CN\":[{\"label\":\"申请类型\",\"type\":\"string\",\"value\":\"申请私有镜像\"},{\"label\":\"来源\",\"type\":\"string\",\"value\":\"云服务器\"},{\"label\":\"名称\",\"type\":\"string\",\"value\":\"ims-lva5\"},{\"label\":\"描述\",\"type\":\"string\",\"value\":\"\"}]},\"instance_id\":\"abb4a6c7-8ea4-4798-aa17-5bfcdf7ebc78\"}"
		}
	]
}
响应体:
{
	"purchases": [
		{
			"subscription_id": "20190914113546169610061"
		}
	],
	"expected_total": 0,
	"error_details": null
}

subscription_id即为订单ID

步骤9 查询订单详情,确认订单实施状态

订单提交成功后,需要定时轮询订单状态,直到订单状态(status字段)为成功

URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}(order_id由上一步响应体获得)
请求方法:POST
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无
响应体:
{
	"order_id": "20190914113546169610061",
	"parents_id": null,
	"type": "apply",
	"service_type": "vpc",
	"params": "{\"regionId\":\"dg-tky-1\",\"tenant_id\":\"27a008f1b83e4dfdbf1143dd336006df\",\"vpc\":{\"name\":\"vpc-5e10\",\"ntp\":[],\"ntp_v6\":[]},\"subnet\":{\"regionId\":\"dg-tky-1\",\"tenantId\":\"27a008f1b83e4dfdbf1143dd336006df\",\"availableZoneId\":\"\",\"name\":\"subnet-5e10\",\"dhcpEnable\":true,\"cidr\":\"192.168.10.0/24\",\"physicalNetwork\":\"physnet1\",\"segmentationId\":\"177\",\"routed\":false,\"dnsList\":[\"160.102.8.53\",\"160.102.8.54\"]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"东莞\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-5e10\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"\",\"type\":\"string\"}]}}",
	"create_user_id": "b54310fb838b4f8ebf1e9d23bf9691d5",
	"create_user_name": "xssvdc",
	"vdc_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9",
	"vdc_name": "xssvdc",
	"status": "successed",
	"create_time": "2019-06-11 01:53:42",
	"implement_time": "2019-06-11 01:53:43",
	"complete_time": "2019-06-11 01:53:48",
	"project_id": "27a008f1b83e4dfdbf1143dd336006df",
	"cloud_infra_id": null,
	"product_id": "04e12eba75e243368f5cb6a0f52db4af",
	"region_id": "dg-tky-1",
	"product_defination_params": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}",
	"tenancy": "0",
	"original_tenancy": "0",
	"time_zone": null,
	"comments": null,
	"contract_number": null,
	"rate_params": null,
	"domain_id": null
}

6 删除私有镜像

删除私有镜像,我们需要指定私有镜像的Id,所属的区域,AZ等信息,步骤如下:

步骤 1 获取token

参考第5章 步骤1即可

步骤2 查询区域列表

参考 第5章 步骤3即可

步骤3 查询镜像列表

URL: https://{ims对外访问域名}/v2/cloudimages
请求方法:POST
请求头:
Content-Type: application/json;charset=UTF-8
Accept: application/json;charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:无
响应体:
{
	"images": [
		{
			"schema": "/v2/schemas/image",
			"__support_live_resize": "False",
			"__system_encrypted": "",
			"min_disk": 10,
			"created_at": "2019-09-16T16:59:03Z",
			"__originalimagename": "5b4e0e7d-d37f-4622-aa6d-a95ca50826d5",
			"expired_at": "2019-09-30 15:59:59",
			"container_format": "bare",
			"__system_support_market": true,
			"file": "/v2/images/e262b94c-6a10-4d07-bb89-ec8eb9193a82/file",
			"updated_at": "2019-09-16T17:00:28Z",
			"protected": false,
			"checksum": "afa6cd79bd9051448b1464d6dd3ffdf9",
			"id": "e262b94c-6a10-4d07-bb89-ec8eb9193a82",
			"__support_static_ip": "True",
			"__isregistered": "true",
			"min_ram": 0,
			"file_format": "qcow2",
			"owner": "c898048bfcd640cda49f5090eb82566f",
			"__data_origin": "instance,abb4a6c7-8ea4-4798-aa17-5bfcdf7ebc78",
			"hw_firmware_type": "bios",
			"__os_type": "Linux",
			"__imagetype": "private",
			"visibility": "private",
			"file_name": "**.qcow2",
			"cloudinit": "True",
			"virtual_env_type": "FusionCompute",
			"__support_kvm": "true",
			"hw_disk_bus": "virtio",
			"tags": [],
			"__platform": "EulerOS",
			"is_auto_config": "false",
			"size": 2432434176,
			"__os_bit": "64",
			"__os_version": "EulerOS 2.5 64bit",
			"name": "ims-lva5",
			"self": "/v2/images/e262b94c-6a10-4d07-bb89-ec8eb9193a82",
			"disk_format": "qcow2",
			"__admin_encrypted": "",
			"describe": "",
			"virtual_size": null,
			"status": "active"
		}
	]
}

至此,我们获得了创建删除私有镜像订单所需要的参数,如下:

序号

参数名称

参考值

备注

1

operate_type

delete

删除,固定值delete

2

service_type

ims

弹性IP,固定值ims

3

region_id

sa-fb-11

区域id,步骤3获取

4

tenant_id


云服务中的tenant_id和manageOne中的project_id相同,与步骤1获取token时指定的porject相同

5

params


删除ims请求参数,见后续表格说明


  • params参数说明

参数

类型

必选

值域

描述

count

Integer

大于等于1的整数

批量删除的私有镜像的个数。

display

Object

-

订单页面呈现内容。

ids

Array

-

删除的私有镜像列表。


  • display参数说明

参数

类型

必选

值域

描述

zh_CN

List<Resource>

-

中文显示内容。

en_US

List<Resource>

-

英文显示内容。


  • Resource参数说明

参数

类型

必选

值域

描述

label

String

-

显示key值。

value

由type值确定

-

显示value值。

type

String

-

显示value的类型。


  • ids参数信息

参数

类型

必选

值域

描述

id

String

只能由字母、数字、中划线组成,长度为36位,中划线只用于连接。                              格式为:{8位字符串}-{4位字符串}-{4位字符串}-{4位字符串}-{12位字符串}。

被删除的私有镜像ID,唯一。参考步骤3,只有镜像的属性中owner的值与获取token时指定的project的值一致时,用户才能删除该镜像


步骤4 调用订单接口删除私有镜像

订单接口中的params参数说明,请参考《ManageOne 6.5.x 云服务Params参数说明

URL:  https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions
请求方法:POST
请求头:
Content-Type: application/json; charset=UTF-8
Accept: application/json; charset=UTF-8
Connection: keep-alive
X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=
请求体:
{
	"subscriptions": [
		{
			"operate_type": "delete",
			"project_id": "c898048bfcd640cda49f5090eb82566f",
			"service_type": "ims",
			"params": "{\"count\":1,\"display\":{\"en_US\":[{\"label\":\"Name\",\"type\":\"string\",\"value\":\"ims-lva5\"},{\"label\":\"OS\",\"type\":\"string\",\"value\":\"EulerOS 2.5 64bit\"}],\"zh_CN\":[{\"label\":\"名称\",\"type\":\"string\",\"value\":\"ims-lva5\"},{\"label\":\"操作系统\",\"type\":\"string\",\"value\":\"EulerOS 2.5 64bit\"}]},\"ids\":[{\"id\":\"e262b94c-6a10-4d07-bb89-ec8eb9193a82\"}]}",
			"region_id": "cn-sz-1"
		}
	]
}
响应体:
{
	"purchases": [
		{
			"subscription_id": "20190914110658422269247"
		}
	],
	"expected_total": 0,
	"error_details": null
}

同样的,我们需要调用订单查询接口(参考底5章 步骤9),查询订单状态,直到私有镜像删除完成


补充说明:

  1. 私有镜像的查询、属性更新等操作均需要调用云服务的接口,具体接口参考文档《为云Stack 6.5.X API接口参考.chm》中“计算”-->“IMS”章节。

  2. 私有镜像的申请、删除、扩容需要使用ManageOne订单接口,不可将ManageOne订单接口与私有镜像接口混用(如:使用ManageOne订单接口创建资源,使用私有镜像接口删除资源),否则会导致ManageOne上数据展示异常