-
在企业级 IT 架构中,身份认证与授权的统一管理是保障系统安全和提升运维效率的关键环节。Keycloak 作为开源的身份和访问管理解决方案,具备强大的身份联邦能力;华为云 Stack HCS(以下简称 HCS)则为企业提供了稳定、安全的云基础设施服务。本文将详细介绍如何基于 SAML(Security Assertion Markup Language,安全断言标记语言)协议,实现 Keycloak 与 HCS 的身份联邦配置,让用户能够通过 Keycloak 账号一键登录 HCS 平台,实现统一身份认证。一、前期准备在进行联邦配置前,需完成软硬件环境搭建、账号权限准备及必要文件获取,确保后续配置流程顺利进行。1.1 环境与软件准备类别具体要求说明Keycloak 环境Keycloak 18.0.0 及以上版本推荐使用 Docker 容器部署或独立服务器部署,确保服务可被 HCS 平台访问(网络互通)。示例部署地址:https://keycloak.example.com:8443(建议配置 HTTPS,保障数据传输安全)。HCS 环境HCS 8.5.1 版本需确保 HCS 的 IAM(Identity and Access Management)服务正常运行,且管理员具备 “身份提供商管理” 权限。HCS 控制台地址:https://console.hcs.example.com。客户端工具浏览器(Chrome/Firefox 最新版)、文本编辑器(Notepad++/VS Code)、证书管理工具(OpenSSL)浏览器用于访问 Keycloak 和 HCS 控制台;文本编辑器用于处理 SAML 元数据文件;OpenSSL 用于生成或验证证书(若需自定义证书)。网络环境Keycloak 服务器与 HCS 平台网络互通需开放 Keycloak 的 HTTPS 端口(默认 443 或自定义端口,如 8443)和 HCS IAM 服务端口(默认 443),避免防火墙拦截。1.2 账号与权限准备Keycloak 账号:需拥有 Keycloak 的 “管理员” 权限(如admin角色),用于创建 Realm(领域)、客户端(Client)及用户。HCS 账号:需拥有 HCS 的 “IAM 管理员” 或 “系统管理员” 权限,用于在 HCS 中配置身份提供商(IdP)、关联用户组及授权。1.3 必要文件与信息收集Keycloak 元数据文件:后续需将 Keycloak 作为 SAML IdP,向 HCS 提供元数据(包含 IdP 的实体 ID、单点登录地址、证书等信息),可提前获取或后续在 Keycloak 配置中生成。HCS 服务提供商(SP)元数据信息:HCS 作为 SAML SP,需向 Keycloak 提供 SP 的实体 ID、断言消费者服务地址(ACS URL),可从 HCS IAM 控制台获取(后续配置步骤会详细说明)。证书文件(可选):若需自定义 SAML 断言签名证书,可提前使用 OpenSSL 生成密钥对(私钥用于 Keycloak 签名断言,公钥提供给 HCS 验证签名);若使用 Keycloak 默认证书,可直接在 Keycloak 配置中导出。二、详细配置步骤配置流程分为两部分:Keycloak 端配置(作为 SAML IdP) 和 HCS 端配置(作为 SAML SP),需确保两端参数一致,避免协议交互失败。2.1 Keycloak 端配置(SAML IdP 配置)步骤 1:创建 Realm(领域)Realm 是 Keycloak 中隔离身份数据的逻辑单元,建议为 HCS 联邦场景创建独立 Realm,避免与其他业务混淆。访问 Keycloak 管理员控制台,使用管理员账号登录。在左侧导航栏点击【Master】下拉菜单,选择【Add Realm】。填写 Realm 信息:Realm name:输入自定义名称(如HCS-Federation),需与后续 HCS 配置中的 IdP 名称对应。Enabled:勾选 “ON”,启用该 Realm。点击【Create】,完成 Realm 创建,页面自动切换到新创建的 Realm(顶部显示HCS-Federation)。步骤 2:配置 SAML IdP 元数据与证书Keycloak 默认会为 Realm 生成 SAML IdP 元数据,需确认元数据中的关键信息(如实体 ID、单点登录地址),并导出公钥证书供 HCS 使用。在 Realm 左侧导航栏,点击【Realm Settings】→【Endpoints】→【SAML 2.0 Identity Provider Metadata】。点击链接,浏览器会下载或显示 Keycloak 的 SAML IdP 元数据 XML 文件,记录以下关键信息(后续 HCS 配置需使用):EntityID:(IdP 的唯一标识。SingleSignOnService Location:HCS 发起 SAML 登录时的跳转地址。导出 IdP 公钥证书:在【Realm Settings】→【Keys】→【Active】标签页,找到 “Algorithm” 为RS256的 “Key Type”(默认用于 SAML 签名)。点击该密钥行的【Certificate】按钮,复制证书内容(包含-----BEGIN CERTIFICATE-----和-----END CERTIFICATE-----),保存为keycloak-idp-cert.pem文件(后续 HCS 配置需上传)。步骤 3:创建 HCS 对应的 SAML 客户端(Client)客户端代表与 Keycloak 交互的应用(此处为 HCS),需配置 HCS 作为 SAML SP 的相关信息,确保 Keycloak 能正确接收和处理 HCS 的 SAML 请求。在 Realm 左侧导航栏,点击【Clients】→【Create】。填写客户端基本信息:Client Type:选择SAML(关键,需与协议匹配)。Client ID:输入 HCS 的 SP 实体 ID(后续从 HCS 获取,需要使用管理员登录后再集成配置中创建并获取)。Name:输入自定义名称(如HCS-SP,便于识别)。点击【Save】,进入客户端详细配置页面,按以下要求配置关键参数:参数分类具体参数配置值说明基本配置EnabledON启用该客户端 Include AuthnStatementON确保 SAML 断言包含认证语句 Signature AlgorithmRSA_SHA256签名算法(需与 HCS 一致) SAML Assertion ID Generatororg.keycloak.saml.DefaultSAMLAssertionIDGenerator默认即可客户端 SAML 设置Assertion Consumer Service URL从 HCS 获取的 ACS URL(格式如https://console.hcs.example.com/iam/saml/acs)HCS 接收 SAML 断言的地址,需精确匹配 Single Logout Service URL可选(若需支持单点登出,填写 HCS 的 SLO URL)暂不配置可后续补充 Name ID Formaturn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress用户名格式(需与 HCS 用户标识字段一致,此处以邮箱为例) Root URLHCS 控制台根地址(如https://console.hcs.example.com)可选,用于自动填充其他 URL密钥配置Sign AssertionsON启用断言签名(保障断言完整性,HCS 会验证签名) Sign RequestsOFFHCS 作为 SP 发起请求时通常自行签名,此处关闭 Encrypt AssertionsOFF暂不启用加密(如需加密,需额外配置密钥,复杂度较高)配置完成后,点击【Save】。步骤 4:创建 Keycloak 用户与用户组(可选,也可使用现有用户)需在 Keycloak 中创建用户,后续用于登录 HCS。若需实现权限映射(如 Keycloak 用户组对应 HCS 用户组),可创建用户组并关联用户。创建用户:左侧导航栏【Users】→【Add user】,填写Username(如hcs-test-user)、Email(需与 Name ID Format 匹配,),勾选【Email Verified】(避免验证邮件),点击【Save】。进入用户详情页的【Credentials】标签页,点击【Set Password】,设置临时密码(首次登录需修改),取消【Temporary】勾选(可选,避免强制改密),点击【Save】。创建用户组(可选):左侧导航栏【Groups】→【New】,输入组名称(如HCS-Admin-Group,对应 HCS 的管理员组),点击【Save】。在【Users】中找到已创建的用户,进入【Groups】标签页,点击【Join Group】,选择创建的用户组,完成关联。步骤 5:配置 SAML 属性映射(关键)Keycloak 需在 SAML 断言中向 HCS 传递用户标识(如邮箱、用户名)及权限信息(如用户组),需通过属性映射配置断言中的字段。在【Clients】中找到已创建的HCS-SP客户端,进入【Mappers】标签页,点击【Create】。配置用户标识映射(以邮箱为例):Name:输入Email Attribute(自定义名称)。Mapper Type:选择User Property。Property:选择email(Keycloak 用户的邮箱属性)。SAML Attribute Name:输入Email(HCS 期望接收的用户标识字段名,需与 HCS 配置一致)。SAML Attribute NameFormat:选择Basic。点击【Save】。配置用户组映射(可选,实现权限同步):再次点击【Create】,【Mapper Type】选择Group List。Name:输入Group Attribute。SAML Attribute Name:输入Groups(HCS 接收用户组的字段名)。Full Group Path:选择OFF(仅传递组名称,不包含路径)。点击【Save】。2.2 HCS 端配置(SAML SP 配置)HCS 作为 SAML SP,需添加 Keycloak 作为身份提供商(IdP),并配置断言验证、用户映射及权限授权,确保能正确接收和解析 Keycloak 的 SAML 断言。步骤 1:获取 HCS 的 SP 元数据信息HCS 的 SP 元数据(实体 ID、ACS URL)需提供给 Keycloak(已在 2.1.3 步骤中使用),此处需先确认该信息:登录 HCS 控制台(需要使用管理员登录),进入集成商管理。选择身份提供商类型为【SAML IdP】,页面会显示 HCS 的 SP 信息:SP 实体 ID:需与 Keycloak 客户端的 Client ID 一致。ACS URL:(需与 Keycloak 客户端的 Assertion Consumer Service URL 一致)。记录上述信息,若 Keycloak 已配置,需核对是否一致(不一致会导致登录失败)。步骤 2:添加 Keycloak 作为 SAML IdP在 HCS【身份提供商】页面,点击【新建身份提供商】→【SAML IdP】,进入配置页面。填写基本信息:身份提供商名称:输入自定义名称(如Keycloak-IdP,便于用户登录时选择)。状态:选择【启用】。配置 SAML IdP 元数据(二选一,推荐方式 1):方式 1:上传元数据文件:点击【上传元数据文件】,选择之前从 Keycloak 下载的 IdP 元数据 XML 文件,系统会自动解析出 EntityID、单点登录地址、证书等信息。方式 2:手动输入元数据:若无法上传文件,手动填写:IdP 实体 ID:从 Keycloak 元数据中获取的 EntityID。单点登录地址:Keycloak 的 SingleSignOnService Location。IdP 证书:复制keycloak-idp-cert.pem文件中的证书内容(包含 BEGIN 和 END 行),粘贴到文本框中。配置断言验证与用户映射:断言签名验证:选择【启用】(必须,确保断言来自可信 IdP),签名证书自动从元数据中获取(或手动上传 Keycloak 公钥)。用户标识字段:选择【Email】(需与 Keycloak 的 Name ID Format 及属性映射一致,此处以邮箱为例),表示 HCS 通过 SAML 断言中的Email字段识别用户。用户创建策略:选择【自动创建】(当 Keycloak 用户首次登录 HCS 时,HCS 自动创建对应的本地用户,无需手动预创建)。配置用户组映射(可选,实现权限同步):勾选【启用用户组映射】。用户组字段名:输入Groups(需与 Keycloak 属性映射中的 SAML Attribute Name 一致)。映射规则:点击【添加映射规则】,设置 Keycloak 用户组与 HCS 用户组的对应关系,例如:Keycloak 组名:HCS-Admin-Group → HCS 组名:admin(HCS 内置管理员组)。Keycloak 组名:HCS-User-Group → HCS 组名:common_user(HCS 普通用户组)。点击【确定】,完成 Keycloak IdP 的添加。步骤 3:配置 HCS 登录策略(可选)可配置 HCS 登录页面是否显示 Keycloak IdP 的登录入口,方便用户选择登录方式:在 HCS【统一身份认证】→【登录设置】→【身份提供商登录】。勾选【显示身份提供商登录入口】,并将Keycloak-IdP添加到 “可选身份提供商” 列表中。点击【保存】,后续用户访问 HCS 登录页时,将看到 “密码登录” 和 “Keycloak-IdP 登录” 两个选项。三、最终验证配置完成后,需通过实际登录流程验证联邦认证是否生效,确保 Keycloak 用户能成功登录 HCS 并获得正确权限。3.1 验证流程(用户视角)访问 HCS 控制台登录页,若已配置登录策略,将显示两个登录选项:【密码登录】和【Keycloak-IdP 登录】。点击【Keycloak-IdP 登录】,系统自动跳转到 Keycloak 的登录页面。在 Keycloak 登录页,输入之前创建的测试用户账号(如hcs-test-user)和密码,点击【登录】。Keycloak 验证账号密码通过后,生成 SAML 断言(包含用户邮箱、用户组等信息),并自动跳转到 HCS 的 ACS URL。HCS 接收 SAML 断言,验证签名(通过 Keycloak 公钥),解析用户信息:若用户为首次登录,HCS 自动创建本地用户(用户名与 Keycloak 的 Email 一致)。若配置了用户组映射,HCS 将用户添加到对应的本地用户组(如admin组)。 6.验证通过后,用户成功进入 HCS 控制台,可根据关联的用户组权限访问对应的云资源(如 ECS)结尾给大家推荐佳杰云星的运营平台华为云Stack社区版本,一站式全栈云运营平台,灵活计费与多租户管理,畅享公有云级体验支持40+云产品,轻松管理华为云Stack(HCS)
-
注:本文适用于8.3.1及更高版本,在此之前的版本请参考链接。一、简介ManageOne具备远程通知的能力。通过远程通知,运维人员可以设置短信网关、短信猫或邮箱服务器的通信参数,使系统具备自动和手动发送短消息和邮件的能力。同时,通过远程通知,运维人员还可以设置短消息或邮件所要发送的目标用户,内容模板等。至8.5.1版本,ManageOne有如下功能支持远程通知:类别产品功能邮件通知短消息通知运维面(OC) 发送告警支持支持发送周期任务报表支持不支持双因素认证支持支持运营面(SC) VDC自运维订阅通知支持支持运营面找回密码支持支持发送VDC租户计量信息支持不支持发送订单处理信息支持支持双因素认证支持支持 ManageOne远程通知支持的对接协议如下:功能类别协议邮箱SMTP短信SMPP3_3、SMPP3_4、CMPP2_x、CMPP3_x、SMGP、SGIP、CNGP、HTTP、HTTPS注:HCS 8.3.0及以上版本短信支持HTTP、HTTPS。若需要对接的第三方邮箱、短信系统不支持上述协议,则需要开发适配程序进行对接,方案如下图所示:方案说明:1. 用户需要开发第三方适配器(Adapter)与OC进行对接,适配器内启动一个短信或邮箱服务器,监听从OC发送的信息,OC发送的信息包含①消息的接收人(手机号或邮箱)②消息体③消息发送人(系统中配置)。这里重点关注消息接收人的手机号或邮箱,以及消息体,消息发送人可不关注。当适配器接收到消息时,将其直接转发到第三方系统即可。2. SC本身不具备消息通知能力,其消息通知能力依赖OC实现。因此,远程通知仅需要在OC上配置,且防火墙只需要放通OC->Adapter的网络策略。网络策略:源端目的端协议策略ManageOne-Deploy01、02AdapterTCP/端口参考页面配置放通Adapter第三方系统由第三方系统决定放通注:ManageOne-Deploy01、02节点的IP地址可通过FCD安装部署工具的导出表(LLD)获取,具体请联系华为现场工程师。 短信对接提供示例程序(Demo):cid:link_2本文以短信对接为例,结合Demo,介绍ManageOne运维面和运营面如何配置用户登录的双因素认证,具体操作将在第二、三章中介绍。二、ManageOne主门户配置双因素认证步骤1:配置远程通知使用管理员账号登录ManageOne运维面,进入“系统管理 > 系统设置 > 远程通知”。按需求配置“短消息设置”(短信)或“邮箱设置”。示例如下:①短消息设置(短信):对接参考:cid:link_2 ②邮箱设置:使用SMTP协议对接此处我们以短信对接为例,使用链接 给出的Demo对接到ManageOne1)首先下载示例代码:cid:link_02)按需修改默认配置信息,然后运行启动Demo程序。3)使用管理员账号登录ManageOne运维面,进入“系统管理 > 系统设置 > 远程通知 > 短消息设置 > 短信网关设置”。4)在“短信网关设置”界面设置服务器地址、用户名、密码等相关参数,Demo默认的“短消息编码协议”为SMPP3_4。设置完成后,填写“接收短消息号码”,然后单击“测试”,当界面上方显示“测试成功”字样,表明消息已成功发送。5)查看Demo程序,程序可正常接收到短信,表明对接成功。步骤2-1:管理员用户启用双因素认证1)使用管理员账号登录ManageOne主门户,进入“安全管理”。选择左侧列表中的“用户管理”,单击“创建”。2)填写创建用户的基本信息:填写登录名、用户姓名、手机号、邮箱,认证方式选择“本地用户”,密码生成方式选择“自定义”。信息填写完成后,选择关联的用户组,然后完成创建。3)在“用户管理”页面,勾选已创建的用户,单击右侧“更多”,单击“开启双因子认证”,按需选择认证类型,本文以短信为例。步骤2-2:租户用户启用双因素认证1)使用管理员账号登录ManageOne运营面,进入“组织-租户管理”,选中需要开启双因素认证的租户,单击右侧“修改”2)找到“双因素认证”选项,将其修改为“开启”。开启后,该租户下所有用户将启用双因素认证,需要为该租户下所有用户配置手机号或邮箱。3)进入“组织-用户管理”,选择指定租户下的用户,单击右侧“修改”4)为该用户配置手机号等信息,然后点击“确定”步骤3:用户登录1)使用浏览器访问登录ManageOne,输入用户名和密码,单击“登录”2)开启了双因素认证的用户需要填写验证码,单击“获取验证码”。3)此时对接程序能获取到短信验证码,并同时获得目标发送手机号码。4)输入验证码后,可成功登录ManageOne。
-
租户ECS迁移数据和ECS到其它云平台,手动制定租户的ECS为镜像,但由于ECS系统和数据盘较大,系统盘为300G,数据盘为2T,思路是制作镜像导出,有怎么样的方法?同时想问下,制作的系统盘镜像和数据盘镜像是存在哪里了?怎么导出?
-
对接获取性能指标接口时需要传参OBJ_TYPE_ID(类型id)、INDICATOR_ID(指标id),如图高阶云服务相关指标下没有对应的指标id 通过接口也获取不到对应的indicators;求解如何获取到高阶云服务相关指标性能数据
-
1.背景说明随着越来越多的企业选择多云环境,如何有效地管理不同类型的云成为云管平台的必备能力:不同厂商的云使用方式不一样,企业IT人员需要熟悉每一种云的使用方法,学习成本随着云的数量增多而增加,多云管理平台要致力于屏蔽各种云的差异。不同厂商的云接口不一样,多云管理平台需要逐一对接每种云的接口,这实际上是一种确定性的重复劳动,如果多云管理平台每种云都以自有人力去实现,则需要消耗大量人力和时间,多云管理平台应支持通过合作伙伴来扩展多云对接的能力。不同厂商的云模型也有差异,多云管理平台需要适配多种模型,提供统一的监控视图,便于企业IT人员从单一视图就能监控所有云的运行情况。2.特性介绍ManageOne基于同一云服务接入规范,实现一朵云管理 2.1 云联邦华为云云联邦华为云通过联邦认证,把华为云Stack和华为公有云结成一个联邦体系,ManageOne的VDC用户既能访问华为云Stack,也能访问华为公有云,可以集成华为公有云基础服务、数据库服务、容器服务、大数据服务、EI服务(无需每个服务API进行对接),支持如下功能:统一权限管理、统一服务目录、统一组织管理、统一服务流程、统一配额、统一计量、统一资源中心、统一租户资源监控监控 2.2 云联邦HCS企业早期建设HCS资源池的时候,由于规划等原因,建设了多朵HCS;在使用高阶服务之后,希望统一建设高阶服务资源池,如大数据资源池集中建设(以大数据举例,其他高阶服务类似),发挥大数据规模效应的优势,不再分散建设,其他资源池要使用大数据时,统一到大数据资源池申请使用。常规做法是多云合一,使用工程方案,把多朵云合成一朵云,但是多云合一比较复杂,不同的HCS版本均需要ManageOne、云服务适配,工作量比较大;云联邦HCS可以低成本的方式实现跨HCS的资源共享。云联邦HCS支持跨HCS资源共享,VDC用户可以通过云联邦方式使用另一个HCS的云服务资源,以低成本的方式实现跨HCS的资源共享,支持统一服务目录、统一组织管理、统一服务流程、统一配额、统一计量、统一资源中心、统一租户资源监控。 2.3 异构纳管ManageOne提供多云适配框架,按照十统一接入规范,适配插件N2One开发三方云服务在ManageOne上的前台页面和适配程序后台,并调用第三方系统的API实现ManageOne统一运营运维管理三方云服务能力。
-
1 .背景说明第三方系统调用HCS北向API,需要通过域名方式调用您可以参考本帖获取需要的账号、IP等信息 2.使用方法A、获取网关地址、端口号及域名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"。)B、网络打通要求如果现网中,第三方系统与华为云Stack 系统中间有防火墙隔离,需要做防火墙策略,则网络打通要求如下: 访问IP 被访问IP 被访问端口 访问诉求 备注 第三方系统 API Gateway浮动IP 443 单向,第三方系统-->API Gateway浮动IP 防火墙策略放通后,如果要确认是否成功,可通过telnet命令进行测试,如下(此处以80端口为例,请根据实际环境修改):C、获取对接账号进行正式对接前,需要获取对接账户,请联系华为现场工程师,获取一个ManageOne运营侧租户管理员(即一级VDC管理员)账号,且该租户的配额是不限的。获取到账号后,还需要获得该租户管理员所属租户的名称,以及该租户下一个project的Id或者名称,方法如下:使用租户管理员账号登录ManageOne运营侧(ManageOne运营侧的访问地址请联系现场华为工程师获取)点击右上角的用户图标,切换到“个人设置”页面,如下:8.3.1及以上版本,参考此链接创建用户:cid:link_0D、获取对接所需的SSL证书通常情况,调试接口可通过配置curl或postman忽略ssl证书验证,无需证书。在正式对接场景下需要配置SSL证书,获取证书的方法请参考此链接:cid:link_1由于不通编程语言、不同http客户端配置证书的方法均不相同,相关配置方法需用户自行查找,本文不再介绍。 附:服务、域名,文档关系说明注意:北向接口的域名与ManageOne页面使用的域名不相同,严禁使用“auth.xxx.xxx.xxx”等非标准方案的域名进行接口调用,非标方案无法确保升级兼容。更多云服务的域名请参考服务对应的API文档服务类型使用域名(样例)接口调用示例(样例)对应接口文档(以8.0.0接口文档为例)弹性云服务器(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
-
1 背景介绍第三方系统对接华为云Stack时,需要对接实现的功能不同,需要使用的账号角色也不同,获取token时,也需要指定权限范围,才能正确的调用接口。这里给出几种常见权限的token,方便开发者对号入座,使用正确的token调用接口。2 用户角色介绍首先,我们介绍一下ManageOne运营面的几类用户角色,ManageOne运营面默认提供运营管理员、VDC管理员、VDC业务员、VDC只读管理员四类角色,同时还支持自定义角色,不同的角色拥有的权限不同,如下表所示:角色权限权限解读运营管理员具有运营管理类的所有权限。具备资源池接入、租户管理、产品管理、审批流程管理等权限,不具备申请使用资源的权限VDC管理员具有所属VDC及下级VDC的管理权限,以及对所有资源具有管理权限。具备管理VDC内部project、用户、产品、审批流程以及子级VDC的权限,同时具备申请、使用资源的权限VDC业务员VDC业务员在其关联的项目内,对所有资源具有管理权限。仅具备申请、使用资源的权限,不具备管理用户、project的权限VDC只读管理员VDC只读管理员对本VDC及其下级VDC中资源、用户、项目、自运维等具有查看权限。对VDC、project、用户、资源、产品等具备查看权限,无修改、删除、创建权限自定义角色在自定义时为该角色赋予相应的操作权限。自定义角色权限集为VDC管理员权限集的子集3 权限各异的token这里主要给出两种权限的token的获取方法,如下表所示:token类别权限范围适用的对接场景具有云服务管理员权限的token具备一级VDC、资源池管理权限和云服务管理权限,支持创建规格,不能申请云资源第三方系统对接华为云Stack时,需要自定义规格时使用该token具有VDC管理员权限的token(常见场景)内部project、用户、产品、审批流程以及子级VDC的权限,具备资源申请、使用权限,不具备创建规格权限第三方系统对接华为云Stack时,需要管理project,用户,并在project中申请、使用资源时使用3.1 具有云服务管理员权限的token适用场景:第三方云管对接华为云Stack时,需要支持在第三方云管上创建规格,此时需要获取管理员权限的token;该token也可用于创建一级VDC,一级VDC管理员调用准备:1、获得运营管理员账号密码.2、正式调用接口前,您需要获取对应的IP、IAM对外域名,请参考:cid:link_0调用步骤:1、获得scope权限范围为domain的运营管理员token,运营管理员的domain为固定值,mo_bss_admin,示例如下:请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedDate: Wed, 12 Feb 2020 07:14:47 GMTContent-Type: application/json; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-IAM-Trace-Id: df659e8ff4feecf1adfffe72f7335d40ETag: W/"259-Qgmz1aPq7XYjfweWaVCVmseNMls"X-Request-Id: df659e8ff4feecf1adfffe72f7335d40Server: api-gatewayX-Subject-Token的值即为我们所需要的token使用curl调用接口示例如下:curl -X POST -d '{"auth":{"identity":{"methods":["password"],"password":{"user":{"domain":{"name":"mo_bss_admin"},"name":"xxxxx","password":"xxxxx"}}},"scope":{"domain":{"name":"mo_bss_admin"}}}}' -k -i -H "Content-Type: application/json" https://{IAM对外访问域名}/v3/auth/tokens2、使用上一步中获取的token,查询运营管理员管理的默认Project,示例如下:请求URL:https://{IAM对外访问域名}/v3/auth/projects请求方法:GET请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8X-Auth-Token:MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA== 请求体:无响应体:{ "projects": [ { "id": "a2a6e4500b614249afdc0d463971de91", "name": "STD_test-region-1_mo_bss_project", "domain_id": "c386760daaad424ca00ef0044d14eca5", "description": "", "enabled": true, "parent_id": "c386760daaad424ca00ef0044d14eca5", "is_domain": false, "links": { "self": "None/v3/projects/a2a6e4500b614249afdc0d463971de91" } } ], "links": { "next": null, "self": "None/v3/auth/projects", "previous": null }}这样,我们就拿到了运营管理员的project,STD_test-region-1_mo_bss_project注意:如果查询到多个项目,优先使用项目名称后缀为mo_bss_project的项目3、使用运营管理员账号密码,domain name和project name,重新获得token,示例如下:1、获得scope权限范围为domain的运营管理员token,运营管理员的domain为固定值,mo_bss_admin,示例如下:请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体(请注意scope部分的变化):{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXXX", "password": "XXXXXX" } } }, "scope": { "project": { "domain": { "name": "mo_bss_admin" }, "name": "STD_test-region-1_mo_bss_project" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedDate: Wed, 12 Feb 2020 07:14:47 GMTContent-Type: application/json; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveX-Subject-Token: MIASQCwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6XCVSDASAX-IAM-Trace-Id: df659e8ff4feecf1adfffe72f7335d40ETag: W/"259-Qgmz1aPq7XYjfweWaVCVmseNMls"X-Request-Id: df659e8ff4feecf1adfffe72f7335d40Server: api-gateway此处获得的token即可用于调用云服务接口创建规格(【POST】/v2.1/{project_id}/flavors,project_id即为第2步中查询到的project的Id),注意,创建规格时,需要指定规格的可见范围为公用,否则其他租户无法使用该规格,即设置:"os-flavor-access:is_public": true3.2 具有VDC管理员权限的token适用场景:第三方云管对接华为云Stack时,需要调用准备:1、正式调用接口前,您需要获取对应的IP、IAM对外访问域名,请参考:cid:link_02、获得VDC管理员账号密码.3、获取到账号后,还需要获得该租户管理员所属租户的名称,以及该租户下一个project的Id或者名称,方法如下:· 使用租户管理员账号登录ManageOne运营侧(ManageOne运营侧的访问地址请联系现场华为工程师获取)· 点击右上角的用户图标,切换到“个人设置”页面,如下:可以看到,租户名称为xssvdc,我们选择的project为xssvdc,下面我们来获取token调用示例:请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "用户所属的租户名称" }, "name": "用户名", "password": "密码" } } }, "scope": { "project": { "domain": { "name": "用户所属的租户名称" }, "name": "用户关联的项目名称" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedDate: Wed, 12 Feb 2020 07:14:47 GMTContent-Type: application/json; charset=utf-8Transfer-Encoding: chunkedConnection: keep-aliveX-Subject-Token: MIAIIIQSDSwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesU3FGESDVSDMASWQX-IAM-Trace-Id: df659e8ff4feecf1adfffe72f7335d40ETag: W/"259-Qgmz1aPq7XYjfweWaVCVmseNMls"X-Request-Id: df659e8ff4feecf1adfffe72f7335d40Server: api-gateway这里我们就获得了VDC管理员在指定domain,project内的权限,可以用这个token去创建子级VDC、project、用户,也可以在指定的project内创建、操作资源。说明:如果获取token时,仅指定了domain,这个token可以用于创建子级VDC、project、用户,但不能创建、操作具体资源,因为所有的资源都分配在指定的project下。例如下面的请求体示例,获取的token就不能用于创建、操作资源:{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "用户所属的租户名称" }, "name": "用户名", "password": "密码" } } }, "scope": { "domain": { "name": "用户所属的租户名称" } } }}
-
1、场景说明ManageOne运营面支持记录租户操作日志,使得用户可以了解本人或他人的操作信息,便于定位问题和排除故障等。为方便第三方审计系统获取ManageOne运营面租户日志(租户申请资源,创建用户等操作相关的日志),ManageOne开放了租户查询日志接口,该接口支持查询所有租户操作日志,也支持查询指定租户操作日志。同时ManageOne运维面支持通过Syslog协议将运维面系统日志和操作日志上报给第三方平台。2、使用流程 1. 接口列表&准备工作1.1 获取租户操作日志准备工作查询租户操作日志涉及到的接口如下:序号URL说明1【POST】/v3/auth/tokens获取token2【GET】/rest/octrace/v3.0/traces查询租户操作日志,该接口未做分权分域,所有用户均可调用该接口,且能够查询所有的租户操作日志正式调用接口前,需要获取接口文档,账号,域名和对接账号,请参考:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html1.2 获取运维面日志准备工作运维面操作日志采用Syslog协议上报,需要的准备工作如下:需要获取Syslog服务端的IP地址和端口,如,192.168.1.2, 8895;且需要确保ManageOne运维面后台节点可访问Syslog服务端,网络访问要求如下:节点名称被访问节点访问要求ManageOne-Service01Syslog服务端指定端口ManageOne-Service01可访问Syslog服务端指定端口ManageOne-Service02Syslog服务端指定端口ManageOne-Service02可访问Syslog服务端指定端口ManageOne-Deploy01Syslog服务端指定端口ManageOne-Deploy01可访问Syslog服务端指定端口ManageOne-Deploy02Syslog服务端指定端口ManageOne-Deploy02可访问Syslog服务端指定端口2. 对接步骤2.1获取租户操作日志步骤1 获取token获得scope权限范围为domain的VDC管理员token,VDC管理员的domain为VDC名称,示例如下:请求URL:https://{运营侧北向接口对外域名}/v3/auth/tokens请求方法:POST请求头示例:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体示例:{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "name": "XXXXXX", "password": "XXXXXX", "domain": { "name": "sfy_vdc" } } } }, "scope": { "domain": { "name": "sfy_vdc" } } }} 返回的token在响应头中,示例如下:Content-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token步骤2 查询租户操作日志请求URL:https://{运营侧北向接口对外域名}/rest/octrace/v3.0/traces?limit=3&start=0&language=zh-cn (8.0以上版本需使用运维侧北向接口对外域名)说明:URL路径参数支持操作日志过滤,具体过滤条件和参数详细信息及说明参考《ManageOne 运营面API参考 .docx》(8.0以上版本为《ManageOne 运维面API参考 .docx》)文档中的“查询操作日志接口”章节。请求方法:GET请求头示例:Content-Type: application/json Accept: application/json X-Auth-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==请求体:无响应体示例:{ "total": 102619, "traces": [ { "user_name": "vdc_admin", "trace_message": "修改服务成功。", "source_ip": "160.133.65.30", "domain_id": "b6ff69d6703748bebd7b3075cf97059b", "domain_name": "op_service", "trace_type": "ConsoleAction", "project_id": "system", "httpCode": 200, "invoke_trace_id": "7eb520a8f82bff147eb520a8f82bff14", "trace_id": "806f2152-2c24-4b02-9405-9a31c42cb2cd", "trace_result": "successed", "trace_name": "修改服务", "resource_type": "Product", "end_time": 1594024617416, "trace_rating": "normal", "api_version": "v2", "start_time": "1594024617416", "service_type": "MOProduct", "user_id": "32cb5a3c9de44bcf9696db98c1db828a", "resource_id": "e02dd4ad12aa46e997bbce03ab00dc43", "resource_name": "安装Nginx服务", "record_time": 1594024617431, "request_id": "RouteID-movappservice-15-0-200706163657-451712" }, { "user_name": "vdc_admin", "trace_message": "修改服务成功。", "source_ip": "160.133.65.30", "domain_id": "b6ff69d6703748bebd7b3075cf97059b", "domain_name": "op_service", "trace_type": "ConsoleAction", "project_id": "system", "httpCode": 200, "invoke_trace_id": "7eb520a8f82bff147eb520a8f82bff14", "trace_id": "59907ba2-2852-4ce1-bb54-8d0cba1d302f", "trace_result": "successed", "trace_name": "修改服务", "resource_type": "Product", "end_time": 1594024617225, "trace_rating": "normal", "api_version": "v2", "start_time": "1594024617225", "service_type": "MOProduct", "user_id": "32cb5a3c9de44bcf9696db98c1db828a", "resource_id": "c5b9faa868364c1fb94a117abfd39e56", "resource_name": "安装Kafka集群", "record_time": 1594024617235, "request_id": "RouteID-movappservice-15-0-200706163657-451707" }, { "user_name": "vdc_admin", "trace_message": "修改服务成功。", "source_ip": "160.133.65.30", "domain_id": "b6ff69d6703748bebd7b3075cf97059b", "domain_name": "op_service", "trace_type": "ConsoleAction", "project_id": "system", "httpCode": 200, "invoke_trace_id": "7eb520a8f82bff147eb520a8f82bff14", "trace_id": "d97c05a4-8991-4a16-8d63-312d84e16c4b", "trace_result": "successed", "trace_name": "修改服务", "resource_type": "Product", "end_time": 1594024616965, "trace_rating": "normal", "api_version": "v2", "start_time": "1594024616965", "service_type": "MOProduct", "user_id": "32cb5a3c9de44bcf9696db98c1db828a", "resource_id": "48b119eb0feb459698ffa16a545e2527", "resource_name": "安装Kafka服务", "record_time": 1594024616974, "request_id": "RouteID-movappservice-15-0-200706163656-451702" } ]}2.2 配置运维面日志上报首先参考2.2章节,获取到第三方Syslog服务端的IP和端口信息,并确认网络可达,然后执行以下操作(适用于6.5.1和8.0.0版本)步骤1 使用管理员账户,登录ManageOne运维面步骤2 依次点击"系统管理"-->"日志管理"-->"日志转发设置",进入日志转发配置页面,如下图所示:步骤3 点击“创建”,进入日志转发服务器配置页面,如下图所示:填写正确的IP地址和端口号,根据需要配置协议类型和日志级别,完成配置后,点击“确定”即可。接下来,可以在运维面上执行一些操作,然后与Syslog服务端确认是否能正常收到日志,如果不能收到,建议现排查网络是否可达。
-
1、场景说明ManageOne分为运营侧/运维侧支持对接到第三方的SSO Server,通过第三方认证中心完成登录授权。 2、使用流程约束条件:8.0.3及以下版本,运维侧作为SSO客户端对接第三方SSO Server后,只有运维侧本身支持单点登录功能,已经与运维侧单点登录集成的系统不支持直接登录,比如ServiceOM、CPS、eSight等。8.2.1及以上版本,ManageOne运维侧与IAM集成,实现统一登录,运维侧不再单独作为客户端与第三方SSO Server对接。用户只需将运营面与第三方SSO Server对接,运维面可同步实现对接。 demo地址:运营面:cid:link_0 功能扩展:1、运营侧作为SSO Client使用原生页面登录:cid:link_1
-
1、场景说明ManageOne是基于CAS 2.0协议提供SSO Server服务,第三方系统对接后可实现单点登录功能。 2、使用流程CAS基本原理图: CAS Client与受信任的第三方系统部署在一起,以Filter的方式保护Web应用系统的资源,过滤从浏览器发送的每一个web请求。 约束条件:ManageOne 6.5.0 及以上版本 步骤如下:1.用户访问受信系统被CAS Client拦截。2.重定向到CAS Server登录页面。3.用户认证过程,如果用户提供了正确的认证信息,CAS Server随机产生一个不可伪造的(Service Ticket)ST,并缓存以待将来验证。4.CAS Server携带ST重定向到受信客户端系统,并为客户端浏览器设置一个(Ticket Granted Cookie)TGC。5.CAS Client提取ST到CAS Server验证。6.CAS Client得到合法用户信息,完成单点登录。 demo地址(需登录):cid:link_0
-
1、场景说明ManageOne运维侧已经支持直接对接多种常见协议的短信网关,比如CMPP2_x,CMPP3_x,SMGP,SGIP,SMPP3_4,SMPP3_3等。但部分客户有专属的短信网关,需要通过特定的接口进行对接,比如可能是restful/webservice/soap等协议,因此可以通过开发适配程序,先以ManageOne支持的协议接收短信内容,然后再调用第三方的接口发送短信。 2、使用流程详细开发指导参考附件,demo选择smpp3_4协议接收告警,打印短信内容,开发者拿到短信内容后再根据项目实际情况调用第三方短信接口。 主要步骤如下:1、引用smpp组件,封装了具体通信相关的功能添加Maven引用 <dependency> <groupId>org.jsmpp</groupId> <artifactId>jsmpp</artifactId> <version>2.3.10</version></dependency>2、启动smpp服务端SMPPServerSessionListener sessionListener = new SMPPServerSessionListener(port);LOGGER.info("Start SMPP server... sessionListenerPort -> {}", port);while (true) { SMPPServerSession serverSession = sessionListener.accept(); LOGGER.info("Accepting connection for session:{}", serverSession.getSessionId()); serverSession.setMessageReceiverListener(this); Future<Boolean> bindResult = execService.submit(new WaitBindTask(serverSession, systemId, password)); try { boolean bound = bindResult.get(60000, TimeUnit.MILLISECONDS); if (bound) { LOGGER.info("The session is now in state:{}", serverSession.getSessionState()); } } catch (InterruptedException e) { LOGGER.error("Interrupted WaitBind task:{}", e.getMessage()); } catch (ExecutionException e) { LOGGER.error("Exception on execute WaitBind task:{}", e.getMessage()); } catch (TimeoutException e) { LOGGER.error("Timeout on bind result:{}", e.getMessage()); }}3、重写消息接收事件,获取短信内容public MessageId onAcceptSubmitSm(SubmitSm submitSm, SMPPServerSession smppServerSession) throws ProcessRequestException { MessageId messageId = messageIDGenerator.newMessageId(); String sourceAddr = submitSm.getSourceAddr(); String destAddress = submitSm.getDestAddress(); String shortMessage = new String(submitSm.getShortMessage(), StandardCharsets.UTF_16); LOGGER.info("Receiving submit_sm, sourceAddr:{},destAddress:{},shortMessage:'{}', and return message id:{}", sourceAddr,destAddress,shortMessage,messageId.getValue()); return messageId;}4、页面配置对接协议,验证消息发送内容5、示例程序(Java):cid:link_0
-
1、场景说明ManageOne运营侧支持与第三方审批流程系统对接,实现用户提交云资源申请订单后,审批人在第三方审批系统进行流程审批,审批完成后,ManageOne进行云资源的在线发放。开发者可通过定制的方式对接常见的流程审批系统,如ESOP、K2、HPSM等。 客户价值:1、方便客户对业务审批流程进行统一管理。2、保持审批人一致的审批体验,不同业务的审批在一个审批系统中完成,不需要登录不同的系统进行审批,不需要适应不同审批风格的系统,减少学习成本。 2、使用流程约束条件:ManageOne 6.5.0 及以上版本通过开发定制适配程序实现,主要实现功能如下图所示: demo地址:cid:link_0 FAQ:1、配置对接页面连通性测试失败--a、检查网络是否开通--b、检查适配程序接口是否被ManageOne调用,打印返回报文检查格式是否正确2、流程管理页面没有显示第三方外部流程--a、检查查询流程定义接口是否被ManageOne调用--b、检查返回报文格式,注意approval_user_id不能重复,格式为数字类型的字符串,如“10001”。
-
1 订单接口说明和使用场景ManageOne订单接口说明和使用场景请参考:链接2 对接准备订单接口参数较为复杂,建议您使用可视化工具对接口进行测试,如postman(使用前请关闭SSL证书校验),restclient等。请参考帖子:【华为云Stack ManageOne 运营侧北向对接】北向接口对接准备工作,获取接口文档,接口对接需要的IP,域名等信息本帖提供的方法,适配HCS 8.x版本3 订单接口对接步骤我们知道ManageOne订单接口不能独立使用,需要配合云服务接口使用,这里给出主要的对接步骤,如下:通过用户名和密码调用鉴权接口获取Token和user_id。(可选)通过user_id查询用户关联的project,用户是以project维度操作资源,资源也必须属于某一个project根据选择的project的id查询project详细信息,获取region_id、支持的云服务列表、每个云服务的资源池id和包含的az(可用分区)列表。选择需要申请的云服务类型,比如云硬盘的service_type为evs。订购接口还需要product_id,因此通过查询可用产品列表接口获取。根据不同的云服务定义的数据结构获取对应的参数,这部分由每个云服务具体的订购章节详细描述,参考《ManageOne 8.x 云服务Params参数说明》。组合订购接口所需的所有参数,调用接口完成订购。下面给出通过订单接口创建、释放VPC的详细步骤4 申请VPC这里先给出涉及到的接口清单,如下:序号接口功能URL涉及到的接口文档调用接口使用的域名(样例)1鉴权【POST】/v3/auth/tokens《ManageOne 8.X OTenantSecurity服务API参考.doc》iam-apigateway-proxy.demo.com2查询用户关联的project列表【GET】/rest/vdc/v3.0/users/{user_id}/projects《ManageOne 8.X 运营面API参考.doc》sc.demo.com3查询project详情,获取该project关联的资源池信息【GET】/rest/vdc/v3.1/projects/{project_id}《ManageOne 8.X 运营面API参考.doc》sc.demo.com4查询可申请的产品列表【GET】/rest/product/v3.0/apply/products《ManageOne 8.X 运营面API参考.doc》sc.demo.com5获取外部网络列表【GET】 /v1/{project_id}/external_networks《华为云Stack 8.X API接口参考.chm》>网络>VPC>VPC>网络或《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》vpc.sa-fb-1.demo.com6创建订购【POST】/rest/subscription/v3.0/subscriptions《ManageOne 8.X 运营面API参考.doc》《ManageOne 8.x 云服务Params参数说明》sc.demo.com7查询订单详情【GET】/rest/order/v3.0/orders/{order_id}《ManageOne 8.X 运营面API参考.doc》sc.demo.com8查询订单中的资源列表【GET】/rest/order/v3.0/orders/{order_id}/resources《ManageOne 8.X 运营面API参考.doc》sc.demo.com具体接口调用步骤如下:步骤 1 获取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": "2025-08-06T03:27:44.047000Z", "methods": [ "password" ], "catalog": [...], "domain": { "id": "646e39c017c94c35a0bdc6e2514f02a5", "name": "hzp_vdc" }, "roles": [ { "id": "0", "name": "tag_adm" }, { "id": "0", "name": "vdc_owner" }, { "id": "0", "name": "te_admin" }, { "id": "0", "name": "vdc_adm" }, { "id": "0", "name": "approv_adm" }, { "id": "0", "name": "secu_admin" } ], "issued_at": "2025-08-05T03:27:44.047000Z", "user": { "domain": { "id": "646e39c017c94c35a0bdc6e2514f02a5", "name": "hzp_vdc" }, "id": "d94abe1fb3014707a0d5f20eaf418bd9", //用户Id "name": "hzp_admin", "password_expires_at": "" } }}从响应头中我们可以获得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-8Accept: application/json; charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体:{ "total": 1, "projects": [ { "regions": [ { "region_id": "ga-nfgc-1", "region_status": "normal", "region_type": null, "account_id": null, "region_name": { "zh_cn": "贵安", "en_us": "贵安" } } ], "id": "d30095aa9da1451a92789a3376e9c876", "name": "ga-nfgc-1_hzp_project", "iam_project_name": "ga-nfgc-1_hzp_project", "display_name": "ga-nfgc-1_hzp_project", "description": "", "enabled": true, "domain_id": "646e39c017c94c35a0bdc6e2514f02a5", "tenant_id": "1e33bbc9-21fe-488c-b9f1-9e6399f671b8", "tenant_name": "hzp_vdc", "level": "1", "role_id": null, "role_name": null, "is_shared": "false" } ]}步骤3 查询产品列表不同的云服务在ManageOne中体现为对外提供不同的产品,查询时需要指定产品类型(service_type),调用示例如下:URL: https://{ManageOne运营侧API对外域名}/rest/product/v3.0/products?limit=100&start=1&status=online&service_type=vpc& region_id={region_id}(region_id取值由步骤3获取)请求方法:GET请求头:Content-Type: application/json; charset=UTF-8Accept: application/json; charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体:{ "total": 1, "products": [ { "product_id": "2de18df9fa584b7e82bf96709bdaee60", "service_type": "vpc", "create_vdc_id": "all", "create_user_id": "a65169cd270044179e3521bb1e3f95e3", "icon_id": "defaulticonvpc", "catalog_id": "3", "region_id": "ga-nfgc-1", "params": "{}", "name": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}", "description": "{\"en_US\":\"Virtual Private Cloud (VPC) lets you provision logically isolated, configurable, and manageable virtual networks for cloud servers. VPC also provides flexible and reliable network connection modes and comprehensive security protection. VPC is designed to improve the security of user resources and simplify network deployment.\",\"zh_CN\":\"虚拟私有云即VPC,是一套为云服务器构建的逻辑隔离的、由用户自主配置和管理的虚拟网络环境,同时提供灵活可靠的数据连接方式和全方位的安全防护层,旨在提升用户资源的安全性,简化用户的网络部署。\"}", "create_time": 1747631128000, "publish_status": "publish", "deletable_status": "normal", "is_default": true, "publish_scope": "", "online_scope": "", "online_status": "online", "approval": false, "price": null, "resource_pool_id": "", "project_id": "", "az_id": "", "secret_params": null, "product_type": null, "custom_catalog_info": "[{\"catalog_id\":\"1\",\"level\":1,\"name\":\"{\\\"zh-cn\\\":\\\"基础云服务\\\",\\\"en-us\\\":\\\"Basic cloud services\\\"}\"},{\"catalog_id\":\"10003\",\"level\":2,\"name\":\"{\\\"zh-cn\\\":\\\"网络\\\",\\\"en-us\\\":\\\"Network\\\"}\"}]", "custom_catalog_id": "10003" } ]}响应体中,approval字段值为false的产品表示该产品没有关联人和审批流程,申请该产品后,不需要经过任何审批流程,提交订单后就会实施,对接时建议使用此类产品。步骤 4 查询可用外部网络查询可用的外部网络,请求示例如下:URL: https://{VPC对外访问域名}/v1/{project_id}/external_networks?vpc_networks_type=Location请求方法:GET请求头:Content-Type: application/json;charset=UTF-8Accept: application/json;charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体:{ "vpc_external_networks": [ { "id": "7fdcf4c0-28f9-4899-91fc-375b702c0ce5", "name": "dummy_external_network", "description": "", "vpc_network_type": "Location", "group": "group1", "availability_zones": [ "az0.bms", "az0.dc0" ] } ]}id即为外部网络的Id我们现在获得了创建VPC所需的所有参数,订购接口所需主要参数如下:序号参数名称参考值备注1operate_typeapply申请,固定值apply2service_typevpc虚拟私有云,固定值vpc3region_idga-nfgc-1区域id,步骤2获取4tenancy2018-07-27 15:59:59租期租期截止时间,永久有效则填写05product_id 产品id,步骤3获取6tenant_id 云服务中的tenant_id和manageOne中的project_id相同,步骤2获取7namevpc-7f45自定义新建vpc的名称8external_gateway_info:network_id 外部网关的网络ID,参考步骤4,必填9display 订单显示信息,可根据需要填写,值可以为空,属性名必须有10 subnet regionId 子网区域id,和vpc区域id相同tenant_id 和vpc的tenant_id相同,步骤2获取namesubnet-7f4e子网名称,用户自定义cidr192.168.2.0/24子网IP地址段,用户自定义gatewayIp192.168.2.1子网网关地址,用户自定义dnsList DNS服务器列表 步骤6 创建订单,申请VPC订单接口中的params参数说明,请参考《ManageOne 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", "product_id": "2de18df9fa584b7e82bf96709bdaee60", "region_id": "ga-nfgc-1", "project_id": "d30095aa9da1451a92789a3376e9c876", "service_type": "vpc", "tenancy": 0, "params": "{\"regionId\":\"ga-nfgc-1\",\"tenant_id\":\"d30095aa9da1451a92789a3376e9c876\",\"vpc\":{\"name\":\"vpc-7f45\",\"external_gateway_info\":{\"network_id\":\"7fdcf4c0-28f9-4899-91fc-375b702c0ce5\"}},\"subnet\":{\"regionId\":\"ga-nfgc-1\",\"tenantId\":\"d30095aa9da1451a92789a3376e9c876\",\"availableZoneId\":\"\",\"name\":\"subnet-7f4e\",\"dhcpEnable\":true,\"cidr\":\"192.168.2.0/24\",\"gatewayIp\":\"192.168.2.1\",\"dnsList\":[\"160.104.9.56\",\"160.104.9.57\"],\"ntpList\":[]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-7f45\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"dummy_external_network\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-7f45\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"dummy_external_network\",\"type\":\"string\"}]},\"resource_subset_id\":\"0\"}" } ]}响应体:{ "purchases": [ { "subscription_id": "20250805035109738191213" } ], "expected_total": 0, "error_details": null}subscription_id即为订单ID步骤7 查询订单详情,确认订单实施状态订单提交成功后,需要定时轮询订单状态,直到订单状态(status字段)为成功URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}(order_id由上一步响应体获得)请求方法:POST请求头:Content-Type: application/json; charset=UTF-8Accept: application/json; charset=UTF-8Connection: keep-aliveX-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4=请求体:无响应体:{ "order_id": "20250805035109738191213", "parents_id": null, "type": "apply", "order_type": "apply", "operate_type": "apply_vpc", "operate_type_name": "{\"en-us\":\"Request\",\"zh-cn\":\"申请\"}", "product_online_status": null, "service_type": "vpc", "params": "{\"regionId\":\"ga-nfgc-1\",\"tenant_id\":\"d30095aa9da1451a92789a3376e9c876\",\"vpc\":{\"name\":\"vpc-7f45\",\"external_gateway_info\":{\"network_id\":\"7fdcf4c0-28f9-4899-91fc-375b702c0ce5\"}},\"subnet\":{\"regionId\":\"ga-nfgc-1\",\"tenantId\":\"d30095aa9da1451a92789a3376e9c876\",\"availableZoneId\":\"\",\"name\":\"subnet-7f4e\",\"dhcpEnable\":true,\"cidr\":\"192.168.2.0/24\",\"gatewayIp\":\"192.168.2.1\",\"dnsList\":[\"160.104.9.56\",\"160.104.9.57\"],\"ntpList\":[]},\"display\":{\"en_US\":[{\"label\":\"Region\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"VPC Name\",\"value\":\"vpc-7f45\",\"type\":\"string\"},{\"label\":\"External Network\",\"value\":\"dummy_external_network\",\"type\":\"string\"}],\"zh_CN\":[{\"label\":\"区域\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"VPC名称\",\"value\":\"vpc-7f45\",\"type\":\"string\"},{\"label\":\"外部网络\",\"value\":\"dummy_external_network\",\"type\":\"string\"}]},\"resource_subset_id\":\"0\"}", "create_user_id": "d94abe1fb3014707a0d5f20eaf418bd9", "create_user_name": "hzp_admin", "vdc_id": "1e33bbc9-21fe-488c-b9f1-9e6399f671b8", "vdc_name": "hzp_vdc", "status": "successed", "create_time": "2025-08-05 03:51:14", "implement_time": "2025-08-05 03:51:19", "complete_time": "2025-08-05 03:51:34", "last_remind_time": null, "remind_flag": 1, "project_id": "d30095aa9da1451a92789a3376e9c876", "project_name": "ga-nfgc-1_hzp_project(ga-nfgc-1_hzp_project)", "cloud_infra_id": null, "product_id": "2de18df9fa584b7e82bf96709bdaee60", "region_id": "ga-nfgc-1", "product_defination_params": "{\"en_US\":\"VPC\",\"zh_CN\":\"虚拟私有云\"}", "tenancy": "0", "original_tenancy": "0", "time_zone": null, "comments": null, "reason": "", "contract_number": null, "rate_params": null, "domain_id": "646e39c017c94c35a0bdc6e2514f02a5", "domain_name": null, "delay_implement_time": null, "timeout_interval": 0, "allow_submit_implement": true, "order_scence": null, "enterprise_project_id": "0", "enterprise_project_name": "default", "areacode": "", "phone": "", "email": ""}步骤8 查询订单中的资源列表URL: https://{ManageOne运营侧API对外域名}/rest/order/v3.0/orders/{order_id}/resources(order_id由步骤6响应体获得)请求方法:GET 请求头: Content-Type: application/json; charset=UTF-8 Accept: application/json; charset=UTF-8 Connection: keep-alive X-Auth-Token: MIIEeAYJKoASASn04rMqff-Q8fk7kqiCDMLfVxqj7wIdgkM1yD4= 请求体:无 响应体:[ { "id": "d841873b-0e13-43a8-a97c-5a859a3c487e", "order_id": "20250805035109738191213", "resource_id": "b8553f17-e9c1-426a-b1a2-2d607e6b3d81", "resource_name": "vpc-7f45", "resource_type": "vpc", "cloud_resource_type": null, "cloud_infra_id": null, "extend_params": null, "region_id": "ga-nfgc-1", "az_id": null, "project_id": "d30095aa9da1451a92789a3376e9c876", "record_time": "2025-08-05 03:51:34", "order_type": "apply", "result": "successed", "error_code": null, "zh_message": null, "en_message": null, "message": null, "expired_time": "0" }]6 删除VPC删除VPC,我们需要指定VPC的Id,所属的区域,AZ等信息,步骤如下:步骤 1 获取token参考第5章 步骤1即可步骤2 查询指定VPC下关联的子网列表涉及接口如下:接口功能接口方法接口URL提供接口的云服务调用接口使用的域名(样例)获取VPC信息GET/v1/{tenant_id}/vpcs虚拟私有云vpc.sa-fb-1.demo.com获取子网详情GET/v1/{tenant_id}/subnets虚拟私有云vpc.sa-fb-1.demo.com接口调用步骤略,上表所列接口的具体参数说明,请参考接口文档《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》步骤3 删除指定VPC下的所有子网涉及接口如下:接口功能接口方法接口URL提供接口的云服务调用接口使用的域名(样例)获取子网详情DELETE/v1/{tenant_id}/subnets/{subnet_id}虚拟私有云vpc.sa-fb-1.demo.com上表所列接口的具体参数说明,请参考接口文档《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》 至此,我们获得了创建删除VPC订单所需要的参数,如下:序号参数名称参考值备注1operate_typedelete删除,固定值delete,必选2service_typevpc虚拟私有云,固定值vpc,不选3region_idsa-fb-11区域id,从VPC域名获取4id vpc的id5tenant_id 云服务中的tenant_id和manageOne中的project_id相同,此处与步骤1中获取token时指定的project相同6display 订单显示信息,可根据需要填写,值可以为空,属性名必须有步骤5 调用订单接口删除VPC订单接口中的params参数说明,请参考《ManageOne 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": "delete", "service_type": "vpc", "project_id": "d30095aa9da1451a92789a3376e9c876", "region_id": "ga-nfgc-1", "params": "{\"ids\":[{\"id\":\"b8553f17-e9c1-426a-b1a2-2d607e6b3d81\",\"service_type\":\"vpc\"}],\"display\":{\"zh_CN\":[{\"label\":\"区域\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"名称\",\"value\":\"vpc-7f45\",\"type\":\"string\"}],\"en_US\":[{\"label\":\"Region\",\"value\":\"贵安(ga-nfgc-1_hzp_project (ga-nfgc-1_hzp_project))\",\"type\":\"string\"},{\"label\":\"Name\",\"value\":\"vpc-7f45\",\"type\":\"string\"}]}}" } ]}响应体:{ "purchases": [ { "subscription_id": "20250805041846583473665" } ], "expected_total": 0, "error_details": null}同样的,我们需要调用订单查询接口(参考底5章 步骤7),查询订单状态,直到VPC删除完成补充说明:VPC的查询、属性更新等操作均需要调用云服务的接口,具体接口参考文档《虚拟私有云(VPC) 8.x API参考(for 华为云Stack 8.x).pdf》。VPC的申请、删除、扩容需要使用ManageOne订单接口,不可将ManageOne订单接口与VPC接口混用(如:使用ManageOne订单接口创建资源,使用VPC接口删除资源),否则可能导致ManageOne上数据展示异常
-
1、场景说明客户已有CMDB系统管理云内外资源,需要将HCS的资源也统一纳管管理,ManageOne提供北向接口可以查询HCS相关资源数据,客户获取数据后看匹配到自己CMDB系统的模型和字段,完成数据录入 2、使用流程ManageOne资源管理系统为各种资源进行建模,包括为物理实体建立了物理资源模型,以及建立在物理资源模型上进行抽象形成的逻辑资源模型。资源模型主要分为两大类:系统资源、租户资源:1) 系统资源主要包含: 1.物理设备(如服务器、存储、网络设备等) 2.管理节点虚拟机(如ManageOne、云服务节点等,区别于租户申请的虚拟机) 3.虚拟化物理主机(宿主机) 4.逻辑位置 5.上述物理资源间的关系2) 租户资源主要包含: 1.租户侧的组织结构(包含各级VDC、用户、project信息) 2.租户申请的计算、存储、网络等资源 3.上述租户资源间的关系 文档说明:1. 《ManageOne运维面API参考》2. 《ManageOne 租户资源北向模型》3. 《ManageOne 系统资源北向模型》(注:从8.1.0版本起,文档2、3合并为《ManageOne资源北向模型》)ManageOne北向API参考文档各版本汇总获取:cid:link_0 接口说明:1.接口和参数:系统资源和租户资源及其对应的关系模型分别需要使用不同接口来查询,一共涉及到4个接口。接口参数需查询文档。如下表所示。2.资源模型:1中接口参数class-name或relation-name的值需参考文档《ManageOne 系统/租户资源北向模型》,参考下表。序号接口含义接口URL路径参数说明1查询租户资源模型或视图GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/{class-name}class-name:CI类名,参考《ManageOne 租户资源北向模型》中前缀为“CLOUD、TENANT、V”的资源。2查询租户资源关系模型GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/relations/{relation-name}relation-name:关系类名,参考《ManageOne 租户资源北向模型》中前缀为“R”的资源。3查询系统资源模型GET https://{OC北向接口域名}/rest/cmdb/v1/instances/{className}class-name:CI类名,参考《ManageOne 系统资源北向模型》中前缀为“SYS”的资源。4查询系统资源关系模型GET https://{OC北向接口域名}/rest/cmdb/v1/instances/relations/{relationName}relationName:关系类名,参考《ManageOne 系统资源北向模型》中前缀为“M”的资源。备注:OC北向接口域名非xx.xx.xx.xx:31943,获取方法请参考cid:link_3请求头:(token的获取方法请参考cid:link_1)Accept:application/json Content-Type:application/json;charset=UTF-8X-Auth-Token:xxxxxxxxxxxx查询参数:(4个接口通用)参数说明pageNo页码,默认值:1,取值范围:1~65535。非必选。pageSize页大小,默认值20。取值范围:1~1000。非必选。contentSelector要返回的字段,默认返回所有字段,格式:["attr1","attr2"]。非必选。orderBy排序方式,格式:[{"field":"attr1","asc":true}]。非必选。condition查询条件,受Http Header最大81920字符限制。条件示例:{"constraint":[{"simple":{"name":"incharger","value":"ManageOne","operator":"equal"}},{"logOp":"and","simple":{"caseSensitive":false,"name":"name","value":"B080-Cabinet01","operator":"equal"}}]}。字段说明:Condition(关键字),Constraint(关键字),Simple(关键字),logOp(条件连接符,可取的值有"and","or"),name(资源的属性名称),value(属性值),operator(运算符,可取的值有"equal","not equal","contain","not contain","in","not in","is null","not null"等)。条件说明:{"simple":{"name":"incharger","value":"ManageOne","operator":"equal"}}表示incharger="ManageOne"。{"logOp":"and","simple":{"caseSensitive":false,"name":"name","value":"B080-Cabinet01","operator":"equal"}}表示name="B080-Cabinet01",加上"caseSensitive":false则表示属性值"B080-Cabinet01"不区分大小写,"logOp":"and"表示这个查询条件与上一个条件是and关系。注:查询关系时(表中第2、4个链接),不需要加最外层的{"constraint":xxxx}。如:[{"simple":{"name":"source_Instance_Id","value":"C726DF8E2E8446FDA17D6D3B7C495DFF","operator":"equal"}}] 常用查询:注:以下接口的响应体请参考文档《ManageOne 租户/系统资源北向模型.xlsx》。租户资源(IaaS)弹性云服务器(ECS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_VM裸金属服务器(BMS)(BMS实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_BMS(BMS节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_BMS_NODE弹性IP(EIP)(EIP实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_EIP(带宽)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_BANDWIDTHS弹性云硬盘(EVS)(EVS实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_VOLUME(快照)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_SNAPSHOT(备份)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_BACKUP镜像(IMS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_IMAGE路由/VPCGET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_ROUTER网络GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_NETWORK子网GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_SUBNET端口/网卡(PORT)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_PORT安全组(SG)(条件不可省略)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_SECURITY_GROUP?condition={"constraint":[{"simple":{"name":"regionId","value":"C4CA4238A0B933828DCC509A6F75849B","operator":"equal"}}]}(安全组规则,条件不可省略)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_SECURITY_GROUP_RULE?condition={"constraint":[{"simple":{"name":"regionId","value":"C4CA4238A0B933828DCC509A6F75849B","operator":"equal"}}]}弹性负载均衡器(ELB)(ELB实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_ELB(监听器)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_LISTENER虚拟防火墙/网络ACL/vFW(vFW实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_VFW(vFW策略)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_VFW_POLICY(vFW规则)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_VFW_RULE租户资源(PaaS)关系型数据库(RDS)(RDS实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_RDS_INSTANCE(RDS节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_RDS_NODE云容器引擎(CCE)(CCE集群)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_CCE_CLUSTER(CCE节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_CCE_NODE(CCE容器)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_CCE_CONTAINER云数据库 GaussDB(for openGauss、mysql)(数据库实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_RDS_INSTANCE(数据库节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_RDS_NODE文档型数据库(DDS)(DDS实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DDS_INSTANCE(DDS节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DDS_NODE数据复制服务(DRS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DRS_INSTANCE分布式数据库中间件(DDM)(DDM实例)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DDM_INSTANCE(DDM节点)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DDM_NODE应用与数据集成平台(ROMA)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_ROMA_CONNECT_INSTANCE应用管理与运维平台(CSE/ServiceStage)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_CSE_ENGINES数据湖治理中心(DGC)(云数据迁移)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DAYU_CDM_CLUSTER(数据服务)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DAYU_DLM_GATEWAY(数据湖治理中心)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DAYU_INSTANCEMapReduce服务(MRS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_MRS_CLUSTER数据仓库服务(DWS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DWS_CLUSTER分布式缓存服务(DCS)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_DCS_INSTANCEWeb应用防火墙(WAF)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_WAF_ENGINE云堡垒机(CBH)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_CBH_INSTANCE图引擎服务(GES)GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/CLOUD_GES_GRAPH租户信息项目/资源集GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/TENANT_PROJECT_VDC租户/VDCGET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/TENANT_VDC租户用户GET https://{OC北向接口域名}/rest/tenant-resource/v1/instances/TENANT_USER系统资源服务器GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_X86Server主机组GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_Cluster宿主机GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_PhysicalHost存储设备GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_StorDevice网络设备GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_NetworkDevice(根据class_Name区分:SYS_Switch-交换机、SYS_Router-路由器、SYS_Firewall-防火墙、SYS_LoadBalancer-负载均衡、SYS_FCSwitch-FC交换机、SYS_ThirdpartyNetWorkDevice-其他网络设备)管理面虚拟机GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_VM其他 区域/RegionGET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_BusinessRegion可用分区GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_Azone资源池GET https://{OC北向接口域名}/rest/cmdb/v1/instances/SYS_ResourcePool资源关系和接口调用示例可参考附件“北向资源查询参考.xlsx”。 其他相关资料:1资源接口查询条件书写说明cid:link_4说明使用查询条件查询资源(如虚拟机、物理机)数据2物理资源查询cid:link_5说明物理资源模型、如何通过API查询服务器、存储设备、网络设备,宿主机等3租户资源查询cid:link_6说明如何查询租户资源,如何通过API查询租户虚拟机、云磁盘、弹性IP等4虚拟资源关系查询cid:link_7说明如何查询区域、资源池、宿主机、虚拟机之间的关系5管理虚拟机查询cid:link_8说明如何查询管理虚拟机详情6租户维度资源查询cid:link_9说明如何按照VDC、project维度查询租户资源7管理节点宿主机查询https://bbs.huaweicloud.com/forum/thread-71325-1-1.html说明如何判断宿主机是否属于管理节点8获取虚拟资源到物理资源的拓扑关系cid:link_2说明如何获取虚拟资源到物理资源的拓扑关系
-
1、场景说明ManageOne运维侧支持对外提供资源池容量,可按照区域、可用分区的维度提供容量信息,可供客户上层系统作统一数据展示,如大屏报表等容量信息包括:cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)、bms(裸金属)、租户虚拟机总数、物理机总数(此处的物理机指宿主机)7个指标 2、使用流程如果您需要获取ManageOne中资源池的总容量,您需要:1、查询运维侧所有的区域2、查询每个区域的cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)容量、bms(裸金属),一般的使用超分后的容量3、查询每个区域下的虚拟机,物理机总数4、将所有区域的容量按照类型进行叠加,从而获得cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)、bms(裸金属)、虚拟机总数、物理机总数的总容量需要说明的是,这里获得的是所有区域的总容量,包括云平台管理分区和租户分区的容量,管理分区与租户分区是隔离的,二者相对独立,租户分区为租户申请资源使用的分区,管理分区为华为云Stack管理虚拟机所在分区。如果您希望将管理分区的容量与租户分区的容量区分开,您需要分别查询管理分区和租户分区的容量,步骤如下:1、查询运维侧所有的可用分区2、查询每可用分区的cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)、GPU卡容量,一般的使用超分后的容量3、查询每个可用分区下的虚拟机,物理机总数4、按照可用分区类型,将容量指标按类型进行叠加,从而获得cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)、租户虚拟机总数、物理机总数的总容量区域、资源池、可用分区关系说明:区域是地理位置,每个区域下关联多个资源池,每个资源池包含多个可用分区 2.1 查询资源池总容量步骤1: 获取Token后面的步骤都需要在请求的header里面加上X-Auth-Token参数。接口调用示例如下:调用方法:PUT调用URL:https://{运维侧对外访问域名}/rest/plat/smapp/v1/oauth/token请求头:Accept:application/json Content-Type:application/json;charset=UTF-8请求body:{ "grantType": "password", "userName": "XXX", "value": "***"}响应示例:{ "accessSession": "xxxxxxxxxxxxxxx", "roaRand": "xxxxxxxxxxxxxxx", "expires": 1800, "additionalInfo": null}accessSession的值即为token值步骤2 获取区域列表调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/cmdb/v1/instances/SYS_BusinessRegion请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxxxx响应示例: { "objList": [ { "mgmtNodeCpuArch": "unknown", "timezone": "Asia/Shanghai", "businessModel": "BusinessModelOne", "language": "zh_CN", "type": "private_cloud", "storTypeOfMgmt": "fusionstorage", "manufacturer": "华为", "serviceScale": "200pm_2000vm", "businessNetworkType": "ipv4v6", "last_updated_by": "system", "solutionVersion": "8.5.0", "networkNodeType": "vm", "regionType": "master", "cloudPlatformType": "HCS_MANAGE", "id": "853FFE094A6D339E97E84AD6BF06A531", "last_Modified": 1741088802130, "solutionType": "type_i", "supportRegionDr": false, "supportAzHa": false, "last_update_date": 1741088802130, "externalGlobalDomainNamePostfix": "in-horizontal-integ-verif.com", "globalServiceScale": "200pm_2000vm", "class_Id": 1232, "globalId": "sa-fb-1", "mgmtNetworkType": "ipv4", "globalDomainNamePostfix": "in-horizontal-integ-verif.com", "resId": "853FFE094A6D339E97E84AD6BF06A531", "is_Local": true, "locales": "{\"en_us\":\"东莞\",\"zh_cn\":\"东莞\"}", "solutionScense": "hcs", "class_Name": "SYS_BusinessRegion", "ocRegionLevel": "normal_center", "historyVersionList": "[\"8.2.0\",\"8.2.0.SPC10\",\"8.2.1\",\"8.2.1.SPH30\",\"8.3.0\",\"8.3.0.SPC010\",\"8.3.1\"]", "name": "东莞", "nativeId": "sa-fb-1", "threeDCInTwoPlaces": false, "status": "normal" } ], "totalNum": 1, "pageSize": 20, "totalPageNo": 1, "currentPage": 1}这可以获得各个region的resId,用于后续查询region容量的入参步骤3 查询每个区域的cpu、memory(内存)、storage-pool(存储池)、eip(公网Ip)、bms(裸金属)、obs(对象存储)容量注:obs容量需HCS 8.3.0及以上版本支持查询。调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/capacity/v1/capbase/regions/{region_id}/resource-types/cpu,memory,storage-pool,eip,bms/current-capacities,region_id由步骤2获取请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxxxx响应示例:{ "cpu": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 3.7697449, "totalCapacity": { "unit": "核", "capacityValue": "42862", "displayCapacity": "42862 核" }, "allocatedCapacity": { "unit": "核", "capacityValue": "19870", "displayCapacity": "19870 核", "ratio": 46.358078 }, "freeCapacity": { "unit": "核", "capacityValue": "22992", "displayCapacity": "22992 核", "ratio": 53.641922 } }, "actualCapacity": { "totalCapacity": { "unit": "核", "capacityValue": "11370", "displayCapacity": "11370 核" }, "usedCapacity": { "ratio": 20.725105, "unit": "核", "capacityValue": "0", "displayCapacity": "0 核" }, "freeCapacity": { "ratio": 79.274895, "unit": "核", "capacityValue": "0", "displayCapacity": "0 核" } }, "collectTime": "", "updateTime": -1 }, "memory": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 0.9999996, "totalCapacity": { "unit": "GB", "capacityValue": "85597.70896911621", "displayCapacity": "85597.70896911621 GB" }, "allocatedCapacity": { "unit": "GB", "capacityValue": "56084.628160476685", "displayCapacity": "56084.628160476685 GB", "ratio": 65.52118 }, "freeCapacity": { "unit": "GB", "capacityValue": "29513.080971717834", "displayCapacity": "29513.080971717834 GB", "ratio": 34.47882 } }, "actualCapacity": { "totalCapacity": { "unit": "GB", "capacityValue": "85597.744140625", "displayCapacity": "85597.744140625 GB" }, "usedCapacity": { "ratio": 56.800365, "unit": "GB", "capacityValue": "48619.830875396455", "displayCapacity": "48619.830875396455 GB" }, "freeCapacity": { "ratio": 43.199635, "unit": "GB", "capacityValue": "36977.913265228545", "displayCapacity": "36977.913265228545 GB" } }, "collectTime": "", "updateTime": -1 }, "storagePool": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 203.3243, "totalCapacity": { "unit": "TB", "capacityValue": "1824.6783294677734", "displayCapacity": " 1824.6783294677734 TB" }, "allocatedCapacity": { "unit": "TB", "capacityValue": "1387.3134765625", "displayCapacity": "1387.3134765625 TB", "ratio": 76.03058 }, "freeCapacity": { "unit": "TB", "capacityValue": "437.36483573913574", "displayCapacity": "437.36483573913574 TB", "ratio": 23.969421 } }, "actualCapacity": { "totalCapacity": { "unit": "TB", "capacityValue": "897.4226493835449", "displayCapacity": "897.4226493835449 TB" }, "usedCapacity": { "unit": "TB", "capacityValue": "347.8443183898926", "displayCapacity": "347.8443183898926 TB", "ratio": 38.76037 }, "freeCapacity": { "unit": "TB", "capacityValue": "549.5783405303955", "displayCapacity": "549.5783405303955 TB", "ratio": 61.23963 } }, "collectTime": "", "updateTime": -1 }, "eip": null, "bms": { "cpu": { "isDataEmpty": "false", "actualCapacity": { "totalCapacity": { "unit": "核", "capacityValue": "824", "displayCapacity": "824 核" }, "usedCapacity": { "unit": "核", "capacityValue": "696", "displayCapacity": "696 核", "ratio": 84.46602 }, "freeCapacity": { "unit": "核", "capacityValue": "128", "displayCapacity": "128 核", "ratio": 15.53398 } }, "collectTime": "", "updateTime": -1 }, "memory": { "isDataEmpty": "false", "actualCapacity": { "totalCapacity": { "unit": "GB", "capacityValue": "5760", "displayCapacity": "5760 GB" }, "usedCapacity": { "unit": "GB", "capacityValue": "5376", "displayCapacity": "5376 GB", "ratio": 93.333336 }, "freeCapacity": { "unit": "GB", "capacityValue": "384", "displayCapacity": "384 GB", "ratio": 6.6666665 } }, "collectTime": "", "updateTime": -1 }, "disk": { "isDataEmpty": "false", "actualCapacity": { "totalCapacity": { "unit": "TB", "capacityValue": "92.7099609375", "displayCapacity": "92.7099609375 TB" }, "usedCapacity": { "unit": "TB", "capacityValue": "92.7099609375", "displayCapacity": "92.7099609375 TB", "ratio": 100.0 }, "freeCapacity": { "unit": "TB", "capacityValue": "0", "displayCapacity": "0 TB", "ratio": 0.0 } }, "collectTime": "", "updateTime": -1 } }, "gpu": null, "npu": null, "obs": { "physicalCluster": [ { "regionName": "贵安水平集成验证环境", "regionId": "853FFE094A6D339E97E84AD6BF06A531", "clusterName": "obscluster", "type": "hdd", "physicalTotal": "120.86 TB", "physicalUsed": "83.1549 TB", "physicalLeft": "37.7051 TB", "physicalRatio": "68.8027%", "businessTotal": "66.8759 TB", "businessUsed": "46.0124 TB", "businessLeft": "20.8635 TB", "businessRatio": "68.8027%" } ], "tenant": [ { "tenantName": "测试租户", "tenantId": "457141b1e227426fa9e710c1a1fb7e96", "regionName": "东莞", "regionId": "853FFE094A6D339E97E84AD6BF06A531", "bucketName": "obs-48a3", "bucketUsed": "4.4342 MB" }, { "tenantName": "测试租户", "tenantId": "457141b1e227426fa9e710c1a1fb7e96", "regionName": "东莞", "regionId": "853FFE094A6D339E97E84AD6BF06A531", "bucketName": "obs-7afb", "bucketUsed": "0 MB" } ], "collectTime": null, "updateTime": -1 }}针对每个指标,取超分后的容量值即可,如CPU这一指标,我们选取超分的值,即:oversubscriptionCapacity的值,包括总容量(totalCapacity),已分配容量(allocatedCapacity),剩余容量(freeCapacity)注:其中CPU的used和free没有返回具体核数,是因为这块actualCapacity指的是实际容量,就是超分前的物理核数,只提供使用率,不提供使用量。因为使用量会计算出小数,可能会出现使用量为0.X核数,这不是一个正常CPU的数据,是不合理的,所以当前不提供实际物理的使用量和剩余量。步骤4 查询每个区域虚拟机、物理机总数调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/capacity/v1/capbase/regions/{region_id}/statistics,region_id由步骤2获取请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxx响应示例:{ "host": { "isDataEmpty": "false", "normal": 12, "poweroff": 0, "fault": 0, "other": 0, "collectTime": "2020-02-04 16:04:53 CST", "updateTime": 1580803493996 }, "vm": { "isDataEmpty": "false", "running": 24, "stopped": 0, "hibernated": 1, "other": 0, "collectTime": "2020-02-04 16:04:53 CST", "updateTime": 1580803493996 }}host代表物理主机,vm代表租户虚拟机,您可以按照状态进行统计如果有多个region,您需要逐一查询每个region的资源容量,租户虚拟机,物理主机总数,然后按照指标类型相加获得资源池的总容量2.2 查询可用分区容量步骤1: 获取Token后面的步骤都需要在请求的header里面加上X-Auth-Token参数。接口调用示例如下:调用方法:PUT调用URL:https://{运维侧对外访问域名}/rest/plat/smapp/v1/oauth/token请求头:Accept:application/json Content-Type:application/json;charset=UTF-8请求body:{ "grantType": "password", "userName": "XXX", "value": "***"}响应示例:{ "accessSession": "xxxxxxxxxxxxx", "roaRand": "xxxxxxxxxxxxx", "expires": 1800, "additionalInfo": null}accessSession的值即为token值步骤2 获取可用分区列表调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/cmdb/v1/instances/SYS_Azone请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxx响应示例: "currentPage": 1}{ "objList": [ { "ownerType": "compute", "backendStorIps": "{\"murano\":\"160.132.61.2,160.132.62.2\"}", "backendStorName": "[\"murano\"]", "reuseStorage": false, "virtualizeType": "kvm", "regionName": "Global", "ownerId": "48CA71E447BE3CFE8E260A4CD9DB5BEF", "deviceName": "manage-az", "azLayer": "tiled", "ownerName": "nova_az7.dc7_FUSION_CLOUD_sa-fb-1", "confirmStatus": "unconfirmed", "id": "BC833A0095A63C988A79E52F6CC18029", "last_Modified": 1568754332671, "state": "", "vncPort": 8008, "manager": true, "manageAz": "na", "class_Id": 1058, "cpuArch": "x86", "resId": "BC833A0095A63C988A79E52F6CC18029", "resourcePoolName": "OpenStack_sa-fb-1", "keystoneId": "8E3B2BBADF433102BB566CD571C74882", "logicalRegionId": "853FFE094A6D339E97E84AD6BF06A531", "class_Name": "SYS_Azone", "heterogeneousStorage": false, "regionId": "C4CA4238A0B933828DCC509A6F75849B", "resourcePoolId": "25216A596C493169B7D106ECB32E83F8", "backendStorType": "ip_san", "name": "manage-az", "nativeId": "manage-az" }, { "ownerType": "compute", "backendStorIps": "{\"Business_Pool\":\"160.132.61.3,160.132.62.3\"}", "backendStorName": "[\"Business_Pool\"]", "globalName": "生态集成", "reuseStorage": false, "virtualizeType": "kvm", "regionName": "Global", "ownerId": "48CA71E447BE3CFE8E260A4CD9DB5BEF", "deviceName": "az7.dc7", "azLayer": "tiled", "ownerName": "nova_az7.dc7_FUSION_CLOUD_sa-fb-1", "confirmStatus": "unconfirmed", "id": "97122CC306D53D6584278F5D04210618", "last_Modified": 1572222270932, "state": "", "vncPort": 8008, "manager": false, "manageAz": "na", "class_Id": 1058, "cpuArch": "x86", "resId": "97122CC306D53D6584278F5D04210618", "resourcePoolName": "OpenStack_sa-fb-1", "tags": "{\"cloud_location\":[\"1\"],\"virtual_capability\":[\"KVM\"],\"arch_type\":[\"x86_64\"],\"storage_capability\":[\"OceanStor V3\"],\"display_name\":[\"生态集成\"],\"network_capability\":[\"neutron\"]}", "keystoneId": "8E3B2BBADF433102BB566CD571C74882", "logicalRegionId": "853FFE094A6D339E97E84AD6BF06A531", "class_Name": "SYS_Azone", "heterogeneousStorage": false, "regionId": "C4CA4238A0B933828DCC509A6F75849B", "resourcePoolId": "25216A596C493169B7D106ECB32E83F8", "backendStorType": "ip_san", "name": "生态集成", "nativeId": "az7.dc7" } ], "totalNum": 2, "pageSize": 20, "totalPageNo": 1, "currentPage": 1}这可以获得各个azone的resId,用于后续查询azone容量的入参,azone名称为“manage-az”的为管理分区,azone名称为其他的为租户分区步骤3 查询每个可用分区的cpu、memory(内存)、storage-pool(存储池)、bms(裸金属)容量调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/capacity/v1/capbase/azones/{azone_id}/resource-types/cpu,memory,storage-pool,bms/current-capacities,azone_id由步骤2获取可用分区的容量指标不包含公网IP(eip),支持查询裸金属服务器(bms)容量请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxx响应示例:{ "cpu": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 1.8688525, "totalCapacity": { "unit": "核", "capacityValue": "228", "displayCapacity": "228 核" }, "allocatedCapacity": { "unit": "核", "capacityValue": "32", "displayCapacity": "32 核", "ratio": 14.035088 }, "freeCapacity": { "unit": "核", "capacityValue": "196", "displayCapacity": "196 核", "ratio": 85.96491 } }, "actualCapacity": { "totalCapacity": { "unit": "核", "capacityValue": "122", "displayCapacity": "122 核" }, "usedCapacity": { "ratio": 0.69101924, "unit": "核", "capacityValue": "0", "displayCapacity": "0 核" }, "freeCapacity": { "ratio": 99.30898, "unit": "核", "capacityValue": "0", "displayCapacity": "0 核" } }, "collectTime": "", "updateTime": -1 }, "memory": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 1, "totalCapacity": { "unit": "GB", "capacityValue": "733.044921875", "displayCapacity": "733.044921875 GB" }, "allocatedCapacity": { "unit": "GB", "capacityValue": "41.181640625", "displayCapacity": "41.181640625 GB", "ratio": 5.6178875 }, "freeCapacity": { "unit": "GB", "capacityValue": "691.86328125", "displayCapacity": "691.86328125 GB", "ratio": 94.38211 } }, "actualCapacity": { "totalCapacity": { "unit": "GB", "capacityValue": "733.044921875", "displayCapacity": "733.044921875 GB" }, "usedCapacity": { "ratio": 3.8166666, "unit": "GB", "capacityValue": "27.977881326739", "displayCapacity": "27.977881326739 GB" }, "freeCapacity": { "ratio": 96.183334, "unit": "GB", "capacityValue": "705.067040548261", "displayCapacity": "705.067040548261 GB" } }, "collectTime": "", "updateTime": -1 }, "storagePool": { "isDataEmpty": "false", "oversubscriptionCapacity": { "oversubscriptionRatio": 300, "totalCapacity": { "unit": "TB", "capacityValue": "6.4072265625", "displayCapacity": " 6.4072265625 TB" }, "allocatedCapacity": { "unit": "TB", "capacityValue": "0.3447265625", "displayCapacity": "0.3447265625 TB", "ratio": 5.3802776 }, "freeCapacity": { "unit": "TB", "capacityValue": "6.0625", "displayCapacity": "6.0625 TB", "ratio": 94.61972 } }, "actualCapacity": { "totalCapacity": { "unit": "TB", "capacityValue": "2.1357421875", "displayCapacity": "2.1357421875 TB" }, "usedCapacity": { "unit": "TB", "capacityValue": "0.34735107421875", "displayCapacity": "0.34735107421875 TB", "ratio": 16.263718 }, "freeCapacity": { "unit": "TB", "capacityValue": "1.78839111328125", "displayCapacity": "1.78839111328125 TB", "ratio": 83.73628 } }, "collectTime": "", "updateTime": -1 }, "eip": null, "bms": null, "gpu": null, "npu": null}针对每个指标,取超分后的容量值即可,如CPU这一指标,我们选取超分的值,即:oversubscriptionCapacity的值,包括总容量(totalCapacity),已分配容量(allocatedCapacity),剩余容量(freeCapacity)注:其中CPU的used和free没有返回具体核数,是因为这块actualCapacity指的是实际容量,就是超分前的物理核数,只提供使用率,不提供使用量。因为使用量会计算出小数,可能会出现使用量为0.X核数,这不是一个正常CPU的数据,是不合理的,所以当前不提供实际物理的使用量和剩余量。步骤4 查询每个可用分区虚拟机、物理机总数调用方法:GET调用URL:https://{运维侧对外访问域名}/rest/capacity/v1/capbase/azones/{azone_id}/statistics,azone_id由步骤2获取请求头:Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:xxxxxxxxxxxxx响应示例:{ "host": { "isDataEmpty": "false", "normal": 4, "poweroff": 0, "fault": 0, "other": 0, "collectTime": "2020-02-04 16:34:53 CST", "updateTime": 1580805293995 }, "vm": { "isDataEmpty": "false", "running": 1, "stopped": 0, "hibernated": 1, "other": 0, "collectTime": "2020-02-04 16:34:53 CST", "updateTime": 1580805293995 }}host代表物理主机,vm代表租户虚拟机,您可以按照状态进行统计如果有多个azone,您需要逐一查询每个azone的资源容量,租户虚拟机,物理主机总数,然后按照指标类型相加获得管理分区、租户分区的总容量
上滑加载中
推荐直播
-
华为云码道 × 仓颉编程:工程化AI编码探索2026/05/27 周三 19:00-21:00
刘俊杰-华为云仓颉语言专家/李炎-华为云码道技术专家/王智鹏-OpenCangjie开源社区发起人
本场直播围绕华为云仓颉语言与华为云码道的深度结合,展示华为云智能编程从零基础到高效落地的完整生态能力。以华为云码道为引擎,仓颉语言为载体,带给大家日常提效、趣味创新到极速量产的开发体验。
回顾中
热门标签