组件开发22222

59 阅读2分钟
@Override public R<List<Map<String, Object>>> listComponentCloudConfigList(String tenantId, String clusterId) { try { // 通用逻辑:获取连接参数、集群、客户端并登录 LoginContext context = getLoginContext(); if (context == null) { return R.success(Collections.emptyList()); } // 业务逻辑 List<Map<String, Object>> configs = context.proxy.queryConfigMapList( context.cloudUrl, context.loginData, clusterId, tenantId, cloudPropertiesConfig.getProjectId()); return R.success(configs); } catch (Exception e) { log.error("获取观云台配置文件列表失败 {}", e.getMessage(), e); throw new GlobalException("获取观云台配置文件列表失败"); } } @Override public R blueGreenUpgrade(String tenantId, String clusterId, String namespace, String projectId, List<Map<String, Object>> containerList, String deployName) { return executeWithLogin(context -> context.proxy.blueGreenUpgrade( context.cloudUrl, context.loginData, tenantId, projectId, deployName, namespace, clusterId, containerList) ); } @Override public R<List<Map<String, Object>>> getContainerList(String tenantId, String projectId, String deployName, String namespace, String clusterId) { try { LoginContext context = getLoginContext(); if (context == null) { return R.success(Collections.emptyList()); } List<Map<String, Object>> result = context.proxy.getContainerList( context.cloudUrl, context.loginData, tenantId, projectId, deployName, namespace, clusterId); return R.success(result); } catch (Exception e) { throw new GlobalException("获取容器信息失败!"); } } @Override public R blueGreenSwitchFlow(boolean newFlow, String tenantId, String projectId, String namespace, String deployName, String clusterId) { return executeWithLogin(context -> context.proxy.blueGreenSwitchFlow( context.cloudUrl, context.loginData, tenantId, projectId, namespace, deployName, clusterId, newFlow) ); } @Override public R blueGreenConfirm(String tenantId, String clusterId, String namespace, String projectId, String deployName) { return executeWithLogin(context -> context.proxy.blueGreenConfirm( context.cloudUrl, context.loginData, tenantId, projectId, namespace, deployName, clusterId) ); } @Override public R getConfigMapDeployList(String tenantId, String projectId, String configname, String namespace, String clusterId) { try { LoginContext context = getLoginContext(); if (context == null) { return R.success(Collections.emptyList()); } List<Map<String, Object>> result = context.proxy.getConfigMapDeployList( context.cloudUrl, context.loginData, tenantId, projectId, configname, namespace, clusterId); return R.success(result); } catch (Exception e) { throw new GlobalException("获取配置关联服务失败!"); } } @Override public R getDeployServiceStatus(String tenantId, String projectId, String deployName, String namespace, String clusterId) { try { LoginContext context = getLoginContext(); if (context == null) { return R.success(Collections.emptyList()); } Map<String, Object> result = context.proxy.getDeployServiceStatus( context.cloudUrl, context.loginData, tenantId, projectId, deployName, namespace, clusterId); return R.success(result); } catch (Exception e) { throw new GlobalException("获取配置关联服务状态失败!"); } } // 提取登录上下文信息(内部使用的辅助类,非新增外部类) private static class LoginContext { String cloudUrl; CloudClient proxy; ResponseEntity loginData; LoginContext(String cloudUrl, CloudClient proxy, ResponseEntity loginData) { this.cloudUrl = cloudUrl; this.proxy = proxy; this.loginData = loginData; } } // 获取登录上下文的通用方法 private LoginContext getLoginContext() { String cloudUrl = cloudPropertiesConfig.getPrefixUrl(); String username = cloudPropertiesConfig.getUsername(); String password = CloudParamUtil.encryptPassword(cloudPropertiesConfig.getPassword()); Cluster cluster = getClusterByCloudUrl(cloudUrl); if (cluster == null) { return null; } CloudClient proxy = getCloudClient(cluster); ResponseEntity loginData = proxy.login(cloudUrl, username, password); return new LoginContext(cloudUrl, proxy, loginData); } // 根据cloudUrl查询集群 private Cluster getClusterByCloudUrl(String cloudUrl) { List<Cluster> clusters = clusterService.list( new LambdaQueryWrapper<Cluster>().eq(Cluster::getCloudUrl, cloudUrl) ); return CollUtil.isNotEmpty(clusters) ? clusters.get(0) : null; } // 获取云客户端 private CloudClient getCloudClient(Cluster cluster) { return (CloudClient) applicationContext.getBean(cluster.getCloudVersion()); } // 蓝绿操作通用执行方法 private R executeWithLogin(Supplier<Boolean> operation) { try { LoginContext context = getLoginContext(); boolean success = context != null && operation.get(); return R.success(success); } catch (Exception e) { throw new GlobalException("蓝绿升级失败"); } }