• 物化视图优化
    一、物化视图是否适合你的场景?✅ 适合的核心原因实时大屏的聚合查询(如SUM/COUNT/AVG/GROUP BY)有两个典型特征,正好匹配物化视图的优势:查询重复且计算重:每次刷新都执行相同的聚合逻辑,数据库反复计算相同结果(比如按小时统计订单量、按区域统计在线人数);实时性有容忍度:多数 “实时大屏” 并非严格的 “毫秒级实时”,10 秒 / 1 分钟延迟可接受(若要求毫秒级,需结合实时计算框架)。物化视图会预计算并存储聚合查询的结果,大屏查询时直接读取预计算结果,无需实时扫描原始数据、执行聚合运算,能将数据库的聚合计算压力降低 90% 以上。❗ 不适合的极端场景若你的大屏要求毫秒级实时(比如金融交易大屏,数据变更后需立即展示),单纯的物化视图(依赖刷新机制)不够,需结合实时计算框架(如 Flink)。二、分层优化方案(从低成本到进阶,逐步落地)方案 1:基础优化(0 成本,快速见效)先优化聚合查询本身,减少数据库单次查询的开销,为后续优化打基础:1.1 优化聚合查询的索引为聚合查询的GROUP BY/WHERE字段创建复合索引 / 覆盖索引,加速原始聚合查询: -- 示例:按time、region分组统计订单金额(优化前查询:SELECT SUM(amount) FROM orders GROUP BY time, region WHERE date = '2025-12-23')-- 创建覆盖索引(包含分组字段+过滤字段+聚合字段)CREATE INDEX idx_orders_date_time_region ON orders (date, time, region) INCLUDE (amount); 核心:让聚合查询能通过索引直接完成(索引仅扫描),无需回表查原始数据。1.2 改写低效聚合 SQL避免COUNT(*)(需扫描全表):若有非空字段,改用COUNT(id);避免多层嵌套聚合:将子查询的聚合结果提前计算;合并重复查询:将几十条聚合查询中 “同源的计算逻辑” 合并(比如同一维度的 SUM/COUNT 可一次查询返回)。1.3 结果缓存(应用层 / 数据库层)应用层缓存:大屏后端将聚合查询结果缓存到 Redis/Memcached,设置过期时间(如 10 秒),刷新时优先读缓存,避免每次查数据库; # 伪代码:Redis缓存聚合结果def get_dashboard_data(): cache_key = "dashboard:agg_data:20251223" # 先查缓存 data = redis.get(cache_key) if data: return json.loads(data) # 缓存未命中,查数据库 data = db.query("SELECT SUM(amount) FROM orders GROUP BY region") # 缓存10秒 redis.setex(cache_key, 10, json.dumps(data)) return data  数据库层缓存:开启 PostgreSQL/openGauss 的shared_buffers、pg_prewarm(预热常用聚合表),减少磁盘 IO。方案 2:核心方案(物化视图,适配准实时大屏)针对大屏的聚合查询创建专用物化视图,按实时性要求选择刷新策略:2.1 步骤 1:创建针对性的物化视图将大屏的几十条聚合查询,按 “维度 + 指标” 归类,创建少量物化视图(而非几十条),覆盖所有大屏指标: -- 示例:创建订单聚合物化视图(覆盖大屏的“按区域/时段统计订单量、金额”)CREATE MATERIALIZED VIEW mv_dashboard_orders ASSELECT date, -- 日期维度 hour, -- 小时维度 region, -- 区域维度 COUNT(id) AS order_count, -- 订单量(指标1) SUM(amount) AS order_amount, -- 订单金额(指标2) AVG(amount) AS avg_amount -- 平均客单价(指标3)FROM ordersWHERE date >= CURRENT_DATE - INTERVAL '7 days' -- 仅保留近期数据,减少存储GROUP BY date, hour, region;-- 为物化视图创建索引(加速大屏查询)CREATE INDEX idx_mv_orders_date_hour_region ON mv_dashboard_orders (date, hour, region); 核心:一个物化视图覆盖多个大屏指标,避免创建几十条物化视图导致维护复杂。2.2 步骤 2:选择物化视图刷新策略刷新策略语法(PostgreSQL/openGauss)实时性适用场景定时刷新(推荐)REFRESH MATERIALIZED VIEW mv_dashboard_orders;(结合 crontab / 数据库定时任务,每 10 秒 / 1 分钟执行)准实时(10 秒~1 分钟延迟)90% 的业务大屏(如运营大屏、监控大屏)增量刷新(高效)REFRESH MATERIALIZED VIEW CONCURRENTLY mv_dashboard_orders;(需物化视图有主键)准实时(延迟更低)数据量超大(亿级),全量刷新耗时久实时刷新(触发器)基于原始表的 INSERT/UPDATE/DELETE 触发器,触发物化视图刷新近实时(秒级)实时性要求高(如风控大屏)实操建议:准实时大屏(1 分钟延迟):用crontab每 1 分钟执行一次REFRESH MATERIALIZED VIEW;数据量超大时:用CONCURRENTLY增量刷新(不锁表,不影响大屏查询);需先为物化视图创建主键(增量刷新要求): -- 为物化视图添加主键(增量刷新前提)ALTER MATERIALIZED VIEW mv_dashboard_orders ADD PRIMARY KEY (date, hour, region);  2.3 步骤 3:大屏查询物化视图将大屏的查询语句改为直接读取物化视图,而非原始表: -- 大屏查询:获取今日各区域小时级订单量(直接查物化视图,毫秒级返回)SELECT hour, region, order_count FROM mv_dashboard_orders WHERE date = CURRENT_DATE; 方案 3:进阶方案(适配高实时 / 超大数据量)若你的大屏数据量超 10 亿级,或实时性要求 < 10 秒,需引入专用计算 / 存储层:3.1 读写分离 + 专用统计库将聚合查询路由到只读副本,避免影响主库的业务写入;搭建专用的 “统计数据库”,定时将原始数据同步到统计库,大屏查询仅访问统计库。3.2 引入 OLAP 引擎(ClickHouse/StarRocks)将聚合查询卸载到 OLAP 引擎(专为聚合分析优化),原始业务库仅保留交易数据;实时同步业务库数据到 ClickHouse(通过 CDC 工具如 Debezium),大屏直接查询 ClickHouse 的聚合结果(比 PostgreSQL 快 10~100 倍)。3.3 实时计算框架(Flink/Spark Streaming)对毫秒级实时大屏:用 Flink 消费业务库的 binlog,实时计算聚合指标,将结果写入 Redis/ClickHouse,大屏直接读结果;优势:聚合计算完全脱离业务数据库,数据库仅承担交易写入,无查询压力。方案 4:临时应急方案(快速降压力)若暂时无法落地物化视图 / OLAP,可临时开启数据库的 “结果缓存”: -- PostgreSQL/openGauss 开启查询结果缓存(会话级)SET enable_result_cache = on;-- 全局开启(需重启数据库)ALTER SYSTEM SET enable_result_cache = on; 注意:仅适合查询结果变化慢的场景,且缓存命中率依赖查询的重复性。三、关键注意事项物化视图的存储开销:物化视图会占用额外存储,建议仅保留大屏所需的近期数据(如近 7 天),定期清理历史数据;刷新锁问题:全量刷新物化视图会锁表(大屏查询会阻塞),建议用CONCURRENTLY增量刷新,或在低峰期刷新;实时性权衡:不要盲目追求 “毫秒级实时”,先确认大屏的实际需求(多数业务大屏 1 分钟延迟完全可接受);监控与调优:通过EXPLAIN ANALYZE验证物化视图的查询是否走索引,监控物化视图刷新耗时和数据库负载。总结一下下核心方案:物化视图是解决大屏聚合查询压力的最优选择(准实时场景),需按 “维度 + 指标” 创建专用物化视图,搭配定时 / 增量刷新;基础优化:先通过索引、SQL 改写、应用层缓存快速降低单次查询开销;进阶优化:超大数据量 / 高实时要求时,引入 OLAP 引擎(ClickHouse)或实时计算框架(Flink);关键原则:将聚合计算 “预计算”(物化视图 / Flink),避免数据库实时重复计算,是降低压力的核心逻辑。
  • JSONB优化
    一、核心解决方案:按查询场景建对应索引JSONB 字段的索引需和查询条件的操作符匹配,优化器才能识别,以下是最常用的 3 种索引类型:方案 1:函数索引(最推荐,匹配->>操作符)这是和你的查询语句(data->>'status' = 'active')完全匹配的索引类型,优化器最容易识别,实现最简单。1.1 创建索引(精准匹配查询操作)  -- 针对data字段的status属性创建函数索引(->>操作符的结果)CREATE INDEX idx_table_data_status ON 你的表名 ((data->>'status'));-- 若需要区分大小写/特殊场景,可加函数(如转小写)CREATE INDEX idx_table_data_status_lower ON 你的表名 ((lower(data->>'status'))); 语法说明:(data->>'status')外层的括号必须加,因为->>是操作符,PostgreSQL/openGauss 要求函数索引的表达式必须用括号包裹;索引作用:直接将data->>'status'的结果(字符串)作为索引键,查询时无需计算,直接匹配索引。1.2 适配的查询语句 -- 基础查询(直接匹配索引)SELECT * FROM 你的表名 WHERE data->>'status' = 'active';-- 若建了小写函数索引,查询需对应SELECT * FROM 你的表名 WHERE lower(data->>'status') = 'active'; 方案 2:JSONB GIN 索引(更高效,匹配@>操作符)GIN(通用倒排索引)是 JSONB 字段的专用索引,查询效率比函数索引更高(尤其是 JSONB 字段内容复杂、属性多的场景),但需要调整查询条件的写法。2.1 创建 GIN 索引(两种类型) -- 类型1:通用GIN索引(支持所有JSONB操作符,如@>、->>、?等,稍占空间)CREATE INDEX idx_table_data_gin ON 你的表名 USING GIN (data);-- 类型2:优化版GIN索引(jsonb_path_ops,仅支持@>操作符,空间更小、速度更快,推荐)CREATE INDEX idx_table_data_gin_path ON 你的表名 USING GIN (data jsonb_path_ops); 2.2 适配的查询语句(需调整为@>操作符) -- 用@>操作符匹配JSONB包含关系,触发GIN索引SELECT * FROM 你的表名 WHERE data @> '{"status":"active"}'::jsonb; 核心优势:当 JSONB 字段有多个属性需要过滤(如status='active' AND type='user'),GIN 索引仍能高效支持: -- 多属性过滤,GIN索引依然生效SELECT * FROM 你的表名 WHERE data @> '{"status":"active", "type":"user"}'::jsonb;  方案 3:复合索引(多条件查询场景)如果你的查询除了 JSONB 的 status 属性,还用到其他字段(如id、create_time),可创建复合索引进一步提速。3.1 创建复合索引 -- 示例:JSONB的status属性 + 普通字段create_timeCREATE INDEX idx_table_data_status_create ON 你的表名 ((data->>'status'), create_time);-- 示例:JSONB的status属性 + JSONB的type属性(双JSONB属性)CREATE INDEX idx_table_data_status_type ON 你的表名 ((data->>'status'), (data->>'type')); 3.2 适配的查询语句 -- 多条件查询,走复合索引SELECT * FROM 你的表名 WHERE data->>'status' = 'active' AND create_time > '2025-01-01'; 二、验证索引是否生效创建索引后,必须通过执行计划确认是否走索引,避免白忙活: -- openGauss/PostgreSQL 查看执行计划(带实际执行统计)EXPLAIN ANALYZE SELECT * FROM 你的表名 WHERE data->>'status' = 'active'; 生效的判断标准:执行计划中出现Index Scan using idx_table_data_status(函数索引)或Bitmap Index Scan on idx_table_data_gin(GIN 索引)→ 索引生效;若仍显示Seq Scan(全表扫描):先执行ANALYZE 你的表名;更新统计信息;检查匹配的数据占比(若status='active'占比 > 30%,优化器会选择全表扫描,属正常现象);确认索引类型和查询操作符匹配(如 GIN 索引需用@>,函数索引需用->>)。三、关键注意事项字段类型必须是 JSONB:JSON 字段(非 JSONB)不支持上述所有索引,若字段是 JSON 类型,先转换为 JSONB: -- 转换JSON字段为JSONB(备份后执行)ALTER TABLE 你的表名 ALTER COLUMN data TYPE jsonb USING data::jsonb;  索引选择原则:仅过滤单个 JSONB 属性(如仅 status)→ 优先函数索引(简单、匹配度高);过滤多个 JSONB 属性 / 频繁多条件查询→ 优先 GIN 索引(jsonb_path_ops);写入开销平衡:索引会增加 INSERT/UPDATE/DELETE 的开销(GIN 索引 > 函数索引),对写入频繁的表,避免创建过多 JSONB 索引;避免过度索引:不要为 JSONB 的所有属性建索引,仅针对高频过滤的属性创建。总结一下下核心方案:针对data->>'status' = 'active',优先创建函数索引(CREATE INDEX ... ((data->>'status'))),直接匹配查询条件;高效方案:若需多属性过滤,改用 GIN 索引(USING GIN (data jsonb_path_ops)),并将查询条件调整为data @> '{"status":"active"}'::jsonb;验证关键:通过EXPLAIN ANALYZE确认索引生效,数据占比过高时全表扫描属正常优化器决策。
  • 华为 NE 路由器配置所有 VRF 共用 public 接口传递 BGP 路由
    一、核心原理将公网接口 (public interface) 作为所有 VRF 的共用出口,通过 BGP 路由引入机制实现各 VRF 路由通过同一公网接口发布和接收,无需为每个 VRF 单独配置出口。二、配置步骤1. 配置前准备 <NE系列路由器> system-view[NE系列路由器] bgp 65001 // 配置BGP进程(AS号根据实际情况修改)[NE系列路由器-bgp] router-id 1.1.1.1 // 配置BGP Router ID[NE系列路由器-bgp] quit 2. 配置公网接口 [NE系列路由器] interface GigabitEthernet0/0/0 // 进入公网接口[NE系列路由器-GigabitEthernet0/0/0] ip address 202.100.1.1 24 // 配置公网IP[NE系列路由器-GigabitEthernet0/0/0] quit // 公网接口**不绑定任何VRF**,这是关键 3. 配置 BGP 公网邻居 [NE系列路由器] bgp 65001[NE系列路由器-bgp] peer 202.100.1.2 as-number 65002 // 配置公网对端邻居[NE系列路由器-bgp] peer 202.100.1.2 connect-interface GigabitEthernet0/0/0 // 指定公网接口为BGP连接接口[NE系列路由器-bgp] quit 4. 为每个 VRF 配置路由引入到公网 BGP对每个 VRF 执行以下步骤:  // 以VRF1为例[NE系列路由器] ip vpn-instance vrf1 // 创建/进入VRF[NE系列路由器-vpn-instance-vrf1] route-distinguisher 1:1 // 配置RD[NE系列路由器-vpn-instance-vrf1] vpn-target 1:1 export-extcommunity // 配置VPN Target[NE系列路由器-vpn-instance-vrf1] vpn-target 1:1 import-extcommunity[NE系列路由器-vpn-instance-vrf1] quit// 在BGP中引入VRF1路由[NE系列路由器] bgp 65001[NE系列路由器-bgp] ipv4-family vpn-instance vrf1 // 进入VRF1的BGP地址族[NE系列路由器-bgp-vrf1] import-route direct // 引入VRF1直连路由(根据需要可引入静态/OSPF/BGP等)[NE系列路由器-bgp-vrf1] quit// 将VRF1路由引入到公网BGP表[NE系列路由器-bgp] import-rib vpn-instance vrf1 // 关键命令,将VRF1路由引入公网BGP[NE系列路由器-bgp] quit 5. 配置公网 BGP 路由发布到各 VRF (可选,如需接收公网路由)  [NE系列路由器] bgp 65001[NE系列路由器-bgp] ipv4-family unicast // 进入公网BGP IPv4单播地址族// 对每个VRF执行以下命令[NE系列路由器-bgp] export-rib vpn-instance vrf1 // 将公网BGP路由发布到VRF1[NE系列路由器-bgp] quit 三、验证配置1. 检查 BGP 路由引入情况 [NE系列路由器] display bgp routing-table // 查看公网BGP表中是否有来自各VRF的路由[NE系列路由器] display bgp vpn-instance vrf1 routing-table // 查看VRF1的BGP路由表 2. 测试流量转发 // 在VRF1中ping公网[NE系列路由器] ping -vpn-instance vrf1 202.100.1.2// 从公网ping VRF1内的地址(需公网对端配合) 四、关键配置说明公网接口不绑定任何 VRF:公网接口保持 "裸奔" 状态,不使用ip binding vpn-instance命令,这是实现所有 VRF 共用的基础路由引入机制:import-rib vpn-instance vrf1:将 VRF1 的 BGP 路由引入公网 BGP 表,使公网邻居能收到该 VRF 路由export-rib vpn-instance vrf1(可选):将公网 BGP 路由发布到 VRF1,使 VRF1 内设备能访问公网注意事项:确保各 VRF 的 RD 值和 VPN Target 配置正确且唯一公网接口需配置正确的 IP 地址和路由如需要 NAT 转换,在公网接口配置 NAT 策略 (不在 VRF 内配置)五、配置优化建议使用路由策略过滤: // 配置路由策略,只允许特定VRF路由通过[NE系列路由器] route-policy VRF_FILTER permit node 10[NE系列路由器-route-policy] if-match vpn-instance vrf1 vrf2 // 只匹配vrf1和vrf2[NE系列路由器-route-policy] quit// 在引入时应用策略[NE系列路由器] bgp 65001[NE系列路由器-bgp] import-rib vpn-instance vrf1 route-policy VRF_FILTER[NE系列路由器-bgp] quit 性能优化:对大型网络,考虑使用 BGP 路由反射器 (RR) 减少 IBGP 连接为频繁变化的 VRF 路由配置路由聚合,减少路由数量总结一下下华为 NE 路由器配置所有 VRF 共用 public 接口传递 BGP 路由的核心是:公网接口不绑定任何 VRF,通过import-rib和export-rib命令实现 VRF 路由与公网 BGP 的双向互通。配置完成后,所有 VRF 均可通过同一公网接口发送和接收 BGP 路由,简化了网络架构,提高了管理效率。
  • 数据库 OR/IN 条件优化
    数据库优化器判断走索引的成本高于全表扫描(或索引本身 / 统计信息有问题)一、先搞清楚:为什么 OR/IN 走不了索引?首先排除基础问题,这是优化的前提:索引本身问题:没给status建单列索引,或复合索引中status不是先导列(比如索引是(id, status),查status走不了);索引失效(比如字段有隐式转换:status是varchar但查status=1,或用了函数:upper(status)='A')。数据分布问题:匹配的数据占比太高(比如A/B/C占表总数据的 30% 以上),优化器认为 “索引扫描 + 回表” 的成本 > 全表扫描,会主动放弃索引。统计信息过期:数据库的表统计信息没更新,优化器误判数据分布(比如实际匹配数据仅 5%,但统计信息显示占 50%)。IN/OR 的底层逻辑:多数数据库(openGauss/PostgreSQL/Mysql)中,IN会被优化器等价转换为OR,所以改写法本质没区别。二、分层优化方案(从低成本到进阶)方案 1:先解决基础问题(必做,0 成本)1.1 检查并修复索引 -- 1. 确认status字段是否有有效索引(openGauss/PostgreSQL)SELECT indexname, indexdef FROM pg_indexes WHERE tablename = '你的表名' AND indexdef LIKE '%status%';-- 2. 若没有索引,创建单列索引(基础操作)CREATE INDEX idx_表名_status ON 你的表名(status);-- 3. 若有复合索引,确保status是先导列(比如优化前:(id, status) → 优化后:(status, id))-- 删除无效复合索引DROP INDEX IF EXISTS idx_表名_id_status;-- 创建以status为先导的复合索引(如果查询还用到其他字段)CREATE INDEX idx_表名_status_id ON 你的表名(status, id); 1.2 更新统计信息(关键!)统计信息过期是优化器误判的高频原因: -- openGauss/PostgreSQL 更新表统计信息ANALYZE 你的表名;-- MySQL 更新统计信息ANALYZE TABLE 你的表名; 1.3 避免隐式转换 / 函数操作 -- 错误(隐式转换,索引失效):status是varchar,查数字WHERE status = 1; -- 正确:保持类型一致WHERE status = '1';-- 错误(函数操作,索引失效)WHERE upper(status) = 'A';-- 正确:要么改查询(避免函数),要么建函数索引CREATE INDEX idx_表名_upper_status ON 你的表名(upper(status)); 方案 2:低成本优化(优先选,效果立竿见影)如果基础问题解决后仍走不了索引,核心思路是降低索引扫描的成本,让优化器愿意走索引。2.1 用 “覆盖索引” 替代普通索引(最推荐)如果查询只需要少数字段(比如id, status, name),创建覆盖索引(包含查询所需所有字段),避免 “索引扫描 + 回表” 的成本,优化器会优先走索引: -- 假设你的查询是:SELECT id, status, name FROM 表名 WHERE status IN ('A','B','C');-- 创建覆盖索引(包含查询的所有字段)CREATE INDEX idx_表名_status_cover ON 你的表名(status) INCLUDE (id, name); -- openGauss/PostgreSQL-- MySQL 写法(复合索引替代)CREATE INDEX idx_表名_status_cover ON 你的表名(status, id, name); 原理:覆盖索引直接从索引文件返回所有需要的字段,无需回表查原数据,成本大幅降低,优化器会主动走索引。2.2 拆分 OR/IN 为 UNION ALL(适合匹配数据占比中等的场景)将IN拆分为多个=条件 +UNION ALL,强制每个子查询走索引: -- 优化前(走不了索引)SELECT * FROM 你的表名 WHERE status IN ('A','B','C');-- 优化后(每个子查询走idx_表名_status索引)SELECT * FROM 你的表名 WHERE status = 'A'UNION ALLSELECT * FROM 你的表名 WHERE status = 'B'UNION ALLSELECT * FROM 你的表名 WHERE status = 'C'; 注意:用UNION ALL(不去重)而非UNION(去重,有额外成本),如果数据有重复再考虑UNION。2.3 临时强制走索引(仅应急用)如果优化器仍 “固执” 不走索引,可临时强制(不推荐长期用,可能适配性差): -- openGauss/PostgreSQL 强制走索引SELECT * FROM 你的表名 FORCE INDEX (idx_表名_status) WHERE status IN ('A','B','C');-- MySQL 强制走索引SELECT * FROM 你的表名 USE INDEX (idx_表名_status) WHERE status IN ('A','B','C'); 方案 3:进阶优化(适合数据量超大 / 匹配占比高的场景)如果status='A/B/C'的数据占比超过 40%,全表扫描本身是合理的,此时优化方向是 “减少全表扫描的成本”:3.1 按 status 分区表(最优解)对表按status做列表分区,查询时直接扫描目标分区(比全表扫描快 10 倍 +): -- openGauss/PostgreSQL 创建列表分区表(示例)CREATE TABLE 你的表名 ( id INT, status VARCHAR(10), name VARCHAR(50)) PARTITION BY LIST (status);-- 创建A/B/C分区CREATE PARTITION 表名_p_a FOR VALUES IN ('A');CREATE PARTITION 表名_p_b FOR VALUES IN ('B');CREATE PARTITION 表名_p_c FOR VALUES IN ('C');-- 其他状态的分区CREATE PARTITION 表名_p_other FOR VALUES IN ('D','E','F');-- 查询时仅扫描A/B/C分区,无需全表SELECT * FROM 你的表名 WHERE status IN ('A','B','C'); 3.2 用 = ANY 替代 IN(小技巧,部分数据库有效)部分数据库(如 openGauss)对=ANY的优化比IN更友好: -- 替代 IN ('A','B','C')SELECT * FROM 你的表名 WHERE status = ANY (ARRAY['A','B','C']); -- openGauss/PostgreSQL-- MySQL 写法SELECT * FROM 你的表名 WHERE status = ANY (('A','B','C')); 三、验证优化效果优化后一定要验证是否走索引,避免白忙活:-- openGauss/PostgreSQL 查看执行计划 EXPLAIN ANALYZE SELECT * FROM 你的表名 WHERE status IN ('A','B','C'); -- MySQL 查看执行计划 EXPLAIN SELECT * FROM 你的表名 WHERE status IN ('A','B','C');   执行计划中出现Index Scan using idx_表名_status(PostgreSQL)或type: range(MySQL),说明走索引成功;若还是Seq Scan(全表扫描),说明匹配数据占比确实太高,建议用分区表。总结优先排查基础问题:确保status有有效索引、统计信息更新、无隐式转换 / 函数操作;核心优化手段:创建覆盖索引(避免回表)或拆分OR/IN为UNION ALL,让优化器愿意走索引;进阶方案:数据占比高时用分区表,这是大表的终极优化方式;临时方案:强制走索引仅用于应急,不推荐长期依赖。
  • [低码编排] 【服务构建器系列课程】如何通过服务构建器实现云内外协同
    【服务构建器系列课程】如何通过服务构建器实现云内外协同   ~~~视频课程敬请期待~~~ 
  • [低码编排] 【服务构建器系列课程】如何通过服务构建器将零散的IT能力标准化-高阶能力
    【服务构建器系列课程】如何通过服务构建器将零散的IT能力标准化-高阶能力    ~~~视频课程敬请期待~~~  
  • [低码编排] 【服务构建器系列课程】如何通过服务构建器将零散的IT能力标准化-基础能力
    【服务构建器系列课程】如何通过服务构建器将零散的IT能力标准化-基础能力    ~~~视频课程敬请期待~~~
  • [低码编排] 【服务构建器系列课程】手把手教你重编一个弹性云服务器
    【服务构建器系列课程】手把手教你重编一个弹性云服务器   ~~~视频课程敬请期待~~~  
  • [低码编排] 【服务构建器系列课程】服务构建器基础入门
    【服务构建器系列课程】服务构建器基础入门   ~~~视频课程敬请期待~~~
  • [集成开发] 【ManageOne运营侧】代维管理
    1 场景说明本贴所写指导适用于华为云Stack ManageOne 6.5.x、8.x版本。从ManageOne的租户模型中,我们了解到一级VDC管理员只能管理其所在的VDC,不能跨VDC管理,如果现网项目中有多个一级VDC,就需要第三方系统保存多个一级VDC管理员账号,存在安全风险且维护困难;此时,可以通过代维管理员,将多个一级VDC加入到指定的代维管理员的代维租户列表,这样第三方系统就可以使用一个账号管理多个一级VDC了;代维管理员实际上是通过置换token的方式,获得对一级VDC的管理权限,一旦代维管理员获得了对一级VDC管理权限,就如同一级VDC管理员一样,可以对一级VDC内的子级VDC、project、用户进行管理,也可以在指定的project中申请资源;若使用代维管理员账号在指定VDC中申请云资源,会占用指定VDC的资源配额;若使用代维管理员账号在指定VDC中删除云资源,会释放指定VDC中占用的资源配额。本帖主要给出如何使用代维管理员账号获得指定VDC、project的管理权限(即指定VDC、project的token),对VDC、project、用户和云资源的管理2 准备工作2.1获取调用接口的IP和域名参考帖子:cid:link_0,获取APIGateway的浮动IP,IAM对外访问域名和运营面对外访问域名。2.2 获取运营管理员账号请联系项目中的华为服务工程师,获取ManageOne运营管理员账号密码。2.3 创建代维管理员(已创建可跳过)6.5.1版本参考如下步骤创建代维管理员:步骤1 使用运营管理员登录ManageOne运营面,依次点击“租户”-->“租户代维”,打开代维租户管理界面,点击“创建代维管理员”,如下图所示:步骤2 在创建代维管理员界面,填写用户名,密码,然后选择需要代维的租户列表,并点击“创建”,如下图所示:8.0版本,请参考如下步骤创建代维管理员步骤1 使用运营管理员登录ManageOne运营面,依次点击“系统”-->“权限管理”-->"用户",打开用户管理界面,点击“创建用户”,如下图所示:步骤2 在创建用户界面中,选择“代维”,填写用户名,密码,然后选择需要代维的租户列表,并点击“创建”,如下图所示:3 接口调用步骤代维管理员置换指定租户、project下的token流程如下:步骤1 获取代维管理员的租户名使用代维管理员用户登录ManageOne运营面,进入“选择代维租户和资源集”页面后,按“F12”(以Chrome浏览器为例),选择“网络”页签,然后刷新页面,在控制台获取到的链接列表中,找到“me”,然后在右侧“预览”页签中,找到“domainName”即代为管理员的租户名。(注:此租户名通常为“audn_”开头,与代维用户代管的租户名不相同)。步骤2 获取代维管理员token接口URI:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Content-Type:application/json;charset=UTF-8Accept:application/json; charset=UTF-8请求体:{ "auth": { "identity": { "methods": ["password"], "password": { "user": { "domain": { "name": "audn_1f7af046-6567-4ec6-93a3-470" }, "name": "XXXXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "audn_1f7af046-6567-4ec6-93a3-470" } } }}这里domain name的值为代维管理员所属的domain的名称,由步骤1获得name和password分别为代维管理员的用户名和密码响应头(Header)示例:Transfer-Encoding →chunked Connection →keep-alive X-Subject-Token →MIIEJSDVVDFASKoZIhvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcNAQcCZzTOuAZ8这里我们从响应头中获得了代维管理员的token(X-Subject-Token)。响应体(Body)示例:{    "token": {        "expires_at": "2022-06-24T02:49:18.402000Z",        "methods": [            "password"        ],        "catalog": [],        "domain": {            "name": "audn_1f7af046-6567-4ec6-93a3-470",            "id": "095543b046514bdbab988d4ad3089a28"        },        "roles": [            {                "name": "te_admin",                "id": "985dc76053f94685a15eafc3cd9f5da2"            },            {                "name": "mo_agency",                "id": "8299bcd6d9464c55a6bf963f0d8e678c"            },            {                "name": "te_agency",                "id": "fc85d26a9db847f293265c8c46e19a2c"            },            {                "name": "secu_admin",                "id": "d9920b033be744f1996d1e84281c94e8"            },            {                "name": "vdc_adm",                "id": "4d0cd24102504767b33fd55d915c55e8"            }        ],        "issued_at": "2022-06-23T02:49:18.402000Z",        "user": {            "domain": {                "name": "audn_1f7af046-6567-4ec6-93a3-470",                "id": "095543b046514bdbab988d4ad3089a28"            },            "name": "hzp_dw",            "id": "ef5dbdcce2a047bb8b10fb69507a5bd1"        }    }}取响应体中的token.user.id为代为管理员的用户id,此环境为ef5dbdcce2a047bb8b10fb69507a5bd1。步骤3 查询代维管理员代维的租户列表这里我们查询代维管理员详情,获得该代维管理员代维的租户列表,为后续置换token做准备。接口URI:https://{运营侧北向接口对外域名}/rest/vdc/v3.0/agencies/users/{agency_user_id}(此处agency_user_id为步骤2中获得的代维管理员的用户ID)请求方法:GET请求头(这里的token为步骤1中获取的运营管理员token):Content-Type:application/json;charset=UTF-8Accept:application/json; charset=UTF-8X-Auth-Token:MIIEMQYJKoZIhvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcNAQcCZzTOuXR9请求体:NULL响应体(示例):{    "limit_access": "false",    "lock_period": null,    "login_config": null,    "whiteList": [],    "user": {        "resource_tenant_id": "",        "level": null,        "roles": [            {                "id": "00000000-0000-0000-0000-000000000004",                "name": "agencyManager",                "display_name": "Agency Admin",                "user_role_type": null,                "description": "role_role_view_para_desc_content_agencyMananger_value"            }        ],        "trust_vdc_list": [            {                "name": "hzp_vdc",                "id": "16ea1a6e341d44e385fb3cb077c3b63f",                "description": "",                "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",                "domain_name": "hzp_vdc",                "agency_name": "aN_101e3806-761e-4264-ad60-cfca0",                "agency_id": "3d65090751424616b93ded9068394e8c"            },            {                "name": "hzp_vdc_2",                "id": "3dd28cba7a28416cbab8b62bfe0f9e02",                "description": "",                "domain_id": "3dd28cba7a28416cbab8b62bfe0f9e02",                "domain_name": "hzp_vdc_2",                "agency_name": "aN_5a1067a9-f94d-4bcf-a8be-f9693",                "agency_id": "c31134a891bd45feb97861c5d732d1e7"            }        ],        "description": "",        "areacode": null,        "createAt": null,        "enabled": "true",        "vdc_id": null,        "domain_id": "095543b046514bdbab988d4ad3089a28",        "domain_name": "audn_1f7af046-6567-4ec6-93a3-470",        "user_type": "0",        "display_name": null,        "phone": "",        "name": "hzp_dw",        "id": "ef5dbdcce2a047bb8b10fb69507a5bd1",        "email": ""    }}trust_vdc_list中所列出的清单即为该代维管理员所代维的租户列表,这里我们需要获取被代维的租户的名称(trust_vdc_list中name的值),租户的ID(trust_vdc_list中domain_id的值)和代维名称(trust_vdc_list中agency_name的值),为后续置换token做准备。 步骤4 查询指定租户中的project列表(可选)若您不需要拥有指定的project中资源的管理权限,这一步可以跳过。接口URI:https://{运营侧北向接口对外域名}/rest/vdc/v3.1/agencies/projects?domain_id={domain_id}(domain_id为被代维的租户的domain ID,由步骤3获取trust_vdc_list中domain_id的值)这里需要使用代维管理员的token,由步骤4获取请求方法:GET请求头:Content-Type:application/json;charset=UTF-8Accept:application/json; charset=UTF-8X-Auth-Token:MIIEJSDVVDFASKoZIhvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcNAQcCZzTOuAZ8请求体:NULL响应体(示例):{    "total": 3,    "projects": [        {            "id": "6934bce513274fd9b20955c3db9728f0",            "name": "solution-advance-1_hzp_project",            "description": "",            "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",            "enabled": true,            "tenant_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",            "is_shared": false,            "tenant_name": "hzp_vdc",            "create_user_name": "bss_admin",            "create_user_id": "9d30a3d12bac4d879e9e9fb4274b76ed",            "regions": [                {                    "region_id": "solution-advance-1",                    "region_name": {                        "zh_cn": "东莞",                        "en_us": "东莞"                    },                    "region_status": "normal"                }            ]        },        {            "id": "630b7dd529344d56bf38c0a6ecab4fc6",            "name": "solution-advance-1_hzp_project2",            "description": "",            "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",            "enabled": true,            "tenant_id": "bf588c5a-8d05-49bd-a93d-e937286893e5",            "is_shared": false,            "tenant_name": "hzp_vdc2",            "create_user_name": "hzp_admin",            "create_user_id": "d0cc23141778469f82854c5269d3d9ee",            "regions": [                {                    "region_id": "solution-advance-1",                    "region_name": {                        "zh_cn": "东莞",                        "en_us": "东莞"                    },                    "region_status": "normal"                }            ]        },        {            "id": "51792d0ec2624c98b316fde97956531e",            "name": "solution-advance-2_hzp_project",            "description": "",            "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",            "enabled": true,            "tenant_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",            "is_shared": false,            "tenant_name": "hzp_vdc",            "create_user_name": "bss_admin",            "create_user_id": "9d30a3d12bac4d879e9e9fb4274b76ed",            "regions": [                {                    "region_id": "solution-advance-2",                    "region_name": {                        "zh_cn": "华南",                        "en_us": "华南"                    },                    "region_status": "normal"                }            ]        }    ]} 此处我们获得了指定租户下的project列表,我们需要取到project的ID步骤5 获取代维管理员在指定租户、指定project中的token获取代维管理员在指定租户中的token,我们需要用到步骤4中获得的代为管理员的token,步骤3中获得的被代维租户的租户名和代维名称。请求URL: https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头(请求头中token为步骤4中获得的代维管理员token):Accept:application/json Content-Type:application/json;charset=UTF-8 X-Auth-Token:MIIEJSDVVDFASKoZIhvXXXXXXXXXXXXXXXXXXXXXXXXXXXXXcNAQcCZzTOuAZ8请求体样例1(指定租户、指定projet):{    "auth": {        "identity": {            "methods": ["assume_role"],            "assume_role": {                "domain_name": "hzp_vdc",               "xrole_name": "aN_101e3806-761e-4264-ad60-cfca0"            }        },        "scope": {            "project": {                "domain": {                    "name": "hzp_vdc"                    },               "name": "solution-advance-1_hzp_project"            }        }    }}使用此请求体置换得到的token,可以对指定的租户中的VDC、用户和project进行管理,还可以管理指定的project中的资源(scope中指定的project)。请求体样例2(指定租户,不指定project):{ "auth": { "identity": { "methods": ["assume_role"], "assume_role": { "domain_name": "hzp_vdc", "xrole_name": "aN_101e3806-761e-4264-ad60-cfca0", "restrict": { "roles": ["secu_admin", "te_admin", "vdc_owner", "vdc_adm", "tag_adm"] } } }, "scope": {   "domain": { "name": "hzp_vdc" } } }}使用此请求体置换得到的token,可以对指定的租户中的VDC、用户和project进行管理,不能管理资源。请求体中参数说明如下:methods:获取token的方法,此处我们采用置换token方式,故而取值为:assume_roledomain_name:被代维的租户的租户名,从步骤3获取的trust_vdc_list中name的值xrole_name:代为管理员在指定租户中的代维名称,从步骤3获取的trust_vdc_list中agency_name的值restrict:置换所得的token所拥有的权限,参考样例填写即可scope中的project.domain.name:与domain_name取值相同scope中的project.id:需要代维的project的ID,由步骤4的响应体中获取响应头示例:Content-Type →application/json; charset=utf-8 Transfer-Encoding →chunked Connection →keep-alive X-Subject-Token →MIIFCAYJKoZIhvcNAQcCoIIE+TCCBPUXXXXXgSe63UKRXxi5AxhHv-0U=从响应头中,我们获得了置换的token。如果需要在不同的project中管理资源,需要再次置换token,获得目标project的权限 
  • [集成开发] 【ManageOne运营侧】查询资源集
    1 VDC模型介绍请参考此链接:cid:link_02 约束条件本文适用于ManageOne 6.5.0及以上版本。3 场景说明本文档用于指导开发者获取租户和用户信息,便于第三方系统同步ManageOne的组织架构以及用户信息(如用户名、电话、email等)。4 租户信息同步目录:4.1 准备工作 4.2 获取管理员token 4.3 Project(资源集/项目) 1. 查询VDC关联的Project 2. 查询用户关联的Project4.1 准备工作正式对接前,请参考如下步骤,获取对应的IP、用户:参考运营侧准备工作帖,获取对接所需要接口文档(主要参考,ManageOne运营面API参考)、运营侧北向接口对外域名:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html联系项目中,华为交付工程师,获取运营管理员账号、密码,或使用已创建的VDC管理员账号。运营管理员可管理所有租户,VDC管理员可管理本级和子级VDC。4.2 获取管理员token请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:(注:运营管理员的domain name固定为mo_bss_admin,VDC管理员的domain name为租户名。){ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token 4.3 Project(资源集/项目)1. 查询VDC关联的ProjectURLGET https://{SC北向接口域名}/rest/vdc/v3.1/vdcs/{vdc_id}/projects?start=0&limit=100其中,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-100之间,默认值为10。可包含如下查询条件:(下表包含部分查询条件,全部查询条件请参考《ManageOne 运营面API参考.docx》中”查询指定VDC中资源集集合“接口。)参数类型描述inheritboolean是否查询VDC下所有可见VDC关联的资源集。默认值:falsenamestring模糊搜索所使用的名称字段,长度在1-64之间。sort_dirstring排序方向,取值范围asc,desc。默认值:asc请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "total": 1,    "projects": [       {            "id": "6aa4d449d6fe4ea68c7cacb1a9803959",            "name": "cn-global-205_hzp_project",            "description": "",            "domain_id": "e1fcb3ba48a64cb2acb5894bcd6d892d",            "enabled": true,            "tenant_id": "d8e2a487-843b-4309-9d14-e845f593411f",            "is_shared": false,            "tenant_name": "hzp_vdc",            "create_user_id": "b9fd4029af7a4b71a085048b9bbe9072",            "create_user_name": "bss_admin",            "regions": [               {                    "region_id": "cn-global-205",                    "region_name": {                        "zh_cn": "西安",                        "en_us": "西安"                   },                    "region_type": null,                    "region_status": "normal"               }           ]       }   ]}其中,id为project Id,name为project名称,domain_id为project所在的租户Id,tenant_id为project所属的VDC Id;tenant_name为project所属的VDC名称;description为project描述;regions为project关联的region信息。2. 查询用户关联的ProjectURLGET https://{SC北向接口域名}/rest/vdc/v3.1/users/{user_id}/projects?start=0&limit=100其中,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-100之间,默认值为10。可包含如下查询条件:(下表包含部分查询条件,全部查询条件请参考《ManageOne 运营面API参考.docx》中”查询指定VDC中资源集集合“接口。)参数类型描述inheritboolean是否查询VDC下所有可见VDC关联的资源集。默认值:falsenamestring模糊搜索所使用的名称字段,长度在1-64之间。sort_dirstring排序方向,取值范围asc,desc。默认值:asc请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "total": 1,    "projects": [       {            "regions": [               {                    "region_id": "cn-global-205",                    "region_status": "normal",                    "region_name": {                        "zh_cn": "西安",                        "en_us": "西安"                   }               }           ],            "id": "6aa4d449d6fe4ea68c7cacb1a9803959",            "name": "cn-global-205_hzp_project",            "iam_project_name": "cn-global-205_hzp_project",            "display_name": "cn-global-205_hzp_project",            "description": "",            "enabled": true,            "domain_id": "e1fcb3ba48a64cb2acb5894bcd6d892d",            "tenant_id": "d8e2a487-843b-4309-9d14-e845f593411f",            "tenant_name": "hzp_vdc",            "level": "1",            "role_id": null,            "role_name": null,            "is_shared": "false"       }   ]}其中,id为project Id,name为project名称,domain_id为project所在的租户Id,tenant_id为project所属的VDC Id;tenant_name为project所属的VDC名称;description为project描述;regions为project关联的region信息。
  • [集成开发] 【ManageOne运营侧】用户查询
    1 VDC模型介绍请参考此链接:cid:link_02 约束条件本文适用于ManageOne 6.5.0及以上版本。3 场景说明本文档用于指导开发者获取租户和用户信息,便于第三方系统同步ManageOne的组织架构以及用户信息(如用户名、电话、email等)。4 租户信息同步目录:4.1 准备工作 4.2 获取管理员token 4.3 用户 1. 查询用户列表 2. 查询用户详情  4.1 准备工作正式对接前,请参考如下步骤,获取对应的IP、用户:参考运营侧准备工作帖,获取对接所需要接口文档(主要参考,ManageOne运营面API参考)、运营侧北向接口对外域名:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html联系项目中,华为交付工程师,获取运营管理员账号、密码,或使用已创建的VDC管理员账号。运营管理员可管理所有租户,VDC管理员可管理本级和子级VDC。4.2 获取管理员token请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:(注:运营管理员的domain name固定为mo_bss_admin,VDC管理员的domain name为租户名。){ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token 4.3 用户1. 查询用户列表接口约束:运营管理员token可查询全量用户。VDC管理员仅可查询本VDC以及子级VDC的用户。URLGET https://{SC北向接口域名}/rest/vdc/v3.0/users?limit=100&start=0URL常用参数:(完整参数请参考《ManageOne 运营面API参考》)start:分页查询的起始位置,最小值:0 ,最大值:2147483647 ,默认值:0。可选。limit:限制每页显示的条目数量,最小值:1,最大值:100 ,默认值:10。可选。tenant_id:用户归属的VDC ID。可选。name:按照名称或显示名字段模糊搜索。长度:1到128个字符。可选。exact:是否精确匹配,枚举值:true和false,默认值:false。可选。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "total": 1,    "users": [       {            "enabled": "true",            "description": "",            "email": "",            "areacode": "",            "phone": "",            "vdc_name": "hzp_vdc",            "resource_tenant_id": null,            "level": null,            "roles": [               {                    "id": "00000000-0000-0000-0000-000000000001",                    "name": "vdcServiceManager",                    "display_name": "VDC Admin",                    "user_role_type": "0"               }           ],            "display_name": "",            "vdc_id": "8c3e288e-49a5-4eab-90a0-47916dac8589",            "domain_id": "9b01faf18f454c59a6fd157f0c82e556",            "domain_name": "hzp_vdc",            "user_type": "0",            "name": "hzp_admin",            "login_at": "2022-04-18 01:24:27.0",            "id": "b7f8bc098f4f4891b93eeff5dcdfc6b5",            "create_at": "2022-02-23 06:55:53.0"       }   ]}其中,id为用户Id,name为用户名称,domain_id为租户Id,vdc_id为所属的VDC Id。2. 查询用户详情接口约束:运营管理员token可查询全量用户。VDC管理员仅可查询本VDC以及子级VDC的用户。URLGET https://{SC北向接口域名}/rest/vdc/v3.0/users/{user_id}其中,user_id为用户id。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "limit_access": "false",    "lock_period": null,    "login_config": null,    "whiteList": null,    "user": {        "enabled": "true",        "description": "",        "email": "",        "areacode": null,        "phone": "",        "projects": [],        "ldap_id": null,        "level": "1",        "resource_tenant_id": null,        "roles": [           {                "id": "00000000-0000-0000-0000-000000000001",                "name": "vdcServiceManager",                "display_name": "VDC Admin",                "user_role_type": null,                "description": "role_role_view_para_desc_content_vdcServiceManager_value"           }       ],        "groups": [           {                "id": "8afb852688194e408f4edf4bf8c8a690",                "name": "SC_289yUXfSpzD",                "description": "",                "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",                "role_name": null,                "vdc_name": "SC_289OHFUVQdL",                "role_id": null,                "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444"           },           {                "id": "cdafab1cfe2e4c129d4878b13e171333",                "name": "admin_bc0366f0-3b60-486f-a88e-2a38266dd444",                "description": "Default VDC administrator group, having the permission to manage services in the VDC that the user group belongs to and its lower-level VDCs.",                "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",                "role_name": "vdcServiceManager",                "vdc_name": "SC_289OHFUVQdL",                "role_id": "00000000-0000-0000-0000-000000000001",                "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444"           }       ],        "display_name": null,        "second_verify": "false",        "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444",        "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",        "domain_name": "SC_289OHFUVQdL",        "user_type": "0",        "name": "SC_289yUXfSpzD",        "login_at": null,        "id": "b76fc5607bff4ec094891c930cf3b0de",        "tag": "vdc",        "top_vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444",        "ldap_name": null   },    "federation_regions": []}其中,id为用户Id,name为用户名称,domain_id为租户Id,vdc_id为所属的VDC Id。groups为用户绑定的用户组。 
  • [集成开发] 【ManageOne运营侧】租户查询
    1 VDC模型介绍请参考此链接:cid:link_02 约束条件本文适用于ManageOne 6.5.0及以上版本。3 场景说明本文档用于指导开发者获取租户和用户信息,便于第三方系统同步ManageOne的组织架构以及用户信息(如用户名、电话、email等)。4 租户信息同步目录:4.1 准备工作 4.2 获取管理员token 4.3 租户/VDC 1. 查询VDC列表 2. 查询VDC详情  4.1 准备工作正式对接前,请参考如下步骤,获取对应的IP、用户:参考运营侧准备工作帖,获取对接所需要接口文档(主要参考,ManageOne运营面API参考)、运营侧北向接口对外域名:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html联系项目中,华为交付工程师,获取运营管理员账号、密码,或使用已创建的VDC管理员账号。运营管理员可管理所有租户,VDC管理员可管理本级和子级VDC。4.2 获取管理员token请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:(注:运营管理员的domain name固定为mo_bss_admin,VDC管理员的domain name为租户名。){ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token4.3 租户/VDC1. 查询VDC列表URLGET https://{SC北向接口域名}/rest/vdc/v3.0/vdcs?start=0&limit=1000其中,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-1000之间,默认值为20。可包含如下查询条件:(下表包含部分查询条件,全部查询条件请参考《ManageOne 运营面API参考.docx》中”查询VDC列表“接口。)参数类型描述namestringVDC名称,长度在0-128之间。upper_vdc_idstring上级VDC id。domain_idstring所属租户id。levelint32VDC级别,取值在1-5之间。sort_keystring排序字段,支持按create_at、name字段排序。默认值:name。sort_dirstring排序方向,取值范围asc,desc。默认值:asc。is_domainstring是否为租户,1代表是,0代表不是。query_namestring过滤字段。取值范围domainName,upperVdcName,extraquery_valuestring过滤字段值。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无响应体示例{ "total": 4, "vdcs": [ { "id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "name": "hzp_vdc", "tag": "vdc", "description": null, "upper_vdc_id": "0", "upper_vdc_name": null, "top_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "extra": "{\"manager\":\"\",\"phone\":\"\",\"email\":\"\"}", "project_count": 2, "enabled": true, "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f", "level": 1, "create_user_id": "9d30a3d12bac4d879e9e9fb4274b76ed", "create_user_name": "bss_admin", "create_at": 1650350228000, "utc_create_at": "2022-04-19 06:37:08.0", "domain_name": "hzp_vdc", "ldap_id": null, "third_id": null, "idp_name": null, "third_type": "0", "region_id": null, "enterprise_id": null, "az_id": null, "enterprise_project_id": null }, { "id": "bf588c5a-8d05-49bd-a93d-e937286893e5", "name": "hzp_vdc2", "tag": "vdc", "description": "", "upper_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "upper_vdc_name": "hzp_vdc", "top_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "extra": "{\"manager\":\"\",\"phone\":\"\",\"email\":\"\"}", "project_count": 1, "enabled": true, "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f", "level": 2, "create_user_id": "d0cc23141778469f82854c5269d3d9ee", "create_user_name": "hzp_admin", "create_at": 1651040610000, "utc_create_at": "2022-04-27 06:23:30.0", "domain_name": "hzp_vdc", "ldap_id": null, "third_id": null, "idp_name": null, "third_type": "0", "region_id": null, "enterprise_id": null, "az_id": null, "enterprise_project_id": null } ]}响应体字段说明如下:id:VDC idname:vdc名称level:vdc级别,取值在1-5之间。description:描述domain_id:租户iddomain_name:租户名create_at/utc_create_at:创建时间upper_vdc_id:上级VDC idupper_vdc_name:上级VDC 名称project_count:project数量top_vdc_id:所在的一级VDC id。2. 查询VDC详情URLGET https://{SC北向接口域名}/rest/vdc/v3.0/vdcs/{vdc_id}请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无响应体示例{    "vdc": {        "id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",        "name": "hzp_vdc",        "tag": "vdc",        "description": null,        "upper_vdc_id": "0",        "upper_vdc_name": null,        "top_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",        "extra": "{\"manager\":\"\",\"phone\":\"\",\"email\":\"\"}",        "ecs_used": 0.0,        "evs_used": 0.0,        "project_count": 0,        "enabled": true,        "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",        "level": 1,        "create_user_id": "9d30a3d12bac4d879e9e9fb4274b76ed",        "create_user_name": "bss_admin",        "create_at": 1650321428000,        "utc_create_at": null,        "domain_name": "hzp_vdc",        "ldap_id": null,        "process_id": null,        "regions": [           {                "region_id": "solution-advance-1",                "region_name": "{\"zh_cn\":\"东莞\",\"en_us\":\"东莞\"}",                "region_type": "private_cloud",                "cloud_infras": [                   {                        "cloud_infra_id": "FUSION_CLOUD_solution-advance-1",                        "cloud_infra_name": "OpenStack_solution-advance-1",                        "cloud_infra_status": "normal",                        "cloud_infra_type": "FUSION_CLOUD",                        "azs": [                           {                                "available_zone": "az0.dc0",                                "az_name": "华为技术有限公司",                                "az_status": "normal",                                "extend_param": "{\"cloud_location\":\"localcloud\"}"                           }                       ]                   }               ]           }       ],        "third_type": null,        "enterprise_id": null,        "mfa_status": "0",        "enterprise_project_id": null,        "cloud_federation_rate": {},        "cloud_federation_status": false   }}响应体字段说明如下:id:VDC idname:vdc名称level:vdc级别,取值在1-5之间。description:描述domain_id:租户iddomain_name:租户名create_at/utc_create_at:创建时间upper_vdc_id:上级VDC idupper_vdc_name:上级VDC 名称project_count:project数量top_vdc_id:所在的一级VDC id。region:区域详情。类型:对象数组。region包含以下字段:region_id:区域idregion_name:区域名称region_type:区域类型cloud_infras:资源池详情。对象类型。cloud_infras包含以下字段:cloud_infra_id:资源池idcloud_infra_name:资源池名称cloud_infra_status:资源池状态cloud_infra_type:资源池类型azs:可用分区详情。类型:对象数组。azs包含以下字段:available_zone:可用分区idaz_name:可用分区名称az_status:可用分区状态。extend_param:拓展参数。 
  • [集成开发] 【ManageOne运维侧】用户管理
    1 接口说明从ManageOne 8.2.1版本起,IAM会对OC(运维面)用户进行纳管,第三方可通过SC接口对OC用户进行管理。可用于以下场景:1.客户有自己的统一密码管理系统,需要对OC用户的密码进行管理2.MO已对接第三方统一认证中心,并且有从第三方平台单点登录至OC的需求,此时需要在OC创建相应的用户。2 接口约束1. 支持ManageOne 8.2.1及以上版本2. 当前仅运营管理员(mo_bss_admin)租户下的用户添加OC权限,VDC管理员、代维管理员等其他角色不支持添加OC权限。3 使用指导3.1 准备工作正式对接前,请参考如下步骤,获取对应的IP、用户:参考运营侧准备工作帖,获取对接所需要接口文档(主要参考,ManageOne运营面API参考)、运营侧北向接口对外域名:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html联系项目中,华为交付工程师,获取运营管理员账号、密码.3.2 调用步骤步骤0:获取运营管理员token请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:(注:运营管理员的domain name固定为mo_bss_admin,以下请求体只需要替换用户名和密码即可。){ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token步骤1:查询运营管理员所属的VDCURLGET https://{SC北向接口域名}/rest/vdc/v3.0/vdcs?name=mo_bss_admin请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无响应体示例{ "total": 1, "vdcs": [ { "id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "name": "mo_bss_admin", "tag": "system", "description": "mo_bss_admin", "upper_vdc_id": "0", "upper_vdc_name": null, "top_vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "extra": null, "ecs_used": 0.0, "evs_used": 0.0, "project_count": 0, "enabled": true, "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "level": 1, "create_user_id": "83cef006b4104f7084fc6ec2095004d7", "create_user_name": "bss_admin", "create_at": 1678128580000, "utc_create_at": "2023-03-06 18:49:40.0", "domain_name": "mo_bss_admin", "ldap_id": null, "third_id": null, "idp_name": null, "third_type": "0", "region_id": null, "enterprise_id": null, "az_id": null, "enterprise_project_id": null } ]}取id字段为mo_bss_admin的VDC id。 步骤2:创建不带权限的运营管理员用户URLPOST https://{SC北向接口域名}/rest/vdc/v3.2/vdcs/{vdc_id}/users其中,vdc_id通过步骤1获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体示例{    "user": {        "name": "testuser123",        "password": "tT123456#"   }}user对象中可包含以下参数:name:用户名,只能由英文字母(区分大小写)、数字和特殊字符@._-组成,不能以“op_svc”、“paas_op”或\开头,且不能以\结尾,且不能命名为admin,power_user或guest。长度范围是4到32位。必选。display_name:用户别名,由除">"和"<"之外的字符组成,0-128个字符。可选。password:密码,包含以下四种字符的三种: 大写字母、小写字母、数字、特殊字符(除<和>字符),且必须包含特殊字符,不能包含名字正序或逆序。长度:8到32个字符 。可选。description:描述,不能包含<或者>字符。长度:0到255个字符。可选。email:邮箱,符合邮箱格式,长度:0到64个字符。可选。areacode:国际区号,只能为数字,长度:0到10个字符。可选。phone:手机号,只能为数字,长度:0到32个字符。可选。enabled:用户状态,枚举值:true和false,默认为true。为false时,表示用户处于停用状态。可选。auth_type:用户类型。枚举值:'0','1','2','4',默认值为'0'。为'0'表示本地认证,为'1'表示SAML认证,为'2'表示LDAP认证,为'4'表示OC的API用户。可选。ldap_id:ldap ID。auth_type为1或2时需要填写此参数。可选。响应体示例{    "user": {        "id": "a674600f05ad4cb086d5a60c6847e920",        "domain_id": "e1fcb3ba48a64cb2acb5894bcd6d892d",        "domain_name": "hzp_vdc",        "name": "testuser123",        "display_name": null,        "enabled": true,        "description": null,        "vdc_id": "d8e2a487-843b-4309-9d14-e845f593411f",        "vdc_name": "hzp_vdc",        "ldap_id": null,        "create_at": 1657358889000,        "login_at": 0,        "auth_type": "0",        "group_count": null,        "user_type": null   }}其中,取id字段为用户Id。步骤3:查询OC的用户组列表(创建API用户可跳过)URLGET https://{SC北向接口域名}/rest/vdc/v3.2/vdcs/{vdc_id}/groups?start=0&limit=100其中,vdc_id从步骤1获取,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-100之间,默认值为10。可包含如下查询条件:参数类型描述namestring按照名称或显示名字段模糊搜索。长度:1到64个字符。sort_keystring排序字段。枚举值:name。默认值为name。sort_dirstring排序方向。枚举值:desc 和asc,默认值:asc。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{ "total": 6, "groups": [ { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "279b2ca362cb4a3d99077eef7a386877", "name": "Administrators", "description": "Administrators", "create_at": 1678185136000, "type": "default", "tag": "all" }, { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "e9dc8c8a27d34029aafd8f5fd432b795", "name": "AuditManagers", "description": "AuditManagers", "create_at": 1678185135000, "type": "default", "tag": "all" }, { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "c11519130ea14e9dbb17e1f8ea42fd9d", "name": "NorthUserGroup", "description": "NorthUserGroup", "create_at": 1678185136000, "type": "default", "tag": "sys_adm" }, { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "d30066372a8f40148d9406a7e94d76d7", "name": "ReadOnlyUserGroup", "description": "ReadOnlyUserGroup", "create_at": 1678185136000, "type": "default", "tag": "sys_adm" }, { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "ec23408b124a4f0eb7fe1af69c8261f3", "name": "SecurityAdministrators", "description": "SecurityAdministrators", "create_at": 1678185135000, "type": "default", "tag": "all" }, { "domain_id": "09d95085ad7048dbb157d07fa22e9cd1", "domain_name": "mo_bss_admin", "vdc_id": "8ff07323-defd-4188-b5f7-7c09feb76ced", "vdc_name": "mo_bss_admin", "id": "417f9669e6e246ad9904283b45b508c3", "name": "admin_09d95085ad7048dbb157d07fa22e9cd1", "description": "admin_09d95085ad7048dbb157d07fa22e9cd1 description", "create_at": 1678128577000, "type": "default", "tag": "all" } ]}此处,我们根据“name”字段,过滤得到我们需要的用户组的ID。例如,根据“管理员”用户组的name“Administrators”,可查找到其对应的id为“279b2ca362cb4a3d99077eef7a386877”。ManageOne预置的OC角色请参考下表:角色接口名称(name)说明管理员Administrators拥有除“用户管理”、“查询安全日志”、“查看在线用户”和“查询个人安全日志”之外的所有权限。安全管理员组SecurityAdministrators拥有“用户管理”、“License管理”、“密码管理”、“查看在线用户”、“查询安全日志”和“更新ACL策略”的权限。安全审计员AuditManagers拥有所有日志的查询和管理权限,包括“系统管理 > 日志管理”的权限以及统一日志的“查询权限”和“管理权限”。只读用户组ReadOnlyUserGroup拥有界面查看权限,不具有操作权限。步骤4:将用户加入指定用户组(创建API用户可跳过)URLPUT https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id}/users/{user_id}其中,user_id从步骤2获取,group_id通过步骤3获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无状态码:204(成功)响应体:无至此,拥有OC操作权限的用户就创建完成了。
  • [集成开发] 【ManageOne运营侧】授权管理
    1 VDC模型介绍请参考此链接:cid:link_02 约束条件本文适用于ManageOne 8.1.0及以上版本。3 场景说明自8.0.3版本起,ManageOne加入用户组特性,并支持关联权限。管理员可通过细粒度授权来控制用户能使用的云服务范围,例如限制用户只能使用CCE服务,或给用户只读权限,将用户权限最小化。8.1.0版本后,ManageOne支持通过API管理用户组。4 创建细粒度授权用户目录:4.1 准备工作4.2 创建用户组步骤0:获取管理员token 步骤1:查询VDC列表 步骤2:创建用户组 步骤3:查询VDC下的用户组列表(可选) 4.3 创建VDC用户步骤1:创建不带权限的VDC用户步骤2:将用户加入指定用户组4.4 为指定用户组授权指定资源集步骤1:查询租户下的权限列表步骤2:为指定用户组授权资源集权限4.5 其他接口1. 将用户从指定用户组移除 2. 删除用户组 3. 查询用户绑定的用户组 4. 删除用户4.1 准备工作1. 正式对接前,请参考如下步骤,获取对应的IP、用户:参考运营侧准备工作帖,获取对接所需要接口文档(主要参考,ManageOne运营面API参考)、运营侧北向接口对外域名:https://bbs.huaweicloud.com/forum/thread-41849-1-1.html联系项目中,华为交付工程师,获取运营管理员账号、密码,或使用已创建的VDC管理员账号。运营管理员可管理所有租户,VDC管理员可管理本级和子级VDC。2. 请确保在创建用户前已经完成VDC和Project(资源集)的创建。4.2 创建用户组步骤0:获取管理员token请求URL:https://{IAM对外访问域名}/v3/auth/tokens请求方法:POST请求头:Accept:application/jsonContent-Type:application/json;charset=UTF-8请求体:(注:运营管理员的domain name固定为mo_bss_admin,VDC管理员的domain name为租户名。){ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "mo_bss_admin" }, "name": "XXXX", "password": "XXXXXX" } } }, "scope": { "domain": { "name": "mo_bss_admin" } } }}返回的token在响应头中,示例如下:HTTP/1.1 201 CreatedContent-Type: application/json; charset=utf-8Connection: keep-aliveX-Subject-Token: MIIECwYxxxxxxxxxxxxxxxxxxSQ3G2RAj89N+t9GECHGnnGUgkKj7vMesUZ2jEW6EiVYA==X-Subject-Token的值即为我们所需要的token步骤1:查询VDC列表URLGET https://{SC北向接口域名}/rest/vdc/v3.0/vdcs?start=0&limit=1000其中,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-1000之间,默认值为20。可包含如下查询条件:(下表包含部分查询条件,全部查询条件请参考《ManageOne 运营面API参考.docx》中”查询VDC列表“接口。)参数类型描述namestringVDC名称,长度在0-128之间。upper_vdc_idstring上级VDC id。domain_idstring所属租户id。levelint32VDC级别,取值在1-5之间。sort_keystring排序字段,支持按create_at、name字段排序。默认值:name。sort_dirstring排序方向,取值范围asc,desc。默认值:asc。is_domainstring是否为租户,1代表是,0代表不是。query_namestring过滤字段。取值范围domainName,upperVdcName,extraquery_valuestring过滤字段值。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无响应体示例{ "total": 4, "vdcs": [ { "id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "name": "hzp_vdc", "tag": "vdc", "description": null, "upper_vdc_id": "0", "upper_vdc_name": null, "top_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "extra": "{\"manager\":\"\",\"phone\":\"\",\"email\":\"\"}", "project_count": 2, "enabled": true, "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f", "level": 1, "create_user_id": "9d30a3d12bac4d879e9e9fb4274b76ed", "create_user_name": "bss_admin", "create_at": 1650350228000, "utc_create_at": "2022-04-19 06:37:08.0", "domain_name": "hzp_vdc", "ldap_id": null, "third_id": null, "idp_name": null, "third_type": "0", "region_id": null, "enterprise_id": null, "az_id": null, "enterprise_project_id": null }, { "id": "bf588c5a-8d05-49bd-a93d-e937286893e5", "name": "hzp_vdc2", "tag": "vdc", "description": "", "upper_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "upper_vdc_name": "hzp_vdc", "top_vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0", "extra": "{\"manager\":\"\",\"phone\":\"\",\"email\":\"\"}", "project_count": 1, "enabled": true, "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f", "level": 2, "create_user_id": "d0cc23141778469f82854c5269d3d9ee", "create_user_name": "hzp_admin", "create_at": 1651040610000, "utc_create_at": "2022-04-27 06:23:30.0", "domain_name": "hzp_vdc", "ldap_id": null, "third_id": null, "idp_name": null, "third_type": "0", "region_id": null, "enterprise_id": null, "az_id": null, "enterprise_project_id": null } ]}复制部分响应体字段说明如下: id:VDC idname:vdc名称level:vdc级别,取值在1-5之间。description:描述domain_id:租户iddomain_name:租户名create_at/utc_create_at:创建时间upper_vdc_id:上级VDC idupper_vdc_name:上级VDC 名称project_count:project数量top_vdc_id:所在的一级VDC id。步骤2:创建用户组URLPOST https://{SC北向接口域名}/rest/vdc/v3.2/vdcs/{vdc_id}/groups请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体示例{    "group": {        "description": "123",        "name": "vdcuser776"   } }参数说明:name:用户组名称,不能以数字开头。只能由英文字母,中文,数字,中划线,下划线组成,且不能命名为admin、power_user、或guest。长度范围是1到64位。必选。description:描述,不能包含<或者>字符。长度:0到255个字符。可选。响应体示例{    "group": {        "domain_id": null,        "domain_name": null,        "vdc_id": null,        "vdc_name": null,        "id": "a1b428ffe3ff470296813a73276a3bc0",        "name": "vdcuser776",        "description": "123",        "create_at": 0,        "type": null,        "display_name": "vdcuser776",        "vdc_level": 0   }}其中,id为用户组Id;name为用户组名称;display_name为用户组显示名称。相关接口:删除用户组:DELETE https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id},无请求体和响应体,成功状态码204。步骤3:查询VDC下的用户组列表(可选)URLGET https://{SC北向接口域名}/rest/vdc/v3.2/vdcs/{vdc_id}/groups?start=0&limit=100其中,start为分页查询的起始位置,取值在0-2147483647之间,默认从0开始, 默认值为0。分页查询时,start需要为limit的整数倍;limit限制每页显示的条目数量,取值在1-100之间,默认值为10。可包含如下查询条件:参数类型描述namestring按照名称或显示名字段模糊搜索。长度:1到64个字符。sort_keystring排序字段。枚举值:name。默认值为name。sort_dirstring排序方向。枚举值:desc 和asc,默认值:asc。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "total": 2,    "groups": [       {            "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",            "domain_name": "hzp_vdc",            "vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",            "vdc_name": "hzp_vdc",            "id": "8e2deaa2fb7e4226b3f8b43a2b6bd11b",            "name": "admin_d86c3636-c637-4ee6-93ca-16c34b38b5c0",            "description": "Default VDC administrator group, having the permission to manage services in the VDC that the user group belongs to and its lower-level VDCs.",            "create_at": 1650350228000,            "type": "default"       },       {            "domain_id": "16ea1a6e341d44e385fb3cb077c3b63f",            "domain_name": "hzp_vdc",            "vdc_id": "d86c3636-c637-4ee6-93ca-16c34b38b5c0",            "vdc_name": "hzp_vdc",            "id": "943abaee2ce34fd4ac3c4c4eb9368e05",            "name": "test1234",            "description": "",            "create_at": 1650977723000,            "type": "custom"       }   ]}响应体字段说明: total:总量 groups:用户组详情。对象数组。groups包含如下字段:domain_id:租户ID。domain_name:租户名称。vdc_id:VDC ID。vdc_name:VDC名称。id:用户组ID。name:用户组名称。description:用户组描述信息。create_at:用户组创建时间。type:用户组类型。default:系统预置的用户组;custom:自定义用户组。4.3 创建VDC用户步骤1:创建不带权限的VDC用户注:运营管理员角色用户必须使用运营管理员token才能创建;VDC管理员token仅可在本VDC或子级VDC下创建用户。运营管理员token支持在任意VDC下创建用户。URLPOST https://{SC北向接口域名}/rest/vdc/v3.2/vdcs/{vdc_id}/users其中,vdc_id为用户所属VDC的Id请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体示例{    "user": {        "name": "testuser123",        "password": "tT123456#"   }}user对象中可包含以下参数:name:用户名,只能由英文字母(区分大小写)、数字和特殊字符@._-组成,不能以“op_svc”、“paas_op”或\开头,且不能以\结尾,且不能命名为admin,power_user或guest。长度范围是4到32位。必选。display_name:用户别名,由除">"和"<"之外的字符组成,0-128个字符。可选。password:密码,包含以下四种字符的三种: 大写字母、小写字母、数字、特殊字符(除<和>字符),且必须包含特殊字符,不能包含名字正序或逆序。长度:8到32个字符 。可选。description:描述,不能包含<或者>字符。长度:0到255个字符。可选。email:邮箱,符合邮箱格式,长度:0到64个字符。可选。areacode:国际区号,只能为数字,长度:0到10个字符。可选。phone:手机号,只能为数字,长度:0到32个字符。可选。enabled:用户状态,枚举值:true和false,默认为true。为false时,表示用户处于停用状态。可选。auth_type:用户类型。枚举值:'0','1','2',默认值为'0'。为'0'表示本地认证,为'1'表示SAML认证,为'2'表示LDAP认证。可选。ldap_id:ldap ID。auth_type不为0时需要填写此参数。可选。响应体示例{    "user": {        "id": "a674600f05ad4cb086d5a60c6847e920",        "domain_id": "e1fcb3ba48a64cb2acb5894bcd6d892d",        "domain_name": "hzp_vdc",        "name": "testuser123",        "display_name": null,        "enabled": true,        "description": null,        "vdc_id": "d8e2a487-843b-4309-9d14-e845f593411f",        "vdc_name": "hzp_vdc",        "ldap_id": null,        "create_at": 1657358889000,        "login_at": 0,        "auth_type": "0",        "group_count": null,        "user_type": null   }}其中,id为用户Id。步骤2:将用户加入指定用户组URLPUT https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id}/users/{user_id}其中,user_id需要通过“查询用户”接口获取,group_id需要通过“查询VDC下的用户组列表”接口获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无状态码:204(成功)响应体:无4.4 为指定用户组授权指定资源集步骤1:查询租户下的权限列表URLGET https://{SC北向接口域名}/rest/vdc/v3.0/OS-ROLE/roles/third-party/roles?domain_id={domain_id}其中,domain_id为租户id,可从4.2章节的步骤1获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无响应体示例{    "system_roles": [       {            "id": "985dc76053f94685a15eafc3cd9f5da2",            "domain_id": null,            "domain_name": null,            "name": "te_admin",            "display_name": "Tenant Administrator",            "flag": null,            "catalog": "BASE",            "type": "AA",            "description_cn": "全部云服务管理员(除IAM管理权限)",            "description": "Tenant Administrator (Exclude IAM)",            "cloud_platform": "private_cloud",            "policy": {"Version":"1.0","Depends":[],"Statement":[{"Effect":"Allow","Action":["*"],"Resource":[]},{"Effect":"Deny","Action":["identity:*"],"Resource":[]}]}       },       {            "id": "086600a36bc44cb3a5cb9475ddc32da0",            "domain_id": null,            "domain_name": null,            "name": "readonly",            "display_name": "Tenant Guest",            "flag": null,            "catalog": "BASE",            "type": "AA",            "description_cn": "全部云服务只读权限(除IAM权限)",            "description": "Tenant Guest (Exclude IAM)",            "cloud_platform": "private_cloud",            "policy": {"Version":"1.0","Depends":[],"Statement":[{"Effect":"Allow","Action":["::Get","::List"],"Resource":[]},{"Effect":"Deny","Action":["identity:*"],"Resource":[]}]}       },       {            "id": "4d0cd24102504767b33fd55d915c55e8",            "domain_id": null,            "domain_name": null,            "name": "vdc_adm",            "display_name": "VDC Admin",            "flag": null,            "catalog": "VDC",            "type": "AA",            "description_cn": "具有所属VDC及下级VDC的业务管理权限",            "description": "Permission to manage services in the VDC that the user group belongs to and its lower-level VDCs",            "cloud_platform": "private_cloud",            "policy": {"Version":"1.0","Depends":[],"Statement":[{"Effect":"Allow","Action":["moscapp:service*:*","moscapp:resource*:*","moscapp:organization*:*","moscapp:operation*:*","moscapp:application*:*","moscapp:tenant-system*:*","moscapp:personal-center*:*"],"Resource":[]}]}       },       {            "id": "7c554e7930544a99868465c4954eb5cb",            "domain_id": null,            "domain_name": null,            "name": "vdc_readonly",            "display_name": "VDC Readonly",            "flag": null,            "catalog": "VDC",            "type": "AA",            "description_cn": "具有对租户中用户、资源集、自运维等的查询权限",            "description": "Permission to query information about users and resource sets as well as self-service OM data in the tenant that the user group belongs to",            "cloud_platform": "private_cloud",            "policy": {"Version":"1.0","Depends":[],"Statement":[{"Effect":"Allow","Action":["moscapp:service*:console","moscapp:service*.list","moscapp:service*.get","moscapp:resource*:console","moscapp:resource*:list","moscapp:resource*:get","moscapp:organization*:console","moscapp:organization*:list","moscapp:organization*:get","moscapp:operation*:console","moscapp:operation*:list","moscapp:operation*:get","moscapp:application*:console","moscapp:application*:list","moscapp:application*:get","moscapp:tenant-system*:console","moscapp:tenant-system*:list","moscapp:tenant-system*:get","moscapp:personal-center*:console","moscapp:personal-center*:list","moscapp:personal-center*:get"],"Resource":[]}]}       },   ],    "custom_roles": []}其中,取id字段为权限id。例如,vdc只读权限的id为7c554e7930544a99868465c4954eb5cb。步骤2:为指定用户组授权资源集权限URLPUT https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id}/roles其中,group_id为用户组id,从4.2章节的步骤2或步骤3获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体示例:{    "group": {        "action": "add",        "roles": [           {                "id": "086600a36bc44cb3a5cb9475ddc32da0",                "inherit": false,                "targets": [                   {                        "id": "6934bce513274fd9b20955c3db9728f0"                   }               ]           }       ]   }}请求参数说明:group包含以下字段:action:操作,取值可为add、delete;roles:角色。对象数组。roles包含以下字段:id:权限id,从步骤1获取。inherit:权限是否继承。targets:授权的目标资源集。对象数组。对象内包含资源集的id字段。4.4 其他接口1. 将用户从指定用户组移除URLDELETE https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id}/users/{user_id}其中,user_id需要通过“查询用户”接口获取,group_id需要通过“查询用户详情”接口获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无状态码:204(成功)响应体:无2. 删除用户组注:删除用户组后会自动解除用户与用户组关联关系,用户权限需重新添加,请谨慎操作。URLDELETE https://{SC北向接口域名}/rest/vdc/v3.2/groups/{group_id}其中,group_id需要通过“查询VDC下的用户组列表”接口获取。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx请求体:无状态码:204(成功)响应体:无3. 查询用户绑定的用户组接口约束:运营管理员可查询全量用户。VDC管理员仅可查询本VDC以及子级VDC的用户。URLGET https://{SC北向接口域名}/rest/vdc/v3.0/users/{user_id}其中,user_id为用户id。请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体示例{    "limit_access": "false",    "lock_period": null,    "login_config": null,    "whiteList": null,    "user": {        "enabled": "true",        "description": "",        "email": "",        "areacode": null,        "phone": "",        "projects": [],        "ldap_id": null,        "level": "1",        "resource_tenant_id": null,        "roles": [           {                "id": "00000000-0000-0000-0000-000000000001",                "name": "vdcServiceManager",                "display_name": "VDC Admin",                "user_role_type": null,                "description": "role_role_view_para_desc_content_vdcServiceManager_value"           }       ],        "groups": [           {                "id": "8afb852688194e408f4edf4bf8c8a690",                "name": "SC_289yUXfSpzD",                "description": "",                "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",                "role_name": null,                "vdc_name": "SC_289OHFUVQdL",                "role_id": null,                "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444"           },           {                "id": "cdafab1cfe2e4c129d4878b13e171333",                "name": "admin_bc0366f0-3b60-486f-a88e-2a38266dd444",                "description": "Default VDC administrator group, having the permission to manage services in the VDC that the user group belongs to and its lower-level VDCs.",                "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",                "role_name": "vdcServiceManager",                "vdc_name": "SC_289OHFUVQdL",                "role_id": "00000000-0000-0000-0000-000000000001",                "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444"           }       ],        "display_name": null,        "second_verify": "false",        "vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444",        "domain_id": "7111b7a59bff48fa983a6309fae3d7f7",        "domain_name": "SC_289OHFUVQdL",        "user_type": "0",        "name": "SC_289yUXfSpzD",        "login_at": null,        "id": "b76fc5607bff4ec094891c930cf3b0de",        "tag": "vdc",        "top_vdc_id": "bc0366f0-3b60-486f-a88e-2a38266dd444",        "ldap_name": null   },    "federation_regions": []}其中,id为用户Id,name为用户名称,domain_id为租户Id,vdc_id为所属的VDC Id。groups为用户绑定的用户组。4. 删除用户接口约束:1.删除用户时,需确保该用户没有未完成的审批流程、审批任务、订单。2.运营管理员token可删除任意用户,VDC管理员token仅可删除本VDC或子级VDC下的用户。URLDELETE https://{SC北向接口域名}/rest/vdc/v3.0/users/{user_id}请求头Content-Type:application/json X-Auth-Token:x-xxxxxxxxxxx响应体:无成功状态码:200
总条数:1920 到第
上滑加载中