• [ManageOne二...] 【华为云Stack ManageOne运营面北向对接】如何使用订单接口管理云磁盘
    1 订单接口说明HCS支持通过订单接口或云服务接口申请、删除弹性云硬盘(EVS),本贴介绍通过订单接口的方式申请EVS。关于二者的区别以及使用场景,可以参考:cid:link_02 订单接口使用场景如第1部分所述,ManageOne订单接口是在云服务接口的基础上封装得到的,包含了ManageOne自身的运营特性,例如产品、服务、区域、配额等,使用上有一定的约束,如果您希望通过调用接口实现对华为云Stack中云资源的生命周期管理,请参考以下几个场景进行评估,符合以下任何一种场景的,建议您选择使用ManageOne订单接口进行对接:如果您公司购买了并部署了华为云Stack产品,您希望通过自动化工具实现云服务资源的自动化发放,从而提高资源申请效率;如果您购买了并部署了华为云Stack产品,公司围绕IT资产的运营运维有一整套流程,您希望已有的流程平台(如ITSM、BOSS等)能够与华为云Stack进行对接,实现现有流程与云服务的整合,在简化服务的申请周期,提高应用上线效率的同时,还能够实现云资源的全流程监控;如果您是云服务提供商,将华为云Stack提供的云服务,按照租户的形式租售给了客户,客户希望实现云服务的自动化发放,需要您提供对接接口;如果您是云服务提供商,希望现有运营平台能够与华为云Stack对接,实现租户的自动化创建,并为每个租户预置指定类型的云资源,租户的日常运维由运维部门通过ManageOne进行运维。如果您购买了多家厂商的云平台,希望通过一套云管理软件进行纳管,建议您直接对接云服务接口进行对接,这样可以屏蔽ManageOne的运营特性,只关注云服务特性,对接起来更加灵活。3 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配华为云Stack 6.5.X,8.X版本4 订单接口对接步骤我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:通过用户名和密码调用鉴权接口获取Token和user_id。(可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。选择需要申请的云服务类型,比如云硬盘的service_type为evs。订购接口还需要product_id,因此通过查询可用产品列表接口获取。根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放云磁盘的详细步骤5 申请云磁盘这里先给出涉及到的接口清单,如下:序号接口功能URL涉及到的接口文档调用接口使用的域名(样例)1鉴权【POST】/v3/auth/tokens《ManageOne OTenantSecurity服务API参考.doc》iam-apigateway-proxy.demo.com2查询用户关联的project列表【GET】/rest/vdc/v3.0/users/{user_id}/projects《ManageOne 运营面API参考.doc》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 运营面API参考.doc》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 运营面API参考.doc》sc.demo.com5查询云资源池可用分区【GET】/rest/serviceaccess/v3.0/available-zones《ManageOne 运营面API参考.doc》sc.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 运营面API参考.doc》《ManageOne 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 运营面API参考.doc》sc.demo.com8获取镜像列表【GET】/v2/cloudimages《华为云Stack API接口参考.chm》>计算>IMS或《云硬盘(IMS) API参考(for 华为云Stack).pdf》ims.sa-fb-1.demo.com9获取磁盘类型【GET】/v1.0/resource-tags《华为云Stack API接口参考.chm》>公共组件>CCS 或《华为云Stack 云服务API参考.docx》>云配置服务(CCS)ccs.sa-fb-1.demo.com具体接口调用步骤如下:步骤 1 获取token调用示例:URL:https://{IAM对外访问域名}/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": "XXXXXX", "password": "XXXXXX" } } }, "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": "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/products?limit=100&start=1&status=online&service_type=evs&region_id={region_id}(region_id取值由步骤3获取) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: {     "total": 1,     "products": [         {             "product_id": "3b54ed7bb86c4d278876b5018ec96201",             "service_type": "evs",             "create_vdc_id": "all",             "create_user_id": "32cb5a3c9de44bcf9696db98c1db828a",             "icon_id": "defaulticonevs",             "catalog_id": "2",             "region_id": "dg-dg-1",             "params": "{}",             "name": "{\"en_US\":\"EVS\",\"zh_CN\":\"弹性云硬盘\"}",             "description": "{\"zh_CN\": \"提供自动调整其弹性存储资源的管理服务\",\"en_US\": \"Elastic, scalable Storage servers\"}",             "create_time": 1585897649000,             "publish_status": "publish",             "deletable_status": "normal",             "is_default": true,             "publish_scope": "[]",             "online_scope": "[{\"vdcName\":\"all\",\"vdcId\":\"all\"}]",             "online_status": "online",             "approval": false,             "price": null,             "resource_pool_id": "",             "project_id": "",             "az_id": "",             "secret_params": null,             "product_type": null         }     ] }响应体中,approval字段值为false的产品表示该产品没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,提交订单后就会实施,对接时建议使用此类产品。步骤 5 查询可用镜像(可选)查询可用的镜像列,请求示例如下:URL: https://{ims对外访问域名}/v2/cloudimages 请求方法:GET 请求头: 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": 20, "created_at": "2019-06-11T01:48:33Z", "__image_source_type": "glance", "container_format": "bare", "__system_support_market": false, "file": "/v2/images/833c9fe8-d27d-4238-a7e3-e43a683159a8/file", "updated_at": "2019-06-11T01:49:55Z", "protected": true, "checksum": "eff39ae88e39b2e654d60b9f4c7faf47", "id": "833c9fe8-d27d-4238-a7e3-e43a683159a8", "__support_static_ip": "False", "__isregistered": "true", "min_ram": 1024, "file_format": "qcow2", "owner": "a21752d4272b4ffa82725c1f0c61173f", "hw_firmware_type": "bios", "__os_type": "Linux", "__imagetype": "gold", "visibility": "public", "file_name": "**.qcow2", "cloudinit": "False", "__quick_start": "False", "virtual_env_type": "FusionCompute", "__support_kvm": "true", "hw_disk_bus": "virtio", "tags": [], "__platform": "EulerOS", "is_auto_config": "false", "size": 928961536, "__os_bit": "64", "__os_version": "EulerOS 2.5 64bit", "name": "EulerOS", "self": "/v2/images/833c9fe8-d27d-4238-a7e3-e43a683159a8", "disk_format": "qcow2", "__admin_encrypted": "", "describe": "", "virtual_size": null, "status": "active" } ] }这一步主要获得镜像Id,以及使用该镜像创建虚拟机时,所要求的最小磁盘(min_disk),和最小内存(min_ram),后续创建虚拟机时所选择的规格需要大于等于镜像的最低要求,否则会创建失败步骤6 查询磁盘类型使用CCS接口查询可用的磁盘类型,如下:URL: https://{CCS对外域名}/v1.0/resource-tags?resource_type=volume_type请求方法:GET请求头:Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体示例:{     "resources": [         {             "tags": {                 "display_name": [                     "SSD"                 ],                 "name": [                     "SSD"                 ],                 "availability_zone": [                     "az0.dc1"                 ]             },             "resource_type": "volume_type",             "resource_id": "7e6f413a-bc5e-4f10-bab3-602bb0e14286"         }     ] }响应体中我们可以获取:磁盘类型所适用的可用分区,即availability_zone的值;磁盘类型的名称,即name的值;磁盘类型的资源ID,即resource_id的值此处根据步骤3中所选的可用分区进行过滤,选择适用的磁盘类型即可。我们现在获得了创建EVS所需的所有参数,订购接口所需主要参数如下:序号参数名称参考值备注1operate_typeapply申请,固定值apply,必选2service_typeevs云硬盘,此处固定填写evs,必选3actioncreate_volume创建,固定值create_volume,必选4region_idsa-fb-11区域id,步骤3获取,必选5availability_zoneaz1.dc1可用分区id,步骤3获取,必选6volumes:volume_typeSATA云硬盘类型,从步骤6获取,必选7volumes:snapshot_id117220c2-715a-41ff-a8c9-67e62c3fa802(可选)从快照创建云硬盘时此参数值填写快照Id,磁盘快照查询接口为:【GET】/v2/{tenant_id}/snapshots,参考《华为云Stack API接口参考.chm》8volumes:source_volid213220c2-715a-41ff-a8c9-67e62234802(可选)从已有云硬盘创建新的云硬盘时,此处填写已有云硬盘的Id,云硬盘列表查询接口为:【GET】/v2/{tenant_id}/volumes/detail,参考《华为云Stack API接口参考.chm》9volumes:imageRef645320c2-715a-41ff-a8c9-67e6aaafa802(可选)从镜像创建EVS时,此处填写镜像Id,从步骤5获取。10volumes:size20磁盘大小,必选11display用于ManageOne页面显示,根据订购接口的其他参数填写对应的值即可,键必须保留,值可以为空步骤7 创建订单,申请云磁盘订单接口中的params参数说明,请参考《ManageOne 云服务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": [ { "project_id": "27a008f1b83e4dfdbf1143dd336006df", "region_id": "dg-tky-1", "product_id": "4230c653329847db9a3aacbe23491cf3", "tenancy": "0", "comments": "", "operate_type": "apply", "service_type": "evs", "time_zone": "GMT+08:00", "params": "{\"action\":\"create_volume\",\"count\":1,\"volumes\":[{\"backup_id\":null,\"source_volid\":null,\"snapshot_id\":null,\"count\":1,\"availability_zone\":\"az0.dc0\",\"description\":\"\",\"size\":30,\"name\":\"volume-ecf9\",\"imageRef\":null,\"volume_type\":\"IPSAN\",\"metadata\":{\"hw:passthrough\":false},\"multiattach\":0,\"OS-SCH-HNT:scheduler_hints\":{}}],\"region_id\":\"dg-tky-1\",\"display\":{\"zh_CN\":[{\"label\":\"区域\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"可用分区\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"数据来源\",\"type\":\"string\",\"value\":\"无\"},{\"label\":\"磁盘\",\"type\":\"string\",\"value\":\"数据盘\"},{\"label\":\"镜像\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"容量(GB)\",\"type\":\"string\",\"value\":30},{\"label\":\"该磁盘的IOPS上限\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"该磁盘的带宽上限(MB/s)\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"磁盘类型\",\"type\":\"string\",\"value\":\"SATA\"},{\"label\":\"磁盘模式\",\"type\":\"string\",\"value\":\"VBD\"},{\"label\":\"共享方式\",\"type\":\"string\",\"value\":\"否\"},{\"label\":\"磁盘名称\",\"type\":\"string\",\"value\":\"volume-ecf9\"}],\"en_US\":[{\"label\":\"Region\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"AZ\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"Data Source\",\"type\":\"string\",\"value\":\"None\"},{\"label\":\"Disk\",\"type\":\"string\",\"value\":\"Data disk\"},{\"label\":\"Image\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"Capacity(GB)\",\"type\":\"string\",\"value\":30},{\"label\":\"IOPS Upper Limit of the Disk\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"Bandwidth Upper Limit of the Disk (MB/s)\",\"type\":\"string\",\"value\":\"--\"},{\"label\":\"Disk Type\",\"type\":\"string\",\"value\":\"SATA\"},{\"label\":\"Device Type\",\"type\":\"string\",\"value\":\"VBD\"},{\"label\":\"Disk Sharing\",\"type\":\"string\",\"value\":\"No\"},{\"label\":\"Disk Name\",\"type\":\"string\",\"value\":\"volume-ecf9\"}]}}" } ] } 响应体: { "purchases": [ { "subscription_id": "20190914113546169610061" } ], "expected_total": 0, "error_details": null }subscription_id即为订单ID步骤8 查询订单详情,确认订单实施状态订单提交成功后,需要定时轮询订单状态,直到订单状态(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://{evs对外访问域名}/v2/{project_id}/volumes(project_id需要与获取token时指定的project的Id一致) 请求方法:POST 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "volumes": [ { "id": "cd6a692a-da31-4cd8-98e5-fd5146085fbb", "links": [ { "href": "https://evs.dg-tky-1.dg-tky.com/v2/27a008f1b83e4dfdbf1143dd336006df/volumes/cd6a692a-da31-4cd8-98e5-fd5146085fbb", "rel": "self" }, { "href": "https://evs.dg-tky-1.dg-tky.com/27a008f1b83e4dfdbf1143dd336006df/volumes/cd6a692a-da31-4cd8-98e5-fd5146085fbb", "rel": "bookmark" } ], "name": "volume-ecf9" }, { "id": "2231e180-6e62-412b-80f8-6eceb90fff07", "links": [ { "href": "https://evs.dg-tky-1.dg-tky.com/v2/27a008f1b83e4dfdbf1143dd336006df/volumes/2231e180-6e62-412b-80f8-6eceb90fff07", "rel": "self" }, { "href": "https://evs.dg-tky-1.dg-tky.com/27a008f1b83e4dfdbf1143dd336006df/volumes/2231e180-6e62-412b-80f8-6eceb90fff07", "rel": "bookmark" } ], "name": "ecs-e960-volume-0000" } ] }我们现在获得了删除云磁盘所需的所有参数,订购接口所需主要参数如下:序号参数名称参考值备注1operate_typedelete删除,固定值delete,必选2service_typeevs云硬盘,填写固定值evs,必选3actiondelete_volume删除,固定值delete_volume,必选4region_idsa-fb-11区域id,步骤2获取,必选5id需要删除的云硬盘的id,云硬盘列表查询接口为:【GET】/v2/{tenant_id}/volumes,参考《华为云Stack API接口参考.chm》,必选6display订单显示信息,可根据需要填写,值可以为空,key需保留步骤4 调用订单接口删除云磁盘订单接口中的params参数说明,请参考《ManageOne 云服务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": [ { "project_id": "27a008f1b83e4dfdbf1143dd336006df", "region_id": "dg-tky-1", "operate_type": "delete", "service_type": "evs", "params": "{\"action\":\"delete_volume\",\"ids\":[{\"id\":\"58bfb6b4-567c-4535-95d6-ed788092c141\",\"service_type\":\"evs\",\"name\":\"volume-0914\"}],\"region_id\":\"dg-tky-1\",\"display\":{\"zh_CN\":[{\"label\":\"区域\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"可用分区\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"磁盘类型\",\"type\":\"string\",\"value\":\"SATA\"},{\"label\":\"容量\",\"type\":\"string\",\"value\":30},{\"label\":\"数据来源\",\"type\":\"string\",\"value\":\"无\"},{\"label\":\"共享方式\",\"type\":\"string\",\"value\":\"否\"}],\"en_US\":[{\"label\":\"Region\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"AZ\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"Disk Type\",\"type\":\"string\",\"value\":\"SATA\"},{\"label\":\"Capacity\",\"type\":\"string\",\"value\":30},{\"label\":\"Data Source\",\"type\":\"string\",\"value\":\"None\"},{\"label\":\"Disk Sharing\",\"type\":\"string\",\"value\":\"No\"}]}}" } ] } 响应体: { "purchases": [ { "subscription_id": "20190914110658422269247" } ], "expected_total": 0, "error_details": null }同样的,我们需要调用订单查询接口(参考底5章 步骤8),查询订单状态,直到云磁盘删除完成补充说明:云磁盘的查询、属性更新等操作均需要调用云服务的接口,具体接口参考文档《华为云Stack API接口参考.chm》中“存储”-->“EVS”章节。云磁盘的申请、删除、扩容需要使用ManageOne订单接口,不可将ManageOne订单接口与EVS接口混用(如:使用ManageOne订单接口创建资源,使用EVS接口删除资源),否则会导致ManageOne上数据展示异常
  • [ManageOne二...] 【华为云Stack ManageOne运营面北向对接】如何使用订单接口申请弹性云服务器
    1 订单接口说明ManageOne中,用户通过申请订单的方式对云资源进行申请、变更、释放操作,实现对云资源生命周期的管理,订单接口具有以下特点:订单支持关联审批流程(最大支持五级审批,详情参考ManageOne用户指南),用户完成资源配置并提交后,如果审批通过,Manageone会自动完成订单实施;订单接口对云服务接口(经加固后对外开放的OpenStack接口)进行了一定程度的封装,通过调用订单接口,可以同步完成云资源的多个操作,如,申请虚拟机的同时,为虚拟机挂载数据盘,绑定弹性IP;通过订单接口申请、释放云资源时,会同步扣除、恢复租户配额,当租户配额不够时,会导致订单实施失败;订单接口只提供资源的申请,延期,变更,释放功能,不提供云服务的查询,操作(如虚拟机的开关机,列表查询等)功能,不能独立使用,需要配合云服务接口使用,也就是说,您需要通过ManageOne订单接口申请,延期,变更,释放云资源,使用云服务接口查询,操作云资源其他云服务的对接指导,以及订单接口的使用说明,请参考:云资源管理对接指导2 订单接口使用场景如第1部分所述,ManageOne订单接口是在云服务接口的基础上封装得到的,包含了ManageOne自身的运营特性,例如产品、服务、区域、配额等,使用上有一定的约束,如果您希望通过调用接口实现对华为云Stack中云资源的生命周期管理,请参考以下几个场景进行评估,符合以下任何一种场景的,建议您选择使用ManageOne订单接口进行对接:如果您公司购买了并部署了华为云Stack产品,您希望通过自动化工具实现云服务资源的自动化发放,从而提高资源申请效率;如果您购买了并部署了华为云Stack产品,公司围绕IT资产的运营运维有一整套流程,您希望已有的流程平台(如ITSM、BOSS等)能够与华为云Stack进行对接,实现现有流程与云服务的整合,在简化服务的申请周期,提高应用上线效率的同时,还能够实现云资源的全流程监控;如果您是云服务提供商,将华为云Stack提供的云服务,按照租户的形式租售给了客户,客户希望实现云服务的自动化发放,需要您提供对接接口;如果您是云服务提供商,希望现有运营平台能够与华为云Stack对接,实现租户的自动化创建,并为每个租户预置指定类型的云资源,租户的日常运维由运维部门通过ManageOne进行运维。如果您购买了多家厂商的云平台,希望通过一套云管理软件进行纳管,建议您直接对接云服务接口进行对接,这样可以屏蔽ManageOne的运营特性,只关注云服务特性,对接起来更加灵活。3 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配华为云Stack 6.5.X,8.X版本4 订单接口对接步骤我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:通过用户名和密码调用鉴权接口获取Token和user_id。(可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。选择需要申请的云服务类型,比如云硬盘的service_type为evs。订购接口还需要product_id,因此通过查询可用产品列表接口获取。根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 6.5.x 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放弹性云服务器的详细步骤5 申请弹性云服务器这里先给出涉及到的接口清单,如下: 序号接口功能URL涉及到的接口文档调用接口使用的域名(样例)1鉴权【POST】/v3/auth/tokens《ManageOne OTenantSecurity服务API参考》iam-apigateway-proxy.demo.com2查询用户关联的project列表【GET】/rest/vdc/v3.0/users/{user_id}/projects《ManageOne 运营面API参考》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 运营面API参考》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 运营面API参考》sc.demo.com5查询云资源池可用分区【GET】/rest/serviceaccess/v3.0/available-zones《ManageOne 运营面API参考》sc.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 运营面API参考》《ManageOne 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 运营面API参考.doc》sc.demo.com8获取镜像列表【GET】/v2/cloudimages《镜像服务(IMS) 8.x API参考(for 华为云Stack 8.x) 01.pdf》ims.sa-fb-1.demo.com9获取可用规格列表【GET】/v1/{project_id}/cloudservers/flavors《弹性云服务器(ECS) 8.x API参考(for 华为云Stack 8.x).pdf》ecs.sa-fb-1.demo.com10获取磁盘类型【GET】/v1.0/resource-tags?resource_type=volume_type&availability_zone={azId}《华为云Stack 8.x 公共组件》ccs.sa-fb-1.demo.com11获取VPC信息【GET】/v1/{project_id}/vpcs《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com12获取子网详情【GET】/v1/{project_id}/subnets?vpc_id={vpc_id}《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com13获取安全组信息【GET】/v2.0/security-groups《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com14获取云服务器组(即亲和性)信息(可选)【GET】/v2.1/{project_id}/os-server-groups《弹性云服务器(ECS) 8.x API参考(for 华为云Stack 8.x).pdf》ecs.sa-fb-1.demo.com15查询企业项目【GET】/v1.0/enterprise-projects《ManageOne 运营面API参考》(8.3.0以上版本可用)sc.demo.com具体接口调用步骤如下:步骤 1 获取token首先需要获得账号所属的租户名称,以及该租户下一个project的Id或者名称,方法如下:①使用租户管理员账号登录ManageOne运营侧②点击右上角的用户图标,切换到“个人设置”页面,如下:然后调用接口获取token,示例如下:URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Content-Type: application/json;charset=UTF-8Accept: application/json;charset=UTF-8Connection: keep-alive请求体:{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "租户名" }, "name": "XXXXXX", "password": "XXXXXX" } } }, "scope": { "project": { "domain": { "name": "租户名" }, "id": "项目Id" } } }}响应消息如下:响应头: X-Subject-Token→MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 响应体: { "token": { "expires_at": "2019-09-09T07:38:55.643000Z", "methods": [ "password" ], "catalog": [], "roles": [ ... ], "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": "xssvdc", "regions": [ { "region_status": "normal", "region_id": "dg-dg-1", "region_name": { "en_us": "东莞", "zh_cn": "东莞" } } ], "level": "1", "role_id": null, "name": "xssvdc", "iam_project_name": "xssvdc", "description": null, "id": "27a008f1b83e4dfdbf1143dd336006df", "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": "normal", "cloud_infra_name": "OpenStack_dg-dg-1", "cloud_infra_type": "FUSION_CLOUD", "azs": [ { "az_status": "normal", "az_name": "华为", "az_id": "az0.dc1" } ], "cloud_infra_id": "FUSION_CLOUD_dg-dg-1" } ], "region_id": "dg-dg-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匹配,不能交叉混用!!!创建ECS前,我们需要选定AZ,后续选择规格,磁盘类型,镜像都需要根据AZ来过滤。步骤4 查询产品列表不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type),常用类型有:调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/products?limit=100&start=1&status=online&service_type=ecs®ion_id={region_id}(region_id取值由步骤3获取) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: {     "total": 1,     "products": [                 {             "product_id": "b507d3d5c88b4b64adf7d87a20cdf655",             "service_type": "ecs",             "create_vdc_id": "all",             "create_user_id": "32cb5a3c9de44bcf9696db98c1db828a",             "icon_id": "defaulticonecs",             "catalog_id": "1",             "region_id": "dg-dg-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": 1585897648000,             "publish_status": "publish",             "deletable_status": "normal",             "is_default": true,             "publish_scope": "[]",             "online_scope": "[{\"vdcName\":\"all\",\"vdcId\":\"all\"}]",             "online_status": "online",             "approval": false,             "price": null,             "resource_pool_id": "",             "project_id": "",             "az_id": "",             "secret_params": null,             "product_type": null         }     ] }响应体中,approval字段值为false的产品表示该产品没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,提交订单后就会实施,对接时建议使用此类产品。步骤 5 ECS配置选型,参考“ECS配置选型”步骤 6 查询VPCURL: https://{vpc对外访问域名}/v1/{project_id}/vpcs 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: {     "vpcs": [         {           "id": "7a172056-73be-4247-9f78-aaa5bed573d0",             "name": "vpc-d0bf",             "cidr": null,             "status": "OK",             "routes": [],           "external_gateway_info": {...},           "service_availability_zones": [...],             "ntp": [],             "expiry": "0",             "op_status": 0,           "project_id": "27a008f1b83e4dfdbf1143dd336006df",             "ntp_v6": []       } ] }此处的id,即为VPC Id步骤7 查询子网信息URL: https://{vpc对外访问域名}/v1/{project_id}/subnets?vpc_id={vpc_id} (vpc_id由上一步查询获得) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: {     "subnets": [         {           "id": "243e425b-daae-43f2-8b35-8803e163b487",           "name": "subnet-5e10",             "description": "",           "cidr": "192.168.10.0/24",           "dnsList": [...],             "status": "ACTIVE",             "external": false,             "routed": true,           "vpc_id": "7a172056-73be-4247-9f78-aaa5bed573d0",           "project_id": "27a008f1b83e4dfdbf1143dd336006df",           "gateway_ip": "...",             "dhcp_enable": true,           "primary_dns": "...",           "secondary_dns": "...",             "host_routes": [],       "allocation_pools": [           {               "start": "192.168.10.1",               "end": "192.168.10.254"           }       ],             "segmentation_id": 299840,           "neutron_subnet_id": "6df75f53-9a47-4c9d-b882-7c36f38c39eb",             "ipv4_enable_multicast": false,             "ipv4_multicast_status": "",             "ip_version": 4,           "neutron_network_id": "243e425b-daae-43f2-8b35-8803e163b487",             "ipv6_enable": false         }     ] }这里我们可以获得子网的Id,即subnet_id的值步骤8 查询安全组信息创建VM时默认打开安全组,以便对VM的进出流量进行防护,这里示例如何查询安全组,如下:URL: https://{vpc对外访问域名}/v2.0/security-groups 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "security_groups": [ { "id": "8f760273-76b0-4bf0-872e-8a229b89934d", "name": "default", "description": "default", "tenant_id": "27a008f1b83e4dfdbf1143dd336006df", "security_group_rules": [ ...... ], "created_at": "2019-06-11T01:53:45", "updated_at": "2019-06-11T01:53:45", "project_id": "27a008f1b83e4dfdbf1143dd336006df" } ] }这里我们可以查到每个安全组的安全组规则,根据虚拟机的网络互通要求选取合适的安全组即可(一般选择名称为default的安全组即可),如果需要对安全组规则进行修改,可在ManageOne界面上操作步骤9 查询亲和性组(可选)如果需要指定虚拟机的亲和性和反亲和性组,还需要指定云服务器组,查询方法如下:URL: https://{ecs对外访问域名}/v2.1/{project_id}/os-server-groups(project_id与获取token使用的一致) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "server_groups": [ { "members": [], "metadata": {}, "id": "3ba519b8-ab42-4893-90d4-021e672c353e", "policies": [ "soft-affinity" ], "name": "SvrGrp-ac02" } ] }步骤10 查询企业项目(可选)如果HCS为8.3.0以上版本,则支持为虚拟机指定企业项目。URL: https://{运营面对外访问域名}/v1.0/enterprise-projects请求方法:GET请求头:Content-Type: application/json; charset=UTF-8Accept: application/json; charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体:{ "total_count": 2, "enterprise_projects": [ { "id": "0", "name": "default", "description": null, "type": "prod", "delete_flag": false, "status": 1, "created_at": null, "updated_at": null, "domain_id": null, "vdc_id": null, "project_id": null, "domain_name": null, "vdc_name": null, "project_name": null, "quota_unit_id": null, "regions": [], "quota_unit_type": null, "vdc_federation": false, "project_federation": false, "eps_federations": [], "hcs_federation": false }, { "id": "459aa5de-0f2e-46c2-a3ca-7006ce929698", "name": "test-eps", "description": "", "type": "prod", "delete_flag": true, "status": 1, "created_at": "2025-02-13T02:40:33Z", "updated_at": "2025-02-13T02:40:33Z", "domain_id": "15488ac7aec547a68d9451c91173c68c", "vdc_id": "d58cc7b4-59a8-49ff-8f0c-0c7dff90b5e9", "project_id": "27a008f1b83e4dfdbf1143dd336006df", "domain_name": "xssvdc", "vdc_name": "xssvdc", "project_name": "xssvdc", "quota_unit_id": null, "regions": [{"region_id": "dg-dg-1","region_status": "normal","region_name":{"zh_cn": "东莞","en_us": "东莞"}}], "quota_unit_type": "DEFAULT", "vdc_federation": false, "project_federation": false, "eps_federations": [], "hcs_federation": false } ]}至此,我们获得了创建弹性云服务器的所有参数,订购参数如下:序号参数名称参考值备注1operate_typeapply申请,固定值apply2project_id2bb0XXXd70dproject_id,准备工作中获取,必选3product_id4c1b27eexxx4c2f产品Id,步骤4拿到,必选4region_idcn-global-1区域id,步骤3拿到,必选5time_zoneGMT+08:00参考当地时区6tenancy30(String类型)有效期限,填写time_zone时区的时间,如"yyyy-MM-dd 23:59:59"。为“0”时,表示不限时长,必选7service_typeecs弹性云服务器,填写选择的service_type,必选8tenantId2bb0XXXd70dproject_id,准备工作中获取,必选9availability_zoneaz1.dc1可用分区id,步骤3拿到,必选10nameecs-7001ECS名称,自定义即可,必选11imageRef 镜像Id,步骤5拿到,必选。12flavorRef 规格Id,步骤5拿到,必选。13root_volume:volumetype ECS系统盘类型,步骤5拿到,必选。14root_volume:size40ECS系统盘大小,自定义,必选。15vpcid4653XXXXcb3799fvpc的Id,步骤6拿到,必选。16nics:subnet_idf6662XXX3a3e310此处需填写子网Id,步骤7拿到,必选。17nics:"binding:profile":disable_security_groupsfalse是否关闭安全组,默认打开,必选。18security_groups:id478eXXX76b47d2安全组Id,步骤8拿到,必选。19count1需要创建的弹性云服务器个数,自定义即可,最大支持一次性创建20台,必选20extendparam:regionIDcn-global-1区域id,步骤3拿到,必选21metadata:op_svc_userid4885cxxxx97fb85用户的Id,步骤1拿到,必选22metadata:__instance_vwatchdogfalse是否开启软件狗(x86)(软件狗为虚拟机提供一种心跳检测机制,主要用于监视虚拟机内部系统的健康状况),如需开启软件狗,请确保所选镜像已安装符合标准IPMI软件狗的喂狗程序,否则可能导致虚拟机反复重启。开启:true,关闭:false。非必选。23metadata:hw_watchdog_actiondisabled是否开启软件狗(ARM),软件狗为云服务器提供一种心跳检测机制,主要用于监控虚拟机内部系统的健康状况。 说明: reset 表示打开软件狗,故障后重启并发送告警; none 表示打开软件狗,故障后仅告警,不会重启; disabled 表示关闭软件狗。非必选。24metadata:_ha_policy_typeclose是否启用ECS HA(启用HA功能后,如果云服务器或者云服务器所在主机故障,系统会在其他主机上重建云服务器,保证业务连续性)。该能力受管理员配置的全局HA策略限制,只有在管理员配置了全局HA策略后,基于云主机的HA策略才会生效。开启:remote_rebuild,关闭:close。非必选。25power_ontrue创建出来的虚拟机状态。true为开机状态,false为关机。默认为true。非必选。26tags["key1.value1","key2.value2"]标签的格式为“key.value”。其中,key的长度不超过36个字符,value的长度不超过43个字符。 标签命名时,需满足如下要求: 1.标签的key值只能包含大写字母(A~Z)、小写字母(a~z)、数字(0-9)、下划线()、中划线(-)以及中文字符。 2.标签的value值只能包含大写字母(A~Z)、小写字母(a~z)、数字(0-9)、下划线()、中划线(-)、小数点(.)以及中文字符。值可以为空,键为必填:"tags": []。说明:1.创建弹性云服务器时,一台弹性云服务器最多可以添加10个标签。2.若配置了__single_storage字段时,表示云服务器的系统盘和数据盘位于同一套后端存储。 例如"tags" : ["__single_storage"]27display 用于ManageOne页面显示订购虚拟机的参数,根据订购接口的其他参数填写对应的值,值可以置空,但为了增强订单的可读性,强烈建议填写该参数28user_dataIyEvYmluXXXXL2Jhc必选参数(键必须有,值可为空),仅当选择的镜像支持cloud-init时,可以使用该参数注入用户数据,或者修改虚拟机密码,构造方法参考本表后续说明。29secret_params 必选参数(键必须有,值可为空);1、安装了cloud-init的linux虚拟机可以参考以下格式填写密码:"secret_params": "{\"metadata\":{},\"admin_password\":\"123456\"}"2、安装了cloudbase-init的windows虚拟机可以参考以下格式填写密码:"secret_params": "{\"metadata\":{\"admin_pass\":\"123456\"}}"3、若选择密钥对登陆,需要填写正确的密钥对名称,密钥对查询方法,参考下文keypair管理章节。采用密钥对登录示例:{\"metadata\":{},\"key_name\":\"KeyPair-a182\"}30enterprise_project_id 可选参数,8.3.0版本新增参数,资源所属的企业项目/资源组/EPS。若未填写则归属默认企业项目。从步骤10获得。 说明:user_data参数的作用主要是用户文件注入或者实现修改用户密码的功能,所有注入的内容需要使用Base64编码,下面分别给出几种常用的使用场景和示例:注入用户数据(也可用于修改用户密码)仅适用于支持cloud-init的linux镜像,需要对脚本内容进行base64编码处理,base64编码处理可以使用apache的commons-codec包中的方法(在org.apache.commons.codec.binary.Base64类中),样例如下:#cloud-confighostname: my1.cloudman.ccmanage_etc_hosts: true说明如下:cloud-init 只会读取以 #cloud-config 开头的数据,所以这一行一定要写对。hostname: my1.cloudman.cc 告诉 cloud-init 将 hostname 设置为 my1.cloudman.cc。manage_etc_hosts: true 告诉 cloud-init 更新 /etc/hosts 文件。修改root用户密码(请优先使用secret_params传入密码参数)仅适用于支持cloud-init的linux镜像,实现原理是通过在创建ECS时注入一段脚本,来修改root,编写格式如下:修改密码脚本格式样例(base64编码前样例)备注#cloud-configruncmd:- echo 'root: {cryptedPWD}' | chpasswd -e{cryptedPWD}即用户设置的密码的加密值,加密方法为base64_sha512,可以使用apache的commons-codec包中的org.apache.commons.codec.digest.Sha2Crypt.sha512Crypt方法进行加密处理构造好脚本内容后,需要对脚本内容进行base64编码处理,base64编码处理可以使用apache的commons-codec包中的方法(在org.apache.commons.codec.binary.Base64类中),示例如下:String pwdShell = "#cloud-config\n"+"\nruncmd:\n"+"  - echo 'root:$6$nngqph$8MBO7oQ4S6e5YuIwS6omVLiPGxmEzUqXyLxOQ6vKeFy6F0jCdkRAcvDjU8K3h/6ww7SNL0' | chpasswd -e\n";String desc = Base64.encodeBase64String((pwdShell .getBytes()));修改windows虚拟机密码(请优先使用secret_params传入密码参数)仅适用于支持cloud-init的windows镜像,需要对脚本内容进行base64编码处理,base64编码处理可以使用apache的commons-codec包中的方法(在org.apache.commons.codec.binary.Base64类中),样例如下:"rem cmd\nnet user {customUser}  {customPdw} /add\nnet localgroup administrators {customUser} /add"{customUser}、{customPdw}根据实际数据填写步骤11 创建订单,申请弹性云服务器订单接口中的params参数说明,请参考《ManageOne 6.5.x/8.x 云服务Params参数说明》URL: https://{ManageOne运营侧API对外域名}/rest/subscription/v3.0/subscriptions请求方法:POST请求头:Content-Type: application/json; charset=UTF-8Accept: application/json; charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:{ "subscriptions": [ { "operate_type": "apply", "project_id": "27a008f1b83e4dfdbf1143dd336006df", "product_id": "71347fb04fed43b5bb1eea9527f845ae", "region_id": "dg-tky-1", "time_zone": "GMT+08:00", "tenancy": "365", "service_type": "ecs", "params": "{\"tenantId\":\"27a008f1b83e4dfdbf1143dd336006df\",\"availability_zone\":\"az0.dc0\",\"name\":\"ecs-e960\",\"imageRef\":\"833c9fe8-d27d-4238-a7e3-e43a683159a8\",\"flavorRef\":\"c89d4da4-fdad-4de7-81ba-42ef89ec4ca8\",\"config_drive\":false,\"root_volume\":{\"volumetype\":\"IPSAN\",\"size\":20,\"extendparam\":{\"resourceSpecCode\":\"\",\"resourceType\":\"\"}},\"data_volumes\":[],\"vpcid\":\"7a172056-73be-4247-9f78-aaa5bed573d0\",\"nics\":[{\"subnet_id\":\"243e425b-daae-43f2-8b35-8803e163b487\",\"ip_address\":\"\",\"ip_address_v6\":\"\",\"nictype\":\"\",\"physical_network\":\"\",\"extra_dhcp_opts\":[],\"binding:profile\":{\"disable_security_groups\":false,\"availability_zone\":\"az0.dc0\"}}],\"security_groups\":[{\"id\":\"8f760273-76b0-4bf0-872e-8a229b89934d\"}],\"personality\":[],\"count\":1,\"extendparam\":{\"chargingMode\":0,\"regionID\":\"dg-tky-1\"},\"metadata\":{\"op_svc_userid\":\"b54310fb838b4f8ebf1e9d23bf9691d5\",\"__instance_vwatchdog\":\"false\",\"_ha_policy_type\":\"remote_rebuild\"},\"tags\":[],\"display\":{\"zh_CN\":[{\"label\":\"区域\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"名称\",\"type\":\"string\",\"value\":\"ecs-e960\"},{\"label\":\"可用分区\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"规格\",\"type\":\"string\",\"value\":\"1U1G\"},{\"label\":\"镜像\",\"type\":\"string\",\"value\":\"EulerOS\"},{\"label\":\"系统盘\",\"type\":\"string\",\"value\":\"SATA,20GB\"}],\"en_US\":[{\"label\":\"Region\",\"type\":\"string\",\"value\":\"东莞\"},{\"label\":\"Name\",\"type\":\"string\",\"value\":\"ecs-e960\"},{\"label\":\"AZ\",\"type\":\"string\",\"value\":\"华为\"},{\"label\":\"Flavor\",\"type\":\"string\",\"value\":\"1U1G\"},{\"label\":\"Image\",\"type\":\"string\",\"value\":\"EulerOS\"},{\"label\":\"System Disk\",\"type\":\"string\",\"value\":\"SATA,20GB\"}]},\"extra\":{\"devices\":[{\"device_type\":\"cdrom\"}]},\"enterprise_project_id\":\"459aa5de-0f2e-46c2-a3ca-7006ce929698\"}", "secret_params": "{\"metadata\":{},\"key_name\":\"\"}" } ]}响应体:{ "purchases": [ { "subscription_id": "20190914104422606990067" } ], "expected_total": 0, "error_details": null}subscription_id即为订单ID步骤12 查询订单详情,确认订单实施状态订单提交成功后,需要定时轮询订单状态,直到订单状态(status字段)为成功URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}(order_id由上一步响应体获得) 请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体: { "order_id": "20190914104422606990067", "parents_id": null, "type": "apply", "service_type": "vpc", "params": "{...}", "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 }补充说明:弹性云服务器的查询、电源管理、磁盘挂载卸载、弹性IP的绑定解绑等操作均需要调用云服务的接口,具体接口参考文档《华为云Stack API接口参考.chm》中“计算”-->“ECS”章节。ECS的申请、删除、变更需要使用ManageOne订单接口,不可将ManageOne订单接口与ECS接口混用(如:使用ManageOne订单接口创建资源,使用ECS接口删除资源),否则会导致ManageOne上数据展示异常步骤13 查询订单中的资源列表URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}/resources(order_id由步骤10响应体获得)请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体:[ { "id": "66f4c13c-e6dd-43a1-9874-439d330ce8f7", "order_id": "20190914104422606990067", "resource_id": "0e13a579-5dd3-4e97-a22d-86149910ab20", "resource_name": "ecs-8d6c", "resource_type": "ecs", "cloud_infra_id": null, "extend_params": null, "region_id": "dg-tky-1", "az_id": null, "project_id": "c7c6a276578e411ab2ef2d999d9ef59e", "record_time": "2019-06-11 01:53:43", "order_type": "apply", "result": "successed", "error_code": null, "zh_message": null, "en_message": null, "message": null, "expired_time": "0" }]如何使用订单接口删除弹性云服务器,参考“如何使用订单接口删除弹性云服务器”
  • [ManageOne二...] 【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作
    1 说明如果您需要通过调用华为云Stack北向接口,实现对租户、用户、虚拟资源的管理,您需要与华为云Stack 中的ManageOne运营侧(提供鉴权,用户,租户管理)和云服务(提供云资源管理)进行对接,正式对接前,您可以参考本帖获取需要的账号、IP等信息,具体准备工作如下:A、获取接口文档ManageOne北向API参考文档各版本汇总获取:cid:link_1从以上链接下载到对应版本的文档后,可得到以下压缩包:(以8.3.1版本为例)压缩包中各文件解释如下: ManageOne x.x.x API参考.zip:ManageOne对外开放的API接口参考文档。 华为云Stack x.x.x 云服务API参考:HCS云服务对外开放的API接口的参考文档,包含云服务文档。8.3.1以前版本仅包含云服务的目录,具体各云服务的API文档需要从文档内的蓝色链接获取。ManageOne x.x.x API参考.zip压缩包中包含以下文档: 压缩包中开发需要使用的文档解释如下:ManageOne x.x.x 运营面API参考.docx:提供运营侧接口列表,支持VDC,产品,订购,流程审批,计量计价等功能。 ManageOne x.x.x 云服务Params参数说明.docx:配合《ManageOne x.x.x 运营面API参考》使用,介绍订购接口中params参数的使用说明。 B、获取网关地址、端口号及域名1)获取网关IP:获取环境LLD(从华为Stack安装部署工具中导出的环境详情,联系华为工程师获取,如果存在多个region,则应有多个LLD导出表。)打开主region的LLD表,选择“2.1 工具生成的IP参数”页签,找到“AGW-LB-Float-IP”节点的规划值,即为API Gateway的IP。如下图,AGW-LB-Float-IP的值为160.133.4.130。选择“1.2基本参数”页签,找到“external_global_domain_name”节点的规划值。如下图,external_global_domain_name的值为manageone.cus.com。选择“1.2基本参数”页签,找到“region0_id”节点的规划值。如下图,region0_id的值为dg-dg-1。打开需要调用接口的系统的hosts文件(Windows路径为C:\Windows\System32\drivers\etc\hosts,linux路径为/etc/hosts),在其中添加如下内容。{AGW-LB-Float-IP}   iam-apigateway-proxy.{external_global_domain_name}{AGW-LB-Float-IP}   sc.{external_global_domain_name}{AGW-LB-Float-IP}   oc.{region0_id}.{external_global_domain_name}                                   #6.5.X版本为oc.{external_global_domain_name}{AGW-LB-Float-IP}   vpc.{region0_id}.{external_global_domain_name}{AGW-LB-Float-IP}   ecs.{region0_id}.{external_global_domain_name{AGW-LB-Float-IP}   ims.{region0_id}.{external_global_domain_name}{AGW-LB-Float-IP}   evs.{region0_id}.{external_global_domain_name}{AGW-LB-Float-IP}   ccs.{region0_id}.{external_global_domain_name}我们上面获取到了AGW-LB-Float-IP的值为160.133.4.130,external_global_domain_name的值为manageone.cus.com,region0_id的值为dg-dg-1。将相应的值填入上面的模板中,得到hosts如下:160.133.4.130 iam-apigateway-proxy.manageone.cus.com160.133.4.130 sc.manageone.cus.com160.133.4.130 oc.dg-dg-1.manageone.cus.com                         #6.5.X版本为oc.manageone.cus.com160.133.4.130 vpc.dg-dg-1.manageone.cus.com160.133.4.130 ecs.dg-dg-1.manageone.cus.com160.133.4.130 ims.dg-dg-1.manageone.cus.com160.133.4.130 evs.dg-dg-1.manageone.cus.com160.133.4.130 ccs.dg-dg-1.manageone.cus.com(可选)如果存在从region,则需要打开从region的LLD文件,重复步骤2~5。配置好的hosts示例如下:160.133.5.170 vpc.xa-xa-1.manageone.cus.com160.133.5.170 ecs.xa-xa-1.manageone.cus.com160.133.5.170 ims.xa-xa-1.manageone.cus.com160.133.5.170 evs.xa-xa-1.manageone.cus.com160.133.5.170 ccs.xa-xa-1.manageone.cus.com(注:MangeOne仅部署在主region上,从region不包含ManageOne,配置的域名前缀无需再包含"iam-apigateway-proxy"、“sc”、"oc"。)C、网络打通要求如果现网中,第三方系统与华为云Stack 系统中间有防火墙隔离,需要做防火墙策略,则网络打通要求如下: 访问IP 被访问IP 被访问端口 访问诉求 备注 第三方系统 API Gateway浮动IP 443 单向,第三方系统-->API Gateway浮动IP 防火墙策略放通后,如果要确认是否成功,可通过telnet命令进行测试,如下(此处以80端口为例,请根据实际环境修改):D、获取对接账号进行正式对接前,需要获取对接账户,请联系华为现场工程师,获取一个ManageOne运营侧租户管理员(即一级VDC管理员)账号,且该租户的配额是不限的。获取到账号后,还需要获得该租户管理员所属租户的名称,以及该租户下一个project的Id或者名称,方法如下:使用租户管理员账号登录ManageOne运营侧(ManageOne运营侧的访问地址请联系现场华为工程师获取)点击右上角的用户图标,切换到“个人设置”页面,如下:8.3.1及以上版本,参考此链接创建用户:cid:link_0E、获取对接所需的SSL证书通常情况,调试接口可通过配置curl或postman忽略ssl证书验证,无需证书。在正式对接场景下需要配置SSL证书,获取证书的方法请参考此链接:cid:link_2由于不通编程语言、不同http客户端配置证书的方法均不相同,相关配置方法需用户自行查找,本文不再介绍。 附:服务、域名,文档关系说明注意:北向接口的域名与ManageOne页面使用的域名不相同,严禁使用“auth.xxx.xxx.xxx”等非标准方案的域名进行接口调用,非标方案无法确保升级兼容。更多云服务的域名请参考服务对应的API文档服务类型使用域名(样例)接口调用示例(样例)对应接口文档(以8.x接口文档为例)弹性云服务器(ECS)ecs.sa-fb-1.demo.comhttps://ecs.sa-fb-1.demo.com/v2/{tenant_id}/servers弹性云服务器(ECS) 8.x API参考(for 华为云Stack 8.x)裸金属服务(BMS)bms.sa-fb-1.demo.comhttps://bms.sa-fb-1.demo.com/v1/{project_id}/baremetalservers裸金属服务器(BMS) 8.x API参考(for 华为云Stack 8.x)镜像服务(IMS)ims.sa-fb-1.demo.comhttps://ims.sa-fb-1.demo.com/v2/images镜像服务(IMS) 8.x API参考(for 华为云Stack 8.x)弹性伸缩服务(AS)as.sa-fb-1.demo.comhttps://as.sa-fb-1.demo.com/autoscaling-api/v1/{tenant_id}/scaling_configuration弹性伸缩(AS) 8.x API参考(for 华为云Stack 8.x)云磁盘(EVS)evs.sa-fb-1.demo.comhttps://evs.sa-fb-1.demo.com/v2/{tenant_id}/volumes云硬盘(EVS) 8.x API参考 (for 华为云Stack 8.x)虚拟私有云(VPC)vpc.sa-fb-1.demo.comhttps://vpc.sa-fb-1.demo.com/v2.0/networks虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x)弹性IP(EIP)eip.sa-fb-1.demo.comhttps://eip.sa-fb-1.demo.com/v2.0/floatingips弹性IP(EIP) 8.x API参考(for 华为云Stack 8.x)弹性负载均衡(ELB)vpc.sa-fb-1.demo.comhttps://vpc.sa-fb-1.demo.com/v2.0/lbaas/loadbalancers弹性负载均衡(ELB) 8.x API参考(for 华为云Stack 8.x)网络ACl(虚拟防火墙、VFW)acl.sa-fb-1.demo.comhttps://acl.sa-fb-1.demo.com/v2.0/fwaas/firewall_policies网络ACL(Network ACL) 8.x API参考(for 华为云Stack 8.x)身份认证服务(IAM)iam-apigateway-proxy.demo.comhttps://iam-apigateway-proxy.demo.com/v3/auth/tokensManageOne 8.x OTenantSecurity服务API参考运营管理服务(ManageOne运营面)sc.demo.comhttps://sc.demo.com/rest/vdc/v3.0/usersManageOne 8.x 运营面API参考云配置服务(CCS)ccs.sa-fb-1.demo.comhttps://ccs.sa-fb-1.demo.com/v1.0/resource-tags华为云Stack 8.x API接口参考-->公共组件-->CCS
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评----by 清平乐
    致小助手:   非常抱歉,年底工作上的事情太多,竟没能在任务截止时间之前提交报告;   本着有始有终的态度,还是在今天周六完成了报告;   报告如附件所示,请参考!
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-By 云宝
    详情见附件~
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-By Justin001
    本次体验报告烦请查看附件,欢迎大家指出不足群昵称:Justin Chen账号:Justin001
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-wsw
    总体来说,整个功能描述还是比较清晰的,只是在一些细节的地方还有待完善。界面的设计上,体验卡中已经说明;说明文档也很详细,只是建议采用比较通用的方式去解决问题,比如,Postman 应用,如虚拟机中使用的方式;可能是因为浏览器兼容性的问题,在使用沙箱系统的过程中,遇到了很多的问题,尤其是Safari浏览器登陆超时,不能登陆的问题;虚拟环境会掉线的问题;姓名:世伟群昵称:世伟
  • [产品体验官] 体验官有奖体验第20期 iMasterNCE-Campus基于开发者社区云端开放API体验测评报告(四度空间)
    华为云体验官呢称:四度空间        华为云账号:dengxues 真实姓名:邓雪松
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测-by那年夏天
    体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测
  • [产品体验官] iMaster NCE-Campus基于开发者社区云端开放API体验测评任务卡——Tong
    姓名:佟鑫群昵称:Tong
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测 by淳
    群内昵称:淳华为云账号:ghc123456
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-By 韩根
    不好意思,没完成 
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-By 武汉窵禠
    详情请参见附件,欢迎各位大佬指正。
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus基于开发者社区云端开放API体验测评-By Clsr-上海-龙田
    iMaster NCE-Campus基于开发者社区云端开放API体验测评-By Clsr-上海-龙田
  • [产品体验官] 体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测 - by suse-dev
    体验官有奖体验第20期 | iMaster NCE-Campus云端开放API体验及评测任务卡如附件,如果不同意见欢迎交流。论坛名称: 浪荡小公子华为云帐号:suse-dev体验官群昵称:xiaoyu-北京
总条数:1432 到第
上滑加载中