From 284a6d28e20fbcae455fc8fc8982233128537777 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Thu, 2 Jun 2022 16:41:23 +0800 Subject: [PATCH 001/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eb958d21d1..d8c946ab2a 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.0.3.RELEASE + 2.1.0-SNAPSHOT jar https://github.com/open-hand/devops-service From ffd4bc172b4399134a6b7ce556ac6057c294097b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 6 Jun 2022 17:56:28 +0800 Subject: [PATCH 002/228] =?UTF-8?q?[IMP]=20=E5=88=9B=E5=BB=BAgitlab=20grou?= =?UTF-8?q?p=20=E7=BC=96=E7=A0=81=E7=94=9F=E6=88=90=E8=A7=84=E5=88=99?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/eventhandler/SagaHandler.java | 2 +- .../app/eventhandler/payload/GitlabGroupPayload.java | 12 ++++++++++++ .../app/service/impl/GitlabGroupServiceImpl.java | 2 +- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index eb1fd7f26b..c0e506b439 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -104,7 +104,7 @@ private void loggerInfo(Object o) { seq = 1) public String handleGitOpsGroupEvent(String msg) { ProjectPayload projectPayload = gson.fromJson(msg, ProjectPayload.class); - if (!projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { + if (projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { return msg; } GitlabGroupPayload gitlabGroupPayload = new GitlabGroupPayload(); diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java index 14dc2947cc..9cbafebd94 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/GitlabGroupPayload.java @@ -2,6 +2,8 @@ import java.util.Set; +import io.swagger.annotations.ApiModelProperty; + /** * GitLab group create event */ @@ -9,6 +11,8 @@ public class GitlabGroupPayload { private Long projectId; private String projectCode; + @ApiModelProperty("devops组件编码") + private String devopsComponentCode; private String projectName; private String organizationCode; private String organizationName; @@ -28,6 +32,14 @@ public GitlabGroupPayload(String projectCode, String projectName, String organiz this.userId = userId; } + public String getDevopsComponentCode() { + return devopsComponentCode; + } + + public void setDevopsComponentCode(String devopsComponentCode) { + this.devopsComponentCode = devopsComponentCode; + } + public Long getProjectId() { return projectId; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java index 644e1798dc..62be5cc503 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java @@ -188,7 +188,7 @@ private void createGroup(GitlabGroupPayload gitlabGroupPayload, final String suf gitlabGroupPayload.getProjectName(), suffix); // path: orgName-projectCode + suffix String path = GitOpsUtil.renderGroupPath(gitlabGroupPayload.getOrganizationCode(), - gitlabGroupPayload.getProjectCode(), suffix); + gitlabGroupPayload.getDevopsComponentCode(), suffix); group.setName(name); group.setPath(path); From 6289df95b65e890f76b569d16752962329120a36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 7 Jun 2022 09:57:15 +0800 Subject: [PATCH 003/228] =?UTF-8?q?[IMP]=20devops=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/AgentCommandServiceImpl.java | 2 +- .../service/impl/AppServiceServiceImpl.java | 47 +++++++++---------- .../impl/AppServiceVersionServiceImpl.java | 8 ++-- .../impl/CertificationServiceImpl.java | 2 +- .../impl/DevopsCiPipelineServiceImpl.java | 2 +- .../impl/DevopsDemoEnvInitServiceImpl.java | 4 +- .../impl/DevopsEnvFileServiceImpl.java | 2 +- .../impl/DevopsEnvironmentServiceImpl.java | 14 +++--- .../service/impl/DevopsGitServiceImpl.java | 8 ++-- .../impl/DevopsGitlabPipelineServiceImpl.java | 2 +- .../impl/DevopsMergeRequestServiceImpl.java | 2 +- .../service/impl/GitlabGroupServiceImpl.java | 3 +- .../impl/SendNotificationServiceImpl.java | 4 +- .../service/impl/WorkBenchServiceImpl.java | 4 +- .../devops/infra/dto/iam/ProjectDTO.java | 11 +++++ .../handler/ClusterConnectionHandler.java | 4 +- .../devops/infra/util/ChartUtil.java | 4 +- .../choerodon/devops/infra/util/GitUtil.java | 2 +- 18 files changed, 68 insertions(+), 57 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java index 0d2e100a7c..2dd98d21fd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentCommandServiceImpl.java @@ -329,7 +329,7 @@ public void initEnv(DevopsEnvironmentDTO devopsEnvironmentDTO, Long clusterId) { ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(devopsEnvironmentDTO.getProjectId()); Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); String repoUrl = GitUtil.getGitlabSshUrl(PATTERN, gitlabSshUrl, organization.getTenantNum(), - projectDTO.getCode(), devopsEnvironmentDTO.getCode(), + projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode(), EnvironmentType.forValue(devopsEnvironmentDTO.getType()), devopsClusterMapper.selectByPrimaryKey(devopsEnvironmentDTO.getClusterId()).getCode()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 97d9e892b7..233910d546 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -364,7 +364,7 @@ public AppServiceRepVO query(Long projectId, Long appServiceId) { } //url地址拼接 if (appServiceDTO.getGitlabProjectId() != null && !shareAppService) { - appServiceRepVO.setRepoUrl(concatRepoUrl(organizationDTO.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode())); + appServiceRepVO.setRepoUrl(concatRepoUrl(organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode())); } if (shareAppService) { ProjectDTO shareProjectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); @@ -514,7 +514,7 @@ public void deleteAppServiceSage(Long projectId, Long appServiceId) { Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); UserAttrDTO userAttrDTO = userAttrService.baseQueryById(TypeUtil.objToLong(GitUserNameUtil.getUserId())); Integer gitlabUserId = TypeUtil.objToInt(userAttrDTO.getGitlabUserId()); - GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName(tenant.getTenantNum() + "-" + projectDTO.getCode(), appServiceDTO.getCode(), gitlabUserId, false); + GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName(tenant.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), gitlabUserId, false); if (gitlabProjectDO != null && gitlabProjectDO.getId() != null) { // 一般情况下,这个关于count的if条件是true,不正常的数据才会false if (selectCountByGitlabProjectId(gitlabProjectDO.getId()) == 0) { @@ -939,7 +939,7 @@ public void operationApplication(DevOpsAppServicePayload devOpsAppServicePayload ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectBasicInfoById(devopsProjectDTO.getIamProjectId()); Tenant organizationDTO = baseServiceClientOperator.queryOrganizationBasicInfoById(projectDTO.getOrganizationId()); GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator - .queryProjectByName(organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), appServiceDTO.getCode(), + .queryProjectByName(organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), devOpsAppServicePayload.getUserId(), false); Integer gitlabProjectId = gitlabProjectDO.getId(); if (gitlabProjectId == null) { @@ -962,7 +962,7 @@ public void operationApplication(DevOpsAppServicePayload devOpsAppServicePayload LOGGER.info("The template app service id is not null: {}, start to clone template repository", devOpsAppServicePayload.getTemplateAppServiceId()); String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl; - String newGroupName = organizationDTO.getTenantNum() + "-" + projectDTO.getCode(); + String newGroupName = organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(); String repositoryUrl = repoUrl + newGroupName + "/" + appServiceDTO.getCode() + GIT; cloneAndPushCode(appServiceDTO, userAttrDTO, devOpsAppServicePayload.getTemplateAppServiceId(), devOpsAppServicePayload.getTemplateAppServiceVersionId(), repositoryUrl, newGroupName); } @@ -1027,7 +1027,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer Tenant organizationDTO = baseServiceClientOperator.queryOrganizationBasicInfoById(projectDTO.getOrganizationId()); GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName( - organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), + organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), devOpsAppServiceImportPayload.getUserId(), false); @@ -1059,11 +1059,11 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer String repositoryUrl = tempUrl[0]; externalGitUtil.cloneAppMarket(applicationDir, templateVersion, repositoryUrl, devOpsAppServiceImportPayload.getAccessToken()); File applicationWorkDir = new File(gitUtil.getWorkingDirectory(applicationDir)); - replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), applicationDir, null, null, true); + replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), applicationDir, null, null, true); Git newGit = gitUtil.initGit(applicationWorkDir); String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl; appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum() - + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git"); + + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git"); String accessToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, userAttrDTO); try { gitUtil.commitAndPushForMaster(newGit, appServiceDTO.getRepoUrl(), templateVersion, accessToken); @@ -1103,10 +1103,10 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer String pullToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, gitlabAdminDTO); git = gitUtil.cloneRepository(applicationWorkDir, appTemplateDTO.getGitlabUrl(), pullToken); } - replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getCode(), applicationWorkPath, oldAppServiceCode, devopsAppTemplateService.getTemplateGroupPath(appTemplateDTO.getId()), false); + replaceParams(appServiceDTO.getCode(), organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(), applicationWorkPath, oldAppServiceCode, devopsAppTemplateService.getTemplateGroupPath(appTemplateDTO.getId()), false); String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl; appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum() - + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git"); + + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git"); String accessToken = getToken(devOpsAppServiceImportPayload.getGitlabProjectId(), applicationDir, userAttrDTO); try { gitUtil.commitAndPushForMaster(git, appServiceDTO.getRepoUrl(), "init app from template", accessToken); @@ -1122,7 +1122,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer // 设置Application对应的gitlab项目的仓库地址 String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl; appServiceDTO.setRepoUrl(repoUrl + organizationDTO.getTenantNum() - + "-" + projectDTO.getCode() + "/" + appServiceDTO.getCode() + ".git"); + + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git"); File applicationWorkDir = new File(gitUtil.getWorkingDirectory(applicationDir)); @@ -1240,11 +1240,10 @@ public String queryFile(String token) { try { ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); -// DevopsConfigDTO harborConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, HARBOR, AUTHTYPE_PUSH); DevopsConfigDTO harborConfigDTO = harborService.queryRepoConfigToDevopsConfig(projectDTO.getId(), appServiceDTO.getId(), AUTHTYPE_PUSH); ConfigVO harborProjectConfig = gson.fromJson(harborConfigDTO.getConfig(), ConfigVO.class); Map params = new HashMap<>(); - String groupName = organizationDTO.getTenantNum() + "-" + projectDTO.getCode(); + String groupName = organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode(); params.put("{{ SONAR_GROUP_NAME }}", groupName); if (harborProjectConfig.getProject() != null) { groupName = harborProjectConfig.getProject(); @@ -1259,10 +1258,10 @@ public String queryFile(String token) { params.put("{{ SONAR_LOGIN }}", ""); params.put("{{ SONAR_URL }}", ""); } - params.put("{{ SONAR_PROJECT_KEY }}", organizationDTO.getTenantNum() + "-" + projectDTO.getCode() + ":" + appServiceDTO.getCode()); + params.put("{{ SONAR_PROJECT_KEY }}", organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + ":" + appServiceDTO.getCode()); params.put("{{ GROUP_NAME }}", groupName); params.put("{{ PROJECT_NAME }}", appServiceDTO.getCode()); - params.put("{{ PRO_CODE }}", projectDTO.getCode()); + params.put("{{ PRO_CODE }}", projectDTO.getDevopsComponentCode()); params.put("{{ ORG_CODE }}", organizationDTO.getTenantNum()); params.put("{{ DOCKER_REGISTRY }}", dockerUrl); params.put("{{ DOCKER_USERNAME }}", "'" + harborProjectConfig.getUserName() + "'"); @@ -1506,7 +1505,7 @@ public SonarContentsVO getSonarContent(Long projectId, Long appServiceId) { //初始化sonarClient SonarClient sonarClient = RetrofitHandler.getSonarClient(sonarqubeUrl, SONAR, userName, password); - String key = String.format(SONAR_KEY, organization.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode()); + String key = String.format(SONAR_KEY, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode()); sonarqubeUrl = sonarqubeUrl.endsWith("/") ? sonarqubeUrl : sonarqubeUrl + "/"; //校验sonarqube地址是否正确 @@ -1851,7 +1850,7 @@ public SonarTableVO getSonarTable(Long projectId, Long appServiceId, String type ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId); Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); SonarClient sonarClient = RetrofitHandler.getSonarClient(sonarqubeUrl, SONAR, userName, password); - String key = String.format(SONAR_KEY, organizationDTO.getTenantNum(), projectDTO.getCode(), applicationDTO.getCode()); + String key = String.format(SONAR_KEY, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), applicationDTO.getCode()); sonarqubeUrl = sonarqubeUrl.endsWith("/") ? sonarqubeUrl : sonarqubeUrl + "/"; Map queryMap = new HashMap<>(); queryMap.put("component", key); @@ -2144,7 +2143,7 @@ public List createAppService(Long projectId, List groupDTOS = gitlabServiceClientOperator.queryGroupWithStatisticsByName(path, TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), Boolean.TRUE); if (!CollectionUtils.isEmpty(groupDTOS)) { List projectGroups = groupDTOS.stream().filter(groupDTO -> org.apache.commons.lang3.StringUtils.equalsIgnoreCase(groupDTO.getPath(), path)).collect(toList()); @@ -2545,7 +2544,7 @@ private void cloneAndPushCode(AppServiceDTO appServiceDTO, UserAttrDTO userAttrD String oldGroup; ProjectDTO oldProjectDTO = baseServiceClientOperator.queryIamProjectById(oldAppServiceDTO.getProjectId()); Tenant oldOrganizationDTO = baseServiceClientOperator.queryOrganizationById(oldProjectDTO.getOrganizationId()); - oldGroup = oldOrganizationDTO.getTenantNum() + "-" + oldProjectDTO.getCode(); + oldGroup = oldOrganizationDTO.getTenantNum() + "-" + oldProjectDTO.getDevopsComponentCode(); //拉取代码 // 获取push代码所需的access token String applicationDir = APPLICATION + System.currentTimeMillis(); @@ -2694,7 +2693,7 @@ public String getGitlabUrl(Long projectId, Long appServiceId) { Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); String urlSlash = gitlabUrl.endsWith("/") ? "" : "/"; return gitlabUrl + urlSlash - + organizationDTO.getTenantNum() + "-" + projectDTO.getCode() + "/" + + organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode(); } return ""; @@ -2901,7 +2900,7 @@ private List listAllAppServicesHavingVersion(Long projectId, ProjectDTO projectDTO = projectMap.get(entry.getKey()); AppServiceGroupVO appServiceGroupVO = new AppServiceGroupVO(); appServiceGroupVO.setName(projectDTO.getName()); - appServiceGroupVO.setCode(projectDTO.getCode()); + appServiceGroupVO.setCode(projectDTO.getDevopsComponentCode()); appServiceGroupVO.setId(projectDTO.getId()); appServiceGroupVO.setAppServiceList(entry.getValue()); appServiceGroupList.add(appServiceGroupVO); @@ -3109,8 +3108,8 @@ public Page listAppServiceByIds(Set ids, Boolean doPage, rep.setGitlabProjectId(TypeUtil.objToLong(app.getGitlabProjectId())); ProjectDTO project = projectDTOMap.get(rep.getProjectId()); Tenant org = orgMap.get(project.getOrganizationId()); - rep.setRepoUrl(concatRepoUrl(org.getTenantNum(), project.getCode(), rep.getCode())); - rep.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, org.getTenantNum(), project.getCode(), rep.getCode())); + rep.setRepoUrl(concatRepoUrl(org.getTenantNum(), project.getDevopsComponentCode(), rep.getCode())); + rep.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, org.getTenantNum(), project.getDevopsComponentCode(), rep.getCode())); return rep; }).collect(toList()); @@ -3280,7 +3279,7 @@ public String calculateGitlabProjectUrlWithSuffix(Long appServiceId) { ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); String repoUrl = !gitlabUrl.endsWith("/") ? gitlabUrl + "/" : gitlabUrl; - return String.format(GitOpsConstants.REPO_URL_TEMPLATE_WITHOUT_SUFFIX, repoUrl, tenant.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode()); + return String.format(GitOpsConstants.REPO_URL_TEMPLATE_WITHOUT_SUFFIX, repoUrl, tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode()); } /** diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 643100d1d3..c91de02fc5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -199,7 +199,7 @@ private AppServiceVersionDTO doCreate(String image, Long harborConfigId, String String helmUrl = helmConfig.getUrl(); newVersion.setHelmConfigId(devopsConfigDTO.getId()); - newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getCode() + "/"); + newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); // 取commit的一部分作为文件路径 String commitPart = commit == null ? "" : commit.substring(0, 8); @@ -210,7 +210,7 @@ private AppServiceVersionDTO doCreate(String image, Long harborConfigId, String String path = FileUtil.multipartFileToFile(storeFilePath, files); // 上传chart包到 chart museum - chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); + chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); FileUtil.unTarGZ(path, destFilePath); @@ -473,7 +473,7 @@ public List listByAppIdAndBranch(Long appServiceId appServiceVersionAndCommitVO.setVersion(applicationVersionDTO.getVersion()); appServiceVersionAndCommitVO.setCreateDate(applicationVersionDTO.getCreationDate()); appServiceVersionAndCommitVO.setCommitUrl(gitlabUrl + "/" - + organization.getTenantNum() + "-" + projectDTO.getCode() + "/" + + organization.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/" + applicationDTO.getCode() + ".git"); appServiceVersionAndCommitVOS.add(appServiceVersionAndCommitVO); @@ -843,7 +843,7 @@ public void batchDelete(Long projectId, Long appServiceId, Set versionIds) deleteImagetags.add(harborImageTagDTO); } // 计算删除chart列表 - ChartTagVO chartTagVO = caculateChartTag(tenant.getTenantNum(), projectDTO.getCode(), appServiceDTO.getCode(), appServiceVersionDTO); + ChartTagVO chartTagVO = caculateChartTag(tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), appServiceVersionDTO); deleteChartTags.add(chartTagVO); // 删除应用服务版本 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java index ae2e0152a2..bf861e3327 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CertificationServiceImpl.java @@ -132,7 +132,7 @@ public void createCertification(Long projectId, C7nCertificationCreateVO c7nCert ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId); - String path = String.format("tmp%s%s%s%s", FILE_SEPARATOR, projectDTO.getCode(), FILE_SEPARATOR, devopsEnvironmentDTO.getCode()); + String path = String.format("tmp%s%s%s%s", FILE_SEPARATOR, projectDTO.getDevopsComponentCode(), FILE_SEPARATOR, devopsEnvironmentDTO.getCode()); String certFileName; String keyFileName; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java index 45ba3db014..fe3158e999 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java @@ -1340,7 +1340,7 @@ public Map runnerGuide(Long projectId) { // name: orgName-projectName + suffix String groupName = GitOpsUtil.renderGroupName(tenant.getTenantNum(), - projectDTO.getCode(), ""); + projectDTO.getDevopsComponentCode(), ""); String processedGitlabUrl = ""; if (gitlabUrl.endsWith("/")) { processedGitlabUrl = gitlabUrl.substring(0, gitlabUrl.length() - 1); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java index 574a51e2e0..e5982bc559 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java @@ -348,13 +348,13 @@ private void doCreate(String image, String token, String version, String commit, String helmUrl = helmConfig.getUrl(); appServiceVersionDTO.setHelmConfigId(devopsConfigDTO.getId()); - appServiceVersionDTO.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getCode() + "/"); + appServiceVersionDTO.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); String storeFilePath = STORE_PATH + version; String destFilePath = DESTINATION_PATH + version; String path = FileUtil.multipartFileToFile(storeFilePath, files); //上传chart包到chartmuseum - chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); + chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); // 有需求让重新上传chart包,所以校验重复推后 if (newApplicationVersion != null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvFileServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvFileServiceImpl.java index 1f0061c2d3..6732211a94 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvFileServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvFileServiceImpl.java @@ -151,7 +151,7 @@ private String getGitlabUrl(Long envId) { Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); String urlSlash = gitlabUrl.endsWith("/") ? "" : "/"; return String.format("%s%s%s-%s-gitops/%s/tree/", - gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getCode(), devopsEnvironmentDTO.getCode()); + gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode()); } private void setCommitAndFileUrl(DevopsEnvFileErrorVO devopsEnvFileErrorVO, String gitlabProjectPath) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java index c3da8e601b..aa786829e8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java @@ -259,7 +259,7 @@ public void create(Long projectId, DevopsEnvironmentReqVO devopsEnvironmentReqVO } List sshKeys = FileUtil.getSshKey( - organizationDTO.getTenantNum() + "/" + projectDTO.getCode() + "/" + devopsEnvironmentReqVO.getCode()); + organizationDTO.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" + devopsEnvironmentReqVO.getCode()); devopsEnvironmentDTO.setEnvIdRsa(sshKeys.get(0)); devopsEnvironmentDTO.setEnvIdRsaPub(sshKeys.get(1)); @@ -713,7 +713,7 @@ public DevopsEnvironmentInfoVO queryInfoById(Long projectId, Long environmentId) } gitlabUrl = gitlabUrl.endsWith("/") ? gitlabUrl.substring(0, gitlabUrl.length() - 1) : gitlabUrl; - vo.setGitlabUrl(String.format("%s/%s-%s-gitops/%s/", gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getCode(), envInfo.getCode())); + vo.setGitlabUrl(String.format("%s/%s-%s-gitops/%s/", gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), envInfo.getCode())); return vo; } @@ -920,7 +920,7 @@ public void handleCreateEnvSaga(EnvGitlabProjectPayload gitlabProjectPayload) { Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName( - organizationDTO.getTenantNum() + "-" + projectDTO.getCode() + "-gitops", + organizationDTO.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "-gitops", devopsEnvironmentDTO.getCode(), gitlabProjectPayload.getUserId(), false); @@ -1091,7 +1091,7 @@ public EnvSyncStatusVO queryEnvSyncStatus(Long projectId, Long envId) { gitlabUrl = gitlabUrl.endsWith("/") ? gitlabUrl.substring(0, gitlabUrl.length() - 1) : gitlabUrl; envSyncStatusDTO.setCommitUrl(String.format("%s/%s-%s-gitops/%s/commit/", - gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getCode(), + gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode())); return envSyncStatusDTO; } @@ -1608,7 +1608,7 @@ public DevopsEnvironmentDTO createSystemEnv(Long clusterId) { // 生成deployKey List sshKeys = FileUtil.getSshKey( - organizationDTO.getTenantNum() + "/" + projectDTO.getCode() + "/" + devopsEnvironmentDTO.getCode()); + organizationDTO.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" + devopsEnvironmentDTO.getCode()); devopsEnvironmentDTO.setEnvIdRsa(sshKeys.get(0)); devopsEnvironmentDTO.setEnvIdRsaPub(sshKeys.get(1)); @@ -1620,7 +1620,7 @@ public DevopsEnvironmentDTO createSystemEnv(Long clusterId) { Integer gitlabUserId = TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()); GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName( GitOpsUtil.renderGroupPath(organizationDTO.getTenantNum(), - projectDTO.getCode(), + projectDTO.getDevopsComponentCode(), GitOpsConstants.CLUSTER_ENV_GROUP_SUFFIX), envCode, gitlabUserId, @@ -1689,7 +1689,7 @@ public void deleteSystemEnv(Long projectId, Long clusterId, String clusterCode, Integer gitlabUserId = TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()); GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator.queryProjectByName( GitOpsUtil.renderGroupPath(organizationDTO.getTenantNum(), - projectDTO.getCode(), + projectDTO.getDevopsComponentCode(), GitOpsConstants.CLUSTER_ENV_GROUP_SUFFIX), systemEnvProjectCode, gitlabUserId, diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index bc0a230645..8e72b0e295 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -368,7 +368,7 @@ public Page pageBranchByOptions(Long projectId, PageRequest pageable, String urlSlash = gitlabUrl.endsWith("/") ? "" : "/"; String path = String.format("%s%s%s-%s/%s", - gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getCode(), applicationDTO.getCode()); + gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), applicationDTO.getCode()); Page devopsBranchDTOPageInfo = devopsBranchService.basePageBranch(appServiceId, pageable, params, null); Page devopsBranchVOPageInfo = ConvertUtils.convertPage(devopsBranchDTOPageInfo, BranchVO.class); @@ -590,7 +590,7 @@ public Page pageTagsByOptions(Long projectId, Long applicationId, String Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); String urlSlash = gitlabUrl.endsWith("/") ? "" : "/"; String path = String.format("%s%s%s-%s/%s", - gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getCode(), applicationDTO.getCode()); + gitlabUrl, urlSlash, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), applicationDTO.getCode()); return ConvertUtils.convertPage(gitlabServiceClientOperator.pageTag(projectDTO, applicationDTO.getGitlabProjectId(), path, page, params, size, getGitlabUserId(), checkMember), TagVO.class); } @@ -707,10 +707,10 @@ public void fileResourceSync(PushWebHookVO pushWebHookVO) { //本地路径 final String path = GitOpsUtil.getLocalPathToStoreEnv(organizationDTO.getTenantNum(), - projectDTO.getCode(), devopsEnvironmentDTO.getClusterCode(), devopsEnvironmentDTO.getCode(), devopsEnvironmentDTO.getId()); + projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getClusterCode(), devopsEnvironmentDTO.getCode(), devopsEnvironmentDTO.getId()); //生成环境git仓库ssh地址 final String url = GitUtil.getGitlabSshUrl( - pattern, gitUtil.getSshUrl(), organizationDTO.getTenantNum(), projectDTO.getCode(), + pattern, gitUtil.getSshUrl(), organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode(), EnvironmentType.forValue(devopsEnvironmentDTO.getType()), devopsEnvironmentDTO.getClusterCode()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitlabPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitlabPipelineServiceImpl.java index 55fbcede16..cb1a45d4c9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitlabPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitlabPipelineServiceImpl.java @@ -409,7 +409,7 @@ public Page pageByOptions(Long appServiceId, String bran } devopsGitlabPipelineDTO.setStages(stages); devopsGitlabPipelineDTO.setGitlabUrl(gitlabUrl + "/" - + organization.getTenantNum() + "-" + projectDTO.getCode() + "/" + + organization.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git"); devopsGiltabPipelineDTOS.add(devopsGitlabPipelineDTO); }); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsMergeRequestServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsMergeRequestServiceImpl.java index 17e543441e..920ceb548f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsMergeRequestServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsMergeRequestServiceImpl.java @@ -236,7 +236,7 @@ public Page getMergeRequestToBeChecked(Long projectId, Set mergeRequestVOPage.getContent().forEach(mergeRequestVO -> { String urlSlash = gitlabUrl.endsWith("/") ? "" : "/"; String mergeRequestUrl = String.format("%s%s%s-%s/%s/merge_requests/%s", - gitlabUrl, urlSlash, tenant.getTenantNum(), projectDTO.getCode(), mergeRequestVO.getAppServiceCode(), mergeRequestVO.getGitlabMergeRequestId()); + gitlabUrl, urlSlash, tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), mergeRequestVO.getAppServiceCode(), mergeRequestVO.getGitlabMergeRequestId()); mergeRequestVO.setIamAuthor(ConvertUtils.convertObject(iamUserDTOMap.get(gitlabIamUserIdMap.get(mergeRequestVO.getAuthorId())), UserVO.class)); mergeRequestVO.setIamAssignee(ConvertUtils.convertObject(iamUserDTOMap.get(gitlabIamUserIdMap.get(mergeRequestVO.getAssigneeId())), UserVO.class)); mergeRequestVO.setGitlabUrl(mergeRequestUrl); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java index 62be5cc503..bc806e1a49 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupServiceImpl.java @@ -153,7 +153,8 @@ public void createClusterEnvGroup(ProjectDTO projectDTO, Tenant organizationDTO, GitlabGroupPayload payload = new GitlabGroupPayload(); payload.setOrganizationCode(organizationDTO.getTenantNum()); payload.setOrganizationName(organizationDTO.getTenantName()); - payload.setProjectCode(projectDTO.getCode()); + payload.setProjectCode(projectDTO.getDevopsComponentCode()); + payload.setDevopsComponentCode(projectDTO.getDevopsComponentCode()); payload.setProjectName(projectDTO.getName()); payload.setProjectId(projectDTO.getId()); payload.setUserId(userAttrDTO.getIamUserId()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/SendNotificationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/SendNotificationServiceImpl.java index a6f4da58c7..4b4522d968 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/SendNotificationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/SendNotificationServiceImpl.java @@ -479,7 +479,7 @@ public void sendWhenMergeRequestAuditEvent(Integer gitlabProjectId, Long mergeRe return; } - Map params = makeMergeRequestEventParams(gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getCode(), projectDTO.getName(), appServiceDTO.getCode(), appServiceDTO.getName(), authorUser.getRealName(), mergeRequestId); + Map params = makeMergeRequestEventParams(gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), projectDTO.getName(), appServiceDTO.getCode(), appServiceDTO.getName(), authorUser.getRealName(), mergeRequestId); params.put(LINK, String.format(MERGE_REQUEST_URL, frontUrl, projectDTO.getId(), projectDTO.getName(), projectDTO.getOrganizationId(), appServiceDTO.getId())); sendNotices(MessageCodeConstants.AUDIT_MERGE_REQUEST, ArrayUtil.singleAsList(constructReceiver(iamUserDTO.getId())), params, projectDTO.getId()); }, @@ -546,7 +546,7 @@ private void doSendWhenMergeRequestClosedOrMerged(String sendSettingCode, Intege return; } - Map params = makeMergeRequestEventParams(gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getCode(), projectDTO.getName(), appServiceDTO.getCode(), appServiceDTO.getName(), authorUser.getRealName(), mergeRequestId); + Map params = makeMergeRequestEventParams(gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), projectDTO.getName(), appServiceDTO.getCode(), appServiceDTO.getName(), authorUser.getRealName(), mergeRequestId); params.put(LINK, String.format(MERGE_REQUEST_URL, frontUrl, projectDTO.getId(), projectDTO.getName(), projectDTO.getOrganizationId(), appServiceDTO.getId())); sendNotices(sendSettingCode, ArrayUtil.singleAsList(constructReceiver(iamUserDTO.getId())), params, projectDTO.getId()); }, diff --git a/src/main/java/io/choerodon/devops/app/service/impl/WorkBenchServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/WorkBenchServiceImpl.java index 6390765495..156e6215dd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/WorkBenchServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/WorkBenchServiceImpl.java @@ -169,7 +169,7 @@ private List listMergeRequestApproval(Tenant tenant, Map listLatestUserAppServiceDTO(Tenant tenant, List latestAppServiceVO.setProjectName(projectDTO.getName()) .setProjectId(appServiceDTO.getProjectId()) .setCode(appServiceDTO.getCode()) - .setRepoUrl(gitlabUrl + urlSlash + tenant.getTenantNum() + "-" + projectDTO.getCode() + "/" + .setRepoUrl(gitlabUrl + urlSlash + tenant.getTenantNum() + "-" + projectDTO.getDevopsComponentCode() + "/" + appServiceDTO.getCode() + ".git") .setName(appServiceDTO.getName()); }); diff --git a/src/main/java/io/choerodon/devops/infra/dto/iam/ProjectDTO.java b/src/main/java/io/choerodon/devops/infra/dto/iam/ProjectDTO.java index d43e38f814..e20e79634a 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/iam/ProjectDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/iam/ProjectDTO.java @@ -39,6 +39,9 @@ public class ProjectDTO extends AuditDomain { @ApiModelProperty(value = "项目类型(遗留旧字段,一对一):AGILE(敏捷项目),PROGRAM(普通项目组),ANALYTICAL(分析型项目群)") private String category; + @ApiModelProperty("devops基础组件中使用的编码,harbor、gitlab、sonar、chartmuserm") + private String devopsComponentCode; + @ApiModelProperty(value = "项目类型") private List categoryIds; @@ -55,6 +58,14 @@ public class ProjectDTO extends AuditDomain { private String applicationCode; private String programName; + public String getDevopsComponentCode() { + return devopsComponentCode; + } + + public void setDevopsComponentCode(String devopsComponentCode) { + this.devopsComponentCode = devopsComponentCode; + } + public Long getAppServiceId() { return appServiceId; } diff --git a/src/main/java/io/choerodon/devops/infra/handler/ClusterConnectionHandler.java b/src/main/java/io/choerodon/devops/infra/handler/ClusterConnectionHandler.java index 6f69351428..c052f9abc2 100644 --- a/src/main/java/io/choerodon/devops/infra/handler/ClusterConnectionHandler.java +++ b/src/main/java/io/choerodon/devops/infra/handler/ClusterConnectionHandler.java @@ -107,10 +107,10 @@ public String handDevopsEnvGitRepository(Long projectId, String envCode, Long en ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId); Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); //本地路径 - String path = GitOpsUtil.getLocalPathToStoreEnv(organizationDTO.getTenantNum(), projectDTO.getCode(), clusterCode, envCode, envId); + String path = GitOpsUtil.getLocalPathToStoreEnv(organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), clusterCode, envCode, envId); //生成环境git仓库ssh地址 String url = GitUtil.getGitlabSshUrl(pattern, gitUtil.getSshUrl(), organizationDTO.getTenantNum(), - projectDTO.getCode(), envCode, EnvironmentType.forValue(envType), clusterCode); + projectDTO.getDevopsComponentCode(), envCode, EnvironmentType.forValue(envType), clusterCode); File file = new File(path); if (!file.exists()) { diff --git a/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java b/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java index 55dff6f5a0..39c4117004 100644 --- a/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java @@ -130,10 +130,10 @@ public void deleteChart(ChartTagVO chartTagVO) { public void downloadChart(AppServiceVersionDTO appServiceVersionDTO, Tenant organizationDTO, ProjectDTO projectDTO, AppServiceDTO applicationDTO, String destpath) { ConfigurationProperties configurationProperties = new ConfigurationProperties(); configurationProperties.setType(CHART); - configurationProperties.setBaseUrl(appServiceVersionDTO.getRepository().split(organizationDTO.getTenantNum() + "/" + projectDTO.getCode())[0]); + configurationProperties.setBaseUrl(appServiceVersionDTO.getRepository().split(organizationDTO.getTenantNum() + "/" + projectDTO.getDevopsComponentCode())[0]); Retrofit retrofit = RetrofitHandler.initRetrofit(configurationProperties); ChartClient chartClient = retrofit.create(ChartClient.class); - Call getTaz = chartClient.downloadTaz(organizationDTO.getTenantNum(), projectDTO.getCode(), applicationDTO.getCode(), appServiceVersionDTO.getVersion()); + Call getTaz = chartClient.downloadTaz(organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), applicationDTO.getCode(), appServiceVersionDTO.getVersion()); FileOutputStream fos = null; try { Response response = getTaz.execute(); diff --git a/src/main/java/io/choerodon/devops/infra/util/GitUtil.java b/src/main/java/io/choerodon/devops/infra/util/GitUtil.java index 7d686292f7..5a134ffb8d 100644 --- a/src/main/java/io/choerodon/devops/infra/util/GitUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/GitUtil.java @@ -828,7 +828,7 @@ public GitConfigVO getGitConfig(Long clusterId) { devopsEnvironments.forEach(devopsEnvironmentDTO -> { ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(devopsEnvironmentDTO.getProjectId()); Tenant organizationDTO = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); - String repoUrl = GitUtil.getGitlabSshUrl(PATTERN, gitlabSshUrl, organizationDTO.getTenantNum(), projectDTO.getCode(), devopsEnvironmentDTO.getCode(), EnvironmentType.forValue(devopsEnvironmentDTO.getType()), devopsClusterDTO.getCode()); + String repoUrl = GitUtil.getGitlabSshUrl(PATTERN, gitlabSshUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), devopsEnvironmentDTO.getCode(), EnvironmentType.forValue(devopsEnvironmentDTO.getType()), devopsClusterDTO.getCode()); GitEnvConfigVO gitEnvConfigVO = new GitEnvConfigVO(); gitEnvConfigVO.setEnvId(devopsEnvironmentDTO.getId()); From 1c7fdbce309a313108d55aaec58768f64bd1fd8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 7 Jun 2022 10:40:57 +0800 Subject: [PATCH 004/228] =?UTF-8?q?[IMP]=20devops=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/eventhandler/payload/ProjectPayload.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java index 194651d4e4..4a1e3c3093 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ProjectPayload.java @@ -3,6 +3,8 @@ import java.util.List; import java.util.Set; +import io.swagger.annotations.ApiModelProperty; + import io.choerodon.devops.api.vo.ProjectCategoryVO; /** @@ -16,6 +18,8 @@ public class ProjectPayload { private String projectName; private String organizationCode; private String organizationName; + @ApiModelProperty("devops组件编码") + private String devopsComponentCode; private String userName; private Long userId; private String imageUrl; @@ -29,6 +33,14 @@ public class ProjectPayload { private List projectCategoryVOS; + public String getDevopsComponentCode() { + return devopsComponentCode; + } + + public void setDevopsComponentCode(String devopsComponentCode) { + this.devopsComponentCode = devopsComponentCode; + } + public Long getProjectId() { return projectId; } From cf9096e18c05241bbf15f16bb422544ed3066c86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 7 Jun 2022 17:12:29 +0800 Subject: [PATCH 005/228] =?UTF-8?q?[IMP]=20=E5=BC=80=E5=8F=91=E5=9B=BE?= =?UTF-8?q?=E8=A1=A8=E7=89=88=E6=9C=AC=E5=B1=95=E7=A4=BAbug=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dyq-devops-1930?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/AppServiceVersionMapper.xml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index b6f577b055..49dd380692 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -356,15 +356,13 @@ From a83b67fde75da1e0a5b49838985915223273ef63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 8 Jun 2022 11:32:40 +0800 Subject: [PATCH 006/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=A1=B9?= =?UTF-8?q?=E7=9B=AEsaga=E9=80=BB=E8=BE=91=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../choerodon/devops/app/eventhandler/SagaHandler.java | 9 +-------- .../devops/app/service/impl/GitlabHandleServiceImpl.java | 1 + 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index c0e506b439..5f18ab41b2 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -135,19 +135,12 @@ public String handleUpdateGitOpsGroupEvent(String msg) { if (CollectionUtils.isEmpty(projectPayload.getProjectCategoryVOS())) { return msg; } - if (!projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { + if (projectPayload.getProjectCategoryVOS().stream().map(ProjectCategoryVO::getCode).noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { return msg; } gitlabHandleService.handleProjectCategoryEvent(projectPayload); LOGGER.info(">>>>>>>>>end sync project devops category<<<<<<<<<<"); return msg; - -// ProjectPayload projectPayload = gson.fromJson(msg, ProjectPayload.class); -// GitlabGroupPayload gitlabGroupPayload = new GitlabGroupPayload(); -// BeanUtils.copyProperties(projectPayload, gitlabGroupPayload); -// loggerInfo(msg); -// gitlabGroupService.updateGroups(gitlabGroupPayload); -// return msg; } /** diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java index d4adb59840..592917cc92 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java @@ -46,6 +46,7 @@ public void handleProjectCategoryEvent(ProjectPayload projectPayload) { gitlabGroupPayload.setOrganizationCode(projectPayload.getOrganizationCode()); gitlabGroupPayload.setOrganizationName(projectPayload.getOrganizationName()); gitlabGroupPayload.setProjectCode(projectPayload.getProjectCode()); + gitlabGroupPayload.setDevopsComponentCode(projectPayload.getDevopsComponentCode()); gitlabGroupPayload.setProjectId(projectPayload.getProjectId()); gitlabGroupPayload.setProjectName(projectPayload.getProjectName()); gitlabGroupPayload.setUserId(projectPayload.getUserId()); From ae987cee126e4b19140ef71100e0a7fe4505ab0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 9 Jun 2022 16:36:40 +0800 Subject: [PATCH 007/228] =?UTF-8?q?[IMP]=20=E4=BC=98=E5=8C=96=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E5=88=9B=E5=BB=BA=E6=8A=A5=E9=94=99=E6=8F=90?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DevopsCiPipelineServiceImpl.java | 12 ++++++------ .../resources/messages/messages_zh_CN.properties | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java index fe3158e999..b6b72963b9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java @@ -298,7 +298,7 @@ private void initGitlabCiFile(Integer gitlabProjectId, String branch, String ciF GitUserNameUtil.getAdminId(), branch); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } else { @@ -317,7 +317,7 @@ private void initGitlabCiFile(Integer gitlabProjectId, String branch, String ciF GitUserNameUtil.getAdminId(), branch); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } } @@ -338,7 +338,7 @@ private void initGitlabCiFileIfEmpty(Integer gitlabProjectId, String branch, Str GitUserNameUtil.getAdminId(), branch); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } @@ -361,7 +361,7 @@ private void initExternalGitlabCiFileIfEmpty(Integer gitlabProjectId, String bra branch, appExternalConfigDTO); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } @@ -391,7 +391,7 @@ private void initExternalGitlabCiFile(Integer gitlabProjectId, String branch, St branch, appExternalConfigDTO); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } else { @@ -411,7 +411,7 @@ private void initExternalGitlabCiFile(Integer gitlabProjectId, String branch, St branch, appExternalConfigDTO); } catch (Exception ex) { - throw new CommonException("error.create.or.update.gitlab.ci", ex); + throw new CommonException("error.create.or.update.gitlab.ci", ex, branch); } } } diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 38669c3677..40978cec8c 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -761,7 +761,7 @@ error.stage.name.not.unique=流水线中阶段的名称应该唯一: {0} error.both.repos.and.settings.exist=步骤{0}的repo和mavenSettings值只能填一个 error.maven.settings.not.xml.format=步骤{0}提供的mavenSettings内容不符合xml格式 error.delete.gitlab-ci.file=从master分支删除.gitlab-ci.yaml文件失败,请重试或确认是否在gitlab中设置了master分支不允许任何人push -error.create.or.update.gitlab.ci=从master分支创建或更新.gitlab-ci.yaml文件失败,请重试或确认是否在gitlab中设置了master分支不允许任何人push +error.create.or.update.gitlab.ci=从 {0} 分支创建或更新.gitlab-ci.yaml文件失败,请重试或确认是否在gitlab中设置了 {0} 分支不允许任何人push error.create.pipeline.failed=创建Gitlab CI流水线失败,请检查所选分支是否满足任务执行条件 error.default.sonar.not.exist=没有默认的Sonarqube配置 error.sonar.config.type.not.supported=Sonar配置类型 {0} 暂不支持 From 675f5b2121437e8756a6b86cdacd5efdb5b2d7d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 13 Jun 2022 10:47:15 +0800 Subject: [PATCH 008/228] =?UTF-8?q?[IMP]=20=E8=A7=A3=E5=86=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=BC=82=E5=91=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/AppServiceInstanceController.java | 40 -- .../controller/v1/DevopsHostController.java | 1 - .../DevopsOrganizationConfigController.java | 1 - .../v1/DevopsProjectController.java | 2 - .../DevopsHostAdditionalCheckValidator.java | 4 +- .../api/vo/template/CiTemplateJobGroupVO.java | 5 +- .../vo/template/CiTemplateJobStepRelVO.java | 2 - .../api/vo/template/CiTemplateJobVO.java | 3 +- .../api/vo/template/CiTemplateSonarVO.java | 5 +- .../vo/template/CiTemplateStageJobRelVO.java | 9 - .../api/vo/template/CiTemplateVariableVO.java | 5 +- .../devops/app/eventhandler/SagaHandler.java | 2 +- .../step/DevopsCiDockerBuildStepHandler.java | 2 - .../app/service/AppExternalConfigService.java | 2 - .../app/service/DevopsDeployService.java | 1 - .../devops/app/service/DevopsHostService.java | 4 +- .../impl/AppExceptionRecordServiceImpl.java | 23 +- .../impl/AppServiceInstanceServiceImpl.java | 1 - .../service/impl/AppServiceServiceImpl.java | 17 +- .../impl/CiTemplateJobGroupServiceImpl.java | 3 +- .../impl/CiTemplateStepServiceImpl.java | 14 - .../impl/DevopsCdAuditRecordServiceImpl.java | 11 +- .../DevopsCdEnvDeployInfoServiceImpl.java | 2 - .../DevopsCdPipelineRecordServiceImpl.java | 1 - .../impl/DevopsCdPipelineServiceImpl.java | 5 +- .../impl/DevopsCheckLogServiceImpl.java | 16 +- .../DevopsCiPipelineRecordServiceImpl.java | 1 - .../impl/DevopsCiPipelineServiceImpl.java | 390 +----------------- .../impl/DevopsCiStageServiceImpl.java | 7 +- ...vopsClusterOperatingRecordServiceImpl.java | 3 - .../DevopsClusterResourceServiceImpl.java | 11 - .../impl/DevopsClusterServiceImpl.java | 1 - .../impl/DevopsConfigMapServiceImpl.java | 23 +- .../service/impl/DevopsConfigServiceImpl.java | 3 - .../service/impl/DevopsDeployServiceImpl.java | 8 +- .../impl/DevopsEnvApplicationServiceImpl.java | 11 +- .../DevopsEnvUserPermissionServiceImpl.java | 1 - .../service/impl/DevopsHostServiceImpl.java | 9 +- .../impl/DevopsIssueRelServiceImpl.java | 7 - .../service/impl/DevopsSecretServiceImpl.java | 3 +- .../service/impl/GitlabHandleServiceImpl.java | 4 +- .../impl/HandlerC7nSecretServiceImpl.java | 5 - .../devops/app/task/DevopsCommandRunner.java | 6 +- .../devops/infra/dto/CertificationDTO.java | 1 - .../devops/infra/dto/CiTemplateSonarDTO.java | 2 - .../infra/dto/DevopsEnvAppServiceDTO.java | 1 - .../devops/infra/enums/CiTriggerType.java | 2 +- .../devops/infra/feign/BaseServiceClient.java | 3 - .../gitops/ResourceConvertToYamlHandler.java | 19 - .../mapper/AppServiceInstanceMapper.java | 9 - .../mapper/CiScheduleVariableMapper.java | 4 +- .../infra/mapper/CiTemplateJobMapper.java | 1 - .../infra/mapper/DevopsDeploymentMapper.java | 1 - .../infra/mapper/DevopsEnvCommandMapper.java | 11 +- .../infra/mapper/DevopsEnvResourceMapper.java | 1 - .../devops/infra/util/ExternalGitUtil.java | 28 -- .../devops/infra/util/GitlabCiUtil.java | 13 - .../choerodon/devops/infra/util/SshUtil.java | 239 ----------- 58 files changed, 74 insertions(+), 935 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java index 4e361c2138..42aae93378 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java @@ -141,46 +141,6 @@ public ResponseEntity> pageInstanceInfoByOptions( appServiceInstanceService.pageInstanceInfoByOptions(projectId, envId, pageable, params), HttpStatus.OK); } - -// /** -// * 分页查询服务部署 -// * -// * @param projectId 项目id -// * @param pageable 分页参数 -// * @param envId 环境id -// * @param versionId 版本id -// * @param appServiceId 服务id -// * @param params 搜索参数 -// * @return page of DevopsEnvPreviewInstanceVO -// */ -// @Permission(level = ResourceLevel.ORGANIZATION, -// roles = {InitRoleCode.PROJECT_OWNER, -// InitRoleCode.PROJECT_MEMBER}) -// @ApiOperation(value = "分页查询服务部署") -// @CustomPageRequest -// @PostMapping(value = "/page_by_options") -// public ResponseEntity> pageByOptions( -// @ApiParam(value = "项目ID", required = true) -// @PathVariable(value = "project_id") Long projectId, -// @ApiIgnore -// @ApiParam(value = "分页参数") PageRequest pageable, -// @ApiParam(value = "环境ID") -// @RequestParam(value = "env_id", required = false) Long envId, -// @ApiParam(value = "版本ID") -// @RequestParam(value = "version_id", required = false) Long versionId, -// @ApiParam(value = "服务ID") -// @RequestParam(value = "app_service_id", required = false) Long appServiceId, -// @ApiParam(value = "实例ID") -// @RequestParam(value = "instance_id", required = false) Long instanceId, -// @ApiParam(value = "查询参数") -// @RequestBody(required = false) String params) { -// return Optional.ofNullable(appServiceInstanceService.pageByOptions( -// projectId, pageable, envId, versionId, appServiceId, instanceId, params)) -// .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) -// .orElseThrow(() -> new CommonException("error.application.version.query")); -// } - - /** * 获取实例上次部署配置 * diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java index bdf085fbf6..48ef089581 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHostController.java @@ -4,7 +4,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import io.swagger.annotations.ApiOperation; diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java index 6983da3be9..50e24e58c4 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsOrganizationConfigController.java @@ -4,7 +4,6 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import org.hzero.starter.keyencrypt.core.Encrypt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java index c3f80c0da9..ea9da99566 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectController.java @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; -import org.hzero.starter.keyencrypt.core.Encrypt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; @@ -19,7 +18,6 @@ import io.choerodon.devops.api.vo.ProjectReqVO; import io.choerodon.devops.api.vo.iam.UserVO; import io.choerodon.devops.app.service.DevopsProjectService; -import io.choerodon.devops.infra.dto.DevopsProjectDTO; import io.choerodon.devops.infra.dto.GitlabProjectSimple; import io.choerodon.mybatis.pagehelper.domain.PageRequest; import io.choerodon.swagger.annotation.CustomPageRequest; diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java index 97de450925..f62d9a3d0a 100644 --- a/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java +++ b/src/main/java/io/choerodon/devops/api/validator/DevopsHostAdditionalCheckValidator.java @@ -50,10 +50,10 @@ public void validHostInformationMatch(DevopsHostCreateRequestVO devopsHostCreate } public void validHostIdAndInstanceIdMatch(Long hostId, Long instanceId) { - CommonExAssertUtil.assertTrue(devopsHostService.HostIdInstanceIdMatch(hostId, instanceId), "error.host.id.instance.id.not.match"); + CommonExAssertUtil.assertTrue(devopsHostService.hostIdInstanceIdMatch(hostId, instanceId), "error.host.id.instance.id.not.match"); } public void validHostIdAndDockerInstanceIdMatch(Long hostId, Long instanceId) { - CommonExAssertUtil.assertTrue(devopsHostService.HostIdDockerInstanceMatch(hostId, instanceId), "error.host.id.instance.id.not.match"); + CommonExAssertUtil.assertTrue(devopsHostService.hostIdDockerInstanceMatch(hostId, instanceId), "error.host.id.instance.id.not.match"); } } diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java index 5f609b661f..0a9a73eebb 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobGroupVO.java @@ -1,12 +1,11 @@ package io.choerodon.devops.api.vo.template; -import io.swagger.annotations.ApiModelProperty; import java.util.Date; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; import org.hzero.starter.keyencrypt.core.Encrypt; import io.choerodon.devops.infra.dto.iam.IamUserDTO; diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java index 0f8243c097..0d373b2db6 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobStepRelVO.java @@ -1,7 +1,5 @@ package io.choerodon.devops.api.vo.template; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModelProperty; diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java index 6e263058fd..7c3b03f9c3 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateJobVO.java @@ -2,13 +2,12 @@ import java.util.Date; import java.util.List; +import javax.validation.constraints.NotNull; import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.annotations.ApiModelProperty; -import javax.validation.constraints.NotNull; import org.hzero.starter.keyencrypt.core.Encrypt; -import io.choerodon.devops.api.vo.DevopsCiStepVO; import io.choerodon.devops.infra.dto.CiTemplateJobGroupDTO; import io.choerodon.devops.infra.dto.iam.IamUserDTO; diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java index 9d66c65add..aa88cf572f 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateSonarVO.java @@ -1,10 +1,9 @@ package io.choerodon.devops.api.vo.template; -import io.swagger.annotations.ApiModelProperty; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.NotBlank; + +import io.swagger.annotations.ApiModelProperty; import org.hzero.starter.keyencrypt.core.Encrypt; diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java index f74d575627..556051eac3 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateStageJobRelVO.java @@ -1,19 +1,10 @@ package io.choerodon.devops.api.vo.template; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; -import javax.persistence.Table; import javax.validation.constraints.NotNull; -import com.fasterxml.jackson.annotation.JsonInclude; -import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import org.hzero.starter.keyencrypt.core.Encrypt; -import io.choerodon.mybatis.annotation.ModifyAudit; -import io.choerodon.mybatis.annotation.VersionAudit; -import io.choerodon.mybatis.domain.AuditDomain; - /** * 流水线阶段与任务模板的关系表(CiTemplateStageJobRel)实体类 * diff --git a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java index 72cef2ea6d..2a6c87f41d 100644 --- a/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/template/CiTemplateVariableVO.java @@ -1,10 +1,9 @@ package io.choerodon.devops.api.vo.template; -import io.swagger.annotations.ApiModelProperty; -import javax.persistence.GeneratedValue; -import javax.persistence.Id; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotNull; + +import io.swagger.annotations.ApiModelProperty; import org.hzero.starter.keyencrypt.core.Encrypt; /** diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index 5f18ab41b2..3dd6ffdae0 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -177,7 +177,7 @@ public List handleDeleteMemberRoleEvent(String payload) { List tempList = new ArrayList<>(gitlabGroupMemberVOList); tempList.forEach(t -> { if (t.getResourceType().equals(ResourceLevel.PROJECT.value())) { - if (!baseServiceClientOperator.listProjectCategoryById(t.getResourceId()).stream().anyMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { + if (baseServiceClientOperator.listProjectCategoryById(t.getResourceId()).stream().noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { gitlabGroupMemberVOList.remove(t); } } diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiDockerBuildStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiDockerBuildStepHandler.java index a4c22db2e2..e82c72284a 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiDockerBuildStepHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiDockerBuildStepHandler.java @@ -53,8 +53,6 @@ public void fillStepConfigInfo(DevopsCiStepVO devopsCiStepVO) { @Override public List buildGitlabCiScript(DevopsCiStepDTO devopsCiStepDTO) { - // 不填skipDockerTlsVerify参数或者填TRUE都是跳过证书校验 - // TODO 修复 目前后端这个参数的含义是是否跳过证书校验, 前端的含义是是否进行证书校验 DevopsCiDockerBuildConfigDTO devopsCiDockerBuildConfigDTO = devopsCiDockerBuildConfigService.queryByStepId(devopsCiStepDTO.getId()); Boolean doTlsVerify = devopsCiDockerBuildConfigDTO.getEnableDockerTlsVerify(); diff --git a/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java b/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java index 6e59e2351f..e071644348 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppExternalConfigService.java @@ -1,7 +1,5 @@ package io.choerodon.devops.app.service; -import java.util.List; - import io.choerodon.devops.infra.dto.AppExternalConfigDTO; /** diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java b/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java index 889404e807..de3fbc7b73 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsDeployService.java @@ -1,6 +1,5 @@ package io.choerodon.devops.app.service; -import io.choerodon.devops.api.vo.deploy.DeployConfigVO; import io.choerodon.devops.api.vo.deploy.hzero.HzeroDeployVO; /** diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java index f96ebfda3b..12909a815f 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHostService.java @@ -128,9 +128,9 @@ public interface DevopsHostService { * @param instanceId 实例id * @return true表示匹配 */ - boolean HostIdInstanceIdMatch(Long hostId, Long instanceId); + boolean hostIdInstanceIdMatch(Long hostId, Long instanceId); - boolean HostIdDockerInstanceMatch(Long hostId, Long instanceId); + boolean hostIdDockerInstanceMatch(Long hostId, Long instanceId); /** * 分页查询主机 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java index a1fb6767f5..3e909335a5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java @@ -32,7 +32,10 @@ public class AppExceptionRecordServiceImpl implements AppExceptionRecordService { private static final Logger LOGGER = LoggerFactory.getLogger(AppExceptionRecordServiceImpl.class); - private static JSON json = new JSON(); + + private static final String ERROR_UPDATE_EXCEPTION_RECORD = "error.update.exception.record"; + private static final String ERROR_SAVE_EXCEPTION_RECORD = "error.save.exception.record"; + private static JSON JSON = new JSON(); @Autowired private AppExceptionRecordMapper appExceptionRecordMapper; @Autowired @@ -51,12 +54,12 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, int desired = 1; String resourceName = ""; if (ResourceType.DEPLOYMENT.getType().equals(resourceType)) { - V1beta2Deployment v1beta2Deployment = json.deserialize(resource, V1beta2Deployment.class); + V1beta2Deployment v1beta2Deployment = JSON.deserialize(resource, V1beta2Deployment.class); current = v1beta2Deployment.getStatus().getReadyReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReadyReplicas(); desired = v1beta2Deployment.getStatus().getReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReplicas(); resourceName = v1beta2Deployment.getMetadata().getName(); } else if (ResourceType.STATEFULSET.getType().equals(resourceType)) { - V1beta2StatefulSet v1beta2StatefulSet = json.deserialize(resource, V1beta2StatefulSet.class); + V1beta2StatefulSet v1beta2StatefulSet = JSON.deserialize(resource, V1beta2StatefulSet.class); current = v1beta2StatefulSet.getStatus().getReadyReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReadyReplicas(); desired = v1beta2StatefulSet.getStatus().getReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReplicas(); resourceName = v1beta2StatefulSet.getMetadata().getName(); @@ -71,7 +74,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, AppExceptionRecordDTO appExceptionRecordDTO = appExceptionRecordMapper.queryLatestExceptionRecordFilterByType(devopsDeployAppCenterEnvDTO.getId(), resourceType, resourceName); if (appExceptionRecordDTO != null) { appExceptionRecordDTO.setEndDate(new Date()); - MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record"); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD); } } else if (current == 0) { // 停机 @@ -85,11 +88,11 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, resourceName, new Date(), true); - MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record"); + MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD); } else { if (Boolean.FALSE.equals(appExceptionRecordDTO.getDowntime())) { appExceptionRecordDTO.setEndDate(new Date()); - MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record"); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD); AppExceptionRecordDTO appExceptionRecordDTO1 = new AppExceptionRecordDTO(devopsDeployAppCenterEnvDTO.getProjectId(), devopsDeployAppCenterEnvDTO.getId(), @@ -98,7 +101,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, resourceName, new Date(), true); - MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record"); + MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD); } } } else { @@ -112,11 +115,11 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, resourceName, new Date(), false); - MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record"); + MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD); } else { if (Boolean.TRUE.equals(appExceptionRecordDTO.getDowntime())) { appExceptionRecordDTO.setEndDate(new Date()); - MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, "error.update.exception.record"); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(appExceptionRecordMapper, appExceptionRecordDTO, ERROR_UPDATE_EXCEPTION_RECORD); AppExceptionRecordDTO appExceptionRecordDTO1 = new AppExceptionRecordDTO(devopsDeployAppCenterEnvDTO.getProjectId(), devopsDeployAppCenterEnvDTO.getId(), @@ -125,7 +128,7 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, resourceName, new Date(), false); - MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, "error.save.exception.record"); + MapperUtil.resultJudgedInsertSelective(appExceptionRecordMapper, appExceptionRecordDTO1, ERROR_SAVE_EXCEPTION_RECORD); } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index 4f69d5b006..eca0b9b787 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -2288,7 +2288,6 @@ public void hzeroDeploy(Long detailsRecordId) { @Transactional(propagation = Propagation.REQUIRES_NEW) public void pipelineDeployHzeroApp(Long projectId, DevopsHzeroDeployDetailsDTO devopsHzeroDeployDetailsDTO) { -// AppServiceInstanceDTO appServiceInstanceDTO = baseQueryByCodeAndEnv(devopsHzeroDeployDetailsDTO.getInstanceCode(), devopsHzeroDeployDetailsDTO.getEnvId()); DevopsHzeroDeployConfigDTO devopsHzeroDeployConfigDTO = devopsHzeroDeployConfigService.baseQueryById(devopsHzeroDeployDetailsDTO.getValueId()); // 设置用户上下文 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 233910d546..e78fed7a8d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -24,7 +24,6 @@ import com.google.common.base.Functions; import com.google.common.base.Joiner; import com.google.gson.Gson; -import io.kubernetes.client.JSON; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.eclipse.jgit.api.Git; @@ -136,7 +135,6 @@ public class AppServiceServiceImpl implements AppServiceService { private static final String DUPLICATE = "duplicate"; private static final String NORMAL_SERVICE = "normal_service"; private static final String SHARE_SERVICE = "share_service"; - private static final String ALL = "all"; private static final String TEMP_MODAL = "\\?version="; private static final String LOGIN_NAME = "loginName"; private static final String REAL_NAME = "realName"; @@ -154,7 +152,6 @@ public class AppServiceServiceImpl implements AppServiceService { private static final String CI_FILE_TEMPLATE; private final Gson gson = new Gson(); - private final JSON json = new JSON(); @Value("${services.gitlab.url}") private String gitlabUrl; @Value("${services.gitlab.proxy-url:}") @@ -727,14 +724,6 @@ public Page pageByOptions(Long projectId, Boolean isActive, Boo List userIds = appServiceDTOList.stream().map(AppServiceDTO::getCreatedBy).collect(toList()); userIds.addAll(appServiceDTOList.stream().map(AppServiceDTO::getLastUpdatedBy).collect(toList())); List distinctIds = userIds.stream().distinct().collect(toList()); - -// Future> userFuture = baseServiceClientOperator.listUsersByIdsCollapse(new ArrayList<>(distinctIds)); -// List userResult; -// try { -// userResult = userFuture.get(); -// } catch (InterruptedException | ExecutionException e) { -// throw new CommonException("Failed to get user", e); -// } List userResult = baseServiceClientOperator.listUsersByIds(distinctIds); Map users = userResult.stream().collect(Collectors.toMap(IamUserDTO::getId, u -> u)); @@ -3303,9 +3292,9 @@ private void releaseResources(File applicationWorkDir, Git repositoryGit) { private String getApplicationToken(String token, Integer projectId, Integer userId) { List variables = gitlabServiceClientOperator.listAppServiceVariable(projectId, userId); if (variables.isEmpty()) { - gitlabServiceClientOperator.createProjectVariable(projectId, "Token", token, false, userId); + gitlabServiceClientOperator.createProjectVariable(projectId, GITLAB_VARIABLE_TOKEN, token, false, userId); //添加跳过证书扫描的变量 - gitlabServiceClientOperator.createProjectVariable(projectId, "TRIVY_INSECURE", "true", false, userId); + gitlabServiceClientOperator.createProjectVariable(projectId, GITLAB_VARIABLE_TRIVY_INSECURE, "true", false, userId); return token; } else { return variables.get(0).getValue(); @@ -3431,7 +3420,7 @@ public void createAppServiceForTransfer(AppServiceTransferVO appServiceTransferV } // 1. 迁移gitlab代码库 - GitlabProjectDTO gitlabProjectDTO = gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(), + gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(), appServiceTransferVO.getGitlabGroupId(), userId); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java index f337086013..e27260e1d4 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java @@ -4,15 +4,14 @@ import java.util.Comparator; import java.util.List; import java.util.Set; +import java.util.stream.Collectors; import com.google.common.base.Joiner; -import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; import org.hzero.core.base.BaseConstants; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import io.choerodon.devops.api.vo.template.CiTemplateJobGroupVO; import io.choerodon.devops.app.service.CiTemplateJobGroupService; import io.choerodon.devops.infra.dto.CiTemplateJobGroupDTO; import io.choerodon.devops.infra.enums.CiTemplateJobGroupTypeEnum; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateStepServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateStepServiceImpl.java index 45a997dbe3..1d6143c592 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateStepServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateStepServiceImpl.java @@ -4,8 +4,6 @@ import java.util.stream.Collectors; import org.apache.commons.lang3.StringUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -14,12 +12,8 @@ import io.choerodon.devops.app.eventhandler.pipeline.step.AbstractDevopsCiStepHandler; import io.choerodon.devops.app.service.CiTemplateStepCategoryService; import io.choerodon.devops.app.service.CiTemplateStepService; -import io.choerodon.devops.infra.dto.CiTemplateJobGroupDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; -import io.choerodon.devops.infra.enums.CiTemplateJobGroupTypeEnum; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; -import io.choerodon.devops.infra.mapper.CiTemplateDockerMapper; -import io.choerodon.devops.infra.mapper.CiTemplateSonarMapper; import io.choerodon.devops.infra.mapper.CiTemplateStepMapper; /** @@ -31,18 +25,10 @@ @Service public class CiTemplateStepServiceImpl implements CiTemplateStepService { - private static final Logger LOGGER = LoggerFactory.getLogger(CiTemplateStepServiceImpl.class); - @Autowired private CiTemplateStepCategoryService ciTemplateStepCategoryService; @Autowired private CiTemplateStepMapper ciTemplateStepMapper; - - @Autowired - private CiTemplateDockerMapper ciTemplateDockerMapper; - - @Autowired - private CiTemplateSonarMapper ciTemplateSonarMapper; @Autowired private BaseServiceClientOperator baseServiceClientOperator; @Autowired diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdAuditRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdAuditRecordServiceImpl.java index 3f7da04461..10b5dcf13d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdAuditRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdAuditRecordServiceImpl.java @@ -18,14 +18,15 @@ import io.choerodon.devops.infra.constant.MessageCodeConstants; import io.choerodon.devops.infra.constant.PipelineCheckConstant; import io.choerodon.devops.infra.constant.ResourceCheckConstant; -import io.choerodon.devops.infra.dto.CiCdPipelineDTO; import io.choerodon.devops.infra.dto.DevopsCdAuditRecordDTO; import io.choerodon.devops.infra.dto.DevopsCdJobRecordDTO; import io.choerodon.devops.infra.dto.DevopsPipelineRecordRelDTO; import io.choerodon.devops.infra.dto.iam.IamUserDTO; -import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; -import io.choerodon.devops.infra.mapper.*; +import io.choerodon.devops.infra.mapper.DevopsCdAuditRecordMapper; +import io.choerodon.devops.infra.mapper.DevopsCdJobRecordMapper; +import io.choerodon.devops.infra.mapper.DevopsCiCdPipelineMapper; +import io.choerodon.devops.infra.mapper.DevopsPipelineRecordRelMapper; import io.choerodon.devops.infra.util.KeyDecryptHelper; /** @@ -137,8 +138,6 @@ public void fixProjectId() { List devopsCdJobRecordDTOS = devopsCdJobRecordMapper.selectByIds(StringUtils.join(jobRecordIds, ",")); - devopsCdJobRecordDTOS.forEach(i -> { - devopsCdAuditRecordMapper.updateProjectIdByJobRecordId(i.getProjectId(), i.getId()); - }); + devopsCdJobRecordDTOS.forEach(i -> devopsCdAuditRecordMapper.updateProjectIdByJobRecordId(i.getProjectId(), i.getId())); } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdEnvDeployInfoServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdEnvDeployInfoServiceImpl.java index 026c0b51d5..dd2d266adb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdEnvDeployInfoServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdEnvDeployInfoServiceImpl.java @@ -22,10 +22,8 @@ @Service public class DevopsCdEnvDeployInfoServiceImpl implements DevopsCdEnvDeployInfoService { - private static final String ERROR_APP_SVC_ID_IS_NULL = "error.app.svc.id.is.null"; private static final String ERROR_ENV_ID_IS_NULL = "error.env.id.is.null"; private static final String ERROR_VALUE_ID_IS_NULL = "error.value.id.is.null"; - private static final String ERROR_PARAM_IS_INVALID = "error.param.is.invalid"; private static final String ERROR_DEPLOY_INFO_ID_IS_NULL = "error.deploy.info.id.is.null"; private static final String ERROR_SAVE_DEPLOY_INFO = "error.save.deploy.info"; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java index 2e83b7ba04..09c3ec5ced 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java @@ -799,7 +799,6 @@ public void pipelineDeployImage(Long pipelineRecordId, Long cdStageRecordId, Lon String deployObjectName = null; String image = null; Long appServiceId = null; - String serviceName = null; String repoName = null; Long repoId = null; String userName = null; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java index b35f29b987..c3392ef623 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java @@ -512,7 +512,7 @@ public void pipelineDeploy(Long pipelineRecordId, Long stageRecordId, Long jobRe log.append("Start pipeline auto deploy task.").append(System.lineSeparator()); // 获取数据 DevopsCdJobRecordDTO devopsCdJobRecordDTO = devopsCdJobRecordService.queryById(jobRecordId); - DevopsCdJobDTO devopsCdJobDTO = devopsCdJobService.queryById(devopsCdJobRecordDTO.getJobId()); + devopsCdJobService.queryById(devopsCdJobRecordDTO.getJobId()); DevopsCdEnvDeployInfoDTO devopsCdEnvDeployInfoDTO = devopsCdEnvDeployInfoService.queryById(devopsCdJobRecordDTO.getDeployInfoId()); Date startDate = new Date(); Long commandId = null; @@ -521,7 +521,6 @@ public void pipelineDeploy(Long pipelineRecordId, Long stageRecordId, Long jobRe // 设置用户上下文 log.append("Pipeline trigger user id is :").append(devopsCdJobRecordDTO.getCreatedBy()).append(System.lineSeparator()); CustomContextUtil.setUserContext(devopsCdJobRecordDTO.getCreatedBy()); -// DevopsDeployInfoVO devopsDeployInfoVO = JsonHelper.unmarshalByJackson(devopsCdJobRecordDTO.getMetadata(), DevopsDeployInfoVO.class); // 1. 校验环境是否开启一键关闭自动部署 if (Boolean.FALSE.equals(checkEnvEnableAutoDeploy(devopsCdJobRecordDTO, devopsCdEnvDeployInfoDTO, log))) { @@ -1260,8 +1259,6 @@ public String getDeployStatus(Long pipelineRecordId, String deployJobName) { // 查询实例 AppServiceInstanceDTO instanceE = appServiceInstanceService.baseQuery(devopsDeployAppCenterEnvDTO.getObjectId()); - // 查询部署版本 - AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.queryByCommitShaAndRef(instanceE.getAppServiceId(), devopsCdPipelineRecordDTO.getCommitSha(), devopsCdPipelineRecordDTO.getRef()); // 查询当前实例运行时pod metadata List podResourceDetailsDTOS = devopsEnvPodService.queryResourceDetailsByInstanceId(instanceE.getId()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 05ee0bf3e1..1e549a0593 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -191,7 +191,7 @@ public void pipelineDataMavenPublishFix() { for (CiConfigTemplateVO ciConfigTemplateVO : config) { try { - if (CiJobScriptTypeEnum.MAVEN_DEPLOY.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + if (CiJobScriptTypeEnum.MAVEN_DEPLOY.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiMavenPublishConfigVO devopsCiMavenPublishConfigVO = new DevopsCiMavenPublishConfigVO(); devopsCiMavenPublishConfigVO.setRepos(ciConfigTemplateVO.getRepos()); devopsCiMavenPublishConfigVO.setMavenSettings(ciConfigTemplateVO.getMavenSettings()); @@ -280,10 +280,6 @@ private void fixCustomJob() { for (DevopsCiJobDTO devopsCiJobDTO : devopsCiJobDTOList) { try { if (devopsCiJobDTO != null) { - CiCdPipelineVO ciCdPipelineVO = devopsCiCdPipelineMapper.queryById(devopsCiJobDTO.getCiPipelineId()); - Long devopsCiJobId = devopsCiJobDTO.getId(); - Long projectId = ciCdPipelineVO.getProjectId(); - // 需要修复的内容 // 1. job的所属分组信息 // 将构建任务拆分为单步骤的任务 @@ -459,7 +455,7 @@ private void fixBuildJob() { devopsCiJobDTO.setType(CiJobTypeEnum.NORMAL.value()); for (CiConfigTemplateVO ciConfigTemplateVO : config) { - if (CiJobScriptTypeEnum.NPM.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + if (CiJobScriptTypeEnum.NPM.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiStepVO devopsCiStepVO = new DevopsCiStepVO(); devopsCiStepVO.setDevopsCiJobId(devopsCiJobId); devopsCiStepVO.setName("Npm构建"); @@ -470,7 +466,7 @@ private void fixBuildJob() { devopsCiStepVOList.add(devopsCiStepVO); devopsCiJobDTO.setGroupType(CiTemplateJobGroupTypeEnum.BUILD.value()); - } else if (CiJobScriptTypeEnum.MAVEN.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + } else if (CiJobScriptTypeEnum.MAVEN.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiStepVO mavenStep = new DevopsCiStepVO(); mavenStep.setDevopsCiJobId(devopsCiJobId); mavenStep.setName("Maven构建"); @@ -487,7 +483,7 @@ private void fixBuildJob() { devopsCiJobDTO.setGroupType(CiTemplateJobGroupTypeEnum.BUILD.value()); - } else if (CiJobScriptTypeEnum.DOCKER.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + } else if (CiJobScriptTypeEnum.DOCKER.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiStepVO dockerStep = new DevopsCiStepVO(); dockerStep.setDevopsCiJobId(devopsCiJobId); dockerStep.setName("Docker构建"); @@ -510,7 +506,7 @@ private void fixBuildJob() { devopsCiStepVOList.add(dockerStep); devopsCiJobDTO.setGroupType(CiTemplateJobGroupTypeEnum.DOCKER_BUILD.value()); - } else if (CiJobScriptTypeEnum.UPLOAD_JAR.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + } else if (CiJobScriptTypeEnum.UPLOAD_JAR.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiStepVO uploadJar = new DevopsCiStepVO(); uploadJar.setDevopsCiJobId(devopsCiJobId); uploadJar.setName("上传Jar包至制品库"); @@ -528,7 +524,7 @@ private void fixBuildJob() { devopsCiStepVOList.add(uploadJar); devopsCiJobDTO.setGroupType(CiTemplateJobGroupTypeEnum.BUILD.value()); - } else if (CiJobScriptTypeEnum.MAVEN_DEPLOY.getType().equals(ciConfigTemplateVO.getType().toLowerCase())) { + } else if (CiJobScriptTypeEnum.MAVEN_DEPLOY.getType().equalsIgnoreCase(ciConfigTemplateVO.getType())) { DevopsCiStepVO mavenDeploy = new DevopsCiStepVO(); mavenDeploy.setDevopsCiJobId(devopsCiJobId); mavenDeploy.setName("Maven发布"); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java index 5c74f59ac7..f851bd1e2c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java @@ -397,7 +397,6 @@ public Page pagingPipelineRecord(Long projectId, Long devopsCiStageRecordVOS.forEach(stageRecord -> { List ciJobRecordDTOS = jobRecordMap.get(stageRecord.getName()); if (!CollectionUtils.isEmpty(ciJobRecordDTOS)) { - Map> statusMap = ciJobRecordDTOS.stream().collect(Collectors.groupingBy(DevopsCiJobRecordDTO::getStatus)); //计算stage状态 calculateStageStatus(stageRecord, ciJobRecordDTOS); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java index b6b72963b9..8fade9e2e5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java @@ -1,7 +1,5 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_SONAR_NAME; - import java.nio.charset.StandardCharsets; import java.text.DecimalFormat; import java.util.*; @@ -55,8 +53,6 @@ import io.choerodon.devops.infra.enums.*; import io.choerodon.devops.infra.enums.deploy.DeployTypeEnum; import io.choerodon.devops.infra.enums.deploy.RdupmTypeEnum; -import io.choerodon.devops.infra.enums.sonar.CiSonarConfigType; -import io.choerodon.devops.infra.enums.sonar.SonarAuthType; import io.choerodon.devops.infra.enums.sonar.SonarScannerType; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.feign.operator.GitlabServiceClientOperator; @@ -89,9 +85,7 @@ public class DevopsCiPipelineServiceImpl implements DevopsCiPipelineService { private static final String ERROR_PROJECT_ID_IS_NULL = "error.project.id.is.null"; private static final String ERROR_CI_MAVEN_REPOSITORY_TYPE = "error.ci.maven.repository.type"; private static final String ERROR_CI_MAVEN_SETTINGS_INSERT = "error.maven.settings.insert"; - private static final String ERROR_UNSUPPORTED_STEP_TYPE = "error.unsupported.step.type"; private static final String ERROR_BRANCH_PERMISSION_MISMATCH = "error.branch.permission.mismatch"; - private static final String UNKNOWN_DEPLOY_TYPE = "unknown.deploy.type"; @Value("${services.gateway.url}") private String gatewayUrl; @@ -137,7 +131,6 @@ public class DevopsCiPipelineServiceImpl implements DevopsCiPipelineService { private final DevopsPipelineRecordRelService devopsPipelineRecordRelService; private final DevopsCdPipelineService devopsCdPipelineService; private final DevopsPipelineRecordRelMapper devopsPipelineRecordRelMapper; - private final DevopsDeployValueMapper devopsDeployValueMapper; @Autowired private DevopsCiPipelineRecordMapper devopsCiPipelineRecordMapper; @@ -218,8 +211,7 @@ public DevopsCiPipelineServiceImpl( DevopsEnvironmentMapper devopsEnvironmentMapper, @Lazy DevopsPipelineRecordRelService devopsPipelineRecordRelService, @Lazy DevopsCdPipelineService devopsCdPipelineService, - DevopsPipelineRecordRelMapper devopsPipelineRecordRelMapper, - DevopsDeployValueMapper devopsDeployValueMapper + DevopsPipelineRecordRelMapper devopsPipelineRecordRelMapper ) { this.devopsCiCdPipelineMapper = devopsCiCdPipelineMapper; this.devopsCiPipelineRecordService = devopsCiPipelineRecordService; @@ -247,7 +239,6 @@ public DevopsCiPipelineServiceImpl( this.devopsPipelineRecordRelService = devopsPipelineRecordRelService; this.devopsCdPipelineService = devopsCdPipelineService; this.devopsPipelineRecordRelMapper = devopsPipelineRecordRelMapper; - this.devopsDeployValueMapper = devopsDeployValueMapper; this.devopsCiJobMapper = devopsCiJobMapper; } @@ -1427,44 +1418,6 @@ private CiCdPipelineRecordVO dtoToVo(DevopsPipelineRecordRelDTO devopsPipelineRe return ciCdPipelineRecordVO; } - private void calculateStageStatus(DevopsCiStageRecordVO stageRecord, Map> statusMap) { - if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.CREATED.value()))) { - stageRecord.setStatus(JobStatusEnum.CREATED.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.PENDING.value()))) { - stageRecord.setStatus(JobStatusEnum.PENDING.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.RUNNING.value()))) { - stageRecord.setStatus(JobStatusEnum.RUNNING.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.FAILED.value()))) { - stageRecord.setStatus(JobStatusEnum.FAILED.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.SUCCESS.value()))) { - stageRecord.setStatus(JobStatusEnum.SUCCESS.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.CANCELED.value()))) { - stageRecord.setStatus(JobStatusEnum.CANCELED.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.SKIPPED.value()))) { - stageRecord.setStatus(JobStatusEnum.SKIPPED.value()); - } else if (!CollectionUtils.isEmpty(statusMap.get(JobStatusEnum.MANUAL.value()))) { - stageRecord.setStatus(JobStatusEnum.MANUAL.value()); - } - } - - private List filterJobs(List devopsCiJobRecordDTOS) { - List devopsCiJobRecordDTOList = new ArrayList<>(); - if (CollectionUtils.isEmpty(devopsCiJobRecordDTOS)) { - return devopsCiJobRecordDTOList; - } - Map> jobMap = devopsCiJobRecordDTOS.stream().collect(Collectors.groupingBy(DevopsCiJobRecordDTO::getName)); - jobMap.forEach((k, v) -> { - if (v.size() > 1) { - Optional ciJobRecordDTO = v.stream().max(Comparator.comparing(DevopsCiJobRecordDTO::getId)); - devopsCiJobRecordDTOList.add(ciJobRecordDTO.get()); - } else if (v.size() == 1) { - devopsCiJobRecordDTOList.add(v.get(0)); - } - }); - return devopsCiJobRecordDTOList; - } - - private Long getPipelineExecuteTime(Long relId) { DevopsPipelineRecordRelDTO devopsPipelineRecordRelDTO = devopsPipelineRecordRelMapper.selectByPrimaryKey(relId); if (Objects.isNull(devopsPipelineRecordRelDTO)) { @@ -2067,24 +2020,6 @@ private static MavenRepoVO convertRepo(NexusMavenRepoDTO nexusMavenRepoDTO) { return mavenRepoVO; } - /** - * 生成maven构建相关的脚本 - * - * @param projectId 项目id - * @param jobId job id - * @param ciConfigTemplateVO maven构建阶段的信息 - * @param hasSettings 这个阶段是否有配置settings - * @return 生成的shell脚本 - */ - private List buildMavenScripts(final Long projectId, final Long jobId, CiConfigTemplateVO ciConfigTemplateVO, boolean hasSettings) { - List shells = GitlabCiUtil.filterLines(GitlabCiUtil.splitLinesForShell(ciConfigTemplateVO.getScript()), true, true); - if (hasSettings) { - // 插入shell指令将配置的settings文件下载到项目目录下 - shells.add(0, GitlabCiUtil.downloadMavenSettings(projectId, jobId, ciConfigTemplateVO.getSequence())); - } - return shells; - } - /** * 把配置转换为gitlab-ci配置(maven,sonarqube) * @@ -2117,203 +2052,6 @@ private List buildScript(final Long organizationId, final Long projectId return result; } -// /** -// * 把配置转换为gitlab-ci配置(maven,sonarqube) -// * -// * @param organizationId 组织id -// * @param projectId 项目id -// * @param jobVO 生成脚本 -// * @return 生成的脚本列表 -// */ -// private List buildScript(final Long organizationId, final Long projectId, DevopsCiJobVO jobVO) { -// Assert.notNull(jobVO, "Job can't be null"); -// Assert.notNull(organizationId, "Organization id can't be null"); -// Assert.notNull(projectId, "project id can't be null"); -// final Long jobId = jobVO.getId(); -// Assert.notNull(jobId, "Ci job id is required."); -// -// if (JobTypeEnum.SONAR.value().equals(jobVO.getType())) { -// return calculateSonarScript(jobVO); -// } else if (JobTypeEnum.BUILD.value().equals(jobVO.getType())) { -// // 将构建类型的stage中的job的每个step进行解析和转化 -// CiConfigVO ciConfigVO = jobVO.getConfigVO(); -// if (ciConfigVO == null || CollectionUtils.isEmpty(ciConfigVO.getConfig())) { -// return Collections.emptyList(); -// } -// -// List existedSequences = new ArrayList<>(); -// // 校验前端传入的sequence不为null且不重复 -// ciConfigVO.getConfig().forEach(config -> DevopsCiPipelineAdditionalValidator.validConfigSequence(config.getSequence(), config.getName(), existedSequences)); -// -// // 最后生成的所有script集合 -// List result = new ArrayList<>(); -// -// // 同一个job中的所有step要按照sequence顺序来 -// // 将每一个step都转为一个List并将所有的list合并为一个 -// ciConfigVO.getConfig() -// .stream() -// .sorted(Comparator.comparingLong(CiConfigTemplateVO::getSequence)) -// .forEach(config -> { -// CiJobScriptTypeEnum type = CiJobScriptTypeEnum.forType(config.getType().toLowerCase()); -// if (type == null) { -// throw new CommonException(ERROR_UNSUPPORTED_STEP_TYPE, config.getType()); -// } -// -// switch (type) { -// // GO和NPM是一样处理 -// case NPM: -// result.addAll(GitlabCiUtil.filterLines(GitlabCiUtil.splitLinesForShell(config.getScript()), true, true)); -// break; -// case MAVEN: -// // 处理settings文件 -// DevopsCiPipelineAdditionalValidator.validateMavenStep(config); -// boolean hasSettings = buildAndSaveMavenSettings(projectId, jobId, config); -// result.addAll(buildMavenScripts(projectId, jobId, config, hasSettings)); -// break; -// case DOCKER: -// // 不填skipDockerTlsVerify参数或者填TRUE都是跳过证书校验 -// // TODO 修复 目前后端这个参数的含义是是否跳过证书校验, 前端的含义是是否进行证书校验 -// Boolean doTlsVerify = config.getSkipDockerTlsVerify(); -// //是否开启镜像扫描 默认是关闭镜像扫描的 -// Boolean imageScan = config.getImageScan(); -// result.addAll(GitlabCiUtil.generateDockerScripts( -// config.getDockerContextDir(), -// config.getDockerFilePath(), -// doTlsVerify == null || !doTlsVerify, -// Objects.isNull(imageScan) ? false : imageScan, jobVO.getId())); -// break; -// // 上传JAR包阶段是没有选择项目依赖的, 同样也可以复用maven deploy的逻辑 -// case UPLOAD_JAR: -// case MAVEN_DEPLOY: -// List targetRepos = new ArrayList<>(); -// boolean hasMavenSettings = buildAndSaveJarDeployMavenSettings(projectId, jobId, config, targetRepos); -// result.addAll(buildMavenJarDeployScripts(projectId, jobId, hasMavenSettings, config, targetRepos)); -// break; -// default: -// } -// }); -// -// return result; -// } else if (JobTypeEnum.CHART.value().equals(jobVO.getType())) { -// // 生成chart步骤 -// return ArrayUtil.singleAsList(GitlabCiUtil.generateChartBuildScripts()); -// } -// return Collections.emptyList(); -// } - - /** - * 计算sonar脚本 - * - * @param jobVO - * @return - */ - private List calculateSonarScript(DevopsCiJobVO jobVO) { - // sonar配置转化为gitlab-ci配置 - List scripts = new ArrayList<>(); - SonarQubeConfigVO sonarQubeConfigVO = JSONObject.parseObject(jobVO.getMetadata(), SonarQubeConfigVO.class); - if (SonarScannerType.SONAR_SCANNER.value().equals(sonarQubeConfigVO.getScannerType())) { - if (CiSonarConfigType.DEFAULT.value().equals(sonarQubeConfigVO.getConfigType())) { - // 查询默认的sonarqube配置 - DevopsConfigDTO sonarConfig = devopsConfigService.baseQueryByName(null, DEFAULT_SONAR_NAME); - CommonExAssertUtil.assertTrue(sonarConfig != null, "error.default.sonar.not.exist"); - scripts.add(GitlabCiUtil.getDefaultSonarScannerCommand(sonarQubeConfigVO.getSources())); - } else if (CiSonarConfigType.CUSTOM.value().equals(sonarQubeConfigVO.getConfigType())) { - if (Objects.isNull(sonarQubeConfigVO.getSonarUrl())) { - throw new CommonException("error.sonar.url.is.null"); - } - if (SonarAuthType.USERNAME_PWD.value().equals(sonarQubeConfigVO.getAuthType())) { - scripts.add(GitlabCiUtil.renderSonarScannerCommand(sonarQubeConfigVO.getSonarUrl(), sonarQubeConfigVO.getUsername(), sonarQubeConfigVO.getPassword(), sonarQubeConfigVO.getSources())); - } else if (SonarAuthType.TOKEN.value().equals(sonarQubeConfigVO.getAuthType())) { - scripts.add(GitlabCiUtil.renderSonarScannerCommandForToken(sonarQubeConfigVO.getSonarUrl(), sonarQubeConfigVO.getToken(), sonarQubeConfigVO.getSources())); - } - } else { - throw new CommonException("error.sonar.config.type.not.supported", sonarQubeConfigVO.getConfigType()); - } - } else if (SonarScannerType.SONAR_MAVEN.value().equals(sonarQubeConfigVO.getScannerType())) { - if (CiSonarConfigType.DEFAULT.value().equals(sonarQubeConfigVO.getConfigType())) { - // 查询默认的sonarqube配置 - DevopsConfigDTO sonarConfig = devopsConfigService.baseQueryByName(null, DEFAULT_SONAR_NAME); - CommonExAssertUtil.assertTrue(sonarConfig != null, "error.default.sonar.not.exist"); - scripts.add(GitlabCiUtil.getDefaultSonarCommand(sonarQubeConfigVO.getSkipTests())); - } else if (CiSonarConfigType.CUSTOM.value().equals(sonarQubeConfigVO.getConfigType())) { - if (Objects.isNull(sonarQubeConfigVO.getSonarUrl())) { - throw new CommonException("error.sonar.url.is.null"); - } - if (SonarAuthType.USERNAME_PWD.value().equals(sonarQubeConfigVO.getAuthType())) { - scripts.add(GitlabCiUtil.renderSonarCommand(sonarQubeConfigVO.getSonarUrl(), sonarQubeConfigVO.getUsername(), sonarQubeConfigVO.getPassword(), sonarQubeConfigVO.getSkipTests())); - } else if (SonarAuthType.TOKEN.value().equals(sonarQubeConfigVO.getAuthType())) { - scripts.add(GitlabCiUtil.renderSonarCommandForToken(sonarQubeConfigVO.getSonarUrl(), sonarQubeConfigVO.getToken(), sonarQubeConfigVO.getSkipTests())); - } - } else { - throw new CommonException("error.sonar.config.type.not.supported", sonarQubeConfigVO.getConfigType()); - } - } else { - throw new CommonException(ResourceCheckConstant.ERROR_SONAR_SCANNER_TYPE_INVALID); - } - return scripts; - } - - /** - * 生成并存储maven settings到数据库 - * - * @param projectId 项目id - * @param jobId job id - * @param ciConfigTemplateVO 配置信息 - * @return true表示有settings配置,false表示没有 - */ - private boolean buildAndSaveMavenSettings(Long projectId, Long jobId, CiConfigTemplateVO ciConfigTemplateVO) { - // settings文件内容 - String settings; - final List repos = new ArrayList<>(); - - // 是否有手动填写仓库表单 - final boolean hasManualRepos = !CollectionUtils.isEmpty(ciConfigTemplateVO.getRepos()); - // 是否有选择已有的maven仓库 - final boolean hasNexusRepos = !CollectionUtils.isEmpty(ciConfigTemplateVO.getNexusMavenRepoIds()); - - if (!StringUtils.isEmpty(ciConfigTemplateVO.getMavenSettings())) { - // 使用用户提供的xml内容,不进行内容的校验 - settings = Base64Util.getBase64DecodedString(ciConfigTemplateVO.getMavenSettings()); - } else if (hasManualRepos || hasNexusRepos) { - if (hasNexusRepos) { - // 用户选择的已有的maven仓库 - List nexusMavenRepoDTOs = rdupmClientOperator.getRepoUserByProject(null, projectId, ciConfigTemplateVO.getNexusMavenRepoIds()); - repos.addAll(nexusMavenRepoDTOs.stream().map(DevopsCiPipelineServiceImpl::convertRepo).collect(Collectors.toList())); - } - - if (hasManualRepos) { - // 由用户填写的表单构建xml文件内容 - repos.addAll(ciConfigTemplateVO.getRepos()); - } - - // 构建settings文件 - settings = buildSettings(repos); - } else { - // 没有填关于settings的信息 - return false; - } - - // 这里存储的ci setting文件内容是解密后的 - DevopsCiMavenSettingsDTO devopsCiMavenSettingsDTO = new DevopsCiMavenSettingsDTO(jobId, ciConfigTemplateVO.getSequence(), settings); - MapperUtil.resultJudgedInsert(devopsCiMavenSettingsMapper, devopsCiMavenSettingsDTO, ERROR_CI_MAVEN_SETTINGS_INSERT); - return true; - } - - @Nullable - private Cache buildJobCache(DevopsCiJobVO jobConfig) { - boolean isToUpload = Boolean.TRUE.equals(jobConfig.getToUpload()); - boolean isToDownload = Boolean.TRUE.equals(jobConfig.getToDownload()); - if (isToUpload && isToDownload) { - return constructCache(CachePolicy.PULL_PUSH.getValue()); - } else if (isToDownload) { - return constructCache(CachePolicy.PULL.getValue()); - } else if (isToUpload) { - return constructCache(CachePolicy.PUSH.getValue()); - } else { - return null; - } - } - @Nullable private Cache buildJobCache(DevopsCiJobDTO jobConfig) { boolean isToUpload = Boolean.TRUE.equals(jobConfig.getToUpload()); @@ -2351,124 +2089,6 @@ private void buildBeforeScript(GitlabCi gitlabCi, String versionName) { gitlabCi.setBeforeScript(beforeScripts); } - /** - * 生成jar包发布相关的脚本 - * - * @param projectId 项目id - * @param jobId job id - * @param hasSettings 是否有settings配置 - * @param ciConfigTemplateVO maven发布软件包阶段的信息 - * @param targetMavenRepoVO 目标制品库仓库信息 - * @return 生成的shell脚本 - */ - private List buildMavenJarDeployScripts(final Long projectId, final Long jobId, final boolean hasSettings, CiConfigTemplateVO ciConfigTemplateVO, List targetMavenRepoVO) { - List shells = new ArrayList<>(); - // 这里这么写是为了考虑之后可能选了多个仓库, 如果是多个仓库的话, 变量替换不便 - // TODO 重构逻辑 - List templateShells = GitlabCiUtil.filterLines(GitlabCiUtil.splitLinesForShell(ciConfigTemplateVO.getScript()), true, true); - // 如果有settings配置, 填入获取settings的指令 - if (hasSettings) { - shells.add(GitlabCiUtil.downloadMavenSettings(projectId, jobId, ciConfigTemplateVO.getSequence())); - } - // 根据目标仓库信息, 渲染发布jar包的指令 - if (!CollectionUtils.isEmpty(targetMavenRepoVO)) { - // 插入shell指令将配置的settings文件下载到项目目录下 - - // 包含repoId锚点的字符串在templateShells中的索引号 - int repoIdIndex = -1; - // 包含repoUrl锚点的字符串在templateShells中的索引号 - int repoUrlIndex = -1; - // 寻找包含这两个锚点的字符串位置 - for (int i = 0; i < templateShells.size(); i++) { - if (repoIdIndex == -1 && templateShells.get(i).contains(GitOpsConstants.CHOERODON_MAVEN_REPO_ID)) { - repoIdIndex = i; - } - if (repoUrlIndex == -1 && templateShells.get(i).contains(GitOpsConstants.CHOERODON_MAVEN_REPO_URL)) { - repoUrlIndex = i; - } - if (repoIdIndex != -1 && repoUrlIndex != -1) { - // 没必要再找了 - break; - } - } - - // 为每一个仓库都从模板的脚本中加一份生成的命令 - for (MavenRepoVO repo : targetMavenRepoVO) { - // 将预定的变量(仓库名和地址)替换为settings.xml文件指定的 - List commands = new ArrayList<>(templateShells); - if (repoIdIndex != -1) { - commands.set(repoIdIndex, commands.get(repoIdIndex).replace(GitOpsConstants.CHOERODON_MAVEN_REPO_ID, repo.getName())); - } - if (repoUrlIndex != -1) { - commands.set(repoUrlIndex, commands.get(repoUrlIndex).replace(GitOpsConstants.CHOERODON_MAVEN_REPO_URL, repo.getUrl())); - } - shells.addAll(commands); - } - - // 只生成一个jar包元数据上传指令用于CD阶段 - //加上jobId 与sequence,用于查询jar包的时间戳 - shells.add(GitlabCiUtil.saveJarMetadata(ciConfigTemplateVO.getMavenDeployRepoSettings().getNexusRepoIds(), jobId, ciConfigTemplateVO.getSequence())); - } else { - // 如果没有目标仓库信息, 则认为用户是自己填入好了maven发布jar的指令, 不需要渲染 - shells.addAll(templateShells); - } - return shells; - } - - /** - * 生成并存储maven settings到数据库 - * - * @param projectId 项目id - * @param jobId job id - * @param ciConfigTemplateVO 配置 - * @param targetRepoContainer 用来存放解析出的目标仓库信息 - * @return 返回true表示有settings信息 - */ - private boolean buildAndSaveJarDeployMavenSettings(Long projectId, Long jobId, CiConfigTemplateVO ciConfigTemplateVO, List targetRepoContainer) { - MavenDeployRepoSettings mavenDeployRepoSettings = ciConfigTemplateVO.getMavenDeployRepoSettings(); - Long sequence = ciConfigTemplateVO.getSequence(); - Set dependencyRepoIds = ciConfigTemplateVO.getNexusMavenRepoIds(); - List dependencyRepos = ciConfigTemplateVO.getRepos(); - - boolean targetRepoEmpty = mavenDeployRepoSettings.getNexusRepoIds() == null; - boolean dependencyRepoIdsEmpty = CollectionUtils.isEmpty(dependencyRepoIds); - boolean dependencyRepoEmpty = CollectionUtils.isEmpty(dependencyRepos); - - // 如果都为空, 不生成settings文件 - if (targetRepoEmpty && dependencyRepoIdsEmpty && dependencyRepoEmpty) { - return false; - } - - // 查询制品库 - List nexusMavenRepoDTOs = rdupmClientOperator.getRepoUserByProject(null, projectId, ArrayUtil.singleAsSet(mavenDeployRepoSettings.getNexusRepoIds())); - - // 如果填入的仓库信息和制品库查出的结果都为空, 不生成settings文件 - if (CollectionUtils.isEmpty(nexusMavenRepoDTOs) && dependencyRepoEmpty) { - return false; - } - - // 转化制品库信息, 并将目标仓库信息取出, 放入targetRepoContainer - List mavenRepoVOS = nexusMavenRepoDTOs.stream().map(r -> { - MavenRepoVO result = convertRepo(r); - // 目标仓库不为空, 并且目标仓库包含 - if (!targetRepoEmpty && mavenDeployRepoSettings.getNexusRepoIds().equals(r.getRepositoryId())) { - targetRepoContainer.add(result); - } - return result; - }).collect(Collectors.toList()); - - // 将手动输入的仓库信息也放入列表 - if (!dependencyRepoEmpty) { - mavenRepoVOS.addAll(dependencyRepos); - } - - // 生成settings文件内容 - String settings = buildSettings(mavenRepoVOS); - DevopsCiMavenSettingsDTO devopsCiMavenSettingsDTO = new DevopsCiMavenSettingsDTO(jobId, sequence, settings); - MapperUtil.resultJudgedInsert(devopsCiMavenSettingsMapper, devopsCiMavenSettingsDTO, ERROR_CI_MAVEN_SETTINGS_INSERT); - return true; - } - private void createUserRel(List cdAuditUserIds, Long projectId, Long pipelineId, Long jobId) { if (!CollectionUtils.isEmpty(cdAuditUserIds)) { // 去重 @@ -2597,14 +2217,6 @@ public Long getCiJobId(Long pipelineId, String ciJobName) { return ciJobDTOList.get(0).getId(); } - private void updateExtraInfoToNull(DevopsCdEnvDeployInfoDTO devopsCdEnvDeployInfoDTO) { - devopsCdEnvDeployInfoDTO.setId(null); - devopsCdEnvDeployInfoDTO.setCreatedBy(null); - devopsCdEnvDeployInfoDTO.setCreationDate(null); - devopsCdEnvDeployInfoDTO.setLastUpdatedBy(null); - devopsCdEnvDeployInfoDTO.setLastUpdateDate(null); - } - public void checkCdHostJobName(Long ciPipelineId, CdHostDeployConfigVO deployConfigVO, String cdHostName, DevopsCdJobDTO devopsCdJobDTO) { DevopsCiJobDTO devopsCiJobDTO = new DevopsCiJobDTO(); devopsCiJobDTO.setCiPipelineId(ciPipelineId); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiStageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiStageServiceImpl.java index 6fff0f3cd4..f667fb7358 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiStageServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiStageServiceImpl.java @@ -2,6 +2,9 @@ import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsCiStageVO; import io.choerodon.devops.app.service.DevopsCiStageService; @@ -9,9 +12,6 @@ import io.choerodon.devops.infra.mapper.DevopsCiStageMapper; import io.choerodon.devops.infra.util.ConvertUtils; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - /** * 〈功能简述〉 * 〈〉 @@ -24,7 +24,6 @@ public class DevopsCiStageServiceImpl implements DevopsCiStageService { private static final String CREATE_STAGE_FAILED = "create.stage.failed"; private static final String DELETE_STAGE_FAILED = "delete.stage.failed"; - private static final String UPDATE_STAGE_FAILED = "update.stage.failed"; private static final String ERROR_PIPELINE_ID_IS_NULL = "error.pipeline.id.is.null"; private DevopsCiStageMapper devopsCiStageMapper; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterOperatingRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterOperatingRecordServiceImpl.java index 766c9d96f3..50653282c9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterOperatingRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterOperatingRecordServiceImpl.java @@ -1,7 +1,5 @@ package io.choerodon.devops.app.service.impl; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -24,7 +22,6 @@ @Service public class DevopsClusterOperatingRecordServiceImpl implements DevopsClusterOperatingRecordService { - private static final Logger LOGGER = LoggerFactory.getLogger(DevopsClusterOperatingRecordServiceImpl.class); @Autowired private DevopsClusterOperationRecordMapper devopsClusterOperationRecordMapper; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterResourceServiceImpl.java index 1b62d48a5d..99d61bb57c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterResourceServiceImpl.java @@ -612,17 +612,6 @@ private Boolean checkValidity(Date date, Date validFrom, Date validUntil) { && date.after(validFrom) && date.before(validUntil); } - private DevopsPvcReqVO operatePV(Long pvId, Long envId, String name) { - DevopsPvcReqVO devopsPvcReqVO = new DevopsPvcReqVO(); - DevopsPvVO devopsPvVO = devopsPvService.queryById(pvId); - devopsPvcReqVO.setPvId(devopsPvVO.getId()); - devopsPvcReqVO.setName(name + "-" + GenerateUUID.generateUUID().substring(0, 10)); - devopsPvcReqVO.setAccessModes(devopsPvVO.getAccessModes()); - devopsPvcReqVO.setRequestResource(devopsPvVO.getRequestResource()); - devopsPvcReqVO.setEnvId(envId); - return devopsPvcReqVO; - } - private DevopsClusterDTO checkClusterExist(Long clusterId) { DevopsClusterDTO devopsClusterDTO = devopsClusterService.baseQuery(clusterId); if (devopsClusterDTO == null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java index 1b98f5aed2..1b53e046cf 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java @@ -68,7 +68,6 @@ public class DevopsClusterServiceImpl implements DevopsClusterService { private static final String ERROR_CLUSTER_NOT_EXIST = "error.cluster.not.exist"; private static final String ERROR_UPDATE_CLUSTER_STATUS_FAILED = "error.update.cluster.status.failed"; - private static final String PROJECT_OWNER = "role/project/default/project-owner"; private static final String ERROR_ORGANIZATION_CLUSTER_NUM_MAX = "error.organization.cluster.num.max"; @Value("${agent.version}") diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java index 290d84d753..a6b0092ccd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java @@ -2,8 +2,19 @@ import static io.choerodon.devops.infra.constant.MiscConstants.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import io.kubernetes.client.models.V1ConfigMap; +import io.kubernetes.client.models.V1ObjectMeta; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsConfigMapRespVO; @@ -23,16 +34,6 @@ import io.choerodon.devops.infra.util.*; import io.choerodon.mybatis.pagehelper.PageHelper; import io.choerodon.mybatis.pagehelper.domain.PageRequest; -import io.kubernetes.client.models.V1ConfigMap; -import io.kubernetes.client.models.V1ObjectMeta; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; @Service public class DevopsConfigMapServiceImpl implements DevopsConfigMapService { @@ -225,7 +226,7 @@ public void delete(Long projectId, Long configMapId) { TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), CONFIG_MAP_PREFIX + devopsConfigMapDTO.getName() + ".yaml", "DELETE FILE", - TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master"); + TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), MASTER); } return; } else { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index dcf2ffbf8f..f983037133 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -45,11 +45,8 @@ public class DevopsConfigServiceImpl implements DevopsConfigService { private static final String HARBOR = "harbor"; private static final String AUTHTYPE_PULL = "pull"; - private static final String AUTHTYPE_PUSH = "push"; private static final String CHART = "chart"; private static final Gson gson = new Gson(); - private static final String USER_PREFIX = "pullUser%s%s"; - private static final String ERROR_CREATE_HARBOR_USER = "error.create.harbor.user"; @Autowired private DevopsConfigMapper devopsConfigMapper; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployServiceImpl.java index b80ac65a16..f6b76a5326 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployServiceImpl.java @@ -12,13 +12,9 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import io.choerodon.devops.api.vo.AppServiceDeployVO; -import io.choerodon.devops.api.vo.deploy.DeployConfigVO; import io.choerodon.devops.api.vo.deploy.DeploySourceVO; import io.choerodon.devops.api.vo.deploy.hzero.HzeroDeployPipelineVO; import io.choerodon.devops.api.vo.deploy.hzero.HzeroDeployVO; @@ -34,7 +30,9 @@ import io.choerodon.devops.infra.enums.CommandStatus; import io.choerodon.devops.infra.enums.DeployType; import io.choerodon.devops.infra.enums.HzeroDeployDetailsStatusEnum; -import io.choerodon.devops.infra.enums.deploy.*; +import io.choerodon.devops.infra.enums.deploy.DeployModeEnum; +import io.choerodon.devops.infra.enums.deploy.DeployObjectTypeEnum; +import io.choerodon.devops.infra.enums.deploy.DeployResultEnum; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.feign.operator.MarketServiceClientOperator; import io.choerodon.devops.infra.feign.operator.WorkFlowServiceOperator; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java index 7f91efb2f2..7018196931 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java @@ -7,27 +7,20 @@ import io.kubernetes.client.models.V1Container; import io.kubernetes.client.models.V1ContainerPort; import io.kubernetes.client.models.V1beta2Deployment; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.CollectionUtils; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.*; import io.choerodon.devops.api.vo.iam.DevopsEnvMessageVO; -import io.choerodon.devops.api.vo.market.MarketServiceDeployObjectVO; import io.choerodon.devops.app.service.AppServiceService; import io.choerodon.devops.app.service.DevopsEnvApplicationService; import io.choerodon.devops.app.service.PermissionHelper; -import io.choerodon.devops.infra.dto.*; -import io.choerodon.devops.infra.enums.AppSourceType; +import io.choerodon.devops.infra.dto.AppServiceDTO; +import io.choerodon.devops.infra.dto.DevopsEnvAppServiceDTO; import io.choerodon.devops.infra.enums.deploy.ApplicationCenterEnum; -import io.choerodon.devops.infra.feign.operator.MarketServiceClientOperator; -import io.choerodon.devops.infra.mapper.AppServiceInstanceMapper; -import io.choerodon.devops.infra.mapper.AppServiceShareRuleMapper; import io.choerodon.devops.infra.mapper.DevopsEnvAppServiceMapper; -import io.choerodon.devops.infra.mapper.DevopsEnvironmentMapper; import io.choerodon.devops.infra.util.ConvertUtils; /** diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvUserPermissionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvUserPermissionServiceImpl.java index 416137a1ab..c4370915f4 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvUserPermissionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvUserPermissionServiceImpl.java @@ -3,7 +3,6 @@ import java.util.List; import java.util.Map; -import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java index 499f4f044a..3b8bce1a01 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java @@ -14,8 +14,6 @@ import net.schmizz.sshj.common.IOUtils; import org.apache.commons.lang3.StringUtils; import org.hzero.websocket.helper.KeySocketSendHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Lazy; @@ -61,8 +59,6 @@ */ @Service public class DevopsHostServiceImpl implements DevopsHostService { - private static final Logger LOGGER = LoggerFactory.getLogger(DevopsHostServiceImpl.class); - public static final String PERMISSION_LABEL = "permissionLabel"; private static final String ERROR_HOST_NOT_FOUND = "error.host.not.found"; @@ -307,13 +303,13 @@ public boolean isSshIpPortUnique(Long projectId, String ip, Integer sshPort) { } @Override - public boolean HostIdInstanceIdMatch(Long hostId, Long instanceId) { + public boolean hostIdInstanceIdMatch(Long hostId, Long instanceId) { DevopsHostAppDTO devopsHostAppDTO = devopsHostAppMapper.selectByPrimaryKey(instanceId); return devopsHostAppDTO != null && devopsHostAppDTO.getHostId().equals(hostId); } @Override - public boolean HostIdDockerInstanceMatch(Long hostId, Long instanceId) { + public boolean hostIdDockerInstanceMatch(Long hostId, Long instanceId) { DevopsDockerInstanceDTO devopsDockerInstanceDTO = devopsDockerInstanceMapper.selectByPrimaryKey(instanceId); return devopsDockerInstanceDTO != null && devopsDockerInstanceDTO.getHostId().equals(hostId); } @@ -328,7 +324,6 @@ public Page pageByOptions(Long projectId, PageRequest pageRequest, Map hostPermissionMap = new HashMap<>(); if (projectOwnerOrRoot) { devopsHostVOList = devopsHostMapper.listByOptions(projectId, searchParam, hostStatus); - List hostIds = devopsHostVOList.stream().map(DevopsHostVO::getId).collect(Collectors.toList()); } else { devopsHostVOList = devopsHostMapper.listMemberHostByOptions(projectId, searchParam, hostStatus, DetailsHelper.getUserDetails().getUserId()); if (CollectionUtils.isEmpty(devopsHostVOList)) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java index ed5f54a51f..b31692bcb1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java @@ -4,8 +4,6 @@ import java.util.stream.Collectors; import org.hzero.mybatis.BatchInsertHelper; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -14,7 +12,6 @@ import io.choerodon.devops.api.vo.DevopsBranchVO; import io.choerodon.devops.api.vo.IssueIdAndBranchIdsVO; -import io.choerodon.devops.app.service.DevopsBranchService; import io.choerodon.devops.app.service.DevopsIssueRelService; import io.choerodon.devops.infra.dto.DevopsIssueRelDTO; import io.choerodon.devops.infra.enums.DevopsIssueRelObjectTypeEnum; @@ -22,13 +19,9 @@ @Service public class DevopsIssueRelServiceImpl implements DevopsIssueRelService { - private static final Logger LOGGER = LoggerFactory.getLogger(DevopsIssueRelServiceImpl.class); @Autowired private DevopsIssueRelMapper devopsIssueRelMapper; - @Autowired - private DevopsBranchService devopsBranchService; - @Autowired @Qualifier("devopsIssueRelBatchInsertHelper") private BatchInsertHelper batchInsertHelper; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java index f1f834d9b0..4bc89c08af 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java @@ -50,7 +50,6 @@ public class DevopsSecretServiceImpl implements DevopsSecretService { private static final String CREATE = "create"; private static final String UPDATE = "update"; private static final String DELETE = "delete"; - private static final String SECRET_KIND = "secret"; private static final String DOCKER_CONFIG_JSON = ".dockerconfigjson"; private static final String MASTER = "master"; @@ -301,7 +300,7 @@ public Boolean deleteSecret(Long projectId, Long envId, Long secretId) { TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), "sct-" + devopsSecretDTO.getName() + ".yaml", "DELETE FILE", - TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master"); + TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), MASTER); } return true; } else { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java index 592917cc92..09cf255351 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabHandleServiceImpl.java @@ -79,8 +79,6 @@ public void handleProjectCategoryEvent(ProjectPayload projectPayload) { //2.4 同步停用用户的角色 List disanbleUser = userDTOList.stream().filter(iamUserDTO -> !iamUserDTO.getEnabled()).collect(Collectors.toList()); - disanbleUser.forEach(iamUserDTO -> { - gitlabUserService.disEnabledGitlabUser(TypeUtil.objToLong(iamUserDTO.getId())); - }); + disanbleUser.forEach(iamUserDTO -> gitlabUserService.disEnabledGitlabUser(TypeUtil.objToLong(iamUserDTO.getId()))); } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java index 0df8461ae2..111f46e41f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java @@ -5,8 +5,6 @@ import io.kubernetes.client.models.V1Endpoints; import io.kubernetes.client.models.V1Secret; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -35,9 +33,6 @@ @Service public class HandlerC7nSecretServiceImpl implements HandlerObjectFileRelationsService { - private static final Logger logger = LoggerFactory.getLogger(HandlerC7nSecretServiceImpl.class); - - private static final String CREATE = "create"; private static final String SECRET = "Secret"; diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index 7d6588803e..9efa8130f4 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -9,8 +9,6 @@ import com.google.gson.Gson; import okhttp3.ResponseBody; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.CommandLineRunner; @@ -42,8 +40,6 @@ @Order(100) @Component public class DevopsCommandRunner implements CommandLineRunner { - private static final Logger LOGGER = LoggerFactory.getLogger(DevopsCommandRunner.class); - public static final String SONAR = "sonar"; private final Gson gson = new Gson(); @@ -74,7 +70,7 @@ public void run(String... strings) { ConfigVO chartConfig = new ConfigVO(); chartConfig.setUrl(servicesHelmUrl); // 只有helm的用户名密码都设置了, 才设置到数据库中 - if (!StringUtils.isEmpty(servicesHelmUserName) && !StringUtils.isEmpty(servicesHelmPassword)) { + if (StringUtils.hasText(servicesHelmUserName) && StringUtils.hasText(servicesHelmPassword)) { chartConfig.setUserName(servicesHelmUserName); chartConfig.setPassword(servicesHelmPassword); chartConfig.setIsPrivate(Boolean.TRUE); diff --git a/src/main/java/io/choerodon/devops/infra/dto/CertificationDTO.java b/src/main/java/io/choerodon/devops/infra/dto/CertificationDTO.java index 0dcc5fb48b..17a7a78fe8 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/CertificationDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/CertificationDTO.java @@ -5,7 +5,6 @@ import io.swagger.annotations.ApiModelProperty; -import io.choerodon.devops.api.vo.kubernetes.C7nCertification; import io.choerodon.mybatis.annotation.ModifyAudit; import io.choerodon.mybatis.annotation.VersionAudit; import io.choerodon.mybatis.domain.AuditDomain; diff --git a/src/main/java/io/choerodon/devops/infra/dto/CiTemplateSonarDTO.java b/src/main/java/io/choerodon/devops/infra/dto/CiTemplateSonarDTO.java index 2a210e263a..083cb2dd17 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/CiTemplateSonarDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/CiTemplateSonarDTO.java @@ -35,8 +35,6 @@ public class CiTemplateSonarDTO extends AuditDomain { public static final String FIELD_SOURCES = "sources"; public static final String FIELD_SONAR_URL = "sonarUrl"; public static final String FIELD_AUTH_TYPE = "authType"; - public static final String FIELD_USERNAME = "username"; - public static final String FIELD_PASSWORD = "password"; public static final String FIELD_TOKEN = "token"; @Id diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsEnvAppServiceDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsEnvAppServiceDTO.java index c96f8874a7..b7e85c5be7 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsEnvAppServiceDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsEnvAppServiceDTO.java @@ -1,6 +1,5 @@ package io.choerodon.devops.infra.dto; -import io.swagger.annotations.ApiModelProperty; import java.util.Objects; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; diff --git a/src/main/java/io/choerodon/devops/infra/enums/CiTriggerType.java b/src/main/java/io/choerodon/devops/infra/enums/CiTriggerType.java index 117974ae3f..92e6ddba21 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/CiTriggerType.java +++ b/src/main/java/io/choerodon/devops/infra/enums/CiTriggerType.java @@ -28,7 +28,7 @@ public String value() { @Nullable public static CiTriggerType forValue(String value) { - if (!StringUtils.isEmpty(value)) { + if (StringUtils.hasText(value)) { for (CiTriggerType type : values()) { if (type.value.equals(value)) { return type; diff --git a/src/main/java/io/choerodon/devops/infra/feign/BaseServiceClient.java b/src/main/java/io/choerodon/devops/infra/feign/BaseServiceClient.java index 937017d159..5a0a18929e 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/BaseServiceClient.java +++ b/src/main/java/io/choerodon/devops/infra/feign/BaseServiceClient.java @@ -6,20 +6,17 @@ import javax.validation.Valid; import io.swagger.annotations.ApiOperation; -import org.hzero.starter.keyencrypt.core.Encrypt; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import io.choerodon.core.domain.Page; -import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.ExternalTenantVO; import io.choerodon.devops.api.vo.OrgAdministratorVO; import io.choerodon.devops.api.vo.ResourceLimitVO; import io.choerodon.devops.api.vo.RoleAssignmentSearchVO; import io.choerodon.devops.infra.dto.iam.*; import io.choerodon.devops.infra.feign.fallback.BaseServiceClientFallback; -import io.choerodon.swagger.annotation.Permission; /** * Created by younger on 2018/3/29. diff --git a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java index b63d060b29..1def230511 100644 --- a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java +++ b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java @@ -45,8 +45,6 @@ public class ResourceConvertToYamlHandler { private static final String CONFIGMAPTAG = "!!io.kubernetes.client.models.V1ConfigMap"; private static final String SECRET = "!!io.kubernetes.client.models.V1Secret"; private static final String ENDPOINTS = "!!io.kubernetes.client.models.V1Endpoints"; - private static final String PERSISTENT_VOLUME = "!!io.kubernetes.client.models.V1PersistentVolume"; - private static final String PERSISTENT_VOLUME_CLAIM = "!!io.kubernetes.client.models.V1PersistentVolumeClaim"; private static final String DEPLOYMENT = "!!io.kubernetes.client.models.V1beta2Deployment"; private static final List WORKLOAD_RESOURCE_TYPE = new ArrayList<>(); @@ -242,23 +240,6 @@ private void handleWorkload(T t, String objectType, String operationType, String resultBuilder.append("---").append("\n").append(getYamlObject(null, false).dump(workloadResource)).append("\n"); } - private void handleDeployment(T t, String objectType, String operationType, StringBuilder resultBuilder, JSONObject jsonObject) { - Yaml yaml = new Yaml(); - V1beta2Deployment v1beta2Deployment = yaml.loadAs(jsonObject.toJSONString(), V1beta2Deployment.class); - V1beta2Deployment newV1beta2Deployment; - if (objectType.equals(ResourceType.DEPLOYMENT.getType()) && v1beta2Deployment.getMetadata().getName().equals(((V1beta2Deployment) t).getMetadata().getName())) { - if (operationType.equals(UPDATE)) { - newV1beta2Deployment = (V1beta2Deployment) t; - } else { - return; - } - } else { - newV1beta2Deployment = v1beta2Deployment; - } - Tag tag = new Tag(DEPLOYMENT); - resultBuilder.append("\n").append(getYamlObject(tag, true).dump(newV1beta2Deployment).replace(DEPLOYMENT, "---")); - } - private void handleService(T t, String content, String objectType, String operationType, StringBuilder resultBuilder, JSONObject jsonObject) { Yaml yaml3 = new Yaml(); diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceInstanceMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceInstanceMapper.java index de08a6043d..449a81570f 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceInstanceMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceInstanceMapper.java @@ -85,15 +85,6 @@ String getInstanceResourceDetailJson(@Param("instanceId") Long instanceId, @Param("resourceName") String resourceName, @Param("resourceType") String resourceType); - /** - * hzero不支持级联,后续删除 - * - * @param code - * @param envId - * @return - */ -// void deleteInstanceRelInfo(@Param("instanceId") Long instanceId); - Boolean checkCodeExist(@Param("code") String code, @Param("envId") Long envId); diff --git a/src/main/java/io/choerodon/devops/infra/mapper/CiScheduleVariableMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/CiScheduleVariableMapper.java index 30d865ac3e..01245403e6 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/CiScheduleVariableMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/CiScheduleVariableMapper.java @@ -1,9 +1,7 @@ package io.choerodon.devops.infra.mapper; -import io.choerodon.mybatis.common.BaseMapper; import io.choerodon.devops.infra.dto.CiScheduleVariableDTO; - -import java.util.List; +import io.choerodon.mybatis.common.BaseMapper; /** * devops_ci_schedule_variable(CiScheduleVariable)应用服务 diff --git a/src/main/java/io/choerodon/devops/infra/mapper/CiTemplateJobMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/CiTemplateJobMapper.java index fe7099e3df..cc27c7419d 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/CiTemplateJobMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/CiTemplateJobMapper.java @@ -4,7 +4,6 @@ import java.util.Set; import org.apache.ibatis.annotations.Param; -import org.springframework.security.core.parameters.P; import io.choerodon.devops.api.vo.template.CiTemplateJobVO; import io.choerodon.devops.infra.dto.CiTemplateJobDTO; diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsDeploymentMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsDeploymentMapper.java index 522104f9bf..b4fe9bf7cb 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsDeploymentMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsDeploymentMapper.java @@ -4,7 +4,6 @@ import org.apache.ibatis.annotations.Param; -import io.choerodon.devops.api.vo.DevopsDeployGroupVO; import io.choerodon.devops.api.vo.DevopsDeploymentVO; import io.choerodon.devops.infra.dto.DevopsDeploymentDTO; import io.choerodon.mybatis.common.BaseMapper; diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvCommandMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvCommandMapper.java index dc8c2157dd..8500dddcb1 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvCommandMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvCommandMapper.java @@ -1,14 +1,13 @@ package io.choerodon.devops.infra.mapper; -import io.choerodon.devops.api.vo.kubernetes.Command; -import io.choerodon.devops.infra.dto.DevopsEnvCommandDTO; -import io.choerodon.devops.infra.enums.ObjectType; -import io.choerodon.mybatis.common.BaseMapper; +import java.sql.Date; +import java.util.List; import org.apache.ibatis.annotations.Param; -import java.sql.Date; -import java.util.List; +import io.choerodon.devops.api.vo.kubernetes.Command; +import io.choerodon.devops.infra.dto.DevopsEnvCommandDTO; +import io.choerodon.mybatis.common.BaseMapper; public interface DevopsEnvCommandMapper extends BaseMapper { diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvResourceMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvResourceMapper.java index 7d759b33fb..6733f92260 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvResourceMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsEnvResourceMapper.java @@ -4,7 +4,6 @@ import org.apache.ibatis.annotations.Param; -import io.choerodon.devops.api.vo.DevopsEnvResourceVO; import io.choerodon.devops.infra.dto.DevopsEnvResourceDTO; import io.choerodon.mybatis.common.BaseMapper; diff --git a/src/main/java/io/choerodon/devops/infra/util/ExternalGitUtil.java b/src/main/java/io/choerodon/devops/infra/util/ExternalGitUtil.java index 4b60235bb9..53feded6e9 100644 --- a/src/main/java/io/choerodon/devops/infra/util/ExternalGitUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/ExternalGitUtil.java @@ -25,8 +25,6 @@ import org.eclipse.jgit.util.FS; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.ResourceLoader; import org.springframework.stereotype.Component; @@ -34,38 +32,21 @@ import org.springframework.util.StringUtils; import io.choerodon.core.exception.CommonException; -import io.choerodon.devops.app.service.DevopsClusterResourceService; -import io.choerodon.devops.app.service.DevopsEnvironmentService; import io.choerodon.devops.infra.enums.EnvironmentType; -import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; -import io.choerodon.devops.infra.mapper.DevopsClusterMapper; /** * 封装调用外部git的接口 */ @Component public class ExternalGitUtil { - public static final String DEV_OPS_REFS = "refs/tags/"; public static final String TEMPLATE = "template"; - private static final String MASTER = "master"; private static final String PATH = "/"; private static final String GIT_SUFFIX = "/.git"; private static final String ERROR_GIT_CLONE = "error.git.clone"; private static final String REPO_NAME = "devops-service-repo"; private static final Logger LOGGER = LoggerFactory.getLogger(ExternalGitUtil.class); - private static final Pattern PATTERN = Pattern.compile("^[-\\+]?[\\d]*$"); private static final String ERROR_GIT_PUSH = "error.git.push"; - @Autowired - private DevopsClusterMapper devopsClusterMapper; - @Autowired - private DevopsEnvironmentService devopsEnvironmentService; - @Autowired - private DevopsClusterResourceService devopsClusterResourceService; - @Autowired - private BaseServiceClientOperator baseServiceClientOperator; private String classPath; - @Value("${services.gitlab.sshUrl}") - private String gitlabSshUrl; /** * 构造方法 @@ -415,13 +396,4 @@ public static void deleteTag(Git git, String tagName) { throw new CommonException("delete tag fail", e); } } - - private void addFile(Git git, String relativePath) throws GitAPIException { - git.add().setUpdate(false).addFilepattern(relativePath).call(); - git.add().setUpdate(true).addFilepattern(relativePath).call(); - } - - private void commitChanges(Git git, String commitMsg) throws GitAPIException { - git.commit().setMessage(commitMsg).call(); - } } diff --git a/src/main/java/io/choerodon/devops/infra/util/GitlabCiUtil.java b/src/main/java/io/choerodon/devops/infra/util/GitlabCiUtil.java index 694b211408..c03f328987 100644 --- a/src/main/java/io/choerodon/devops/infra/util/GitlabCiUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/GitlabCiUtil.java @@ -117,19 +117,6 @@ private static String[] simpleSplitLinesToArray(String string) { return string.split(NEWLINE_REGEX); } - /** - * 将字符串按行分割为字符串列表 - * - * @param string 字符串 - * @return 列表 - */ - public static List simpleSplitLinesToList(String string) { - if (StringUtils.isEmpty(string)) { - return Collections.emptyList(); - } - return Arrays.asList(simpleSplitLinesToArray(string)); - } - /** * 将shell按行分割 (支持 \ 符号进行多行连接) * diff --git a/src/main/java/io/choerodon/devops/infra/util/SshUtil.java b/src/main/java/io/choerodon/devops/infra/util/SshUtil.java index c8f68fe3dd..d05934ffac 100644 --- a/src/main/java/io/choerodon/devops/infra/util/SshUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/SshUtil.java @@ -15,7 +15,6 @@ import net.schmizz.sshj.SSHClient; import net.schmizz.sshj.common.IOUtils; -import net.schmizz.sshj.connection.ConnectionException; import net.schmizz.sshj.connection.channel.direct.Session; import net.schmizz.sshj.transport.verification.PromiscuousVerifier; import net.schmizz.sshj.userauth.keyprovider.KeyProvider; @@ -31,8 +30,6 @@ import io.choerodon.devops.api.vo.HostConnectionVO; import io.choerodon.devops.app.service.impl.DevopsClusterNodeServiceImpl; import io.choerodon.devops.infra.dto.DevopsHostDTO; -import io.choerodon.devops.infra.dto.repo.C7nImageDeployDTO; -import io.choerodon.devops.infra.dto.repo.C7nNexusDeployDTO; import io.choerodon.devops.infra.enums.HostAuthType; import io.choerodon.devops.infra.enums.HostSourceEnum; import io.choerodon.devops.infra.mapper.DevopsHostMapper; @@ -48,11 +45,6 @@ public class SshUtil { * 默认超时时间, 10秒 */ private static final int DEFAULT_TIMEOUT_MILLISECONDS = 10000; - private static final Integer WAIT_SECONDS = 6; - private static final String ERROR_DOCKER_LOGIN = "error.docker.login"; - private static final String ERROR_DOCKER_PULL = "error.docker.pull"; - private static final String ERROR_DOCKER_RUN = "error.docker.run"; - private static final String ERROR_DOWNLOAD_JAY = "error.download.jar"; private static final String CAT_FILE_TEMPLATE = "cat %s"; @@ -141,178 +133,6 @@ public void sshConnect(HostConnectionVO hostConnectionVO, SSHClient ssh) throws } } - public void sshStopJar(SSHClient ssh, String jarName, String workingPath, StringBuilder log) throws IOException { - if (StringUtils.isEmpty(workingPath)) { - workingPath = "."; - } else { - workingPath = workingPath.endsWith("/") ? workingPath.substring(0, workingPath.length() - 1) : workingPath; - } - - if (!StringUtils.isEmpty(jarName)) { - StringBuilder stopJar = new StringBuilder(); - stopJar.append(String.format("ps aux|grep %s | grep -v grep |awk '{print $2}' |xargs kill -9 ", jarName)); - stopJar.append(System.lineSeparator()); - stopJar.append(String.format("rm -f %s/temp-jar/%s", workingPath, jarName)); - stopJar.append(System.lineSeparator()); - stopJar.append(String.format("rm -f %s/temp-log/%s", workingPath, jarName.replace(".jar", ".log"))); - log.append(System.lineSeparator()).append(stopJar.toString()); - Session session = null; - try { - session = ssh.startSession(); - final Session.Command cmd = session.exec(stopJar.toString()); - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - String logInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String errorInfo = IOUtils.readFully(cmd.getErrorStream()).toString(); - log.append(logInfo); - log.append(errorInfo); - } finally { - assert session != null; - session.close(); - } - } - } - - public void sshExec(SSHClient ssh, C7nNexusDeployDTO c7nNexusDeployDTO, String value, String workingPath, StringBuilder log) throws IOException { - StringBuilder cmdStr = new StringBuilder(); - if (StringUtils.isEmpty(workingPath)) { - workingPath = "."; - } else { - workingPath = workingPath.endsWith("/") ? workingPath.substring(0, workingPath.length() - 1) : workingPath; - } - cmdStr.append(String.format("mkdir -p %s/temp-jar && ", workingPath)); - cmdStr.append(String.format("mkdir -p %s/temp-log && ", workingPath)); - Session session = null; - try { - session = ssh.startSession(); - String jarPathAndName = workingPath + "/temp-jar/" + c7nNexusDeployDTO.getJarName(); - // 2.2 - String curlExec = String.format("curl -o %s -u %s:%s %s ", - jarPathAndName, - c7nNexusDeployDTO.getPullUserId(), - c7nNexusDeployDTO.getPullUserPassword(), - c7nNexusDeployDTO.getDownloadUrl()); - cmdStr.append(curlExec).append(" && "); - - // 2.3 - String[] strings = value.split("\n"); - String values = ""; - for (String s : strings) { - if (s.length() > 0 && !s.contains("#") && s.contains("java")) { - values = s; - } - } - if (StringUtils.isEmpty(values) || Boolean.FALSE.equals(checkInstruction("jar", values))) { - throw new CommonException("error.instruction"); - } - - String logName = c7nNexusDeployDTO.getJarName().replace(".jar", ".log"); - String logPathAndName = workingPath + "/temp-log/" + logName; - String javaJarExec = values.replace("${jar}", jarPathAndName); - - cmdStr.append(javaJarExec); - StringBuilder finalCmdStr = new StringBuilder("nohup bash -c \"").append(cmdStr).append("\"").append(String.format(" > %s 2>&1 &", logPathAndName)); - - final Session.Command cmd = session.exec(finalCmdStr.toString()); - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - String loggerInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String loggerError = IOUtils.readFully(cmd.getErrorStream()).toString(); - log.append(System.lineSeparator()).append(finalCmdStr.toString().replace(c7nNexusDeployDTO.getPullUserPassword(), "password")); - log.append(System.lineSeparator()); - log.append(loggerInfo); - log.append(loggerError); - if (loggerError.contains("Unauthorized") || loggerInfo.contains("Unauthorized") || cmd.getExitStatus() != 0) { - throw new CommonException(ERROR_DOWNLOAD_JAY); - } - LOGGER.info(loggerInfo); - LOGGER.info(loggerError); - } finally { - assert session != null; - session.close(); - } - - } - - public void dockerLogin(SSHClient ssh, C7nImageDeployDTO imageTagVo, StringBuilder log) throws IOException { - Session session = null; - try { - session = ssh.startSession(); - String loginExec = String.format("sudo docker login -u '%s' -p %s %s", imageTagVo.getPullAccount(), imageTagVo.getPullPassword(), imageTagVo.getHarborUrl()); - LOGGER.info(loginExec); - Session.Command cmd = session.exec(loginExec); - - String loggerInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String loggerError = IOUtils.readFully(cmd.getErrorStream()).toString(); - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - log.append(System.lineSeparator()).append(loginExec.replace(imageTagVo.getPullPassword(), "password")); - log.append(System.lineSeparator()); - log.append(loggerInfo); - log.append(loggerError); - LOGGER.info(loggerInfo); - LOGGER.info(loggerError); - LOGGER.info("docker login status:{}", cmd.getExitStatus()); - - if (cmd.getExitStatus() != 0) { - throw new CommonException(ERROR_DOCKER_LOGIN); - } - - } finally { - assert session != null; - session.close(); - } - } - - public void dockerPull(SSHClient ssh, C7nImageDeployDTO imageTagVo, StringBuilder log) throws IOException { - Session session = null; - try { - session = ssh.startSession(); - LOGGER.info(imageTagVo.getPullCmd()); - Session.Command cmd = session.exec("sudo " + imageTagVo.getPullCmd()); - log.append(System.lineSeparator()).append("sudo ").append(imageTagVo.getPullCmd()); - String loggerInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String loggerError = IOUtils.readFully(cmd.getErrorStream()).toString(); - execPullImage(cmd); - log.append(System.lineSeparator()); - log.append(loggerInfo); - log.append(loggerError); - LOGGER.info(loggerInfo); - LOGGER.info(loggerError); - LOGGER.info("docker pull status:{}", cmd.getExitStatus()); - if (cmd.getExitStatus() != 0) { - throw new CommonException(ERROR_DOCKER_PULL); - } - } finally { - assert session != null; - session.close(); - } - } - - public void dockerStop(SSHClient ssh, String containerName, StringBuilder log) throws IOException { - Session session = null; - try { - session = ssh.startSession(); - - // 判断镜像是否存在 存在删除 部署 - StringBuilder dockerRunExec = new StringBuilder(); - dockerRunExec.append("sudo docker stop ").append(containerName).append(" && "); - dockerRunExec.append("sudo docker rm ").append(containerName); - log.append(System.lineSeparator()).append(dockerRunExec.toString()); - Session.Command cmd = session.exec(dockerRunExec.toString()); - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - String loggerInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String loggerError = IOUtils.readFully(cmd.getErrorStream()).toString(); - log.append(System.lineSeparator()); - log.append(loggerInfo); - log.append(loggerError); - LOGGER.info(loggerInfo); - LOGGER.info(loggerError); - LOGGER.info("docker stop status:{}", cmd.getExitStatus()); - } finally { - assert session != null; - session.close(); - } - - } - /** * 执行shell命令。该函数需要一直阻塞直到命令返回 * @@ -345,46 +165,6 @@ public void execCommands(SSHClient sshClient, @Nonnull List commands) th } } - public void dockerRun(SSHClient ssh, String value, String containerName, C7nImageDeployDTO c7nImageDeployDTO, StringBuilder log) throws IOException { - Session session = null; - try { - session = ssh.startSession(); - String[] strings = value.split("\n"); - String values = ""; - for (String s : strings) { - if (s.length() > 0 && !s.contains("#") && s.contains("docker")) { - values = s; - } - } - LOGGER.info("docker run values is {}", values); - if (StringUtils.isEmpty(values) || Boolean.FALSE.equals(checkInstruction("image", values))) { - throw new CommonException("error.instruction"); - } - - // 判断镜像是否存在 存在删除 部署 - StringBuilder dockerRunExec = new StringBuilder(); - dockerRunExec.append(values.replace("${containerName}", containerName).replace("${imageName}", c7nImageDeployDTO.getPullCmd().replace("docker pull", ""))); - Session.Command cmd = session.exec(dockerRunExec.toString()); - String loggerInfo = IOUtils.readFully(cmd.getInputStream()).toString(); - String loggerError = IOUtils.readFully(cmd.getErrorStream()).toString(); - LOGGER.info(loggerInfo); - LOGGER.info(loggerError); - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - log.append(System.lineSeparator()).append(dockerRunExec.toString()); - log.append(System.lineSeparator()); - log.append(loggerInfo); - log.append(loggerError); - LOGGER.info("docker run status:{}", cmd.getExitStatus()); - if (cmd.getExitStatus() != 0) { - throw new CommonException(ERROR_DOCKER_RUN); - } - } finally { - assert session != null; - session.close(); - } - - } - private Boolean checkInstruction(String type, String instruction) { if (type.equals("jar")) { return instruction.contains("${jar}"); @@ -442,25 +222,6 @@ private void dtoToHostConnVo(HostConnectionVO hostConnectionVO, DevopsHostDTO de } } - /** - * 解决pull 镜像时间较长 - * 等3分钟 - */ - private void execPullImage(Session.Command cmd) { - for (int i = 0; i < 30; i++) { - if (cmd.getExitStatus() == null) { - LOGGER.info("Pulling the image!!!"); - try { - cmd.join(WAIT_SECONDS, TimeUnit.SECONDS); - } catch (ConnectionException e) { - LOGGER.error("Pulling the image failed", e); - } - } else { - break; - } - } - } - public void uploadPreProcessShell(SSHClient ssh, String suffix) { InputStream shellInputStream = DevopsClusterNodeServiceImpl.class.getResourceAsStream("/shell/pre-process.sh"); Map map = new HashMap<>(); From ed143c6a8e5342dfdc559dd0c7169b88eed7a454 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Mon, 13 Jun 2022 10:57:38 +0800 Subject: [PATCH 009/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=90=88?= =?UTF-8?q?=E5=B9=B6=E8=AF=B7=E6=B1=82=E6=B6=88=E6=81=AF=E6=A8=A1=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-data-message-template-open.xlsx | Bin 78427 -> 78495 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx index 74c1bcc71696ae2e446dc5fd8d62bd4a006c6bd1..f3e84507aa2f796776c918678d38b74ed550911e 100644 GIT binary patch delta 70889 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 delta 70750 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 From 1cb7929b0897514b4e30e51e24e539206cdac25b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 13 Jun 2022 15:33:34 +0800 Subject: [PATCH 010/228] =?UTF-8?q?[IMP]=20=E8=B0=83=E6=95=B4=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E6=B5=81=E6=B0=B4=E7=BA=BF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CiCdPipelineRecordServiceImpl.java | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java index 663a13edff..c3f1968523 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java @@ -377,7 +377,7 @@ public void cancelCdPipeline(Long pipelineRecordId) { // 只有未执行、执行中的流水线可以取消执行 if (PipelineStatus.CREATED.toValue().equals(pipelineRecordDTO.getStatus())) { - cancelCreateStageAndJob(pipelineRecordId); + cancelCreateOrRunningStageAndJob(pipelineRecordId); } else if (PipelineStatus.RUNNING.toValue().equals(pipelineRecordDTO.getStatus())) { List devopsCdStageRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.RUNNING.toValue()); @@ -392,7 +392,7 @@ public void cancelCdPipeline(Long pipelineRecordId) { devopsCdStageRecordService.updateStatusById(devopsCdStageRecordDTO.getId(), PipelineStatus.CANCELED.toValue()); } } - cancelCreateStageAndJob(pipelineRecordId); + cancelCreateOrRunningStageAndJob(pipelineRecordId); } else { return; } @@ -401,12 +401,28 @@ public void cancelCdPipeline(Long pipelineRecordId) { workFlowServiceOperator.stopInstance(pipelineRecordDTO.getProjectId(), pipelineRecordDTO.getBusinessKey()); } - private void cancelCreateStageAndJob(Long pipelineRecordId) { - List devopsCdStageRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.CREATED.toValue()); + private void cancelCreateOrRunningStageAndJob(Long pipelineRecordId) { + List devopsCdStageRecordDTOS = new ArrayList<>(); + List createdRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.CREATED.toValue()); + List runningRecordDTOS = devopsCdStageRecordService.queryStageWithPipelineRecordIdAndStatus(pipelineRecordId, PipelineStatus.RUNNING.toValue()); + if (!CollectionUtils.isEmpty(createdRecordDTOS)) { + devopsCdStageRecordDTOS.addAll(createdRecordDTOS); + } + if (!CollectionUtils.isEmpty(runningRecordDTOS)) { + devopsCdStageRecordDTOS.addAll(runningRecordDTOS); + } if (!CollectionUtils.isEmpty(devopsCdStageRecordDTOS)) { devopsCdStageRecordDTOS.forEach(devopsCdStageRecordDTO -> { devopsCdStageRecordService.updateStatusById(devopsCdStageRecordDTO.getId(), PipelineStatus.CANCELED.toValue()); - List devopsCdJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.CREATED.toValue()); + List devopsCdJobRecordDTOS = new ArrayList<>(); + List createdJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.CREATED.toValue()); + List runningJobRecordDTOS = devopsCdJobRecordService.queryJobWithStageRecordIdAndStatus(devopsCdStageRecordDTO.getId(), PipelineStatus.RUNNING.toValue()); + if (!CollectionUtils.isEmpty(createdJobRecordDTOS)) { + devopsCdJobRecordDTOS.addAll(createdJobRecordDTOS); + } + if (!CollectionUtils.isEmpty(runningJobRecordDTOS)) { + devopsCdJobRecordDTOS.addAll(runningJobRecordDTOS); + } if (!CollectionUtils.isEmpty(devopsCdJobRecordDTOS)) { devopsCdJobRecordDTOS.forEach(devopsCdJobRecordDTO -> devopsCdJobRecordService.updateStatusById(devopsCdJobRecordDTO.getId(), PipelineStatus.CANCELED.toValue())); } From 7dac66b45375fe067ded1847f47ef55c54089e3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 15 Jun 2022 09:45:21 +0800 Subject: [PATCH 011/228] =?UTF-8?q?[IMP]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/CiCdPipelineRecordServiceImpl.java | 1 - .../app/service/impl/DevopsCdPipelineServiceImpl.java | 6 ++++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java index c3f1968523..f4d8186a4c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java @@ -389,7 +389,6 @@ public void cancelCdPipeline(Long pipelineRecordId) { if (JobTypeEnum.CD_AUDIT.value().equals(devopsCdJobRecordDTO.getType())) { throw new CommonException(PipelineCheckConstant.ERROR_CANCEL_AUDITING_PIPELINE); } - devopsCdStageRecordService.updateStatusById(devopsCdStageRecordDTO.getId(), PipelineStatus.CANCELED.toValue()); } } cancelCreateOrRunningStageAndJob(pipelineRecordId); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java index c3392ef623..4442c5762e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java @@ -829,6 +829,12 @@ public void setAppDeployStatus(Long pipelineRecordId, Long stageRecordId, Long j LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>> Userdetails is {}", DetailsHelper.getUserDetails()); DevopsCdPipelineRecordDTO devopsCdPipelineRecordDTO = devopsCdPipelineRecordService.queryById(pipelineRecordId); CustomContextUtil.setUserContext(devopsCdPipelineRecordDTO.getCreatedBy()); + // 流水线取消执行则不更新相关状态 + if (PipelineStatus.CANCELED.toValue().equals(devopsCdPipelineRecordDTO.getStatus())) { + LOGGER.info("Pipeline instance has canceled:pipelineRecordId: {} stageRecordId: {} taskId: {}, status: {}", pipelineRecordId, stageRecordId, jobRecordId, status); + return; + } + if (Boolean.TRUE.equals(status) && PipelineStatus.RUNNING.toValue().equals(devopsCdPipelineRecordDTO.getStatus())) { LOGGER.info(">>>>>>> setAppDeployStatus, start next task, pipelineStatus is :{}<<<<<<<<<<<", devopsCdPipelineRecordDTO.getStatus()); From d2ffdb4f5266f0ac4bf342d0face12ee4f353a33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 15 Jun 2022 11:18:50 +0800 Subject: [PATCH 012/228] =?UTF-8?q?[IMP]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsCdPipelineServiceImpl.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java index 4442c5762e..4753215357 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java @@ -1507,6 +1507,10 @@ public void handleApiTestSuiteCompleteEvent(ApiTestCompleteEventVO apiTestComple DevopsCdPipelineRecordDTO devopsCdPipelineRecordDTO = devopsCdPipelineRecordService.queryById(devopsCdStageRecordDTO.getPipelineRecordId()); DevopsPipelineRecordRelDTO devopsPipelineRecordRelDTO = devopsPipelineRecordRelService.queryByCdPipelineRecordId(devopsCdPipelineRecordDTO.getId()); + // 取消状态下的流水线不再更新状态 + if (PipelineStatus.CANCELED.toValue().equals(devopsCdPipelineRecordDTO.getStatus())) { + return; + } // 流水线状态 // 失败: // 1. API测试任务执行失败 From deb37cf9ac8a4fdbea279f0cc02dd568d9cb4a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 15 Jun 2022 11:38:00 +0800 Subject: [PATCH 013/228] =?UTF-8?q?[IMP]=20=E4=BC=98=E5=8C=96=E5=8F=96?= =?UTF-8?q?=E6=B6=88=E5=90=8E=E6=89=A7=E8=A1=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsCdPipelineRecordServiceImpl.java | 4 ++++ .../app/service/impl/DevopsCdPipelineServiceImpl.java | 10 ++++++++++ 2 files changed, 14 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java index 09c3ec5ced..a982651ba7 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineRecordServiceImpl.java @@ -372,6 +372,10 @@ private String getJarName(String url) { public void cdHostDeploy(Long pipelineRecordId, Long cdStageRecordId, Long cdJobRecordId) { HostDeployPayload hostDeployPayload = new HostDeployPayload(pipelineRecordId, cdStageRecordId, cdJobRecordId); DevopsCdPipelineRecordDTO pipelineRecordDTO = devopsCdPipelineRecordMapper.selectByPrimaryKey(pipelineRecordId); + + if (PipelineStatus.CANCELED.toValue().equals(pipelineRecordDTO.getStatus())) { + return; + } CustomContextUtil.setUserContext(pipelineRecordDTO.getCreatedBy()); DevopsCdJobRecordDTO jobRecordDTO = devopsCdJobRecordMapper.selectByPrimaryKey(hostDeployPayload.getJobRecordId()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java index 4753215357..d58c3c8038 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java @@ -471,6 +471,9 @@ public void envAutoDeploy(Long pipelineRecordId, Long stageRecordId, Long jobRec StringBuilder log = new StringBuilder(); DevopsCdPipelineRecordDTO devopsCdPipelineRecordDTO = devopsCdPipelineRecordService.queryById(pipelineRecordId); DevopsCdJobRecordDTO devopsCdJobRecordDTO = devopsCdJobRecordService.queryById(jobRecordId); + if (PipelineStatus.CANCELED.toValue().equals(devopsCdJobRecordDTO.getStatus())) { + return; + } if (LOGGER.isInfoEnabled()) { LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>Begin envAutoDeploy,devopsCdJobRecordDTO: {}<<<<<<<<<<<<<<<<<<<<<", JsonHelper.marshalByJackson(devopsCdJobRecordDTO)); } @@ -1208,12 +1211,16 @@ public void initPipelineRecordWithStageAndJob(Long projectId, Long gitlabPipelin @Transactional public void executeApiTestTask(Long pipelineRecordId, Long stageRecordId, Long jobRecordId) { DevopsCdJobRecordDTO devopsCdJobRecordDTO = devopsCdJobRecordService.queryById(jobRecordId); + if (PipelineStatus.CANCELED.toValue().equals(devopsCdJobRecordDTO.getStatus())) { + return; + } LOGGER.info(">>>>>>>>>>>>>>>>>>> Execute api test task. pipelineRecordId : {}, stageRecordId : {} ,jobRecordId : {} <<<<<<<<<<<<<<<<<<<<", pipelineRecordId, stageRecordId, jobRecordId); if (!JobTypeEnum.CD_API_TEST.value().equals(devopsCdJobRecordDTO.getType())) { throw new CommonException("error.invalid.job.type"); } DevopsCdApiTestInfoDTO devopsCdApiTestInfoDTO = devopsCdApiTestInfoService.queryById(devopsCdJobRecordDTO.getDeployInfoId()); + ApiTestTaskRecordDTO taskRecordDTO; // 更新记录状态为执行中 @@ -1281,6 +1288,9 @@ public String getDeployStatus(Long pipelineRecordId, String deployJobName) { @Transactional public void executeExternalApprovalTask(Long pipelineRecordId, Long stageRecordId, Long jobRecordId) { DevopsCdJobRecordDTO devopsCdJobRecordDTO = devopsCdJobRecordService.queryById(jobRecordId); + if (PipelineStatus.CANCELED.toValue().equals(devopsCdJobRecordDTO.getStatus())) { + return; + } String callbackToken = UUIDUtils.generateUUID(); // 添加回调token devopsCdJobRecordDTO.setCallbackToken(callbackToken); From 77f3b5115231e579d34ac3aae5ab5ad9a46ffdf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 16 Jun 2022 16:07:05 +0800 Subject: [PATCH 014/228] =?UTF-8?q?[IMP]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/eventhandler/SagaHandler.java | 17 ++--------------- .../impl/GitlabGroupMemberServiceImpl.java | 8 +++----- .../devops/infra/constant/MiscConstants.java | 11 +++++++++-- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index 3dd6ffdae0..0e6d8557dd 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -1,6 +1,8 @@ package io.choerodon.devops.app.eventhandler; import static io.choerodon.devops.infra.constant.GitOpsConstants.NEW_LINE; +import static io.choerodon.devops.infra.constant.MiscConstants.DEVOPS; +import static io.choerodon.devops.infra.constant.MiscConstants.OPERATIONS; import java.util.ArrayList; import java.util.Collections; @@ -32,7 +34,6 @@ import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.exception.NoTraceException; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; -import io.choerodon.devops.infra.mapper.DevopsCdJobRecordMapper; import io.choerodon.devops.infra.mapper.UserAttrMapper; import io.choerodon.devops.infra.util.ArrayUtil; import io.choerodon.devops.infra.util.LogUtil; @@ -51,15 +52,7 @@ public class SagaHandler { private static final Logger LOGGER = LoggerFactory.getLogger(SagaHandler.class); private final Gson gson = new Gson(); - /** - * devops项目类型 - */ - private static final String DEVOPS = "N_DEVOPS"; - /** - * 运维项目类型 - */ - private static final String OPERATIONS = "N_OPERATIONS"; @Autowired private GitlabGroupService gitlabGroupService; @@ -72,18 +65,12 @@ public class SagaHandler { @Autowired private BaseServiceClientOperator baseServiceClientOperator; @Autowired - private DevopsCdJobRecordMapper devopsCdJobRecordMapper; - @Autowired - private DevopsCdPipelineRecordService devopsCdPipelineRecordService; - @Autowired private ChartService chartService; @Autowired private GitlabHandleService gitlabHandleService; @Autowired private DevopsAppTemplateService devopsAppTemplateService; @Autowired - private DevopsMiddlewareService devopsMiddlewareService; - @Autowired private UserAttrService userAttrService; @Autowired private UserAttrMapper userAttrMapper; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupMemberServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupMemberServiceImpl.java index 64fcb30c88..85c606db6e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupMemberServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabGroupMemberServiceImpl.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service.impl; +import static io.choerodon.devops.infra.constant.MiscConstants.DEVOPS; +import static io.choerodon.devops.infra.constant.MiscConstants.OPERATIONS; import static io.choerodon.devops.infra.enums.LabelType.GITLAB_PROJECT_OWNER; import static io.choerodon.devops.infra.enums.LabelType.TENANT_ADMIN; @@ -48,10 +50,6 @@ public class GitlabGroupMemberServiceImpl implements GitlabGroupMemberService { private static final String PROJECT = "project"; private static final Logger LOGGER = LoggerFactory.getLogger(GitlabGroupMemberServiceImpl.class); - /** - * devops项目类型 - */ - private static final String DEVOPS = "N_DEVOPS"; @Autowired private DevopsProjectService devopsProjectService; @@ -651,7 +649,7 @@ public void assignGitLabGroupOwner(Long groupId, MemberDTO groupMemberDTO, Membe public void assignGitLabGroupMemberForOwner(ProjectDTO projectDTO, Long userId) { List categoryList = baseServiceClientOperator.listProjectCategoryById(projectDTO.getId()); - if (CollectionUtils.isEmpty(categoryList) || !categoryList.contains(DEVOPS)) { + if (CollectionUtils.isEmpty(categoryList) || categoryList.stream().noneMatch(s -> DEVOPS.equals(s) || s.equals(OPERATIONS))) { return; } UserAttrDTO userAttrDTO = userAttrService.baseQueryById(userId); diff --git a/src/main/java/io/choerodon/devops/infra/constant/MiscConstants.java b/src/main/java/io/choerodon/devops/infra/constant/MiscConstants.java index f2261fe2aa..f1905eaed3 100644 --- a/src/main/java/io/choerodon/devops/infra/constant/MiscConstants.java +++ b/src/main/java/io/choerodon/devops/infra/constant/MiscConstants.java @@ -9,9 +9,16 @@ public final class MiscConstants { private MiscConstants() { } + // 项目类型相关 + /** + * devops项目类型 + */ + public static final String DEVOPS = "N_DEVOPS"; - public static final String DEFAULT_INTERNAL_APP_SERVICE_REPO_URL = "none"; - + /** + * 运维项目类型 + */ + public static final String OPERATIONS = "N_OPERATIONS"; /** * 默认的chart配置的名称 */ From 13b1915470a345ff310768f1c178725fa251bc82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 16 Jun 2022 16:36:15 +0800 Subject: [PATCH 015/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E5=A4=8D=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=9C=8D=E5=8A=A1=E8=B0=83=E6=95=B4=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/vo/iam/ImmutableProjectInfoVO.java | 10 ++++++++++ .../devops/app/service/impl/AppServiceServiceImpl.java | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java index 2c6e46a734..49447ffad3 100644 --- a/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/iam/ImmutableProjectInfoVO.java @@ -11,6 +11,8 @@ public class ImmutableProjectInfoVO { @ApiModelProperty("项目code") private String projCode; + @ApiModelProperty("devops基础组件中使用的编码,harbor、gitlab、sonar、chartmuserm") + private String devopsComponentCode; @ApiModelProperty("组织id") private Long tenantId; @ApiModelProperty("组织code") @@ -25,6 +27,14 @@ public ImmutableProjectInfoVO(String projCode, Long tenantId, String tenantNum) this.tenantNum = tenantNum; } + public String getDevopsComponentCode() { + return devopsComponentCode; + } + + public void setDevopsComponentCode(String devopsComponentCode) { + this.devopsComponentCode = devopsComponentCode; + } + public String getProjCode() { return projCode; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index e78fed7a8d..0605630c3b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -3551,11 +3551,11 @@ private void initApplicationParams(Long projectId, List applicati private void initApplicationParams(ImmutableProjectInfoVO info, AppServiceDTO appService, String urlSlash) { if (appService.getExternalConfigId() == null) { if (appService.getGitlabProjectId() != null) { - String projectCode = info.getProjCode(); + String devopsComponentCode = info.getDevopsComponentCode(); String tenantCode = info.getTenantNum(); - appService.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, tenantCode, projectCode, appService.getCode())); + appService.setSshRepositoryUrl(GitUtil.getAppServiceSshUrl(gitlabSshUrl, tenantCode, devopsComponentCode, appService.getCode())); appService.setRepoUrl( - gitlabUrl + urlSlash + tenantCode + "-" + projectCode + "/" + gitlabUrl + urlSlash + tenantCode + "-" + devopsComponentCode + "/" + appService.getCode() + ".git"); } } else { From 41ab7977da5bdeccb654c05d13e2569bbf236365 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Mon, 20 Jun 2022 16:43:08 +0800 Subject: [PATCH 016/228] =?UTF-8?q?[ADD]=20=E7=8E=AF=E5=A2=83=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=B7=BB=E5=8A=A0=E6=89=80=E5=B1=9E=E9=9B=86=E7=BE=A4?= =?UTF-8?q?=E6=89=80=E5=9C=A8=E9=A1=B9=E7=9B=AE=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/vo/DevopsEnvironmentInfoVO.java | 10 ++++++++++ .../app/service/impl/DevopsEnvironmentServiceImpl.java | 7 +++++++ 2 files changed, 17 insertions(+) diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java index 3256f4e829..6bdc478439 100644 --- a/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/DevopsEnvironmentInfoVO.java @@ -47,6 +47,8 @@ public class DevopsEnvironmentInfoVO { @ApiModelProperty("gitops同步状态") private String gitopsStatus; + private String clusterBelongedProjectName; + public Boolean getFail() { return fail; } @@ -166,4 +168,12 @@ public String getGitlabUrl() { public void setGitlabUrl(String gitlabUrl) { this.gitlabUrl = gitlabUrl; } + + public String getClusterBelongedProjectName() { + return clusterBelongedProjectName; + } + + public void setClusterBelongedProjectName(String clusterBelongedProjectName) { + this.clusterBelongedProjectName = clusterBelongedProjectName; + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java index aa786829e8..a48625f8f9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvironmentServiceImpl.java @@ -714,6 +714,13 @@ public DevopsEnvironmentInfoVO queryInfoById(Long projectId, Long environmentId) gitlabUrl = gitlabUrl.endsWith("/") ? gitlabUrl.substring(0, gitlabUrl.length() - 1) : gitlabUrl; vo.setGitlabUrl(String.format("%s/%s-%s-gitops/%s/", gitlabUrl, organizationDTO.getTenantNum(), projectDTO.getDevopsComponentCode(), envInfo.getCode())); + + // 设置环境所属集群所在项目 + Long clusterId = vo.getClusterId(); + DevopsClusterDTO devopsClusterDTO = devopsClusterMapper.selectByPrimaryKey(clusterId); + ProjectDTO clusterBelongedProject = baseServiceClientOperator.queryIamProjectById(devopsClusterDTO.getProjectId(), false, false, false); + vo.setClusterBelongedProjectName(clusterBelongedProject.getName()); + return vo; } From e6aefbb052dc42d3750b4777360d3a2e8ab285c2 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Tue, 21 Jun 2022 15:21:45 +0800 Subject: [PATCH 017/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0=E5=A4=8D?= =?UTF-8?q?=E5=88=B6=E6=95=8F=E6=8D=B7=E9=97=AE=E9=A2=98=E5=85=B3=E8=81=94?= =?UTF-8?q?=E5=88=86=E6=94=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/eventhandler/SagaHandler.java | 17 ++++++++++++++++- .../constants/SagaTaskCodeConstants.java | 5 +++++ .../devops/app/service/DevopsGitService.java | 2 ++ .../app/service/DevopsIssueRelService.java | 12 +++++++++++- .../app/service/impl/DevopsGitServiceImpl.java | 10 +++++++++- .../service/impl/DevopsIssueRelServiceImpl.java | 9 +++++++-- .../infra/mapper/DevopsIssueRelMapper.java | 4 +++- .../resources/mapper/DevopsIssueRelMapper.xml | 9 ++++++++- 8 files changed, 61 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index 0e6d8557dd..45913b6f98 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -7,8 +7,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.Map; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.type.TypeReference; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.slf4j.Logger; @@ -36,6 +38,7 @@ import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.UserAttrMapper; import io.choerodon.devops.infra.util.ArrayUtil; +import io.choerodon.devops.infra.util.JsonHelper; import io.choerodon.devops.infra.util.LogUtil; import io.choerodon.devops.infra.util.TypeUtil; @@ -53,7 +56,6 @@ public class SagaHandler { private final Gson gson = new Gson(); - @Autowired private GitlabGroupService gitlabGroupService; @Autowired @@ -74,6 +76,8 @@ public class SagaHandler { private UserAttrService userAttrService; @Autowired private UserAttrMapper userAttrMapper; + @Autowired + private DevopsGitService devopsGitService; private void loggerInfo(Object o) { if (LOGGER.isInfoEnabled()) { @@ -406,6 +410,17 @@ public String deleteAppTemplate(String payload) { return payload; } + @SagaTask(code = SagaTaskCodeConstants.DEVOPS_COPY_BRANCH_RELATION, + description = "复制工作项与分支关联关系", + sagaCode = SagaTaskCodeConstants.DEVOPS_COPY_BRANCH_RELATION, + maxRetryCount = 5, seq = 10) + public String devopsCopyIssueBranchRelation(String payload) { + Map idMaps = JsonHelper.unmarshalByJackson(payload, new TypeReference>() { + }); + devopsGitService.cloneBranchIssueRelation(idMaps.get("oldIssueId"), idMaps.get("newIssueIds")); + return payload; + } + /** * devops 同步项目类型的处理 * diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java index 6f812b1a53..b40af6c05c 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java @@ -104,6 +104,11 @@ public class SagaTaskCodeConstants { */ public static final String DEVOPS_CREATE_BRANCH = "devopsCreateBranch"; + /** + * 复制工作项与分支关联关系 + */ + public static final String DEVOPS_COPY_BRANCH_RELATION = "devops-copy-issue-branch-relation"; + /** * devops创建实例 */ diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java index bfa9a6981a..a26a1067d0 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java @@ -101,6 +101,8 @@ public interface DevopsGitService { */ void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpdateVO devopsBranchUpdateVO, boolean onlyInsert); + void cloneBranchIssueRelation(Long oldIssueId, Long newIssueId); + /** * 删除分支 * diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java b/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java index e6ef6f5b2b..81f7e52ea5 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsIssueRelService.java @@ -66,7 +66,17 @@ public interface DevopsIssueRelService { * @param issueId * @return */ - Set listRelationByIssueIdAndObjectType(Long projectId, String object, Long issueId); + Set listRelationByIssueIdAndProjectIdAndObjectType(Long projectId, String object, Long issueId); + + /** + * 列出关联了敏捷问题的commitId或branchId + * + * @param object + * @param issueId + * @return + */ + Set listRelationByIssueIdAndObjectType(String object, Long issueId); + /** * 列出敏捷问题以及关联的分支信息 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index 8e72b0e295..668caa7e66 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -474,6 +474,14 @@ public void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpd devopsBranchService.updateBranchIssue(projectId, appServiceDTO, ConvertUtils.convertObject(devopsBranchUpdateVO, DevopsBranchDTO.class), onyInsert); } + @Override + public void cloneBranchIssueRelation(Long oldIssueId, Long newIssueId) { + Set devopsIssueRelDTOS = devopsIssueRelService.listRelationByIssueIdAndObjectType(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), oldIssueId); + devopsIssueRelDTOS.forEach(devopsIssueRelDTO -> { + devopsIssueRelService.addRelation(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getProjectId(), devopsIssueRelDTO.getAppServiceCode(), newIssueId); + }); + } + @Override public void deleteBranch(Long projectId, Long appServiceId, String branchName) { AppServiceDTO appServiceDTO = appServiceService.baseQuery(appServiceId); @@ -1270,7 +1278,7 @@ public void removeAssociation(Long projectId, Long appServiceId, Long branchId, }); // 查出剩下的和敏捷问题有关联的分支 - Set remainBranchIssueRelation = devopsIssueRelService.listRelationByIssueIdAndObjectType(projectId, DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), issueId); + Set remainBranchIssueRelation = devopsIssueRelService.listRelationByIssueIdAndProjectIdAndObjectType(projectId, DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), issueId); List devopsBranchVOS = remainBranchIssueRelation.stream().map(r -> { DevopsBranchVO devopsBranchVO = new DevopsBranchVO(); devopsBranchVO.setAppServiceCode(r.getAppServiceCode()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java index b31692bcb1..cbfdf073f1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIssueRelServiceImpl.java @@ -88,8 +88,13 @@ public Map> listMappedIssueIdsByObjectTypeAndObjectId(String ob } @Override - public Set listRelationByIssueIdAndObjectType(Long projectId, String object, Long issueId) { - return devopsIssueRelMapper.listRelationByIssueIdAndObjectType(projectId, object, issueId); + public Set listRelationByIssueIdAndProjectIdAndObjectType(Long projectId, String object, Long issueId) { + return devopsIssueRelMapper.listRelationByIssueIdAndProjectIdAndObjectType(projectId, object, issueId); + } + + @Override + public Set listRelationByIssueIdAndObjectType(String object, Long issueId) { + return devopsIssueRelMapper.listRelationByIssueIdAndObjectType(object, issueId); } @Override diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java index a1538ea592..184e70dc1f 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java @@ -15,7 +15,7 @@ public interface DevopsIssueRelMapper extends BaseMapper { List listIssueIdsByObjectTypeAndObjectIds(Set objectIds, String object); - Set listRelationByIssueIdAndObjectType(@Param("projectId") Long projectId, @Param("object") String object, @Param("issueId") Long issueId); + Set listRelationByIssueIdAndProjectIdAndObjectType(@Param("projectId") Long projectId, @Param("object") String object, @Param("issueId") Long issueId); List listRelationByIssueIdsAndObjectType(@Param("object") String object, @Param("issueIds") Set issueIds); @@ -38,4 +38,6 @@ public interface DevopsIssueRelMapper extends BaseMapper { List listBranchIdsByCommitIds(@Param("commitIds") Set commitIds); List listCommitRelationByBranchId(@Param("branchId") Long branchId); + + Set listRelationByIssueIdAndObjectType(@Param("object") String object, @Param("issueId") Long issueId); } diff --git a/src/main/resources/mapper/DevopsIssueRelMapper.xml b/src/main/resources/mapper/DevopsIssueRelMapper.xml index a0232d4fb7..bd0e8ad11e 100644 --- a/src/main/resources/mapper/DevopsIssueRelMapper.xml +++ b/src/main/resources/mapper/DevopsIssueRelMapper.xml @@ -32,7 +32,7 @@ - SELECT dir.object_id, dir.project_id, dir.app_service_code, dir.branch_id FROM devops_issue_rel dir WHERE dir.project_id = #{projectId} @@ -124,4 +124,11 @@ WHERE dir.object='commit' AND dir.branch_id=#{branchId} + + \ No newline at end of file From 728002a40936d204eb4dbe7cda0d2c5582ad69e7 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Wed, 22 Jun 2022 09:48:57 +0800 Subject: [PATCH 018/228] =?UTF-8?q?[IMP]=20[ADD]=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A4=8D=E5=88=B6=E6=95=8F=E6=8D=B7=E9=97=AE=E9=A2=98=E5=85=B3?= =?UTF-8?q?=E8=81=94=E5=88=86=E6=94=AF=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/eventhandler/SagaHandler.java | 14 ++++------ .../constants/SagaTaskCodeConstants.java | 2 +- .../payload/CloneIssuePayload.java | 28 +++++++++++++++++++ .../devops/app/service/DevopsGitService.java | 8 +++++- .../service/impl/DevopsGitServiceImpl.java | 10 ++++--- 5 files changed, 48 insertions(+), 14 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index 45913b6f98..a41339ba6e 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -7,10 +7,8 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Map; import com.alibaba.fastjson.JSONObject; -import com.fasterxml.jackson.core.type.TypeReference; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.slf4j.Logger; @@ -28,6 +26,7 @@ import io.choerodon.devops.api.vo.iam.DeleteAdminVO; import io.choerodon.devops.app.eventhandler.constants.SagaTaskCodeConstants; import io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants; +import io.choerodon.devops.app.eventhandler.payload.CloneIssuePayload; import io.choerodon.devops.app.eventhandler.payload.CreateAndUpdateUserEventPayload; import io.choerodon.devops.app.eventhandler.payload.GitlabGroupPayload; import io.choerodon.devops.app.eventhandler.payload.ProjectPayload; @@ -410,14 +409,13 @@ public String deleteAppTemplate(String payload) { return payload; } - @SagaTask(code = SagaTaskCodeConstants.DEVOPS_COPY_BRANCH_RELATION, + @SagaTask(code = SagaTaskCodeConstants.DEVOPS_CLONE_ISSUE, description = "复制工作项与分支关联关系", - sagaCode = SagaTaskCodeConstants.DEVOPS_COPY_BRANCH_RELATION, + sagaCode = SagaTaskCodeConstants.DEVOPS_CLONE_ISSUE, maxRetryCount = 5, seq = 10) - public String devopsCopyIssueBranchRelation(String payload) { - Map idMaps = JsonHelper.unmarshalByJackson(payload, new TypeReference>() { - }); - devopsGitService.cloneBranchIssueRelation(idMaps.get("oldIssueId"), idMaps.get("newIssueIds")); + public String devopsCloneIssueBranchRelation(String payload) { + CloneIssuePayload cloneIssuePayload = JsonHelper.unmarshalByJackson(payload, CloneIssuePayload.class); + devopsGitService.cloneBranchIssueRelation(cloneIssuePayload.getProjectId(), cloneIssuePayload.getNewIssueIdMap()); return payload; } diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java index b40af6c05c..16ea0b4cdf 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java @@ -107,7 +107,7 @@ public class SagaTaskCodeConstants { /** * 复制工作项与分支关联关系 */ - public static final String DEVOPS_COPY_BRANCH_RELATION = "devops-copy-issue-branch-relation"; + public static final String DEVOPS_CLONE_ISSUE = "clone_issue"; /** * devops创建实例 diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java new file mode 100644 index 0000000000..9cffc4a622 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java @@ -0,0 +1,28 @@ +package io.choerodon.devops.app.eventhandler.payload; + +import java.util.Map; + +import io.swagger.annotations.ApiModelProperty; + +public class CloneIssuePayload { + @ApiModelProperty("项目id") + private Long projectId; + @ApiModelProperty("key:newIssue value:oldIssueId") + private Map newIssueIdMap; + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } + + public Map getNewIssueIdMap() { + return newIssueIdMap; + } + + public void setNewIssueIdMap(Map newIssueIdMap) { + this.newIssueIdMap = newIssueIdMap; + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java index a26a1067d0..9ba42837a9 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java @@ -1,6 +1,7 @@ package io.choerodon.devops.app.service; import java.util.List; +import java.util.Map; import io.choerodon.core.domain.Page; import io.choerodon.devops.api.vo.*; @@ -101,7 +102,12 @@ public interface DevopsGitService { */ void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpdateVO devopsBranchUpdateVO, boolean onlyInsert); - void cloneBranchIssueRelation(Long oldIssueId, Long newIssueId); + /** + * 克隆分支与工作项关联关系 + * @param projectId + * @param issueIdMap + */ + void cloneBranchIssueRelation(Long projectId, Map issueIdMap); /** * 删除分支 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index 668caa7e66..d410556abc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -475,10 +475,12 @@ public void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpd } @Override - public void cloneBranchIssueRelation(Long oldIssueId, Long newIssueId) { - Set devopsIssueRelDTOS = devopsIssueRelService.listRelationByIssueIdAndObjectType(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), oldIssueId); - devopsIssueRelDTOS.forEach(devopsIssueRelDTO -> { - devopsIssueRelService.addRelation(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getProjectId(), devopsIssueRelDTO.getAppServiceCode(), newIssueId); + public void cloneBranchIssueRelation(Long projectId, Map issueIdMap) { + issueIdMap.forEach((newIssueId, oldIssueId) -> { + Set devopsIssueRelDTOS = devopsIssueRelService.listRelationByIssueIdAndObjectType(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), oldIssueId); + devopsIssueRelDTOS.forEach(devopsIssueRelDTO -> { + devopsIssueRelService.addRelation(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getProjectId(), devopsIssueRelDTO.getAppServiceCode(), newIssueId); + }); }); } From 61ad18cdf542887cb5429151995440f368fe1fc3 Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Wed, 22 Jun 2022 15:37:01 +0800 Subject: [PATCH 019/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E6=B5=8B=E8=AF=95=E5=A5=97=E4=BB=B6=E4=B8=8E=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E6=98=AF=E5=90=A6=E5=85=B3=E8=81=94=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsCdApiTestInfoController.java | 28 +++++++++++++++++++ .../service/DevopsCdApiTestInfoService.java | 1 + .../impl/DevopsCdApiTestInfoServiceImpl.java | 5 ++++ .../mapper/DevopsCdApiTestInfoMapper.java | 1 + .../mapper/DevopsCdApiTestInfoMapper.xml | 8 ++++-- 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java new file mode 100644 index 0000000000..888401ea01 --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsCdApiTestInfoController.java @@ -0,0 +1,28 @@ +package io.choerodon.devops.api.controller.v1; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.hzero.core.util.Results; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.choerodon.devops.app.service.DevopsCdApiTestInfoService; + +@RestController +@RequestMapping("/v1/projects/{project_id}/api_test_info") +public class DevopsCdApiTestInfoController { + @Autowired + private DevopsCdApiTestInfoService devopsCdApiTestInfoService; + + @ApiOperation("查询测试套件是否关联流水线") + @GetMapping("/suites/{suite_id}/related_with_pipeline") + public ResponseEntity doesApiTestSuiteRelatedWithPipeline(@ApiParam(value = "项目Id", required = true) + @PathVariable(value = "project_id") Long projectId, + @PathVariable(value = "suite_id") Long suiteId) { + return Results.success(devopsCdApiTestInfoService.doesApiTestSuiteRelatedWithPipeline(suiteId)); + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java index b954f29d01..56d45c36d2 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsCdApiTestInfoService.java @@ -14,5 +14,6 @@ public interface DevopsCdApiTestInfoService { DevopsCdApiTestInfoDTO queryById(Long deployInfoId); + Boolean doesApiTestSuiteRelatedWithPipeline(Long suiteId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdApiTestInfoServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdApiTestInfoServiceImpl.java index 6b2a52c487..ac4661e93e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdApiTestInfoServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdApiTestInfoServiceImpl.java @@ -31,5 +31,10 @@ public void baseCreate(DevopsCdApiTestInfoDTO devopsCdApiTestInfoDTO) { public DevopsCdApiTestInfoDTO queryById(Long deployInfoId) { return devopsCdApiTestInfoMapper.selectByPrimaryKey(deployInfoId); } + + @Override + public Boolean doesApiTestSuiteRelatedWithPipeline(Long suiteId) { + return devopsCdApiTestInfoMapper.doesApiTestSuiteRelatedWithPipeline(suiteId); + } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsCdApiTestInfoMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsCdApiTestInfoMapper.java index 4f6612d527..c0ca4922c7 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsCdApiTestInfoMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsCdApiTestInfoMapper.java @@ -11,5 +11,6 @@ */ public interface DevopsCdApiTestInfoMapper extends BaseMapper { + Boolean doesApiTestSuiteRelatedWithPipeline(Long suiteId); } diff --git a/src/main/resources/mapper/DevopsCdApiTestInfoMapper.xml b/src/main/resources/mapper/DevopsCdApiTestInfoMapper.xml index ec1aeeea68..c28b7ead72 100644 --- a/src/main/resources/mapper/DevopsCdApiTestInfoMapper.xml +++ b/src/main/resources/mapper/DevopsCdApiTestInfoMapper.xml @@ -1,7 +1,11 @@ - - + From 954153d4419fc0160fb5eb1677a57bca27095d7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 23 Jun 2022 15:39:28 +0800 Subject: [PATCH 020/228] =?UTF-8?q?[FIX]=20=E8=B0=83=E6=95=B4values?= =?UTF-8?q?=E4=B8=BA=E7=A9=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceInstanceServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index 10daedcf90..d4662721e1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -1837,7 +1837,7 @@ private void checkNameInternal(String code, Long envId, boolean isFromPipeline) @Override public InstanceValueVO getReplaceResult(String versionValue, String deployValue) { String deployFileAfterProcessed = deleteLineStartWithPoundKey(deployValue); - if (versionValue.equals(deployValue) || deployFileAfterProcessed.equals("")) { + if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed)) { InstanceValueVO instanceValueVO = new InstanceValueVO(); instanceValueVO.setDeltaYaml(""); instanceValueVO.setYaml(versionValue); From 2c2957161b7ccb53859b1bbdc85f4bc1cbfc46ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 23 Jun 2022 16:25:51 +0800 Subject: [PATCH 021/228] [FIX] add log --- .../app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java index 83e56f1a47..cb1c653a6d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java @@ -241,6 +241,7 @@ private void addC7nHelmRelease(Map objectPath, Long envId, Long } catch (GitOpsExplainException ex) { throw ex; } catch (CommonException e) { + LOGGER.info("addC7nHelmRelease failed", e); throw new GitOpsExplainException(e.getMessage(), filePath, "", e.getParameters()); } }); From 599ebb76f5e11e98b9ff194986b757ecdd2a9d87 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 23 Jun 2022 16:38:39 +0800 Subject: [PATCH 022/228] =?UTF-8?q?[FIX]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceInstanceServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index d4662721e1..aac119c190 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -1837,7 +1837,7 @@ private void checkNameInternal(String code, Long envId, boolean isFromPipeline) @Override public InstanceValueVO getReplaceResult(String versionValue, String deployValue) { String deployFileAfterProcessed = deleteLineStartWithPoundKey(deployValue); - if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed)) { + if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed) || org.apache.commons.lang3.StringUtils.isEmpty(deployValue)) { InstanceValueVO instanceValueVO = new InstanceValueVO(); instanceValueVO.setDeltaYaml(""); instanceValueVO.setYaml(versionValue); From 2c6fec91faa27cad2140337977f595dbf3aaed3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 23 Jun 2022 16:53:30 +0800 Subject: [PATCH 023/228] =?UTF-8?q?[FIX]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/AppServiceInstanceServiceImpl.java | 5 ++++- .../service/impl/HandlerC7nReleaseRelationsServiceImpl.java | 1 - 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index aac119c190..c47afe5c33 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -1837,7 +1837,7 @@ private void checkNameInternal(String code, Long envId, boolean isFromPipeline) @Override public InstanceValueVO getReplaceResult(String versionValue, String deployValue) { String deployFileAfterProcessed = deleteLineStartWithPoundKey(deployValue); - if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed) || org.apache.commons.lang3.StringUtils.isEmpty(deployValue)) { + if (versionValue.equals(deployValue) || org.apache.commons.lang3.StringUtils.isEmpty(deployFileAfterProcessed)) { InstanceValueVO instanceValueVO = new InstanceValueVO(); instanceValueVO.setDeltaYaml(""); instanceValueVO.setYaml(versionValue); @@ -2897,6 +2897,9 @@ public static boolean isMiddleware(String source) { } private String deleteLineStartWithPoundKey(String value) { + if (!org.springframework.util.StringUtils.hasText(value)) { + return value; + } String[] strings = value.split("\n"); StringBuilder sb = new StringBuilder(); for (String string : strings) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java index cb1c653a6d..83e56f1a47 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java @@ -241,7 +241,6 @@ private void addC7nHelmRelease(Map objectPath, Long envId, Long } catch (GitOpsExplainException ex) { throw ex; } catch (CommonException e) { - LOGGER.info("addC7nHelmRelease failed", e); throw new GitOpsExplainException(e.getMessage(), filePath, "", e.getParameters()); } }); From 1232208bc02cfbd572acd36a6e4e03f5faf470e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 23 Jun 2022 19:33:32 +0800 Subject: [PATCH 024/228] =?UTF-8?q?[FIX]=20=E9=80=BB=E8=BE=91=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/eventhandler/DemoEnvSetupSagaHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java index c0f9392e70..bcbccb0187 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/DemoEnvSetupSagaHandler.java @@ -61,6 +61,7 @@ private String handleCreateGroupsForDemoProject(String payload) { gitlabGroupPayload.setOrganizationCode(registerInfo.getOrganization().getCode()); gitlabGroupPayload.setOrganizationName(registerInfo.getOrganization().getName()); gitlabGroupPayload.setProjectCode(registerInfo.getProject().getCode()); + gitlabGroupPayload.setDevopsComponentCode(registerInfo.getProject().getCode()); gitlabGroupPayload.setProjectId(registerInfo.getProject().getId()); gitlabGroupPayload.setProjectName(registerInfo.getProject().getName()); gitlabGroupPayload.setUserId(registerInfo.getUser().getId()); From 3f24aedcf32eb672f4a0b77f3efec9202894a7bb Mon Sep 17 00:00:00 2001 From: lihao <310103270@qq.com> Date: Fri, 24 Jun 2022 10:21:43 +0800 Subject: [PATCH 025/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E9=A1=B9=E5=88=86=E6=94=AF=E5=85=B3=E8=81=94=E5=85=B3?= =?UTF-8?q?=E7=B3=BB=E5=A4=8D=E5=88=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/DevopsBranchController.java | 38 +++++++++++++++++++ .../devops/app/eventhandler/SagaHandler.java | 12 ------ .../constants/SagaTaskCodeConstants.java | 5 --- .../payload/CloneIssuePayload.java | 28 -------------- .../app/service/DevopsBranchService.java | 17 +++++++++ .../devops/app/service/DevopsGitService.java | 7 ---- .../service/impl/DevopsBranchServiceImpl.java | 17 ++++++++- .../service/impl/DevopsGitServiceImpl.java | 10 ----- .../infra/mapper/DevopsIssueRelMapper.java | 4 ++ .../resources/mapper/DevopsIssueRelMapper.xml | 7 ++++ 10 files changed, 81 insertions(+), 64 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java delete mode 100644 src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java new file mode 100644 index 0000000000..12e72e2e62 --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsBranchController.java @@ -0,0 +1,38 @@ +package io.choerodon.devops.api.controller.v1; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.hzero.core.util.Results; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import io.choerodon.devops.app.service.DevopsBranchService; + +@RestController +@RequestMapping("/v1/projects/{project_id}/branch") +public class DevopsBranchController { + + @Autowired + private DevopsBranchService devopsBranchService; + + @GetMapping("/issue/check_rel_exist") + public ResponseEntity checkIssueBranchRelExist(@ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("issueId") + @RequestParam("issue_id") Long issueId) { + return Results.success(devopsBranchService.checkIssueBranchRelExist(projectId, issueId)); + } + + @ApiOperation("复制工作项与分支关联关系") + @PostMapping("/issue/copy_rel") + public ResponseEntity copyIssueBranchRel(@ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("oldIssueId") + @RequestParam("old_issue_id") Long oldIssueId, + @ApiParam("newIssueId") + @RequestParam("new_issue_id") Long newIssueId) { + devopsBranchService.copyIssueBranchRel(projectId, oldIssueId, newIssueId); + return Results.success(); + } +} diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index a41339ba6e..de84af8841 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -26,7 +26,6 @@ import io.choerodon.devops.api.vo.iam.DeleteAdminVO; import io.choerodon.devops.app.eventhandler.constants.SagaTaskCodeConstants; import io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants; -import io.choerodon.devops.app.eventhandler.payload.CloneIssuePayload; import io.choerodon.devops.app.eventhandler.payload.CreateAndUpdateUserEventPayload; import io.choerodon.devops.app.eventhandler.payload.GitlabGroupPayload; import io.choerodon.devops.app.eventhandler.payload.ProjectPayload; @@ -37,7 +36,6 @@ import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.UserAttrMapper; import io.choerodon.devops.infra.util.ArrayUtil; -import io.choerodon.devops.infra.util.JsonHelper; import io.choerodon.devops.infra.util.LogUtil; import io.choerodon.devops.infra.util.TypeUtil; @@ -409,16 +407,6 @@ public String deleteAppTemplate(String payload) { return payload; } - @SagaTask(code = SagaTaskCodeConstants.DEVOPS_CLONE_ISSUE, - description = "复制工作项与分支关联关系", - sagaCode = SagaTaskCodeConstants.DEVOPS_CLONE_ISSUE, - maxRetryCount = 5, seq = 10) - public String devopsCloneIssueBranchRelation(String payload) { - CloneIssuePayload cloneIssuePayload = JsonHelper.unmarshalByJackson(payload, CloneIssuePayload.class); - devopsGitService.cloneBranchIssueRelation(cloneIssuePayload.getProjectId(), cloneIssuePayload.getNewIssueIdMap()); - return payload; - } - /** * devops 同步项目类型的处理 * diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java index 16ea0b4cdf..6f812b1a53 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/constants/SagaTaskCodeConstants.java @@ -104,11 +104,6 @@ public class SagaTaskCodeConstants { */ public static final String DEVOPS_CREATE_BRANCH = "devopsCreateBranch"; - /** - * 复制工作项与分支关联关系 - */ - public static final String DEVOPS_CLONE_ISSUE = "clone_issue"; - /** * devops创建实例 */ diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java deleted file mode 100644 index 9cffc4a622..0000000000 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/CloneIssuePayload.java +++ /dev/null @@ -1,28 +0,0 @@ -package io.choerodon.devops.app.eventhandler.payload; - -import java.util.Map; - -import io.swagger.annotations.ApiModelProperty; - -public class CloneIssuePayload { - @ApiModelProperty("项目id") - private Long projectId; - @ApiModelProperty("key:newIssue value:oldIssueId") - private Map newIssueIdMap; - - public Long getProjectId() { - return projectId; - } - - public void setProjectId(Long projectId) { - this.projectId = projectId; - } - - public Map getNewIssueIdMap() { - return newIssueIdMap; - } - - public void setNewIssueIdMap(Map newIssueIdMap) { - this.newIssueIdMap = newIssueIdMap; - } -} diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java b/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java index 4ef1a822f2..399288fa10 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsBranchService.java @@ -41,4 +41,21 @@ public interface DevopsBranchService { List listDeletedBranchIds(Set collect); List listByIds(List branchIds); + + /** + * 查询工作项是否与分支有关联关系 + * + * @param projectId + * @param issueId + * @return + */ + Boolean checkIssueBranchRelExist(Long projectId, Long issueId); + + /** + * 复制工作项与分支关联关系 + * @param projectId + * @param oldIssueId + * @param newIssueId + */ + void copyIssueBranchRel(Long projectId, Long oldIssueId, Long newIssueId); } \ No newline at end of file diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java index 9ba42837a9..6f998e5971 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java @@ -102,13 +102,6 @@ public interface DevopsGitService { */ void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpdateVO devopsBranchUpdateVO, boolean onlyInsert); - /** - * 克隆分支与工作项关联关系 - * @param projectId - * @param issueIdMap - */ - void cloneBranchIssueRelation(Long projectId, Map issueIdMap); - /** * 删除分支 * diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsBranchServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsBranchServiceImpl.java index a615180344..073ddf36f0 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsBranchServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsBranchServiceImpl.java @@ -224,11 +224,11 @@ public List listByCommitIs(List commitIds) { @Override public List listDeletedBranchIds(Set branchIds) { - if (CollectionUtils.isEmpty(branchIds)){ + if (CollectionUtils.isEmpty(branchIds)) { return new ArrayList<>(); } List existBranchIds = devopsBranchMapper.listExistBranchIds(branchIds); - return branchIds.stream().filter(id->!existBranchIds.contains(id)).collect(Collectors.toList()); + return branchIds.stream().filter(id -> !existBranchIds.contains(id)).collect(Collectors.toList()); } @Override @@ -238,4 +238,17 @@ public List listByIds(List branchIds) { } return new ArrayList<>(); } + + @Override + public Boolean checkIssueBranchRelExist(Long projectId, Long issueId) { + return devopsIssueRelMapper.checkIssueBranchRelExist(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), projectId, issueId); + } + + @Override + public void copyIssueBranchRel(Long projectId, Long oldIssueId, Long newIssueId) { + Set devopsIssueRelDTOS = devopsIssueRelService.listRelationByIssueIdAndObjectType(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), oldIssueId); + devopsIssueRelDTOS.forEach(devopsIssueRelDTO -> { + devopsIssueRelService.addRelation(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getProjectId(), devopsIssueRelDTO.getAppServiceCode(), newIssueId); + }); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index d410556abc..ccc1ba0b0f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -474,16 +474,6 @@ public void updateBranchIssue(Long projectId, Long appServiceId, DevopsBranchUpd devopsBranchService.updateBranchIssue(projectId, appServiceDTO, ConvertUtils.convertObject(devopsBranchUpdateVO, DevopsBranchDTO.class), onyInsert); } - @Override - public void cloneBranchIssueRelation(Long projectId, Map issueIdMap) { - issueIdMap.forEach((newIssueId, oldIssueId) -> { - Set devopsIssueRelDTOS = devopsIssueRelService.listRelationByIssueIdAndObjectType(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), oldIssueId); - devopsIssueRelDTOS.forEach(devopsIssueRelDTO -> { - devopsIssueRelService.addRelation(DevopsIssueRelObjectTypeEnum.BRANCH.getValue(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getBranchId(), devopsIssueRelDTO.getProjectId(), devopsIssueRelDTO.getAppServiceCode(), newIssueId); - }); - }); - } - @Override public void deleteBranch(Long projectId, Long appServiceId, String branchName) { AppServiceDTO appServiceDTO = appServiceService.baseQuery(appServiceId); diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java index 184e70dc1f..dc149107db 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsIssueRelMapper.java @@ -40,4 +40,8 @@ public interface DevopsIssueRelMapper extends BaseMapper { List listCommitRelationByBranchId(@Param("branchId") Long branchId); Set listRelationByIssueIdAndObjectType(@Param("object") String object, @Param("issueId") Long issueId); + + Boolean checkIssueBranchRelExist(@Param("value") String value, + @Param("projectId") Long projectId, + @Param("issueId") Long issueId); } diff --git a/src/main/resources/mapper/DevopsIssueRelMapper.xml b/src/main/resources/mapper/DevopsIssueRelMapper.xml index bd0e8ad11e..8ce09b3c96 100644 --- a/src/main/resources/mapper/DevopsIssueRelMapper.xml +++ b/src/main/resources/mapper/DevopsIssueRelMapper.xml @@ -131,4 +131,11 @@ WHERE dir.issue_id = #{issueId} AND dir.object = #{object} + + \ No newline at end of file From fb33f5fe097d373017fc16f9c90448ff61496985 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 27 Jun 2022 11:02:45 +0800 Subject: [PATCH 026/228] [FIX] bug fix --- .../devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java index e5982bc559..dd437b98bc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java @@ -279,7 +279,7 @@ private void newCommit(Integer gitlabProjectId) { private void mergeBranch(Integer gitlabProjectId) { try { // 创建merge request - MergeRequestDTO mergeRequest = gitlabServiceClientOperator.createMergeRequest(gitlabProjectId, demoDataVO.getBranchInfo().getBranchName(), "master", "a new merge request", "[ADD] add instant push", gitlabUserId); + MergeRequestDTO mergeRequest = gitlabServiceClientOperator.createMergeRequest(gitlabProjectId, demoDataVO.getBranchInfo().getBranchName(), demoDataVO.getBranchInfo().getOriginBranch(), "a new merge request", "[ADD] add instant push", gitlabUserId); // 确认merge request gitlabServiceClientOperator.acceptMergeRequest(gitlabProjectId, mergeRequest.getId(), "", Boolean.FALSE, Boolean.TRUE, gitlabUserId); From 1f7b0c56b36112e2de6e64d1f79310c5400720e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 28 Jun 2022 17:57:57 +0800 Subject: [PATCH 027/228] =?UTF-8?q?[FIX]=20=E8=A7=A3=E5=86=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=BC=82=E5=91=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/AppServiceController.java | 4 +- .../v1/AppServiceInstanceController.java | 1 - .../v1/AppServiceVersionController.java | 5 +- .../controller/v1/CiCdPipelineController.java | 4 +- .../api/controller/v1/CiController.java | 2 +- .../agent/AgentPolarisSocketHandler.java | 51 ------------------- .../agent/AgentPolarisSocketInterceptor.java | 39 -------------- .../service/CiTemplateNodeJsBuildService.java | 8 --- .../impl/AppExceptionRecordServiceImpl.java | 2 +- .../impl/AppServiceInstanceServiceImpl.java | 2 +- .../service/impl/AppServiceServiceImpl.java | 15 +++--- .../CheckGitlabAccessLevelServiceImpl.java | 2 +- .../impl/CiCdPipelineRecordServiceImpl.java | 14 ----- .../impl/CiPipelineMavenServiceImpl.java | 10 ++-- .../impl/CiTemplateJobGroupServiceImpl.java | 3 +- .../CiTemplateNodeJsBuildServiceImpl.java | 16 ------ .../infra/dto/CiDockerAuthConfigDTO.java | 2 - .../devops/infra/dto/CiPipelineImageDTO.java | 3 -- .../operator/BaseServiceClientOperator.java | 10 ++-- .../devops/infra/util/AppServiceUtils.java | 3 +- 20 files changed, 27 insertions(+), 169 deletions(-) delete mode 100644 src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java delete mode 100644 src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java delete mode 100644 src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java delete mode 100644 src/main/java/io/choerodon/devops/app/service/impl/CiTemplateNodeJsBuildServiceImpl.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java index 8c7f84839a..c3e5b75113 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java @@ -73,9 +73,7 @@ public ResponseEntity creatstatefulSetWorkLoade( @PathVariable(value = "project_id") Long projectId, @ApiParam(value = "服务信息", required = true) @RequestBody @Validated AppServiceReqVO appServiceReqVO) { - return Optional.ofNullable(applicationServiceService.create(projectId, appServiceReqVO)) - .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) - .orElseThrow(() -> new CommonException("error.app.service.create")); + return ResponseEntity.ok(applicationServiceService.create(projectId, appServiceReqVO)); } diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java index 42aae93378..fb336aa316 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java @@ -981,7 +981,6 @@ public ResponseEntity> batchDeployment( return new ResponseEntity<>(appServiceInstanceService.batchDeployment(projectId, appServiceDeployVOs), HttpStatus.OK); } - @Deprecated @ApiOperation("查询引用了实例作为替换对象的流水线信息") @Permission(level = ResourceLevel.ORGANIZATION) @GetMapping("/{instance_id}/pipeline_reference") diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java index ccec2cfba8..fcd71814d0 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java @@ -315,10 +315,7 @@ public ResponseEntity> pageShareVersionByappServic @SortDefault(value = "id", direction = Sort.Direction.DESC) PageRequest pageable, @ApiParam(value = "查询参数") @RequestParam(value = "version", required = false) String version) { - return Optional.ofNullable( - appServiceVersionService.pageShareVersionByAppId(appServiceId, pageable, version)) - .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) - .orElseThrow(() -> new CommonException("error.remote.application.versions.get")); + return ResponseEntity.ok(appServiceVersionService.pageShareVersionByAppId(appServiceId, pageable, version)); } @Permission(level = ResourceLevel.ORGANIZATION) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java index 7d0fdd036a..38f3cfe243 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiCdPipelineController.java @@ -247,9 +247,7 @@ public ResponseEntity pipelineExecuteTime( @RequestParam(value = "start_time") Date startTime, @ApiParam(value = "end_time") @RequestParam(value = "end_time") Date endTime) { - return Optional.ofNullable(devopsCiPipelineService.pipelineExecuteTime(pipelineIds, startTime, endTime)) - .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) - .orElseThrow(() -> new CommonException("error.pipeline.execute.time.get")); + return ResponseEntity.ok(devopsCiPipelineService.pipelineExecuteTime(pipelineIds, startTime, endTime)); } @Permission(level = ResourceLevel.ORGANIZATION, diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java index a40a5ed6d9..f603d51495 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java @@ -180,7 +180,7 @@ public ResponseEntity saveSonarInfo( @ApiOperation(value = "判断平台是否有配置sonarqube") @GetMapping("/has_default_sonar") public ResponseEntity hasDefaultSonarqubeConfig() { - return ResponseEntity.ok(!StringUtils.isEmpty(sonarqubeUrl)); + return ResponseEntity.ok(StringUtils.hasText(sonarqubeUrl)); } @Permission(level = ResourceLevel.ORGANIZATION, permissionWithin = true) diff --git a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java b/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java deleted file mode 100644 index 13bedab92e..0000000000 --- a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketHandler.java +++ /dev/null @@ -1,51 +0,0 @@ -package io.choerodon.devops.api.ws.polaris.agent; - -import static io.choerodon.devops.infra.constant.DevOpsWebSocketConstants.AGENT_POLARIS; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.TextMessage; -import org.springframework.web.socket.WebSocketSession; - -import io.choerodon.devops.api.vo.polaris.PolarisResponsePayloadVO; -import io.choerodon.devops.api.ws.AbstractSocketHandler; -import io.choerodon.devops.api.ws.WebSocketTool; -import io.choerodon.devops.app.service.PolarisScanningService; -import io.choerodon.devops.infra.util.JsonHelper; - -/** - * // TODO to be delete at 0.25 - * polaris结果的返回不再通过websocket,而是http,这个逻辑不再使用了 - * - * @author zmf - * @since 20-5-9 - */ -@Deprecated -@Component -public class AgentPolarisSocketHandler extends AbstractSocketHandler { - private static final Logger LOGGER = LoggerFactory.getLogger(AgentPolarisSocketHandler.class); - - @Autowired - private PolarisScanningService polarisScanningService; - - @Override - public String processor() { - return AGENT_POLARIS; - } - - @Override - public void handleTextMessage(WebSocketSession session, TextMessage message) { - LOGGER.info("Polaris: received message from agent..."); - - // 获取集群id - Long clusterId = WebSocketTool.getClusterId(session); - LOGGER.info("Polaris: the cluster id is {}", clusterId); - - - polarisScanningService.handleAgentPolarisMessage(JsonHelper.unmarshalByJackson(message.getPayload(), PolarisResponsePayloadVO.class)); - - WebSocketTool.closeSessionQuietly(session); - } -} diff --git a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java b/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java deleted file mode 100644 index 6a2247e06e..0000000000 --- a/src/main/java/io/choerodon/devops/api/ws/polaris/agent/AgentPolarisSocketInterceptor.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.choerodon.devops.api.ws.polaris.agent; - -import static io.choerodon.devops.infra.constant.DevOpsWebSocketConstants.AGENT_POLARIS; - -import java.util.Map; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.server.ServerHttpRequest; -import org.springframework.http.server.ServerHttpResponse; -import org.springframework.http.server.ServletServerHttpRequest; -import org.springframework.stereotype.Component; -import org.springframework.web.socket.WebSocketHandler; - -import io.choerodon.devops.api.ws.AbstractSocketInterceptor; -import io.choerodon.devops.infra.handler.ClusterConnectionHandler; - -/** - * // TODO to be delete at 0.25 - * polaris结果的返回不再通过websocket,而是http,这个逻辑不再使用了 - * - * @author zmf - * @since 20-5-9 - */ -@Deprecated -@Component -public class AgentPolarisSocketInterceptor extends AbstractSocketInterceptor { - @Autowired - private ClusterConnectionHandler clusterConnectionHandler; - - @Override - public String processor() { - return AGENT_POLARIS; - } - - @Override - public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) { - return clusterConnectionHandler.validConnectionParameter(((ServletServerHttpRequest) request).getServletRequest()); - } -} diff --git a/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java b/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java deleted file mode 100644 index 32959454aa..0000000000 --- a/src/main/java/io/choerodon/devops/app/service/CiTemplateNodeJsBuildService.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.choerodon.devops.app.service; - -/** - * Created by wangxiang on 2021/12/20 - */ -public interface CiTemplateNodeJsBuildService { - void queryByStepId(Long id); -} diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java index 3e909335a5..f7704a617a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java @@ -35,7 +35,7 @@ public class AppExceptionRecordServiceImpl implements AppExceptionRecordService private static final String ERROR_UPDATE_EXCEPTION_RECORD = "error.update.exception.record"; private static final String ERROR_SAVE_EXCEPTION_RECORD = "error.save.exception.record"; - private static JSON JSON = new JSON(); + private static final JSON JSON = new JSON(); @Autowired private AppExceptionRecordMapper appExceptionRecordMapper; @Autowired diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index c47afe5c33..507fe056a9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -1712,7 +1712,7 @@ public void deleteInstance(Long projectId, Long instanceId, Boolean deletePromet TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), RELEASE_PREFIX + appServiceInstanceDTO.getCode() + YAML_SUFFIX, "DELETE FILE", - TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master"); + TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), MASTER); } return; } else { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 1f13cec4c7..2a76557ae7 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -1039,7 +1039,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer gitlabServiceClientOperator.updateProjectCiConfigPath(gitlabProjectDO.getId(), TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), GitOpsConstants.TEMP_CI_CONFIG_PATH); if (devOpsAppServiceImportPayload.getTemplate() != null && devOpsAppServiceImportPayload.getTemplate() - && !StringUtils.isEmpty(devOpsAppServiceImportPayload.getRepositoryUrl())) { + && StringUtils.hasText(devOpsAppServiceImportPayload.getRepositoryUrl())) { String[] tempUrl = devOpsAppServiceImportPayload.getRepositoryUrl().split(TEMP_MODAL); if (tempUrl.length < 2) { throw new CommonException("error.temp.git.url"); @@ -1100,7 +1100,7 @@ public void operationAppServiceImport(DevOpsAppImportServicePayload devOpsAppSer try { gitUtil.commitAndPushForMaster(git, appServiceDTO.getRepoUrl(), "init app from template", accessToken); } catch (Exception e) { - throw e; + throw new CommonException("init app from template failed", e); } finally { releaseResources(applicationWorkDir, git); } @@ -3421,7 +3421,7 @@ public void createAppServiceForTransfer(AppServiceTransferVO appServiceTransferV // 1. 迁移gitlab代码库 if (!oldProjectDTO.getNamespace().getId().equals(appServiceTransferVO.getGitlabGroupId())) { - GitlabProjectDTO gitlabProjectDTO = gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(), + gitlabServiceClientOperator.transferProject(appServiceTransferVO.getGitlabProjectId(), appServiceTransferVO.getGitlabGroupId(), userId); } @@ -3847,7 +3847,9 @@ public Boolean testConnection(AppExternalConfigDTO appExternalConfigDTO) { // 校验账户权限 appExternalConfigDTO.setRepositoryUrl(appExternalConfigDTO.getRepositoryUrl().replace(".git", "")); GitlabProjectDTO gitlabProjectDTO = gitlabServiceClientOperator.queryExternalProjectByCode(appExternalConfigDTO); - LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>gitlabProjectDTO is {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<", JsonHelper.marshalByJackson(gitlabProjectDTO)); + if (LOGGER.isInfoEnabled()) { + LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>gitlabProjectDTO is {}<<<<<<<<<<<<<<<<<<<<<<<<<<<<", JsonHelper.marshalByJackson(gitlabProjectDTO)); + } if (gitlabProjectDTO == null || gitlabProjectDTO.getId() == null) { flag = false; } @@ -3866,10 +3868,9 @@ public Set listExternalAppIdByProjectId(Long projectId) { @Override public List queryAppByProjectIds(List projectIds) { if (CollectionUtils.isEmpty(projectIds)) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } - List appServiceDTOS = appServiceMapper.listByActiveAndProjects(projectIds); - return appServiceDTOS; + return appServiceMapper.listByActiveAndProjects(projectIds); } @Override diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java index 84c813eb47..bceb71d78e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CheckGitlabAccessLevelServiceImpl.java @@ -30,7 +30,7 @@ */ @Service public class CheckGitlabAccessLevelServiceImpl implements CheckGitlabAccessLevelService { - private final static String EMPTY_GITLAB_ACCESS_LEVEL = "error.empty.gitlab.access.level"; + private static final String EMPTY_GITLAB_ACCESS_LEVEL = "error.empty.gitlab.access.level"; @Autowired private HrdsCodeRepoClientOperator hrdsCodeRepoClientOperator; @Autowired diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java index f4d8186a4c..13c0f67b99 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiCdPipelineRecordServiceImpl.java @@ -178,20 +178,6 @@ public CiCdPipelineRecordVO queryPipelineRecordDetails(Long projectId, Long reco return ciCdPipelineRecordVO; } - private boolean isFirstRecord(DevopsPipelineRecordRelVO devopsPipelineRecordRelVO) { - //如果为流水线的下的第一条记录则返回为null - Long pipelineId = devopsPipelineRecordRelVO.getPipelineId(); - DevopsPipelineRecordRelDTO recordRelDTO = new DevopsPipelineRecordRelDTO(); - recordRelDTO.setPipelineId(pipelineId); - List select = devopsPipelineRecordRelMapper.select(recordRelDTO); - if (select.size() == 1) { - return true; - } - List devopsPipelineRecordRelVOS = ConvertUtils.convertList(select, this::relDtoToRelVO); - CiCdPipelineUtils.recordListSort(devopsPipelineRecordRelVOS); - return devopsPipelineRecordRelVO.getId().compareTo(devopsPipelineRecordRelVOS.get(devopsPipelineRecordRelVOS.size() - 1).getId()) == 0; - } - private void fillPipelineVO(String userName, List stageRecordVOS, Date executeDate, CiCdPipelineVO ciCdPipelineVO, CiCdPipelineRecordVO ciCdPipelineRecordVO) { ciCdPipelineVO.setCreateUserName(userName); if (!CollectionUtils.isEmpty(stageRecordVOS)) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java index 1ec35a0053..eacaf4c66a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java @@ -55,10 +55,10 @@ @Service public class CiPipelineMavenServiceImpl implements CiPipelineMavenService { - private final Logger logger = LoggerFactory.getLogger(getClass()); + private static final Logger logger = LoggerFactory.getLogger(CiPipelineMavenServiceImpl.class); - private final String ID = "id"; - private final String OBJECT_VERSION_NUMBER = "objectVersionNumber"; + private static final String ID = "id"; + private static final String OBJECT_VERSION_NUMBER = "objectVersionNumber"; @Autowired private CiPipelineMavenMapper ciPipelineMavenMapper; @@ -212,7 +212,7 @@ private String getJarSnapshotTimestamp(String nexusUrl, String repositoryName, S return parsedVersion == null ? ciPipelineMavenDTO.getVersion() : parsedVersion; } catch (Exception ex) { if (logger.isDebugEnabled()) { - logger.debug("Ex occurred when parse JarSnapshotTimestamp for {}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion()); + logger.debug("Ex occurred when parse JarSnapshotTimestamp for {}:{}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion()); logger.debug("The ex is:", ex); } return ciPipelineMavenDTO.getVersion(); @@ -257,7 +257,7 @@ public String getCustomJarSnapshotTimestamp(String mavenRepoUrl, String userName } catch (Exception ex) { if (logger.isInfoEnabled()) { - logger.info("Ex occurred when parse JarSnapshotTimestamp for {}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion()); + logger.info("Ex occurred when parse JarSnapshotTimestamp for {}:{}:{}", ciPipelineMavenDTO.getGroupId(), ciPipelineMavenDTO.getArtifactId(), ciPipelineMavenDTO.getVersion()); logger.info("The ex is:", ex); } return ciPipelineMavenDTO.getVersion(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java index e27260e1d4..295995962d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateJobGroupServiceImpl.java @@ -47,8 +47,7 @@ public List listAllGroups() { @Override public List listNonEmptyGroups() { List ciTemplateJobGroupDTOS = ciTemplateJobGroupMapper.listNonEmptyGroups(); - List templateJobGroupDTOS = sortedTemplateJob(ciTemplateJobGroupDTOS); - return templateJobGroupDTOS; + return sortedTemplateJob(ciTemplateJobGroupDTOS); } private List sortedTemplateJob(List ciTemplateJobGroupDTOS) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateNodeJsBuildServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateNodeJsBuildServiceImpl.java deleted file mode 100644 index 2aeca4d3e1..0000000000 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiTemplateNodeJsBuildServiceImpl.java +++ /dev/null @@ -1,16 +0,0 @@ -package io.choerodon.devops.app.service.impl; - -import org.springframework.stereotype.Service; - -import io.choerodon.devops.app.service.CiTemplateNodeJsBuildService; - -/** - * Created by wangxiang on 2021/12/20 - */ -@Service -public class CiTemplateNodeJsBuildServiceImpl implements CiTemplateNodeJsBuildService { - @Override - public void queryByStepId(Long id) { - - } -} diff --git a/src/main/java/io/choerodon/devops/infra/dto/CiDockerAuthConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/CiDockerAuthConfigDTO.java index 2c30d811f1..6ae1dfd15f 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/CiDockerAuthConfigDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/CiDockerAuthConfigDTO.java @@ -30,8 +30,6 @@ public class CiDockerAuthConfigDTO extends AuditDomain { public static final String FIELD_ID = "id"; public static final String FIELD_DEVOPS_PIPELINE_ID = "devopsPipelineId"; public static final String FIELD_DOMAIN = "domain"; - public static final String FIELD_USERNAME = "username"; - public static final String FIELD_PASSWORD = "password"; private static final long serialVersionUID = 989629751337871365L; @Id @GeneratedValue diff --git a/src/main/java/io/choerodon/devops/infra/dto/CiPipelineImageDTO.java b/src/main/java/io/choerodon/devops/infra/dto/CiPipelineImageDTO.java index 87289464f0..743de1c335 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/CiPipelineImageDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/CiPipelineImageDTO.java @@ -33,9 +33,6 @@ public class CiPipelineImageDTO extends AuditDomain { private Long harborRepoId; private String repoType; - public CiPipelineImageDTO() { - } - public Long getAppServiceId() { return appServiceId; } diff --git a/src/main/java/io/choerodon/devops/infra/feign/operator/BaseServiceClientOperator.java b/src/main/java/io/choerodon/devops/infra/feign/operator/BaseServiceClientOperator.java index 877d8a59ec..96be6d3a77 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/operator/BaseServiceClientOperator.java +++ b/src/main/java/io/choerodon/devops/infra/feign/operator/BaseServiceClientOperator.java @@ -71,8 +71,7 @@ public List querySaasTenants(List saasLevels) { if (responseEntity == null || CollectionUtils.isEmpty(responseEntity.getBody())) { return Collections.emptyList(); } else { - List externalTenantVOS = responseEntity.getBody(); - return externalTenantVOS; + return responseEntity.getBody(); } } @@ -81,8 +80,7 @@ public List queryRegisterTenant() { if (responseEntity == null || CollectionUtils.isEmpty(responseEntity.getBody())) { return Collections.emptyList(); } else { - List externalTenantVOS = responseEntity.getBody(); - return externalTenantVOS; + return responseEntity.getBody(); } } @@ -397,7 +395,7 @@ public List getAllMember(Long projectId, String params) { Map searchParamMap; List paramList; // 处理搜索参数 - if (!StringUtils.isEmpty(params)) { + if (StringUtils.hasText(params)) { Map maps = gson.fromJson(params, Map.class); searchParamMap = TypeUtil.cast(maps.get(TypeUtil.SEARCH_PARAM)); paramList = TypeUtil.cast(maps.get(TypeUtil.PARAMS)); @@ -700,7 +698,7 @@ public ExternalTenantVO queryTenantByIdWithExternalInfo(Long organizationId) { public List listCustomGitlabOwnerLabelUser(Long projectId, String roleLabel) { ResponseEntity> responseEntity = baseServiceClient.listProjectUsersByProjectIdAndRoleLabel(projectId, roleLabel); if (responseEntity == null || responseEntity.getBody() == null) { - return Collections.EMPTY_LIST; + return Collections.emptyList(); } else { return responseEntity.getBody(); } diff --git a/src/main/java/io/choerodon/devops/infra/util/AppServiceUtils.java b/src/main/java/io/choerodon/devops/infra/util/AppServiceUtils.java index e6c151b9ef..99c17669ae 100644 --- a/src/main/java/io/choerodon/devops/infra/util/AppServiceUtils.java +++ b/src/main/java/io/choerodon/devops/infra/util/AppServiceUtils.java @@ -1,6 +1,7 @@ package io.choerodon.devops.infra.util; import java.util.Objects; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; @@ -104,7 +105,7 @@ public Boolean checkEnableCreateAppSvcWithSize(Long organizationId, Long project } public void checkCodeExist(String appCode) { - if (StringUtils.isEmpty(appCode)) { + if (!StringUtils.hasText(appCode)) { throw new CommonException("error.code.is.null"); } } From 1108c7f8034c877ec660f436d34bc1c4280a1967 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 29 Jun 2022 14:42:21 +0800 Subject: [PATCH 028/228] =?UTF-8?q?[FIX]=20=E4=BB=A3=E7=A0=81=E8=B0=83?= =?UTF-8?q?=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/CiPipelineMavenServiceImpl.java | 6 ------ .../app/service/impl/DevopsDemoEnvInitServiceImpl.java | 9 ++++----- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java index eacaf4c66a..99e115b1e2 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java @@ -14,13 +14,11 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; -import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import retrofit2.Response; @@ -78,10 +76,6 @@ public class CiPipelineMavenServiceImpl implements CiPipelineMavenService { @Autowired private BaseServiceClientOperator baseServiceClientOperator; - @Autowired - @Qualifier(value = "restTemplateForIp") - private RestTemplate restTemplateForIp; - @Transactional(rollbackFor = Exception.class) @Override public void createOrUpdate(CiPipelineMavenDTO ciPipelineMavenDTO) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java index dd437b98bc..5ee448f897 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java @@ -31,10 +31,7 @@ import io.choerodon.devops.infra.constant.GitOpsConstants; import io.choerodon.devops.infra.constant.MiscConstants; import io.choerodon.devops.infra.dto.*; -import io.choerodon.devops.infra.dto.gitlab.BranchDTO; -import io.choerodon.devops.infra.dto.gitlab.CommitDTO; -import io.choerodon.devops.infra.dto.gitlab.MemberDTO; -import io.choerodon.devops.infra.dto.gitlab.MergeRequestDTO; +import io.choerodon.devops.infra.dto.gitlab.*; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.enums.AccessLevel; @@ -133,10 +130,12 @@ public void initialDemoEnv(OrganizationRegisterEventPayload organizationRegister // 2. 创建分支 BranchDTO branchDO = gitlabServiceClientOperator.queryBranch(gitlabProjectId, demoDataVO.getBranchInfo().getBranchName()); if (branchDO.getName() == null) { + GitlabProjectDTO gitlabProjectDO = gitlabServiceClientOperator + .queryProjectById(gitlabProjectId); gitlabServiceClientOperator.createBranch( gitlabProjectId, demoDataVO.getBranchInfo().getBranchName(), - demoDataVO.getBranchInfo().getOriginBranch(), + gitlabProjectDO.getDefaultBranch(), gitlabUserId); } From f6624d2295c1f4008cd8aa029eb08f419a719008 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Fri, 1 Jul 2022 16:55:59 +0800 Subject: [PATCH 029/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9gitlab=20user?= =?UTF-8?q?name=20=E9=95=BF=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../script/db/groovy/devops_service/devops_user.groovy | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/resources/script/db/groovy/devops_service/devops_user.groovy b/src/main/resources/script/db/groovy/devops_service/devops_user.groovy index d6e1a07abf..1752c4dea8 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_user.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_user.groovy @@ -46,4 +46,8 @@ databaseChangeLog(logicalFilePath: 'dba/devops_user.groovy') { column(name: "gitlab_user_name") } } + changeSet(author: 'scp', id: '2022-07-06-modify-column') { + modifyDataType(tableName: 'devops_user', columnName: 'gitlab_user_name', newDataType: 'VARCHAR(100)') + } + } \ No newline at end of file From 38272dab3668e4167eca793d23ece0636cd84e6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 4 Jul 2022 17:36:02 +0800 Subject: [PATCH 030/228] Update pom.xml --- pom.xml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d8c946ab2a..072ecfcb5b 100644 --- a/pom.xml +++ b/pom.xml @@ -11,7 +11,7 @@ io.choerodon choerodon-framework-parent - 2.0.1.RELEASE + 2.1.0.RELEASE @@ -21,6 +21,11 @@ + + io.choerodon + choerodon-starter-core + + org.hzero.boot From 83ffd94e7bab89411eaa8be7a9e8d21164397586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 7 Jul 2022 11:25:00 +0800 Subject: [PATCH 031/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E6=94=B9=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E5=88=A0=E9=99=A4=E9=AA=8C=E8=AF=81=E7=A0=81=E5=8F=91?= =?UTF-8?q?=E9=80=81=E6=96=B9=E5=BC=8F=E4=B8=BA=E5=BC=82=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsNotificationServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsNotificationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsNotificationServiceImpl.java index 41b2b83972..dcdf32858d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsNotificationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsNotificationServiceImpl.java @@ -228,7 +228,7 @@ public void sendMessage(Long projectId, Long envId, Long notificationId, Long ob try { //根据不同的通知方式发送验证码 - messageClient.sendMessage(messageSender); + messageClient.async().sendMessage(messageSender); } catch (Exception e) { redisTemplate.delete(resendKey); throw new CommonException("error.msg.send.failed"); From e0ab30f578fe53ab5bb7cdafcd535931c2d0544a Mon Sep 17 00:00:00 2001 From: isaac <273070111@qq.com> Date: Thu, 7 Jul 2022 16:44:33 +0800 Subject: [PATCH 032/228] =?UTF-8?q?[FIX]=E4=BF=AE=E6=94=B9=E6=9D=83?= =?UTF-8?q?=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-menu-user-role-label.xlsx | Bin 117035 -> 116508 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx index 687b69cf7afe387ed5805b3cc73055acce4dafc9..c755f16216a08bca967e02f380368dbe8c07e6ed 100644 GIT binary patch literal 116508 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�B1_Vp-C<1`^j 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 Q03-m?2EH}d0f7zlKY8{!!~g&Q literal 117035 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%0A7=W``#@?F2}mOa(@w->{cf> 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 From 57c462c37e8f09bbdc103b574e4048f8954d94e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 8 Jul 2022 14:53:36 +0800 Subject: [PATCH 033/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=B8=B8?= =?UTF-8?q?=E9=87=8FAPP=5FEXTERNAL=5FCONFIG?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/choerodon/devops/infra/config/SwaggerApiConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/infra/config/SwaggerApiConfig.java b/src/main/java/io/choerodon/devops/infra/config/SwaggerApiConfig.java index 32b43eed05..79379ac5bb 100644 --- a/src/main/java/io/choerodon/devops/infra/config/SwaggerApiConfig.java +++ b/src/main/java/io/choerodon/devops/infra/config/SwaggerApiConfig.java @@ -14,7 +14,7 @@ */ @Configuration public class SwaggerApiConfig { - public static final String APP_EXTERNAL_CONFIG = "App external conifg"; + public static final String APP_EXTERNAL_CONFIG = "App external config"; public static final String APP_SERVICE = "App service"; public static final String APP_SERVICE_INSTANCE = "App service instance"; public static final String DEVOPS_CD_PIPELINE = "Devops cd pipeline"; From 613100b6473d890ef75810f25420903e101cd50d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 8 Jul 2022 16:13:09 +0800 Subject: [PATCH 034/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 072ecfcb5b..25c8397944 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.0-SNAPSHOT + 2.1.0.RELEASE jar https://github.com/open-hand/devops-service From 54e041275d6e85f3e2c0fd8bc7a83aa812473e74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 5 Jul 2022 09:28:13 +0800 Subject: [PATCH 035/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8D=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E8=AE=B0=E5=BD=95=E6=9F=A5=E8=AF=A2=E6=8A=A5?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit (cherry picked from commit 2b5aae21f2f7524504abe38e3ad2c38c0148681a) --- .../DevopsCiPipelineRecordServiceImpl.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java index f851bd1e2c..cc0b425de8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineRecordServiceImpl.java @@ -45,12 +45,13 @@ import io.choerodon.devops.infra.dto.iam.IamUserDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.dto.maven.Server; -import io.choerodon.devops.infra.dto.maven.Settings; import io.choerodon.devops.infra.dto.repo.C7nNexusRepoDTO; +import io.choerodon.devops.infra.dto.repo.NexusMavenRepoDTO; import io.choerodon.devops.infra.enums.*; import io.choerodon.devops.infra.feign.RdupmClient; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.feign.operator.GitlabServiceClientOperator; +import io.choerodon.devops.infra.feign.operator.RdupmClientOperator; import io.choerodon.devops.infra.gitops.IamAdminIdHolder; import io.choerodon.devops.infra.handler.CiPipelineSyncHandler; import io.choerodon.devops.infra.mapper.*; @@ -128,6 +129,8 @@ public class DevopsCiPipelineRecordServiceImpl implements DevopsCiPipelineRecord private DevopsCiPipelineSonarService devopsCiPipelineSonarService; @Autowired private DevopsCiUnitTestReportService devopsCiUnitTestReportService; + @Autowired + private RdupmClientOperator rdupmClientOperator; @Value("${services.gateway.url}") private String api; @@ -711,13 +714,15 @@ private void fillJarInfo(Long projectId, Long appServiceId, Long gitlabPipelineI String downloadUrl = null; Server server = null; if (pipelineMavenDTO.getNexusRepoId() != null) { - Settings settings = (Settings) XMLUtil.convertXmlFileToObject(Settings.class, devopsCiMavenSettingsDTO.getMavenSettings()); ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId); + List nexusMavenRepoDTOs = rdupmClientOperator.getRepoUserByProject(null, projectId, ArrayUtil.singleAsSet(pipelineMavenDTO.getNexusRepoId())); + C7nNexusRepoDTO c7nNexusRepoDTO = rdupmClient.getMavenRepo(projectDTO.getOrganizationId(), projectDTO.getId(), pipelineMavenDTO.getNexusRepoId()).getBody(); if (!Objects.isNull(c7nNexusRepoDTO)) { - if (!Objects.isNull(settings) && StringUtils.isNotBlank(c7nNexusRepoDTO.getNeRepositoryName())) { - server = getServer(settings, c7nNexusRepoDTO); + if (!CollectionUtils.isEmpty(nexusMavenRepoDTOs)) { + NexusMavenRepoDTO nexusMavenRepoDTO = nexusMavenRepoDTOs.get(0); + server = new Server(nexusMavenRepoDTO.getName(), nexusMavenRepoDTO.getNePullUserId(), nexusMavenRepoDTO.getNePullUserPassword()); } //http://api/rdupm/v1/nexus/proxy/1/repository/lilly-snapshot/io/choerodon/springboot/0.0.1-SNAPSHOT/springboot-0.0.1-20210203.071047-5.jar //http://nex/repository/lilly-snapshot/io/choerodon/springboot/0.0.1-SNAPSHOT/springboot-0.0.1-20210203.071047-5.jar @@ -769,11 +774,6 @@ private String getReleaseUrl(CiPipelineMavenDTO pipelineMavenDTO, C7nNexusRepoDT BaseConstants.Symbol.SLASH + pipelineMavenDTO.getArtifactId() + BaseConstants.Symbol.MIDDLE_LINE + pipelineMavenDTO.getVersion() + ".jar"; return downloadUrl; } - - private Server getServer(Settings settings, C7nNexusRepoDTO c7nNexusRepoDTO) { - return settings.getServers().stream().filter(server1 -> StringUtils.equalsIgnoreCase(server1.getId(), c7nNexusRepoDTO.getNeRepositoryName())).collect(Collectors.toList()).get(0); - } - /** * 添加提交信息 */ From 58bab5df4b974eac603c99139d4382e533b71b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 11 Jul 2022 09:39:23 +0800 Subject: [PATCH 036/228] [IMP] update pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25c8397944..1283bb7c53 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.0.RELEASE + 2.1.1-SNAPSHOT jar https://github.com/open-hand/devops-service From 0f88517658799dd740973b01921bc9d31845be3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 11 Jul 2022 09:40:28 +0800 Subject: [PATCH 037/228] [IMP] update pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 25c8397944..817bbacd99 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.0.RELEASE + 2.2.0-SNAPSHOT jar https://github.com/open-hand/devops-service From 418355c4d43fd8cfb3075a5400fe5bad7dd4208c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Tue, 12 Jul 2022 17:31:03 +0800 Subject: [PATCH 038/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0=E5=90=8C?= =?UTF-8?q?=E6=AD=A5=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E5=88=86=E6=94=AF?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/DevopsGitController.java | 25 ++++++++ .../devops/app/service/DevopsGitService.java | 3 +- .../service/impl/DevopsGitServiceImpl.java | 58 +++++++++++++++++++ .../devops/app/task/DevopsCommandRunner.java | 4 +- .../devops/infra/enums/AppServiceEvent.java | 5 ++ 5 files changed, 92 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java index e527c3ef13..33a5ccd49d 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsGitController.java @@ -484,4 +484,29 @@ public ResponseEntity checkName( @RequestParam(value = "branch_name") String branchName) { return ResponseEntity.ok(devopsGitService.isBranchNameUnique(projectId, appServiceId, branchName)); } + + @Permission(level = ResourceLevel.ORGANIZATION) + @ApiOperation(value = "分支同步") + @PostMapping("/sync_branch") + public ResponseEntity syncBranch( + @ApiParam(value = "项目id", required = true) + @PathVariable(value = "project_id") Long projectId, + @Encrypt + @ApiParam(value = "服务ID") + @PathVariable(value = "app_service_id") Long appServiceId) { + devopsGitService.syncBranch(projectId, appServiceId, true); + return Results.success(); + } + + @Permission(level = ResourceLevel.ORGANIZATION) + @ApiOperation(value = "校验分支同步") + @GetMapping("/check_sync_branch") + public ResponseEntity checkSyncBranch( + @ApiParam(value = "项目id", required = true) + @PathVariable(value = "project_id") Long projectId, + @Encrypt + @ApiParam(value = "服务ID") + @PathVariable(value = "app_service_id") Long appServiceId) { + return Results.success(devopsGitService.syncBranch(projectId, appServiceId, false)); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java index 6f998e5971..e563217bfa 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsGitService.java @@ -1,7 +1,6 @@ package io.choerodon.devops.app.service; import java.util.List; -import java.util.Map; import io.choerodon.core.domain.Page; import io.choerodon.devops.api.vo.*; @@ -236,4 +235,6 @@ public interface DevopsGitService { Page listOwnedProjectByGroupId(Long projectId, Integer gitlabGroupId, String search, PageRequest pageRequest); Page pageBranchBasicInfoByOptions(Long projectId, PageRequest pageable, Long appServiceId, String params); + + Integer syncBranch(Long projectId, Long appServiceId, Boolean sync); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index ccc1ba0b0f..574e6a1886 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -61,6 +61,7 @@ import io.choerodon.devops.infra.feign.operator.AsgardServiceClientOperator; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.feign.operator.GitlabServiceClientOperator; +import io.choerodon.devops.infra.mapper.DevopsBranchMapper; import io.choerodon.devops.infra.mapper.DevopsMergeRequestMapper; import io.choerodon.devops.infra.util.*; import io.choerodon.mybatis.pagehelper.domain.PageRequest; @@ -146,6 +147,8 @@ public class DevopsGitServiceImpl implements DevopsGitService { private DevopsProjectService devopsProjectService; @Autowired private AppExternalConfigService appExternalConfigService; + @Autowired + private DevopsBranchMapper devopsBranchMapper; /** * 初始化转换类和处理关系的类 @@ -1435,6 +1438,61 @@ public Page pageBranchBasicInfoByOptions(Long projectId, PageRequest p return ConvertUtils.convertPage(devopsBranchDTOPageInfo, BranchVO.class); } + @Override + public Integer syncBranch(Long projectId, Long appServiceId, Boolean sync) { + Integer syncCount = 0; + // 查询所有分支 + AppServiceDTO appServiceDTO = appServiceService.baseQuery(appServiceId); + checkGitlabAccessLevelService.checkGitlabPermission(appServiceDTO.getProjectId(), appServiceId, AppServiceEvent.BRANCH_SYNC); + CommonExAssertUtil.assertTrue(projectId.equals(appServiceDTO.getProjectId()), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT); + + UserAttrDTO userAttrDTO = userAttrService.baseQueryById(TypeUtil.objToLong(GitUserNameUtil.getUserId())); + List branchDTOS = gitlabServiceClientOperator.listBranch(appServiceDTO.getGitlabProjectId(), + TypeUtil.objToInteger(userAttrDTO.getGitlabUserId())); + if (CollectionUtils.isEmpty(branchDTOS)) { + return syncCount; + } + List gitlabBranches = branchDTOS.stream().map(BranchDTO::getName).collect(Collectors.toList()); + // 查询c7n已经存在的分支 + DevopsBranchDTO queryBranchDTO = new DevopsBranchDTO(); + queryBranchDTO.setAppServiceId(appServiceId); + List devopsBranches = devopsBranchMapper.select(queryBranchDTO).stream().map(DevopsBranchDTO::getBranchName).collect(Collectors.toList()); + // 创建分支 + for (BranchDTO branchDTO : branchDTOS) { + if (!devopsBranches.contains(branchDTO.getName())) { + syncCount = syncCount + 1; + if (sync) { + CommitDTO commitDTO = branchDTO.getCommit(); + DevopsBranchDTO devopsBranchDTO = new DevopsBranchDTO(); + devopsBranchDTO.setBranchName(branchDTO.getName()); + devopsBranchDTO.setUserId(userAttrDTO.getGitlabUserId()); + devopsBranchDTO.setAppServiceId(appServiceId); + + devopsBranchDTO.setCheckoutDate(commitDTO.getCommittedDate()); + devopsBranchDTO.setCheckoutCommit(commitDTO.getId()); + + devopsBranchDTO.setLastCommitUser(userAttrDTO.getGitlabUserId()); + devopsBranchDTO.setLastCommit(commitDTO.getId()); + devopsBranchDTO.setLastCommitMsg(LogUtil.cutOutString(commitDTO.getMessage(), MiscConstants.DEVOPS_BRANCH_LAST_COMMIT_MESSAGE_MAX_LENGTH)); + devopsBranchDTO.setLastCommitDate(commitDTO.getCommittedDate()); + + devopsBranchService.baseCreate(devopsBranchDTO); + } + } + } + // 删除不存在分支 + for (String t : devopsBranches) { + if (!gitlabBranches.contains(t)) { + syncCount = syncCount + 1; + if (sync) { + devopsBranchService.baseDelete(appServiceId, t); + } + } + } + return syncCount; + } + + @NotNull private Page listExternalBranch(PageRequest pageable, String params, AppServiceDTO applicationDTO) { AppExternalConfigDTO appExternalConfigDTO = appExternalConfigService.baseQueryWithPassword(applicationDTO.getExternalConfigId()); diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index 9efa8130f4..69c708061e 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -66,7 +66,7 @@ public class DevopsCommandRunner implements CommandLineRunner { @Override public void run(String... strings) { - try { + /* try { ConfigVO chartConfig = new ConfigVO(); chartConfig.setUrl(servicesHelmUrl); // 只有helm的用户名密码都设置了, 才设置到数据库中 @@ -82,7 +82,7 @@ public void run(String... strings) { } } catch (Exception e) { throw new CommonException("error.init.project.config", e); - } + }*/ } private void initConfig(ConfigVO configDTO, String configName, String configType) { diff --git a/src/main/java/io/choerodon/devops/infra/enums/AppServiceEvent.java b/src/main/java/io/choerodon/devops/infra/enums/AppServiceEvent.java index 852cd6491f..f24586b625 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/AppServiceEvent.java +++ b/src/main/java/io/choerodon/devops/infra/enums/AppServiceEvent.java @@ -22,6 +22,11 @@ public enum AppServiceEvent { */ BRANCH_DELETE(20), + /** + * 分支同步 + */ + BRANCH_SYNC(30), + /** * 标记List */ From ef0639995a33bdf89a8617eb721a3c2aa9948d12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 12 Jul 2022 17:56:22 +0800 Subject: [PATCH 039/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/DevopsHelmConfigService.java | 4 + .../impl/DevopsHelmConfigServiceImpl.java | 9 ++ .../devops/infra/dto/DevopsHelmConfigDTO.java | 117 ++++++++++++++++++ .../mapper/devops_helm_config_mapper.java | 7 ++ .../devops_service/devops_helm_config.groovy | 34 +++++ 5 files changed, 171 insertions(+) create mode 100644 src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/devops_helm_config_mapper.java create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java new file mode 100644 index 0000000000..93294b46af --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -0,0 +1,4 @@ +package io.choerodon.devops.app.service; + +public interface DevopsHelmConfigService { +} diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java new file mode 100644 index 0000000000..3d20bf2184 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -0,0 +1,9 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.app.service.DevopsHelmConfigService; + +@Service +public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { +} diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java new file mode 100644 index 0000000000..083d1ef32e --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java @@ -0,0 +1,117 @@ +package io.choerodon.devops.infra.dto; + +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Table; + +import io.swagger.annotations.ApiModelProperty; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +@Table(name = "devops_helm_config") +@ModifyAudit +@VersionAudit +public class DevopsHelmConfigDTO extends AuditDomain { + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + private Long id; + + @ApiModelProperty("仓库名称") + private String name; + + @ApiModelProperty("仓库地址") + private String url; + + @ApiModelProperty("仓库账号") + private String username; + + @ApiModelProperty("仓库密码") + private String password; + + @ApiModelProperty("关联该配置的层级 app/project/organization/platform") + private String level; + + @ApiModelProperty("关联该仓库配置的资源id, 应用id 项目id 组织id 平台层为0") + private Long resourceId; + + @ApiModelProperty("仓库是否私有") + private Boolean repoPrivate; + + @ApiModelProperty("是否为默认仓库") + private Boolean repoDefault; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getLevel() { + return level; + } + + public void setLevel(String level) { + this.level = level; + } + + public Long getResourceId() { + return resourceId; + } + + public void setResourceId(Long resourceId) { + this.resourceId = resourceId; + } + + public Boolean getRepoPrivate() { + return repoPrivate; + } + + public void setRepoPrivate(Boolean repoPrivate) { + this.repoPrivate = repoPrivate; + } + + public Boolean getRepoDefault() { + return repoDefault; + } + + public void setRepoDefault(Boolean repoDefault) { + this.repoDefault = repoDefault; + } +} diff --git a/src/main/java/io/choerodon/devops/infra/mapper/devops_helm_config_mapper.java b/src/main/java/io/choerodon/devops/infra/mapper/devops_helm_config_mapper.java new file mode 100644 index 0000000000..4dd80226ee --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/devops_helm_config_mapper.java @@ -0,0 +1,7 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; +import io.choerodon.mybatis.common.BaseMapper; + +public interface devops_helm_config_mapper extends BaseMapper { +} diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy new file mode 100644 index 0000000000..8192f12b64 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -0,0 +1,34 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovyovy') { + changeSet(author: 'lihao', id: '2022-07-12-create-table') { + createTable(tableName: "devops_helm_config", remarks: 'helm仓库配置表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'name', type: 'VARCHAR(60)', remarks: '仓库名称') { + constraints(nullable: false) + } + column(name: 'url', type: 'text', remarks: 'helm仓库地址') { + constraints(nullable: false) + } + column(name: 'username', type: 'VARCHAR(64)', remarks: '用户名') + column(name: 'password', type: 'VARCHAR(128)', remarks: '密码') + column(name: 'level', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 app/project/organization/platform') + column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 应用id 项目id 组织id 平台层为0') + column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是') + column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库') + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + + createIndex(indexName: "devops_helm_config_n1", tableName: "devops_helm_config") { + column(name: "resource_id") + column(name: "level") + } + } +} \ No newline at end of file From c5651f2f39da31bb36759679f4b8d4736754dc3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 09:42:37 +0800 Subject: [PATCH 040/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E6=8D=AE=E5=BA=93=E8=A1=A8=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/infra/dto/DevopsHelmConfigDTO.java | 16 ++++++++++++---- .../devops_service/devops_helm_config.groovy | 7 ++++--- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java index 083d1ef32e..04ec24a97f 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java @@ -22,7 +22,7 @@ public class DevopsHelmConfigDTO extends AuditDomain { @ApiModelProperty("仓库名称") private String name; - @ApiModelProperty("仓库地址") + @ApiModelProperty("helm仓库地址 平台层或组织层为仓库地址前缀部分 项目层是完整的仓库地址") private String url; @ApiModelProperty("仓库账号") @@ -31,10 +31,10 @@ public class DevopsHelmConfigDTO extends AuditDomain { @ApiModelProperty("仓库密码") private String password; - @ApiModelProperty("关联该配置的层级 app/project/organization/platform") - private String level; + @ApiModelProperty("关联该配置的层级 project/organization/platform") + private String resourceType; - @ApiModelProperty("关联该仓库配置的资源id, 应用id 项目id 组织id 平台层为0") + @ApiModelProperty("关联该仓库配置的资源id, 项目id 组织id 平台层为0") private Long resourceId; @ApiModelProperty("仓库是否私有") @@ -114,4 +114,12 @@ public Boolean getRepoDefault() { public void setRepoDefault(Boolean repoDefault) { this.repoDefault = repoDefault; } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } } diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 8192f12b64..1f60dbcc42 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -9,13 +9,14 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovyovy') { column(name: 'name', type: 'VARCHAR(60)', remarks: '仓库名称') { constraints(nullable: false) } - column(name: 'url', type: 'text', remarks: 'helm仓库地址') { + column(name: 'url', type: 'text', remarks: 'helm仓库地址 平台层或组织层为仓库地址前缀部分 项目层是完整的仓库地址') { constraints(nullable: false) } + column(name: 'username', type: 'VARCHAR(64)', remarks: '用户名') column(name: 'password', type: 'VARCHAR(128)', remarks: '密码') - column(name: 'level', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 app/project/organization/platform') - column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 应用id 项目id 组织id 平台层为0') + column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/platform') + column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是') column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库') From 7a98c0bca063542c273df5062c9a3f2685b27f91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 10:28:47 +0800 Subject: [PATCH 041/228] =?UTF-8?q?[ADD]=20=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E4=B8=ADAPI=E6=B5=8B=E8=AF=95=E4=BB=BB=E5=8A=A1=E6=89=A7?= =?UTF-8?q?=E8=A1=8C=E8=AE=B0=E5=BD=95=E6=B7=BB=E5=8A=A0=E6=89=80=E5=B1=9E?= =?UTF-8?q?folderId?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/vo/test/ApiTestTaskRecordVO.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java b/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java index 363b6d3887..3ea8594a41 100644 --- a/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/test/ApiTestTaskRecordVO.java @@ -51,6 +51,9 @@ public class ApiTestTaskRecordVO { private Double performThreshold; + @Encrypt + private Long folderId; + public Long getSuiteId() { return suiteId; } @@ -155,11 +158,20 @@ public void setPerformThreshold(Double performThreshold) { this.performThreshold = performThreshold; } + public Long getFolderId() { + return folderId; + } + + public void setFolderId(Long folderId) { + this.folderId = folderId; + } + @Override public String toString() { return "ApiTestTaskRecordVO{" + "id=" + id + ", taskId=" + taskId + + ", suiteId=" + suiteId + ", status='" + status + '\'' + ", startTime=" + startTime + ", endTime=" + endTime + @@ -169,6 +181,8 @@ public String toString() { ", errorMessage='" + errorMessage + '\'' + ", viewId='" + viewId + '\'' + ", deployJobName='" + deployJobName + '\'' + + ", performThreshold=" + performThreshold + + ", folderId=" + folderId + '}'; } } From 4120774542b277dbb30bad249ff1d3472bc9ce52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Wed, 13 Jul 2022 10:53:27 +0800 Subject: [PATCH 042/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=8C=89?= =?UTF-8?q?=E9=92=AE=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-data-message-template-open.xlsx | Bin 78495 -> 79403 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx index f3e84507aa2f796776c918678d38b74ed550911e..4ef26838f3cd1aa76bf7b91d336a398d48b90f0d 100644 GIT binary patch literal 79403 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 literal 78495 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%0ALM_tF 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℞vXklCKx^`jLQsjR{T9? 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 Date: Wed, 13 Jul 2022 11:06:21 +0800 Subject: [PATCH 043/228] =?UTF-8?q?[IMP]=20=E5=8E=BB=E6=8E=89setter?= =?UTF-8?q?=E5=92=8Cgetter?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../choerodon/devops/infra/dto/DevopsHelmConfigDTO.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java index 04ec24a97f..b74202d4d8 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java @@ -83,14 +83,6 @@ public void setPassword(String password) { this.password = password; } - public String getLevel() { - return level; - } - - public void setLevel(String level) { - this.level = level; - } - public Long getResourceId() { return resourceId; } From 5fd3f51e347974ea7f607c43199d2f36aad63f56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Wed, 13 Jul 2022 11:32:56 +0800 Subject: [PATCH 044/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E6=A8=A1=E6=9D=BF=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-data-message-template-open.xlsx | Bin 79403 -> 78803 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx index 4ef26838f3cd1aa76bf7b91d336a398d48b90f0d..1b96c7bca2ff707879879568f62b67fcce55e7dc 100644 GIT binary patch delta 56336 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

a}3rdM0=%PPJjxNPC%pgRi# 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 delta 56916 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 From 6a71f12d5ee0f87fcf50fc04fa687f1deeaae512 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 14:28:40 +0800 Subject: [PATCH 045/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E6=9F=A5=E8=AF=A2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 32 ++++ .../choerodon/devops/api/vo/HelmConfigVO.java | 149 ++++++++++++++++++ .../app/service/DevopsHelmConfigService.java | 5 + .../impl/DevopsHelmConfigServiceImpl.java | 40 +++++ .../devops_service/devops_helm_config.groovy | 2 +- 5 files changed, 227 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java create mode 100644 src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java new file mode 100644 index 0000000000..55e8217e7e --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -0,0 +1,32 @@ +package io.choerodon.devops.api.controller.v1; + +import java.util.List; + +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; +import org.hzero.core.util.Results; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import io.choerodon.devops.api.vo.HelmConfigVO; +import io.choerodon.devops.app.service.DevopsHelmConfigService; + +@RestController("ciTemplateJobController.v1") +@RequestMapping("/v1/projects/{project_id}") +public class DevopsHelmConfigController { + @Autowired + private DevopsHelmConfigService helmConfigService; + + + @ApiOperation("查询helm仓库") + @GetMapping("/list") + public ResponseEntity> listHelmConfig( + @ApiParam("项目id") + @PathVariable("project_id") Long projectId) { + return Results.success(helmConfigService.listHelmConfig(projectId)); + } +} diff --git a/src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java new file mode 100644 index 0000000000..3c71eb0cc5 --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java @@ -0,0 +1,149 @@ +package io.choerodon.devops.api.vo; + +import java.util.Date; + +import io.swagger.annotations.ApiModelProperty; + +public class HelmConfigVO { + private Long id; + + @ApiModelProperty("仓库名称") + private String name; + + @ApiModelProperty("helm仓库地址 平台层或组织层为仓库地址前缀部分 项目层是完整的仓库地址") + private String url; + + @ApiModelProperty("仓库账号") + private String username; + + @ApiModelProperty("仓库密码") + private String password; + + @ApiModelProperty("关联该配置的层级 project/organization/platform") + private String resourceType; + + @ApiModelProperty("关联该仓库配置的资源id, 项目id 组织id 平台层为0") + private Long resourceId; + + @ApiModelProperty("仓库是否私有") + private Boolean repoPrivate; + + @ApiModelProperty("是否为默认仓库") + private Boolean repoDefault; + + @ApiModelProperty("创建时间") + private Date creationDate; + + @ApiModelProperty("创建者头像") + private String creatorImageUrl; + + @ApiModelProperty("创建者登录名") + private String creatorLoginName; + + @ApiModelProperty("创建者真实名称") + private String creatorRealName; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public String getResourceType() { + return resourceType; + } + + public void setResourceType(String resourceType) { + this.resourceType = resourceType; + } + + public Long getResourceId() { + return resourceId; + } + + public void setResourceId(Long resourceId) { + this.resourceId = resourceId; + } + + public Boolean getRepoPrivate() { + return repoPrivate; + } + + public void setRepoPrivate(Boolean repoPrivate) { + this.repoPrivate = repoPrivate; + } + + public Boolean getRepoDefault() { + return repoDefault; + } + + public void setRepoDefault(Boolean repoDefault) { + this.repoDefault = repoDefault; + } + + public Date getCreationDate() { + return creationDate; + } + + public void setCreationDate(Date creationDate) { + this.creationDate = creationDate; + } + + public String getCreatorImageUrl() { + return creatorImageUrl; + } + + public void setCreatorImageUrl(String creatorImageUrl) { + this.creatorImageUrl = creatorImageUrl; + } + + public String getCreatorLoginName() { + return creatorLoginName; + } + + public void setCreatorLoginName(String creatorLoginName) { + this.creatorLoginName = creatorLoginName; + } + + public String getCreatorRealName() { + return creatorRealName; + } + + public void setCreatorRealName(String creatorRealName) { + this.creatorRealName = creatorRealName; + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 93294b46af..aed010674f 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -1,4 +1,9 @@ package io.choerodon.devops.app.service; +import java.util.List; + +import io.choerodon.devops.api.vo.HelmConfigVO; + public interface DevopsHelmConfigService { + List listHelmConfig(Long projectId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 3d20bf2184..91493799b9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -1,9 +1,49 @@ package io.choerodon.devops.app.service.impl; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + import org.springframework.stereotype.Service; +import io.choerodon.devops.api.vo.HelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; @Service public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { + @Override + public List listHelmConfig(Long projectId) { + + List helmConfigVOList = new ArrayList<>(); + + HelmConfigVO helmConfigVO1 = new HelmConfigVO(); + helmConfigVO1.setUrl("http://www.example.com/org/projects/"); + helmConfigVO1.setUsername("username"); + helmConfigVO1.setPassword("password"); + helmConfigVO1.setName("测试仓库1"); + helmConfigVO1.setRepoPrivate(true); + helmConfigVO1.setRepoDefault(true); + helmConfigVO1.setResourceType("organization"); + helmConfigVO1.setCreationDate(new Date()); + helmConfigVO1.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); + helmConfigVO1.setCreatorLoginName("25147"); + helmConfigVO1.setCreatorRealName("周扒皮"); + + HelmConfigVO helmConfigVO2 = new HelmConfigVO(); + helmConfigVO2.setUrl("http://www.example.com/org/projects/"); + helmConfigVO2.setUsername("username"); + helmConfigVO2.setPassword("password"); + helmConfigVO2.setName("测试仓库1"); + helmConfigVO2.setRepoPrivate(false); + helmConfigVO2.setRepoDefault(false); + helmConfigVO2.setResourceType("project"); + helmConfigVO2.setCreationDate(new Date()); + helmConfigVO2.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); + helmConfigVO2.setCreatorLoginName("25147"); + helmConfigVO2.setCreatorRealName("周扒皮"); + + helmConfigVOList.add(helmConfigVO1); + helmConfigVOList.add(helmConfigVO2); + return helmConfigVOList; + } } diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 1f60dbcc42..1b0b8d4d3e 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -1,6 +1,6 @@ package script.db.groovy.devops_service -databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovyovy') { +databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { changeSet(author: 'lihao', id: '2022-07-12-create-table') { createTable(tableName: "devops_helm_config", remarks: 'helm仓库配置表') { column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { From a226deff8d5f730eb1be267ea245cde280e6d64c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 15:14:20 +0800 Subject: [PATCH 046/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93api=E6=8E=A5=E5=8F=A3url?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/controller/v1/DevopsHelmConfigController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index 55e8217e7e..f2c2d10797 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -15,8 +15,8 @@ import io.choerodon.devops.api.vo.HelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; -@RestController("ciTemplateJobController.v1") -@RequestMapping("/v1/projects/{project_id}") +@RestController("DevopsHelmConfigController.v1") +@RequestMapping("/v1/projects/{project_id}/helm_config") public class DevopsHelmConfigController { @Autowired private DevopsHelmConfigService helmConfigService; From fa791435b03ba2c2f84150cfb623981160d52d9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 15:51:26 +0800 Subject: [PATCH 047/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9groovy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../script/db/groovy/devops_service/devops_helm_config.groovy | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 1b0b8d4d3e..6831aac973 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -29,7 +29,7 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { createIndex(indexName: "devops_helm_config_n1", tableName: "devops_helm_config") { column(name: "resource_id") - column(name: "level") + column(name: "resource_type") } } } \ No newline at end of file From 6d2dd62cf4fcc95e3f9c94fb798ed9299eaa3ba2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 13 Jul 2022 17:12:31 +0800 Subject: [PATCH 048/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8Dc7n-agent?= =?UTF-8?q?=E6=93=8D=E4=BD=9C=E7=8A=B6=E6=80=81=E5=90=8C=E6=AD=A5=E6=97=A0?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../host/SyncOperatingCommandStatusHandler.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java index 27c3970777..513844084e 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/host/SyncOperatingCommandStatusHandler.java @@ -53,10 +53,10 @@ public void handler(String hostId, Long commandId, String payload) { devopsCdPipelineService.hostDeployStatusUpdate(devopsHostCommandDTO.getCdJobRecordId(), false, "timeout"); } }); - // 2. 同步devops丢失的命令 - List unSyncCommands = commandResultVOS.stream().filter(v -> Boolean.FALSE.equals(v.getNotExist())).collect(Collectors.toList()); - unSyncCommands.forEach(unSyncCommand -> commandResultHandler.handler(hostId, unSyncCommand.getCommandId(), unSyncCommand)); } + // 2. 同步devops丢失的命令 + List unSyncCommands = commandResultVOS.stream().filter(v -> Boolean.FALSE.equals(v.getNotExist())).collect(Collectors.toList()); + unSyncCommands.forEach(unSyncCommand -> commandResultHandler.handler(hostId, unSyncCommand.getCommandId(), unSyncCommand)); } @Override From 935025dfc8ba4dfd3d6acd92d1b9f63eee9ae951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Wed, 13 Jul 2022 17:16:36 +0800 Subject: [PATCH 049/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-data-message-template-open.xlsx | Bin 78803 -> 79393 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx index 1b96c7bca2ff707879879568f62b67fcce55e7dc..c2bbb4ea46c84bbb197d9de1d9eb3f304389f42e 100644 GIT binary patch delta 61395 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

Kn{kwvC&BgfN6KS+@We*@*H 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%0Dpgi@G?6jQJsP4!rSG9lPBfiPA5353NeoP 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 delta 60822 zcmZsCby!tR_qIH!s7NRhA|XhLgmi<5h)4-am!yEwo!g=t^dM3KA`KGKaFh^`mJ&GR zq5IIyH~WA-zR&mj!^_LP&+M65>t6S|XRR@D{$%IW$>h_XhLlG`P%`Qa6Z` z_v0myn*%e8C2TLXZ>m{zODX$)IB}`>c7_2_906gCN`33WJIoEC}^;XqOMo?4k2je0%^^d?(enxvQbDt8!z4rt-^{*Xl&xV|x zq{w+;(0#Fk>bgr{mX&S55^ztt!3Ko0lhr4uJkoH@u}1=hnxDl0{FvE%hx>a1MhmyTU!1~&>6P0*?emmjlaX@;S}eb( zj#pbg)Vl6QkmGp8_z9`E>Q#Os*W%JbT~(`2j&)kvJ9y%Jqv#qs8PfE1y_(Rcht%4h zev{%>XBs4gkVQStxtX(}d%rAQl!*m5#0aoZ9Usr^KVE)HjM=!Pe3 z%N#W0vt)UO%c+rm4nXQflhk|W$|L>fRJDvd9}8OG%lTd96y(deT9}L95hK z4^7UfTbglYwNS4|tJJHeUci&R)b{QGwJxqcTVmn3ac=3J!Xq5@Y%e6llJVfH>J5h6 z<@(Pzyv02`P809O{lg_C?xD>3Y&$@ao2sru_2ZG8CVzaC$k{j)ZAHS*OzvKP668Twex zt{J4ATHdx@Ar?0(Furg8^eS)l$HMaP`M1WV=aI;8kI#&B+&9fXTx0E-vB)qQ48N2Y zpfLVb8TuitIn*Sq*YYKW;8MfIX-hlfS5ySG<7o^ZN|Xb1QYv4VrEC_}`d_Yu)UWry z2zOYJdG`@Ko51*%u zN|Y?W_ayq$P4uU8pE|BYB%SkXc%6T9=cSGIsXSda-3CR;&yvBUJv@DlXYNp(ef9AS zu9F+C)O(honvXa)oX!}4i52}6_%ETS8H?+Viu{o`L~S#XZe zkj!3zIymyV&l3i#QcFYkgXH)x8Oi62t)H8H{Z9Sxs{4=R_+YCG3y+&82Lz|?tzDEg zKO=Kdxxkz=Y|H2U>5t`wMnw&0BM6DmEL>3e9Y1B|>1d%)ytN@#;t&n|wSOwFy(fX}u1QJBT7cF)h)u%cHkE|fHX|Fu{Cv9JNW$5H`=RALWAxgiNTDCY z-&g2L$6F$|2nO9W9ffN6#V%5&?@d%0+z@T0f0rn#XNkVB&7n7X-TGug)^Zj<{S!Gs zViD^RgDVQ^U7xh$EO~3FF>KV7jC&VzJDCq4_kPidsh%6l!Z_9hFZ=AOjCuAY{VBK0 zy~YXkZijuRQaDs`bjeIS6d9ekSl<(W@*%%0)zkWn+3(hL&jO}+mN>qsr}9~gPf09y z(vr9}#}w_pj)8Q3aNfRRP4S*8H?DTz(-(bph2D>@Q|?iSC0{e%t&>}!=e7*Br!T4bVYalt(PS6spGx6qPWv?{L^Oprr4$wQ$gzw6`^i=CqcGI^5fu zic0X>bvfMd^}UPS+q2uB?XGLmAF4WBufv>ywzl3Gd2C_oHie+#H>3~)Rp`C^}NcRl?-Vq{^GiQ*t0j*wBBt~YIW!kLq6_1RDX}!oz{ml zZ@p|_FQ1?DaM%rbV5ectp|+4joaZC*nD+U%l5}u?JatRmO8|sYXi^E!0Ei z`}%FukgDkf=EQ{lEDrx1r+Q3gr-TV)7B`;FzW^TgB_f8>zo`bU&gQP@*3r<#q z*zfu_@wfJ(Q}vN7fs>-GO%HeR-V9=t?pL=#c6Cs`#DQ#M!?sc@Zi@07Z|8uXS>7Os zg*M^6p81CdsGO2Hi6j?B%&yaXaDk0uNGtB(96I6gi5%V&^%CDs=$M}{yYytum&58o zg;yO~B8cqFw^k-PzyDxVR9P=7REcClEC2H~<^0bww(IwQ+H|TCWmzCJx_R?h6HAO#4Y$QI zBhm%Z^zMfoydInF)=aq?H8^yt)WhT4%51lgWc~hg)y8k}sS9n>S;VEm@SXco zbs0YAx`|mYbv_85(jm{ptlEE8;}&qDZyNs<$X0;<#7TPx5r)d&yT5Y~GV%8He8>c` zb$H79l?bU?*%m21MXTfs)Oxy*W-B}Y&V+98J>|J>%#f0-oD9f1vxk znV&ariHP4je=T@f^~|*&5LZyzqyZaqF;@_IuRd9mQL=lQg1%-;?`BJ0N!c}={H7~lv|QDTKyhIUQl|U`Gu{1&@8?!(w04aD3I;pHdyLi zAs=O?J!)D8pYXdBHGX#IuVuJW1gcWixbXF#wD+RT#lLzlpTU{F2{IfAq%v&4Bj3JR z#KCpPIlsTbumsIvcqToN;`SS(Gs-Pe8XMK=(SB+kU&2YtujIzHN)9yy3>H*GP@&c) zYFK=uOU~lI_aUxn$j^E!!26owu9b%(k81+vc6;mB6`_;NS%wG`<6TTz`wnUoqw)cm zk+3O>kml9*{PPP0)R5@u;42Aut&&X$c23G@?sCHsE>?rS2+@X!^3fhvVDm<=COZd7 zRB@KKh&g+~sC&3n17?J4JZ-Y6QqWaIsd1Dj|Etptgvp3|xXB2x^3@gBe9`6=ZG=&S zxmkxx1l1FvChir1F6Z+?0^&rmPh3msKhve&@RmeO0UJYXFDo1J&j2I8n8?lwKN^*5 zoR5-y8qGEwNOd~|FO*J(FK%LPe8pmKuOeY~Fd?oX-))l~e?viE{PW&@0kZIvrKLNF zs--(UVS!n6%tEhYyF|y)>w$TXpO$6(`q2O|)UZLHp#BSU@>diQebc#e6QO21L~;I! zB@Kx1N?^l38$RO{cIUL5kS1b!^Ce-Oj16i#40j9nLd*qZ18Tyc>zO?crZ!Ki#HsaB~-K0D@Y zlkwp|wrh|S80i?-x`Gk@0mfK!K)(kScw7%00m#v)IzyLQWz--G{$>_xwL?fXD2D(G zBut>Cqws}v&*}c?`K(>Q_7vjG&kB#J@_2l?3L*Ud4%Xb?81B#AY)W@5IiK3YHICX6 zRc~Mj8Lm>&@d<_OhKe~&!bHMN^yW1QqeeZqw``sd#X*m{Ks3abo+PgE%ct2@vYTfM znxHp3Z{+1{rw}C@mA?h7my=Jf>GT%NMPX9O=)kDmMooL|boh7LR{+@b8QUwIQG8C@ zofEC98V78?6K!@H2fEvznS{!oAb@8+ep&Nm&d*bq?4hSES@*78Lrj#Qe|}4Tdkr?gsd<8RYN^)XHl0GWRm9U;%<3xt zm8vRoO@TAvj<2Sh@DQ(Z9|NaPjNH&5q$Ae^-Z>+bKJz_aHs?ZpTN_=kFD2MRRROu? zBKTT0=;{wH=w;euWRXsa{JT*Cy@srHvT;S@ z=u_?y>fg?9g6N)eR(VQL3-ibY9C-@m5Q95>L`J16(=p)JFnRntE?3e(2wX1<4!YY0~Ic2RG zLRTN2J0=te9EzCG+4tFjZP6!`8S4Zr;qVc6*iu8Bwxa(e!sM_d9QgIF(6fRv_2CZ5 zX2KUzH#WQp5~h*xZI|s832(bBoMRL&HN7=LPn+f_svTKMNeBrr)Q4SDr&+O6 zek>J2jz9NBFlO*;{#3J-8&St=l4ufdGSpKS!#QBSWHg!&j;=GrN;+M_KH*mqdU=*gz|YU4o%T)6 zmdDk&#N`b^_cEMun<8dG5Gaezvtlz<8QRL&x-{A79W^-x65j4gq8Mg>1)ElCM|&%BEmjrsYAZLCY+!Ueze;DHuD9Vo8y|;f#UMo z(+-9-m;KK@apnS_si;o;FjaM)sBu~ToUsl)adGB7NuoM?ZHvW%I{8O%+nm3;BiEkO z?J@7KZeew0S729aoj{mS58Znj4v5gO{$A zlj8(m2tk^ydD)HE4$>@!S6<4`;Es^bg>K%U0k_e}1fP1OVEJY?D55aRyGKa9!)E1m z-io*Dp7r%-Brj=xKlB+VzN4~wl`L1Bi@exus@IJ%k3n1ymuWU`1ckgNi0`ArQx^s1an!2W0n(9S#AWQw#r1yBXg*#R_ z$vFD@Kh6zWY9dI>$TbloSh^zHL5!=Gq)4sosPufNZe$uiV|qITWStg zWV+*dI)PR)h-=3QgFf~3F0Iyp?q{}4cg}paVJsJTvS(Y%@(0rTnvzNUU>axh)eMBq zx}C*Ne(GT$ZSEERvO*_vwx+9_3^8?~*{?h(wCBc#r;SXVQNAI|KqbAlz87Nf5$ATV zM?Y)SseOCs@RXk5v)iOM!fRHhdbsheKYnTORVHlGFA4+k933e5Pr;sYh~yo zBSXrQU)A0WV3Tr@vO9Av-Ib#LDM10X-WcguQ+DSeC;B;IGJtY|rk#&HlE%?P&I~ah zMjOzmeI&Q zI2FAtLhlqH`x@>K>PBQKDJ;l_Ow9p_H1S!+$2Vu|>Zpp$IPu++fX4WU&@Nn~2obkE z1((9v2$N_U-~uOwrGB{>7N2xZw#Fq^RuRaIDQNQ z4QzA1m?35&L`r+6hS>S1*2=bLcs>1^9k=^K2?Qp}9>y{(`!pQM znXgcdL5H23zmYJ_Xk&D-r-tdql6zy`+qyE6?bvy@fE(G}VRPs^0(R#$1%R*W!@BL| z>Tf1KIj1S+3{=s<58s0=+cRPtZ+)wDuFHGVa5C}lY_%^&m}tiBD))SzvBt9=r*M;~ zqm~i~)dsmrjNoBYBs3^HN4)ctb_ZQgxAse&awpSmyE}Rvoe=Ac>p5-4oPXX;;s@PY zzMa)L1wAc_>-O{v1=kvb_3dfd5axdRa)MN^ti-5SaRUGJujl@766cz$mw3^hK;*DD zDQ(=xwvkMAn=_^^m`ZB=mB`)mVuYQqX-r7m-Y86~i?7v(N=-xCkEi@>r<>lkN=@tQ zdI~M3eZQnPTGu{#+o_SdX@|GV>kZ%9PDKa!0)O@^F`xPS#SZ65+>-nXz;|}O5ba~o z#BSmmWIJ|sJfv)ecPKt?5@=l1F|2bpj#6p1oO6J$@IPULQ6q= zg0JI=5Z+!;g`)jK>fCsKx46&chC=h)XywvhyLXY6CE-S|bthfUXSC*Z$b7Myxym%c z+bYFGT9;Ib**kcrum)kenQ!&!~j1pABP4^j``aw*D^GR!*jq%xE|nCNgd4T zuC-jYwcx+)8{%6e1Od;P+f%* zH2>Oc$#)qw!q+q=4yZoe3I27KWYtsFu>2L~~&daH+2~_`02U;&Qu)OnFti zOTVShx@wbK5cN#0m(JQ8p{6657zLye%d18jnM@SK-ZiuoW|7 ztjpeqC>t`}C!ZGUz&|dLEA|)(DhrI>DJ5wg8>qM0FlE--m87L%w=Oc(fZqn%TOh zosPMUj-54S|8Yz%e`@Ic<&kT`oo`ztW-Rt9P;)}m9~~U`{K|yA?&yA#`PprzOx?Xz z`ah4hYg=%rB%*RcXqDCLL!q=ATldO@V|W&4&2m|u*N3KMqGh^BJs5O@Q@zN)V(b&) zPf<%G<&0cgv~Y09$@Fb2&D^=*q$*LJvwUqPWBylBCdPhdcI$#8Jn_rWkD2)~-8pIy zOWQ=Z>Kf4vH)L5=;pA{$7SYsx_=F^_=;4MWboIqkGtYxP$6e?K$_B5JqVEf`+S9l_ zwP^Dox7BphK%~@lE3@G6r^;Kr?g^AVIHvASfCJo=Orxx1x=`P3#rvY~xMFXE zM28OVEkOId$o;6p?czhs@ZrYr!6tIMycbfxyNh-?wcN>>aIi-Ul^(9mEF>%)qNjHC zy>_=3rgo9!5aJ@&tOD&9j;yq~?|K>}ni_4pWuM7#xG!jCRuSJ={}k#$uGU5HlpcT1 zg+_2NM)sma z0{eDfJ||hhbJRb~Ghx3S^<@?x%2Tn{I`jLv4CiCbz;=`Do!ePmF$cF2u|JR2tS7&t zt>$LGM(h<@V6nrUwO~f%oN?Oo(!@sBz$+TfbfJc7;WD}?b+^O3%<^B_-AB zBCw>#x3r~+Cu8?d&fYOB?9z95u%@Ul71$z4);}gD%KrYMjP`n+Svqn$ak{PwdfvHV z{ERTaoosW|yaOTFpTT)oZeN=G%Ux<4O88S4+IX_y<4+B%(M++-kvU4mG{}oo-Rb`M zb3m2AvNI~lvOaV1_M!tS=U!-GG+SYGWKwaGaDP?g`vr~?33g(Avt2#bNU%BL1Z`es zcykkoohvWx=c{m_^>S4vFw50=vKBCl+uZ>qL5hCpg8CXqC!Mg&&ldUbqc7PC>t4BN z9gPHL=@9yPLl!4>u@Ox5-xuXl1nm5Hnr4A`m_jo}D$8#2@>BVNkYfQ3~UV_vOO!vUi^#7xbe^Oj_esS7$u898Lqx@^3Y96N!etf z?El0mJrEM*di^I(>Lh=pP%+y5ycoM1xs1qY%4EFtjCX+4n##v3T2vejw_{wdyRCmn zj$2kKFlVlSE(PP+Xj$b69lbd9A$h?)9fOnCswS4F*7lG9`L%9KHK6&|n9YY@A5C8zXl;PgGcP(89UN9#}g-<>Tc?NU}PsT~;) z`pc}k?E{-vU9nsK?~s>zF?fQ(WHGP)V{y!`m|HpZ2(Q*NLhjBG>&FF!YZm-c18XT} z1DK2`VF}#T=l13F)HbY^z{!&-)B6@7MN28BON}V~iic8ViJs7#sD4vDi%V|94+X>; z7q-rOw&^yA)$M0c=T53wP`yEoxtzD8m$TyGl;#w)F9pWgE;RG;ndUGP^*LV7mSf;# zZHJm?9tuE1xBY47iPUUuEToCX%sXO#L)uw#NdPzYE;bIDctQfr~GPPMey+?$H+YOO>`CGs~=^U|%Okt|vt~;rySFikhvWodc-m zS=dr!mXqUj=Pp#x4=AGMTvhofwPIn#qiF_qWBtso(36u7a*rB2NQ$B#Y{z=|Q{!Oy zho~Du{T6x=s1S*yIoIp1G!{tklk%(Bp9JSBuJBxjLj{XP(czyW@#kS&o7(-3A^1f? z75<)6wAcU)Vyh5k!hn`fz;o%ebavNIAueLF6vHj$$<-a?`sX@7td{t;;j1 zNHF6==8K;{4rt_Pabhuz1?GUqQpz~(wyoYaVnb`+|95DC$cpIg`5p76N50drf(K0V z-FV)K^(yqgZmqmj`R1ez4yR;2$dC!c%NZ64m* zr7bhjBjd}9AXK5^(iFEjpQ0JLi6ZJHm(xEt>jrb~;lwxgUIUw z_Sa)_^{O&e)6ZENB95}t)!$%wuOPQScr5=mj8;hJn_Qzhhv{nQI0U#2d z1Pqg|!zLM1yUCQaouVVW^~rfNJDG!>9j8;GG3V>pjMc}%7lYUd6p#L4f_sb~Fzo)9 zqhV0Td4dk+PL~s@9ftN{{!aT39`$Dp;3ckltjOxK6sMxQGhMH%x;F`rP?wR`kn-6jG&^}+iv2eI>ck^b9y`YU*t8gu>4yFfMgCO zA{uu{XPZ9Po7UioDHpS2WE-hNHi;1RY|rP;;R<8Hiu2N&TA@QWIA%( zL$1ZXzgh0>{Rz(_@!~xjz_q88MA$5!-wxt=HVA997(~URqwoDDKX@h(L;6j|4_|(BwkScmR58Mc(c%h& zIqrCYeISFMwm*FvR+tcwn19XHDCa#qoMV2R+d;4jqeGmkHg|B2h)uxkFLs+`0eFE#9@%*nkZ*Z9t_bVkofb3#|Q||IymXTEZ|Y zyfo0?#yH+^$N9^g(rBDNS^-Q0Q!~t=0oGnxzk~HZJMx)M`AuwaBFf-d1gh7e$3C;+5}1yeCvm6LI9$4SBMW6K`|9Ov01 z*#*|nR zy@O=vwPxFVy2!a>{8Pb-b|U4w-58eYExQX)t)Eg3#x`&5mrc#dPohHBtJ&F)whmNQ zu2(&Iycn|>kl}whsI+wAkA$-1;p974`DFBc6%Ydua_f!k+!Ea;mPAWI0tXl_g~d6% zc~toafH*N+lfPi!om-PJygJ{D()Tco`rjZU(X-&k8X!*&z~@i;`yDPY110=Q`JWg& zjz9B8xw@nDfmJ2P_yL*knHI0q<57o{u zCNkWb0#0RmtnCqmza_?B;n!TO$4djB2_Z7Tov^>PTbc|@rFo32)?x8>bW{Q|)$uzv zjN-IcRKT(8I8FUFEXRBb2ys3o;SpX~y5+@|45zfig8K6^SckGYi1z|E%_PiZn+ z^R3KmORi#d{P8ChfPG`FAvk5)9gA{!9lyoO7|EUgg8q+rCGY$lo&OHv9ya^EL~KMj zUuR{oGK;C|;^;m;oc%QY%aeQp#VDbK#lGUFKM59+D;}wBdMNz0IG5{`p^1Pfv5WqT zPDHWO^GALYx&(1hffzW-h<}X58fxNH@uo*+D7O^pLLTA(A~$qJ#Yo5&$(#%yFWWZ8 z`@jjU0>3xcz3Mne{pQ+^^U>utyfl%&mDAtQS*q>;_HV(S){jXT0;(zo@IWamjMF2X zslkcL(LUaHnPt6*TRL_T>DYt$A3|+m-y}yO8L=|c#IddSZ*1ra{x>Nw-MXae{MTNyd z?=d}C41)i+(rdY=i}P=u0Q-YSwE}xoUc$<2c&YaP9w{*#I>^Os;Yh~6XnE>)_V^!1 z!KZSVG_ax{d;Eb91aM9~rt4CCng0M+yG5?ZYIj&o|BZIU^xKW6i%ayPHTVC&c!I^A zIj>bOV7zp;W0C@i)&g>}0?BIX-v2T*wzL3{G>rKT814?M{IV&c+f&=)kyY*T;?%i% zxHDxY)HWf7;C$#G)i2*ACNUG(0TSHQz(a_r<0h8AftE8(THKZeMW>2KCC;|9oB(1% zmSZXWkDiF;3`ABz6oBrwnu;Dmm)ZH-%t<)EM5noX{UlG8=Hb<8s0;?*`u$>5czjf` z1$>IE<-wXt>H)Xbv-nOXJqszv?}PG-?&+$B@o24hVFfRBgkMic;N9H*vI2}!=DDInp zBTs6fQKgMYWO`Uh<59`V{e%B7t|d5YydOBqB4S5c46cnWi&QD7{i*;6I^*+O@mT1Q zfqh*<;`O)x=0WIK)TpiI1541M|3?9^GAx>9x@v+AW0l6g3H(@(-33?y9P?M$z|3A1 zMM-;e(WAat>l9BNwGVBp^*y|JpIsInzMdyrAl8@2y2Q@L02+@tZYDa zB4V&vK{>_Ncfk3f(pPDTamCU!T%{%}dVDL>)U>XWn(PCU()lDh?oCd!Tc^omUNx5( zwb+P6r@t%tX1QZnvhZ9+%8}07#aiGau2PE?6TTG}Jq)*1271B)6;SSiE4!NSyPG9zuQ zq-LQ!1M~Kst~#U0l2;A&U3F>U<-)ja0lQq>{!vXcv z+b4r>iL#f2(-d|V8tg15QD@bqasP?;fioM*@a|r}bkvwlW)-SGg^+VSd_n;=Ww_G7qThlz_eJBX`s&$3jL)&2+RZ76$5XNu`D#U~GNM z3p2+Ep_*I*ms_Vdfl=7Ffl;Dkx2T;m72~r94`P0(Kh=!cRS$pWs_zEo26qOfJ(!xPXArM(Q6F6Fg+cWQjmkyv;=ES3E z1B`O2fqL`ToU+Q0|7ASnXt%!g9GeYqTDR7+0*ndJX4k) z?YM*Na+^E=1|kxYq=5eHyZhRoecLDe-W^*>UC>tcIbCcRYLhxrAS;*D?+qJcXJU=` zGgDAz5{~4KmJ{Fs?5bt|UA1b*^XI9f08E#iv)HYec}S@RN)(isRwrs1UwVl^$l*d< zHFZX3R%=bLX*n3H0QJgtFzNx1Xd8RkOa6so52ub4K~x53l8 z`ULzEW=5<<6c=rFb7s$$m<7VN!cnS$D{_k(kO?Z@Ieiaspj(lu!n=F>h{s5Cyk;HJ znXeCRk6=I1h=o0X-T(5F__045RlR$KpP7Nl^0A=~%=g01S7bC}5}m{zKsv$y8;9T6 zO>1*?9j+4=&o*TP`@MNHum;I}f;kn0${P`s#Y;qui8`ai`|`o|zb#056cPu)IIuZXzK53`4(>WbVO?VcB@V=Bj#l!pDdKW)$JO%Lmmnx@Y@k%XcISU!lY zO1wYuhYoanQYVkn4O<@|;J2*5F`k5TdM~VsI~r0}-!6ZI#a#BW(IPU--h9!uQ5HA? zNs{4TpZlJD&hb?Y)}t9}@YYq4ienaGF+3(u?rQVC`}ZxY`X9qsW!@efIf~8Mx4-!) zd?4ciJOKn?nDp}B8IC^@B%(%B44e{i1@(zJ$HJo_cPeA7-x5!>ETcp1$ zEagmI(=2LyI&Yn|D1b8Xh>v!7wacRZw)?^GgTLd5UmEZ)TycZx$gC7jZp_<8?Vdj3UD^QMnewMfLopC{z>s!gRnY}@)>ePC6mz` zi#4l>?6w}N`W$gx27BhRNV^@T$Wz57L;$k2qiXw?XFk$!NU6qnWv_uR>E~UEC-U?| zXSyL;xp$$mRLW9A_EgH*_GZ1V7SlHkFSX}=>ZNJnR7J(%Xx5sQb_I2Z2}PHQIJoLy z(H*~*Vxxp7y7MX1&fo7Y8nOO7=EuvJtxpC?IyZlV2)`I=)jdeMZo%OLhJIV6W0hGR@1UqU&KPBr#JSb)GKbg^VG&vwib%Ho;FFgK^1C z1+=*c&$ws_lSFq4kx>+vJaR>i@OyHhoW7!?nXT$R%3$ThU1bwHUv0}KyOQZwLAf7r zF6%%*v5c7V2i%VY;jfLTk*2+b45I}h{*c)oc-=HPjUOOo*o#s><>wb=g9STZ+Z#-S zBV&U%fH){neiVxuRU1$#*xfnnVdmjeLfU!e#0Rj*S8N{9)=75bA-Owmj5k7vX4ij~ zM)=xn;yP0l8~%KeIx7A{AXv42UkwTp2N1z3r8oE#JL??}HS_-i0MWD-@i$v*-3n~X_2C_&HdeqtU;!a!V4X#V6#_(e_JvI5DIct^oi8(&Pbl<;yFj}kBh zb`bn-)wW}+*7`c${|+)4zLfK83Y|nmnX@KSj0^JnaW3p*$&did&u`&zR=4eLbYqaX zSqZBW%O19kusfLv;l&TUIF=G1B?Tw#z-lx({<$1K>&`h!;$>b~Q;vYvc$=u19FU@lzguxA_PR4C^@xkW?aLJ3*X1GwO$K1Bw+hPn1hPu`m461`Q} z)1Uk8gf43eqs%l}GCCG;lvMd!_yN^z4OBN}!WKy=>^HvhXy7*MB+46YGQCO?9e3nY|AYaD~y>!!0r))(l!uXb!R1ke@ur znYi1%aH}j)TH-V)bNN^Vo(9uk`{KQ0pFnH(`9md1_2-%Q)CMfrFN;m z%i~S~0iYjJ6-UYWNaV@Y_3B-_Yo}XNrC5mT;Ll)2=osRi%L_?wfjRf|{y&ow)DJ>SZ&J*8Y3s0_0moQ9Tm8^svo+JDtqH#V zZ=SBXMCaRex*})*%fzsDcb^&7gb=*xDch zbV!=G5MkeOkMEtd$X_Hq0ldd#&d**(Wpoy<^&Z`&X!aiVZ+C=1shF7=(E{U0tJ+I! zMI{KMysLsCizid?J-XqL(C4k}JN^a51p59O_)3BCHNbhv>@gNoA1PUHAaV`qgeI%s zf-*c@lpJFdW!EAEtw(?%iS_#8iAGny(*U?k;BE?E1!xj%@*iErSaPYku2&KP(ZClG z0_TBC2v|1H-Tcx1i2pNxw=H^`Ho!Le#ZPTIr z;^Xqq`U{p)8Ap*Ythfy%$CQ|s_D;%>+n=7H*@nz*oi=RJ!y<(WZR$ zSJ?S|AD^+zql+g4mpzW}!Hk-cHh>px=7IR&;+N8~Hw|?OGxR|L8V<%%b|!GY3uZ1Q zv*LYUQ?=Y$XeWwB|T1&TFe zpNdG<8)4}=?K|eUm@Wmy!Rq%{`obO0l}MnMx6^G}#T?&(WO=V@gvrZ7L^)yaBd2d* z2ur+!(y{VA-;Mb3qCR^TevW|Bbgui=3&KNIsfq_OKZmRQcvGVlDz7e0!`gz`Y9a$>3%A`w}FZM8kk}DNUIW(I{M^ zgbm0E?m&G!z60fL{jDgQ%8mbRp3q4tkZz#A@=bN|W9AowOBXgDe=zqOIkUT88bH1qXYo}WZ~H#%yA zm0oAP2#TogvSz*qZH$FZbzV*T(b2IbDg2RezQn`)dlf1nx)I!JI=&QgbeRx)5ehuM z(tiiO%y688?(e#>C3W|`uBUH@)-7l+jJ{}x z1V3aj&&0IJ>`UK>C8f5GB#n`B0v&~UOY`*c;^QuS{j={Wvce;euvv#gS<*&kpjZxV zBVzCTC1S~8LwoV&B}dc25%C|K!QPdgb{)?JQC0eY)g39$L4j5U7sugRNfKQj``sFJ z5-x~trO6c_GNpK;l>sW@zPHHKCViye`w#wu27R%w-gU>|5Lv1)8@@$Fa2nB z;KI6Y2g!+!-rD{|ZOSm&t8h&uFm8F3)YAtp;jX?FKJRT)yiY%#4r)qDE;_uFAcLG; zgtnOCTPLq%P+6z@xp zwGu5QK~z-+CqjI-?O9Hml$X}dMbMA`F^E9ice`?Q6ViE28neMU6OK)r(vOx0I`TQ) zDi`#j9JL)$48q;7;LEh=ji(T0&D8BjRIl1-wa&^sT4#WiPJARxUT@6s6Ht6cxJ`;0 zqY&lLIty2o0rE?Pccs45u7yvlW8Ys@;z?2-Z!u%i`$3LIC9hd7SWZmQ+0}%>M z2Bn!6*O)x{xa#NyDoQSfjDsUR7|}cUfb6Ymo{(Gm!S3rzAw;jt_fia-0*zVZZ{Y;$ z7z15U1;i&#_HBxC@n+ebpLCwvtZN5Ur7UX_LYu1c}zPrTRpn_*g1K* zl-Q)lEGcNKXr|92j>vEFd#sL_wr|;i)<1bdUJ7(>&wz}VflJ~ zZIZ}aYNQYdJopdVn)GuTeFS0k)^d({5 zB!7YxYei-;eM!pGVyVMx?+1EUF=?+{+_M}Wx5bRw%j%nYq-_<+=?`x;Pi59;M)HZ4 z%cHqwYT&zhlkO#g&Mv{dMKgS!WzdC|R7Ubk2@PiZVs~(DW{a@5%IGt47VNae?%fut zs!K26RYw;!e?o}xKIP#O1Gy2LbM8FS8yL-Jb_2B*Zb?&HJ%+%C668tE8xOoKWonCL zQs+ocG(M>#VJ2v3R>vL?c}A6Dr@2AKjEc$aO4N)8&6k*5Q00W`6kK!)FJpskYb9oA zMW=p3miqhCR6u1Zg!_J3ykNV% z;@uQPY$nR&3Cd2O5lKYawRoyjD)zn;kOg{4N%U6)(tmo1N-%7FyD4#BF z$l_%@)MNGrf^X&i0gQWzLbR8T6>qG-0{On0nlbv_FR;e^R2L^rE)tvmuShPk+~>m0 zJMV{ONnP;DzDWckvCCe|fE^&PMm*PanQY}G7|8XT@vk#yxYs>?2fqCey&lFz2l7{p;G8<^>%Zfn7+8WN=bEf5qkV|4uzON-#ZOFUmrI!JYWZ>id7=-{6zS z(HflP)Be|z{$}|QxfJd*{x?~2frj?yiTQ$T3-Q^p^XYS#E&jR{pmIv8Ta2^v*md3j zVG4IZNn(r2u#{%yxBU zQ`wiRl$Dn;QW0;=2M|gt%P%n~eemA+X1qaX1BP#r!SF2rM{6o5|=9=kF$@d7)iglBR48DG9#y9e3lo z%N0yIbMni9d@sjUNqm_w2y`akWrhS*E>M9-GS>{S;@3!ZmsfIJ7F5!>#~5>DR-k&y z74(e&$-1JS76yi*rhIkxXRP4H#q_U`dt|*IPmWE#b*L1)iM%klN@cX?z{QL!|ED1g z$;cjD$S{;r{FO_dg=w1CoF&#W5Q%)u(eL0XEX!ws9~5Rw@WKmTkr> zM(yW?;W0~+^o~Hd?t5GUNC<%KuZ5kPyqfsmw(pc3hMie%GAJA}-r+8Pt(O_(fnXE( zK>C-41nfoVKD8UOa|P6m*CE(22nYfauoDNSq7yrPHWHhBfpuDR=cU~KHW-*8(b3Pc=ZjQ?K>ySYcl{$cf3!`r00 z#3+yi28)5LqT$cL%nv?a+fFb?(tm~dmnioC5jF7-qa$+va+8gAEjpF)51R?IUpWLT z+(yB2Eb2VIq1-9ZdZ9>6WqH}K%Holr!j{xfB1WxgV#)xW^Zd@AeCggZFui1G)wmr zBO4TixhL2nH-?^v2u{3*z~&Gocu3|6I0=(O{Ok<`N3&Zi#46J=lmWhlbM}`5&l7|s zfb4%-P=D)?njr(gt@!~K{1khE(qOcF*@c z%Ai*BM;ZXr7O^GrtnD_R{KMUt>l;|PP8cID8I3-fw!MxM*FXPb_+PIXl_>}?rZ2$^ z#Xo~}D4X)?|C4&W;C~G73M@OYYK?)T6xl%5#}SC}za4g;!{S020FpQ^4o?|?=dUrm z^qfUV!2cXf_zO1U(z+er7d^Sckv!oRKH7T-lQaD*QbcU#@1BQxre_(;zO8GS=bzwy z?=VLBgN+f)5HVM4ksvuR?Yr8>=vna9hd}S+-!-Bfq}5}4=>|twx~1+SUJeiz9?EVa zk2C(&uH@d&z@gsmRTgBBAW=gmdgAk6%=oXQe$W3EVd!%fB=epi*kGz3g1|sd>n7Cm z<5!RM`=VDQfkWXvTMeK9T4)QrUk*JZs({Ix5#al4t@@)t0bwf`Y~O_P1k3F&ZGVk* zu1V&(Bl`0jTf@mD~Rc+K1!SGVSQv$Q0*_7+%2^7i~XC#U!9`DVn8+WdIA`RIOS zx%5ioxVHr^7q}faM&d=N6?&8TdeF58{@>#5X6j{$M8NCyp8fV^4_EJ5S>SCB zRrLO0X$|~aL)O>G{jxg}!8QOsBesjUX_^08<@IXkj6~q|3i^QaO|Z(t5QhF;blkPx z9~20PA637?l@XvzI#XiS;;jMM5mM*j25RxdW8RFASbyiyX`g~YNwocT5+_|~Xz7YV zN_ILihP+Qa;;?L;G*{}j=$GO=AqqPV%Tsh74stQ=Q82Mn&I51S)nX0RMB~yVW1Yrrg$0DBMGWE8Ux=op zX6h$~;N%~0*Lw>OAt`?dG3!-k5gw?tGlk)dhI5g>?7rBH?$H^iO~Tw`W~PKmq!t#g zCY6fJ*^_>UD_Y|Po5d5ZOzWS-gQh)(#EB=_n-;93fIPX*D~!B%{xJ%R+AziV(N3;v z_<`H^ip`+MIO`q5=br$s0`uf_CzN$LQUffZgd_Gli`@@@sN|#hZ1K6fyN6g5e+A*z z3nUQJppZJ%=oo%7d_P%;A39*Efhc&Rgr>oo8xmps5i#$NU%ukDnc}=if!a%ZcR}{WG@vSh<-dz91QH4p~|MWT|FMas4O^FTN1rJote3;8B>_dLDsVWF`7mn zGUW=Sq#l@U?744gGCO;l@X@k>=)GZr{6)-?H|X(rZ<_6eBeK?)d5QnN4{pmC5vlGIh;kAQ$vcr?ARG%);%HyY zifPe!2tgeB$jEe&@36lWI;DZD80}l4nKYIa@xDSZyCcYIp%LKhnvOwy-<&q9l76f9+?9dMmg+g zG-P99^^mDxq6o)L?G4A?-S^hW+j?U`!J%Ql8<3UnQl!i0ejmHSxW_U-R6=I|{YXuZ z&uv)97}w_oiU2Lgv?G`8^G`~Vk@%We_GFV+RH|Aa1VL(%%Y556Cn^mIs{p+(@ra9H zVNG8~$G5j1*%6nkM+GZ5U8-zxtRGoC$2E-u%`$dq6NbVn2-P}tl2jiZilyKeM0!@L z7|DmQOoiQU7nsu0-w znc-b(iA8qpzGdc9%oJ{vy;T`=uY$)Hr#VJAIp^3e7o%3OQ2Q=VwZ2i5)$hHp({_9mhaJOPRoDjR|6Ri(AsrJH4=sP{{R%6MLXS{8kn+*d*O6LsfGuPUHjui*LX zOMS%Bb`_AR8(Kmue1i?DG50u>$0;xFDd<}+x$ol{bfd!FJ!3v23oV0j2V$IDkKEG+*cm<-^Ie-$x zIMEUmy0c7m-DJH78Tlf^QH7u2d3JP!Z^3wD_Vpr2 z&pc2Exl_EvmD$ZMCafl`@=q~%w~v0uACbOmJ*%11^*FiFI-(Nf*Dd7|UlE(SvTEW) zzP_~u9F{c)7(HqlR#H&pPDW0ax7mCROSMbx*Q> zVw~gEYHPcramsv^E3YYszWtmuUoFnC=iCDT`~mq!;v+Z`Gdf`iOTb-UXuD1Iscn-p zwRd^=RK{bY&FdbOg!A^X=4T#ao0fV5V0ClYFw;{f5&mG9b5NN8tyQ;CC7{T1Ala(H z7@rw9KApG3b!bCi@%D0cOP8QV{A_SAihJUsYo+(LHJSE}j&aQeoc^spTf=D`p#`Ko zF_x(xO_oFzEhRe6>1YLb<2~H9RGq&?aH3wL1}3a&dR=|LKU|9k*O#llw{YDV0oI!E z(s@Z%!9_?eUI(r8{MI}ho?q!s>e`U?-ahCuv|Y02TIjtLy^NlmKcC#zu%4SdbUy5> z+#mkFw3rPm{l_YiGMK}TTTRr&b;6Y-n(Q0s9@QSO> zRwuxVm+9(=x)|_QRVRTsx=@;INzXR zH0EiSn!m{ThH!jy@OgNgPiF&LJ;hAl?T_{wpJpvxMw*V>`NrkuNcwMHPPMg{;7V)r z=gW+-R(SI(d32xr^!bCM0Kd7xQT;TuNk%PXaK2TN_^ao@^4H74le-2i7)sTj zw*UODrT>94)`ocOE2Zev^4bm#Q+t}+FrF#cGdFu$?aUfJ4QFHv^qB*Hpj*O_k;71s z*4^Vq-&vSFCKX7@s%cmavJ6q{wY@%EE|JuX=>^e_PR@07hG%71>lx{BimT-97gyxb z|3F@Ag-zj-wtR{(TO|2GFq8JX>Fd&ZH&?DRrxN+-3%1Bx!70`YhiX!M^7pc)Jn6Ki zi_ya+#Eq6U#iwVFH1lc$&Rqyu5TIcQyv<}3ERYKR2Z7Cm6-%x$ucdJ*{^}WS_ z=tV(Use94~osx26;^uNP?JOG_d5#&DoUX3bvh9v?gf8939T5w7oC@-NdOu|Ze}{FA zdm>0*lJ2GlJPvORbar3g6W=`KP(Djz1V`-{FDiZ3)@*GP^7zH?`_@!o5vG!7y!TGq z=BqP>5OW5U#>NBiGR&Xz^Y$0Kfp0|g#>*OW;nV3^XUduXoB(`J_v9ug9b#SAQ=4sD zlfC#b^6F5~Ajz)l!RixT#`EtVH^NVoRNq`q#e5+(lh0GyD#*yD(HMMxL6^p1RniOR zcE|~6zr6SsJl4!6J79-{O8(^icqKy1K~^89ww5z?gnse6nN9 z)^JBDfvwK?c30L>`Tlp;0BS;E`#YDNXT2`9w{ium8NRtO(6jbX)pJ*xUZO@(YWAiu z+Yn&`Sz^BD!y#1aw>d_d-^=8~VdsQBiak02c_mZQtw$Y)>(jhC_b0x)o5@XHWdw7; zTK*V@JY_%_*lyqVI$5urU19iy9BQmcN-zeiK}pc>0Uhy?klx?d^qnm%V=CkiDc3#L zd%}x&l3DtXTYghBn{=6%c?peQn4d3hW*9%)sJC&t;_E#%|JabTV@B4@IbY8Iw$=)H z{S19Vms+4I=mF1etgIr&_C^X_CwL!A``5qF?cqzUtS)~uNqWgMe z_RZzB_QHqzL#HA6>W1u8y-YsQ2{I1CXxq~3;}_QlXC@J(fu2>=yLCui+kOpzj+A5!S4DUC37dU(HWoAX={R7KBx7JnKL9-`x`#`wN03dC>E58s?P7(=O zt7hE($-SMPHUGM{90JWLj%ep*CB>?wEYvBod4QEiWqy9^5BOz8!io>(IqDwy3hFL| zmGY4MD6EfdjxHx;xN<$b;=0=p> z@TLc>zg%?7J~&jOJ^h+*M=)`xT5nr^eQ9u5aC?35tVy=zct?dcmSYh_O@T*-J5-P{ zkO8D-5c3MffW~b=>8;PL6VPMU^m~R{*QF_R85tU0SE}~|L*Re{eJ)>(tr0ww6aO{D z2ZsIMylq-P?i?Q$Nk697giBDS)2@t&I9ARED>=j=w;JcNTm?AGBD4|mMCsqxIVIpz zOd!@FA6@hgwtZXkf*B-O)Uiy3#(nTZp8`D4)HRg*AXT?E9@_jkKi3GlzLS$Kdf5w* zMZumqPgM7jBawnPRP%&m)Y5B(f%e?uO zfUJ)7&MOlUt)B}9;=P9Kwb-=zA5%Xw+5RA`F)#H?@V*}T7HI>_*_l8j#QciXbqP`Y4C`q1zG-&tC(>6I40v3r z+=}1jJND>(oAB{mhT**F)SHRa(!_jx%&PYa26n|szQ!uwOft2uHnYCDy&#(F&?QC; zJ*HHgUSuXd-*6i1Y(Z{Uyy6(+y@&p$b+j5?xdzuVdS`qky(H{w1JBl+3fay97-;-F z)(?sp4w!67`lN}&6g`_W(>N@&c^@S{3Pl|Ls~QETT(veiC<#+XN}3Yb_HEh-j6s*N z#tYgYWFBM*$2!u=vG}T~IoP-BxFy>2)TSlqBD1+p~IxQ97v#hg}v&zPanSp>2-eXxtf7_`usLw z8pq=1*!O(-_jzwdJK(r*Xm!4$ct4WAUP4BY^NSjKz6Lh;=h{zr@<`Vmq^w|kF)4!(>0ASM=I()!;0awY*M9=8>w z*M!yTr2}y4S&zzmC50|yk=cY`yM`GX@0-%q0IHH&yzk%r0bavfim;0-)ULc($7AMR z#GW;}P(6QnWac9iP~}0F9dg{@G89ZJ8??-Wh_48DED&zSxfD>B)#Z|HN{@TpPiKQ! zvFrHwwP;2UoJZW_+O4HIeZ`pV_GI_Vp!>BD^@pWRPdk3Op3LT<${jWsIYx(!T+Ls> zBVxkeec+3v1CB|E*76h3yq@mPFRg=-v#Q!E&vmw0g~m0j2&O&YYi*Ah9#mRFJ5C-k zrAq}p0-o~)o%b&NFfxedTW6HNx1|eHPRuxVf?u&z#72Ds2eV=hQ=tF^wCxL(z_Elo zBq4CSzw6-AWY%2$Fp|4U)+pk#4Oe$yyQr68o6$1!3Ou_%LGSiU9Z^Jnuj1O1g}15E zg}j_ZbPZ@@a%OcmJCwejtd`DB@Wxd(j1#l{hGySg+M`Nm>-28U7xmk;vY^~FXv9f+ zk2tVLg-$ippAAq-;*b;jtscUlTz3rXWyHg!5aApok7bK-re~8cu$*J0w8aR~XzdPK z+ZdoZ2ORIO27C$ZU^znJ%@*|-{^a3`iy z-QM~3WoVG3Ds`g2BYNXz>O+uKAQh$x_R)6yUHtbFeo^TXnjjt)Dg4yh!%mdO+SkkGdUwnv0b{_Tg>>a$X1Zi5IXLr zZsakF9M&-6<@1ak`m;@l3I6K6!%nf>$!-oqp;HQKs!z3B02R7*WDD=dhUp=xk$Cq{ zg$stcgf(9^`7Gn7kNk~8;(a(ECLB4C@{PKY83sCJ0j%0GKOK7SXCtZ*+3htez6~IB zlX8HlzMA<<7i;%ZQ*m2Pxa zt(fJmxK+0Cd@%CrGN{>S{=h9PuL;CK_K*FzLi4bjrB1m@4`}d9hW++zG_5Xsj{nAHb)PEkfs@#lDjPA{;A${B z9Y$yD-X3E)Cjcj zq^)5+5j>7YI95zC8sYbSWukZ>6-{5nCxFI#_G1~3nYk~AqUU%>X?sHPArpDHFAM@} zyo)6ojPj_cSnY9qdlOZ<;^sR$eSY+$^o-s`Vu)}8o(Y`VjSuPp0 z{*`2Cd!@AeqMj}8#?{)B<1!LJ^I)NhODMIA+V(>r!(^#%7vdg&q-vcbzPZHWO6*3h4+0ZM6Q3v z?r$SqmP^@C8^SI$Er^wX<3(AXjXfjV?3!*2Cu?ZQ{93^g(x0c8YE`UELM}4QI2zOi z3Cxen+FiCYj#aDndssP8+tZ^F&9pWmnG!^%sjZmaR3};Qw3^wb=Z)0Q#8V#vc!zGO zmJd_Vc3g077fsJn&&E`i4OgtPS*lQPOEX4sigkCoPrF#rChFpVwZ*lyD&$w>jy9r~ z7tk4~9$WPTJ`P59K#Norwqa9c=w6jmbE<02<@Dp?8=D^BCm=yseQ`+HU~K7vL3Lp{ zkeXZf_|b;5)RF zDCe_~_fLS)L!1oYVV6)0Ei&xHjAy)$y%HRC71ql%hE|2^un)$z{nI;04_UP-B^+pT zbc~#D`IAyDk;&B6mylCzD$hFPGE=%Iy#kxm#jo;}h!;NU3NtA35;7iIxBL%_m~S)> zE@AnY@Yj!WsjQdfB}nnjTU#i;bSV;&ZqNSNfw3Rw%vF|wW{+m|_q0^%F}bw;TvW^- ze#GBS@e^9w|HAtCOZK!}na4`ty*42eJF;Ll6$WB64qC@2`}hJhBHSg7VsiJLtFH7T zR^!y1$~g#88Y$Jd%&ZZ#gf|5~h>5^ohJJQevBrVI%+SHgT))Qiz4apGK1{;B&Y5J5 ziZ8U(=+i^E3-IaZp)eD6>M zKVvpX+ItaWq9U=;s4@q4v#2O9Ym|skQh!$SV6U7mbV{2)GyamlLdq9_*4LHnmCqVC z@L_7)5_+rqGt($dm9zkIsCo7$tIb@^#mdeoyHMnqP9T96R8+1CAEoGhfpB%1i}%ur3b zy)-adr{w$fEB`pdzA{dQYpK^N?#< zH9okTc*{&n2!pI?mrIEe!FXRQrnb8t9;IBmPTZZy2QU48w+&1-= zH~pI-4-|Kq=dP9WP2Pg4JeqnK9;@&D0E@R)t?NzC#&NdfJRmP{+5ZvYxGLNR@xz>ivZGMZAc~ zIo?LuFYz6(j0V;U+2MQJ^_BfK-g0Miv$+`x3V}waZIj?d8{6A%rX?}%wm!E=7ggZ- zg!)T2>E|zAJwkPQMFF9;Ew|q?z6$lv9Ig3i^#JJ&wL4f%#N>BlZ+urBlWCk^96p8U z;~uES=Q2zZx{bqMZeLg4>Y3?&gi$;DV&gRb*f{k`=2vWk*F^FN;(NZR{f)?pF$#}y zdRHPyLdL;;d;1Y|!$x0t!TS-c_269KbYF{u_@aJMeG#V-g_7t~=M-^zuu+$ZOA<*1 z@c|-BcVt~Awi^+EbOvCA2 zIoeVJYi&pzLO?!KQyiGrzm9u*{jDYHuOEaV7z6OcNAHwM)eC3LI~RNr+@<%)KXAzk zPv-S%;!DPjf_nG`hQCA3lML|lX^UZ`?J{MZr^3glm-APemH6t*(JE)MSc`X3EWd^< zc{Ake^F*YYCdI7`kMj&laE?U-Z?P{7TN`2Ja+U4j6HVL6YXvxTT~A2?QAL8ePm*M6 zzG?2I+=v5L+xS*)5cn%UWgf1P=EsP$Y|EEUA_R0=Z+izz#~?}rs;AUK;d08J0(uHL z!rFr@B#{fFZU8o(7J#Z){L^_hyheD0x}G^;zqSD_A28Y#b$Cc(^8nCq>kiHyAaj*DKF zao{UnInMvf2*ORp{^MCDfR^B%dJz44t2F&%uKo1DH}_8kD%@sgFr~?{MNkPhcKQ8( zD%nCXl4J`i73j@o^}J5!!?Ex^LZTx;O&d)3$~@eI4c+rxCn=l|R8`gY?5@^#0X|p8<`=K0Mcflk zvg_@e{+~>fMe746Hxa73tt79vhEFbdrG#+t56pV5<&URO__^7YE0~t!F4{>D3b#he z;<<61)H&ZZ($}SGW3Eakn_aSJzF}E*&;GpaKB!j`*LjD#s@3|2v$5+`74YjaqIu$H zPtnb&?};4BqAp#uDv*%0@GU%8|px&LNFOVvlr4d0Y5)6?IRCxSiS^=0*Y{)*<)%EpGZ+D>7(KcwbncE$@ zZ)-ZpjCz_c$DR?;%?2h$`?!*je#5FN`GIVhL<$#R!28^{76|J)2;Mx7m9>UD7JBfr)@ z_SHmuy|sYj4%BTmPceWo%rmdWGUVW=qdX!WZBK}jsM&d8Icv>UfANl(Lpm%}_G5o4 z@boZPDi^QU3N(1$c|+f-jmqA0&bJxClcirTkw~uU?8pC(pcjW5|I_a~s6s03x#;gn zrMW!$xHr=ySkZEza>*t*P({hDI4Jj789~OmnLqkkSei`edP7FpgIBw2B+e7R%;(qX z&%w!Uy8J~Dr)pnIHfoc#_-7rh}1 zKkPz5{VID;6s^IXB4aFd4uY*-FY;|Cp)s~G7t{EuDL$#Due9G}mJY(8q208t1N6W` z?`OJZQ+J>EnN+PsrTRFevWLfx5k}ftw>}#h*FlBgAAn`W>&@4f;*v`lMg0As##h%E-ZroDSMN&nZ<}L~bD{quN z*><4ibbQLWyXCd=oRz-?q#-ndTtMcXjf{2epF`R=2efp zl&!Fkpj+{YE!2wDMN~ZX+o0q@M^uCZ1G=BkzcOn@R>IQ6tn~WCCLJKAC!@^}E_rW@1C(K|h7@r}u*rB!TwqItl|gwGu0xsZu4Pm)g`K1ztWn z`vrBZo$6rX4hlu^>6ruG|muBP2+Isn7j7T z(Z0a5oJO+VJ2jeTQzyJDJhq7zP+ooZ8|&gijyl)jIL-=Bv4ZYmqB zQ`dKqJP8kyd6|hj!tL@u0*6=CnOMDj)tRm|jXfPm7HW!;Sab`LL{xRP%l_lDo1ZnlUH)tYqa3i4O*k{E?p@*}TvcrcnjLMJA*tXJ;7H)>w6ucE~fQ6hQ&&PD&Oal)RV?uDO$p!Gx%*&^-+90 z`QB_&sc%XINg?A0+{T3$J8Y4Xh|(u&gyN!Lx5<35R1FKgcTT-Q7y4+xk3#~9GaPEF zlm*L5rP;>^LdLy>(TTfaa#EBoH0~JQq#wNjC5y6SYcV9^-_bOFO|o6xZ&Ic;h@LK4 z=}{v>Yx1nhjeA#G>r}#4Gj-4N1rrft-Hlh>`;dJKXCnU*Xdlm?h&*@S-zsq5ugL8% zmHA{bP1Y$+6c7+k8_>! z2JLN4Ua%af-$$CnTrw3*W{K^kP(Gq1JK`q%o6E6YfqNz2Cz4t0`as*yf>Mwy2!eHr zN(J}Bxhy9skXOEhlpOh!FEO(%=YDiK4(Dq8>0E!rm*=Bf2@^AWtBWVdNh(;-299IP zT>ZQ(Yb|;N-G7OcA)V6WAGZ= z&2dLKzk|AFPp9I%k5NAaW$=!_7WwB?gLPp-hXv1RWwZD<%_pQO45l{Z2GG~fPwWX< z+zmAFDxc;fhjhXVvv(4NDKjfSS2j6$GQ$bE&~LYk1yOjsVn9 zn>h2t>RFjRQRIW-@?!~~43c#S9U3^`Z|f?dbOR#MNO&>k)XDQWzQ@KM#X!`7X&0rb zd)8N9E6ll9;n;QvEgnFP>?#~Yu-CMQOXu3Q#IT&njt$(=UNXNylEDHfPZU~|9PisKMv>QU z)riJu7l;*?jyFe*8K3(i&)h1D#w3ZjnYogieBjvf<-vj?)<=|hL?|@d?f=40Yur5E6H$6VAu^gR(ullX5x$0>_1Dh_Va(r3 zoaw*9NSd`+!}VnLJW0SC4$(YD#(6we%Tj*&*}GTNqiH`{+9|zjDUfJd?_LDsPCPjk zCW9rG|9;AW)EN`M%7oru=-zFr?7&~+J)DXQ?fdV9`|Uzn-k~@Lym5cB)s(0XgBH$p zzSQCg17fg;6!#)odlTsNeiS8`ysM$hdJJnY9O2bK;%mdnA-?%7^=@W2RSf!EL`JcwIvLXB zO;ZufRfxe%Iej-70z=qYNOipWmPWv@^DTM~z?;Hl-#9nQm}M)s+T1Ydoyv)HL6P0M z|7on;2oKFp%3<~Nn|dJ$k{z<~aC(vQ7|6Lsw3ESgPUHk+FNALcG8qpnd3Rv~Sym-U z*u*1me`%PtZS~GY2BUH?iM>-nuUF#aNixn9rIGzKB}l3f(|^D>kgE6n%EJDjpsvLl z&|(Ptiy?njBEXebmiOMcV>(ZT}ThsXt`8fD#-Ec1uB?wRoF_L{k z*1sjeK^eZ6`#~00lX$+-A8uBTGIi6It{p+r&8}A3Q8}f7#sSi}KBGgJvpUj7P?phO ziZFNkih+9c@7xBI$^^W#y>vCY^H6rR!0sH>IR0_obZ|oLk1OFC!WlN!lqSPQs~Rj>U8Wr) zW?sZHo9(GL>CZr-oOIa)eOX7bpSR8CQWFxs{E6SMWDk zmkUX{#f*=tmlXhvaolslynVlR1jOl)>pFw0bmxCb8|L|n$bto+!3aWNDc7AZ!L3DT zv;OBh6|HtNS^+*(a@26#JJLVL?CrZyHjS5YnUFsxC@aKoEU8!b%+Ei}n&kjh`g z5eG)6iDgxrx0Ew)VZ}T+uA;Z%q#AkUq^3ZI#FM)PdTyT&FsZ0ZbOLyBS3P^GRET|2cT=4a#7eUzzbQo9 zo`}+{6WW#h@Pk5ZmYJIh}qLbW<=^;Jr zFCRfDJC496&%tbjErl$EX51HWL>J}c10@uZ%Af7Due#QNjco-7=YKIsUvTXrDq&vU za^yzpvPs;I$Nm(4=Hc<;)RiqZ>Yu9jC)6z6r19H!(>Ra54h1+YizPf_x|&{Z*biPI ziEOyw2wv)bQnvWw9b}GAwkyLKN?@m z_z{SzE~?R9vECNSbT*{rN_aO% zbz=H2#x@bOnp9ff7l{7`pDu0#bX}o*rN>ljoLx%3sm<$WH#Up2vl#q#0xz?qb7=fj z<6tAR^TN3$#^^m>9bcJ2(*q}+H&l^#qPOtUBwJvd^B$U-=C{7Z;V(%xFi4e# zQnV7ojvqB?u_S9wXiLdV7bMaXzWG5GwN@o7a{81}LKdIHJl*qknvHrE2upU(fx9NV z-jxfkqmil}#cVAE*z1R zHhT&_pY+_GeP&o`yFK&3?Ha0!#}U-g_y;M{2oc@6{#q}#!0>pbA*5@=hG`yXEeZkk3LNcVlCbb%WooRAn}X=J#nekss?or#5+% zk(dk<^RpO56V{^zH|_wrRlU+sR5e!gTBAZtARF+ShNPJ6o6#@T$NpKl z{FlINSTc|Dpmh|Br8b%EN`VHar4Va`qYn7*Y#700hWmV^GC%k?&N%_`sP9-lOolt> z^oB|3Gf^OOXo&`ZJ$ERVE0{)wC4wtcBZvY5&w_zns7jrm;XR+|;pK)SmS0JW-nC(w zsLbxRR(edA0h~|mxsYYI6L}l?FdJRvBZ8k*kGgc-?&6h>A>H*m%-G94(d2@NVBG#R z(*49b^qu-LH}|?fwPR&lviw-`a>)(CQz4186_Lq}P=gBP+Fkb_!MNi#4v@&n5>tg| z)G|WRRaesmxnMF6nK*H*e8AL;Yd!lVThuOQ0nct}uh2}3M=vTLCwt==ZVvqIb0yR5 z^L}hAmhmQ>JsAa78CCH2^FS)PNOvqP(UwU+o4(ZO#73QY)IYD+P!+h|xbjv;?qpam zu`r^P*oOtW@IuSWV@xV|$}14L_(E5^%WKumIY1K)>r>hC#>8@>UTGH*$@||TtYvN! zc#Oy2ha8X7R4qBn>l;{`uyM9en zd3(cf*;zb~#I%rO%M;eHZ)!(!UKeOmEaB`ZNCq%>I@ndG#-a=z;!IoAeUx9EKan;` zi~~%c#x?!gW0Vwp!7pzY4zccIu>Pf!8LM8gq{@4Wc4T@~4^1}Z7h~+Vq}4}Mes}-i zTUBM(xw4g@xgX#Lj_(SQvHeDdC}XrsxxC7W3kHtIz4snNZBgC&R-~>Xm+;EscA0zr zoNR9&f`hytq0HVj)_UhE5k;)$kT_rXC;;!YHzU3Dg-+t4_Mr7p#X(9YZitIJ9;tf^KX|Q|IK22!QiB z**gzxW_9V*-^Ku(#E(u=jYvE<;<_KC5h{K)hi1a_>txsA(A;3!j_SL3PMPWnnVDp@ zi?1uHCFRrQ-ip5A%-MRTU0#D)22)@)r}6M$^@{AWVYJWI(MoiW>U~j-u7kD;&-N>S zQwei^7oEuM9Dgq>HFEt>=!%dp2CQ#zVJ)wx=8|KJ>R{Xk21CYYdj*xK<#Yx2e+GuW zBv*JI)^;Mdb43#lIH+q0X9^%dwI$EOF zn^EjW4#zkzlZBBQ*;LBYZnc7mw{axv=CQcWE#ry|rZMdtB{%UdbNDj~u#d+MG+{9& zhGGU;)n(410=d~x!Lbd*o$s@ z`&0)}!+VM$NEBuZQLyfSXip|bLYVRlT|!QZtXmTnOP;4DE)~RQKaKy#);mT=(zR{F zv29O`iEZ1qolL9=CP~M(?POxxww+AuOw5V%_FUKfXno(GUfrv!_Nu+By1LFo=Ln%S zg^|FFO|G#p$-{wlPCA(`a;D)CT446?`2~&+A2KH4=3{1T6`0(EOwx8|ONFG${TL1G z8A%gy)SpEM$IL64naCi~YyS{Bpl@eOx9^KS$uS(1V79X$nld0=l`0TafXtPcQsagu za?EI!yl=erHd)PWCoB4S``nJ~_pt0_&zRb>1B_#&X_m}@`GEO0;XLaFwtCY$p73UJ zQ=T!_J}|ut%9Is1Iu^C^$PRsW^yMDt)|7@1{w!ev@Z)p=^{i1|k+)Ol)r3<#SPoP^ zGMuA7gZSd-qtuxbQol1E0aN%DjP!K$zFn@zm$%#4sn~)Af_;cXKxKbFCsB~5AcBLQ zmz0M`xD((?LJhC+x*>J_ivf64=fhRsW)^z55H|V&_w+#$L^jXK2f_H{7KNlD+FvpQ z!EB;RWtMYRu+|j%ZIh#xHW~+QOB=@U)8#dLWqsvS>apw-Cl?uTOE1(@*&Hq9^{}3v zJTuKe&%m(x$&df@?y542dj)73IPIv|J(R7;&AxK-xpy!dR)8+N2-H0=J5Vw5L&}m zsM$_3P*zDZr3C4c1R23 zKGct0L|fRNhErED^>$YLCf-y z%MYhs!OrVaL_2{(=#opKu@s0LHeaO+kx&JGGqE+QwHe=s(^bz=DgOhFabbiMnbXfY z{e%@-_E>!7`r5U!vjbj1s>u+G79|VC0sOmt>m_iv#h?Efz8{9ZX^lb~U3tkCV&ZYw z@9zrehOXX_+5OQgrz^_59-)~*h^K&86ssdfh8&A0&2Qruf;?2RIBOG$@TGaw(F9?U z7c{Q?eX1?@`4An>Dh;2~H9+7GRt&U#p+;pCNrZLRTCOtOiJ$25&UCBxSM9Q8r2$^a zl0W0qxx7cy1UCT$bBwON-n*pCVHaPJBb2^qckGMp84FVGwGHFe&TB5;3>&16C zP_4sqUtHpAR)aFg&!DW5XnXy17b36ad|}JtTWmN z)SXjjDaq&F{Mb?7^I2Fq*6o$hm6E9~?(N)))}i(l^2_slVD+R7?XGI1@PA4tgevh6 zT{EueeA?V^>W^}<=5x42o=xH*0|BXa#q=y2qyzLUdJ-2hr1_O-K_G5=W5Zt}6>(Ym z>0Hbve5V|dFCI?}=m5O7Oc;#eah(jLjv0@p+(0A6xV(<;leY1)Smn>+3U!m>{C2z@ z=O#@uXqK<~RFAxCkYE>3kGHQ#EF?Z*7>%nW+WO-^Wq;Sek=Ko0le9Wnrtq_Mv%3kW zK)v~!#zqPm1l32!iHFpT<~=MrN(RPm3azimqFP ztamM=j-I1IDES%kj$+=QTmDs|ysX;&cHpvHp2_ubTL@lh`{xFEsM36%Ec7u2310>i z2<(kRR@Fm;FtND;B|Wh%P|AmTNlfddn0l1I<8%8)2SP1dlhc)hEUuJ=o2X!oOis`G z38DUK{Ye-JfEY+NjW>d*ok)vrz1y9R#N@#`b`uVa5f2b2h8u@HbcuJpfIMT~1Lv4$ zwa1KQ;cF5PV0WIpDf|9~(SgQB2->5wXl5nL1eES{f9_2F(D7g_Ea= z2b3+!FQR31m1mHCL>@?&Ekqw%kXDNaq=!iGkp*S}DrvD{hd2|&)#b)tLx5Y04&{IA z-J(ZB=x_Gx(_EL0?`Rjgx(P8gc{a`d*oG3NQiYIy(StchD1Ns=d(k`dl7jyd;g zroA2@#S{r4>ZJ*(B)!of#WXFHHK)OJ#py*D7ASh9nt>!iYDM5S(G_IrddDMy=Fc%> z3k%BK!XtvZ? zr)z$?YdFMO1YV+85HWoE4%dg!P!RYL;*J1|!rU-$vOqB>BObhQgpqZk%$?)mpCx~y zKWx3ucl^t4z(bLVak4 zdaH69a%q_7^3XW70c91>jert5E4b+(Ob$3RWAUQ&*lc%O}*q_?pTJ5K3mdB@6)oX^&;hXcl zuB;)o*6}&(1&gy{+k&H^dQ|7t$ov3QVjl^n(!8iLir%sWk@tEFN)Y`0J5~!0Or`%E zJ3(wb&RIZ)70YA4a)wQ~YleUc7?6?ELMyW0ZHcFqK*QW6Z}SQ-GSM46Y$3=S2w6Dj z44}O}p(0cW?ka;d3qtFmffX|v7rTywlt+}!%*9b<*%|b`Wv&z-u&v_;P*fz{KGMw>o($Vsx=)vs~ zXR1!B=?0!qm1nU$h#=S+lEvDhe-BO&FLI}{_(CBCmKkH<+Mt)zc5zJ3Rh_vg3q zxVVd%ExW$_wS!*ga{*9!dU^Oq<)c<-kPDFsQgc8=t+BcAui7Vb;;M&qJF$w-!|wTx z^MoROPkolSGTeAj`P^fFCecLXlqf?`Ls0dvb_68BaqB}35F7X@m<{_Fg0zFX8fQPf z20rb)+fQ1y*8r!$HXowTG-bcd`ZW#(;SUo7R>QLdVE0SZ^R+D!?6dd;!y97wPP{F? zeZ1PO6?JPa&T0y+p_2flVUyI?5z;apUnV|&Rhs1(n0}mn3u_c|)8`M}pv=TkRfX3# zUNMzAsju}(CIz8NOalHVc+rMh?moQFR7WbhBs-|+HO^zv8uS1?JEF9XHnD>|V0+V!Nkdlc@0-#+OqrK?B zd>vka1*5bUt{2tovREhmi@>`MO+adA0JzGDyy&cJwN<6@aPcI0myE6U5F6hLw*n!eQA=lyNhbVpt+^e*O8{ zoOO%uGL+$-0D*-Y*h>1-MOQ(1^#LfK7xEQBbMg_%UF>R)Y`v!JEHo!HQ5>H52`J;4 zgzeQ&#y_|C$};QIBKYF^ypB)XB4E?w9V3T37ZvYdmUe$5+beZ3ztFcxBKCXsc>HSmehv{3E8N2KKhDb}QJNENpeX9|(GHtip$Mvgto<_5;S>bt^Pysu;S(ohPyJT(vE7?1iq<(Z=;x)KBTi>|vZf?(!7_|R&iCLc5`EDkgp8!K( z0{Oh`oZTJDSvzk^P%Ss*M`yRK4u$o~On1hv@7rl-WYlj$zt6c|ORCOF7nBGFn4tft{Z@%|% z{$U@lQfaEWRBANh|h3j13P=uY&hunGkf?e@ooPHIX>Ry2ldVTX5eLE|Gv@<%N z&6skzrLX;D|NPP4PCG5c3NYc+aj(KXF*kd70sfMn%uf46UN0O@x9$hFi4Qihn|r%U zpgS1e;3X!1y-y4CP>^mu`5#llB_W~zDmx={4V3CPH@Nlfr} zN_faMq3FT5p!4Mtr4%V$?cqD^NbVE{-d6hZAp+4#sX8HPD`xpIx`ELXdQS8YBD}O} z_^tTqWCZ(0e*m5}LaU@8JC@5i@8^CLwwWU7y@FW%r4vw_3zX)@&z8_DEhh}>lG-v} zVsR*uWqG@pO&x>}cw-Ju>;D2C2AscSi?5V$z_172hcxVDJa@tnf$k(T74ogL)u2ht zL?2&)(`=-?87-0N>3DD57qd5&>Jbm$W|6UUf9tzafEjx$W*}8~bKF$FNlY;+8$!12 zt2OfomJ6LSytW|E2TKT{3ySYZPBo@7tT1>qlbrYTT>GSxU`3fS-H$5DLD_-v$YL@V z#2$6p9ZiLAsBUlYO#9bBPX(}N+(qyg zfDeX2o7lYnnBVp{7`9t7al-wBF{xCQnXD?$(A5~G@~rp#ZV zeD)S&tyZ%EA?AUG#ML$@xC9RFWtr6~oSwA5@Ur%s!74De)pN^Oib!Oao6)hNR{tMG zCdA3q5<+7%9$x*c4OB9KDO*yZVG`~gUq=%6^hoD()#b zf>KjHaODaSF`!rE9p=;IKq*O{>olI#x><5~X};-QYg3aHLw7tNYO=X)V76FJVx;Lm zT9SZ#X&I%UAW@^R<`%8YOo9pdR+lQ7I^k45a#SXXI*s&n7fd6jqy)02avY6^%rdfi zwSF?cpL8)dM`=VsuZOiaS$2Gu#6s=6YaY`s8B;Nxx1*jydp~R^TmJ~11rK_WkWiyB zNzTxP$02+LFe!~{EW=ChJhOi#94`#8#BLrzx9(sXN3Ixr%({%**yj&Jz)GPEZxIm7tpY|fDGmzT5rDZ>t zJ~O%8Ek&lTOun9rX^~E_aVbIZmlAw`{)kV`W#PU)MTMu)odgO8)v=IZ&f-Q~^{>EY0l z-Trw1QLsV;O>$}USIq<4%@p~OA|j3=(<F zsW?b|?G*m41d;S`c(XcgqY{$Gf*tf%ySgIar>QO?kz^?VoMj zk^U4&_Y zLM1G0n!d2Hcr#3&dRMtEP@X33wjB{*p6pKB zGi}j+Pig<2h}xv4ipLy*@;hnuM@oUMM;|ZQ09M+ZpRIu{jzD>-dTG*Gyhpy0!&?rU zljpTw8c1sRMo|+9&EQu`tj>A%AV_-X0eycYGs(CX9C#f{mUL(FU8#^`%5!W$14BLx zgV$^nf*en!WH-!#IQ6eG6qwLf4B0TTw7Kc*b(0&_8MgpWv1d5n1aEUlE+cRX;A+c}hFn3F$3LQt1fXe9JCid8hJ6V7J`HdX%(6NQt0(I zxwwN9rO*4&`{`n3XS3t|P% zv<_ll(%lm?@~Y&4?hc@!9YD+j^IeN>O>q>~04u0nulBXa0O!GcIZ6I3mG)wSIK4lqSe^LR8glb!fTB7vR@kpm z<8wSA6Ppxh8)FldHL0rg4-}eYx^H6zDQfmu;h9i&of#@`q@F6jeZ?7Wq7SJ4Bw;m? zONhTpKuK=^epxw03!b)qg_BE9Uej?d+rli0$gV?0YgE^kge4O4Qyasnw5M(o~eDSp!m9|P!HBwJVu;ee9JRfOKwO5 zCA6$7l6(>FVePLBmO=f$Ww6+gz!?jN0M3M7pS~8;$mWUzVWf`RIHjs8xH)q08q=}S zxRI%z18Es}r|^9DC=_h)@36G8k=wAaJU@LdfMt_gz#J-bSX-$2byfRTW_YRilla|f z%NFsNIyM-wA}5eu*|6}7PZ$e?eR+)^ktRC%GJmX^O&OJH8!vStI2NK9BxPX)SQh}L z?0n615xkqAN}7#)`xcSbe@(9%+oi>Y^o;_BgIB}fWAJS1BTB{3`9eCon6eQpmPuyW zN;g&AXd|?=aKrE*rVT5+=oGwd)GA&IE8HwziahMQYJzL{brEUVbv!DfqQLsZW2hb}o<8=E7ZeX#aVK%%krbO%GMOcqo{FnEqRpWTyKcUb`w@x}9Wtd-H2 z34H{47|nJ0F&84()aFGbSgEUD_!DQn#;CUyJoWou?dq}XDe|Oet~hBOHH_^82v)!; z)5)9E{*0}!tG*yo;}NZNN*^5>4bIU?@iY#;$S+&GlL(o|2Sq6U`MyX%vDjY&7aK0N zF)P!zkXpFj=RFq2448loTK(zT4qWgg39D{$H=Jr~TNRmyXmQdDvDC70utAc8PnyVh z0rEopmBniU*C%>3*h*}+Yn_*-G^ul$4edy=gzp-CaS$YXoJAV%zeU=<*GiGEVdo7? z@0(i3OXVQu!th9IyBYx$Twaay=XyC_jU^QPN1AE^{SV^-pm#49p%%X&kKZq;&#t=mcaw)PBTUe}ShY=sP`W?~J2@!;xa? zF1ZYb1PSR171sc>z|B0_3g+}~OD*zw$5iD&?tXt&I{fR%1Zuvtp`-nBL!CSJy0*Diyg-M~Oex3*Xc|3`bD;Dmi^8Z`-XS4B zXvXQd<|Gf0q$7M%2XP1CJv9Xq5{Y@M;St`}1W7fk8i0o^lGCceq5ecL&LX>1NzuCV za6)=>Q(|Tgh1a9#zgB*%p1&2|^Ht;)ArP9|E`CYQ}V{Uxn&%m~U?dRqEJmB4i zsdo2JS2i-YnvPG)$K9X6Au{4IvF{@QYt@+GvFF;1Fz(`vU*W1kfQzY<&Bb0yyFItN>nHV@5#Tej5~FnH5=xSOQe$#Q}MAIn{_HVWqEi zS$#pSK)hw7z<-`#F7$z@1Q_9128OpoN6svaXEa$NA;`_a&DPpxSJ{?hru}|thjkDF zB*#9paSFOEP65_#>K7afPf1%a(x`aBQvW3gP5gO_tD0CPZ^D+7hbrjJStAIJU zj1CUxod&?vcmr$L&UnLzvXmszz!$>5f%+C}m6tEE+A)6jCp09>#N?T&B6IF}Jys4`YQD|;>Gu7MxkRe>lbeXF{mbA&1qxio$2}u}f`2A`ZRf*1Nj*zMIUg=IeaBX}pX$L-# zwX(1`ryC}Ac+xexC|v^1)5DmZYA!VZIT17~cX11tTGxfr9qJT88$`&s9GSg`DTi?i z*+^Zzc@lCqEw^)az-%3py|d`2RS6}(D;rcHi>+pVj$9nhC3Q##{H<1(74YjLOOai( zR0!a2kD7rc%k%0Ibr-!643d96>voHcm^h(*y)rH+ppx zkI#^EV!eE=!R4o+O+9*;J^kcsNvXl7L`LCdX(N3gM_!SD#=676>==kLzS2BYQWDK@ zqvfFOg`JSJ=je$$0T-r0A3*Lahu|91CD883V5m>Lm3D^sDc*u1Rh_n*Qt=+!aPiBK ze%nVV(Zdb(>=;^Z>G)ioJ@yNNUemT;=E8^Ek=NWPFnM3E(n_=CUsA7ACkL2Z%Zf)$>rlm&kpG ztnU$Ilb3qgZ(c^^i>m`yqC_>+4=j?jL1U6qfIl+mIHqqF^#0PjVf2|%iJnD9keSWI z>5xr`mxgN+l%CUiYNYhZZ)-%(<_@$fzC`mmZ4J;Jj8>tzABOe{Svta;J6c8*la+oc zO}_g_iuE<>R@@n&cIkhv2GXQ~;K07^XsIm;^jTmzA2bRN5o-$n;FbGRIR){Zzruqk z{}1TDK4ExNw+Q}es{vXKuPlqY!1CB>x{R`fkhK?nvU+Kc(I;FFujrq` z#kDxgdsH<{+-tKljwXheNHdNTM0x8QTzSSjjxjhSJW_2h3QXbLg#a^`>Vx}J{IxpI zF&*Az#wDVu4Wi0?8!Bnm_SBFuB~dC`@w6f+WvtxaS5DWTKQY&@j@(AT>UqV~`)Ppq z2R5AR8;LGT2358I1^0q7U5!+(KK!UJHM8)kx0N4nUFVv?h`Lx9IVvN~1m$ZYq?v=} z2&I!)v2f&U1y&rrVaKtnldxU}7kIkTL0JDqHskU*H%Q`21bMGpx_0Zq$%EOKx642> z=Qee?7pNEL@8^C!zo5Psqe{{d<8NyF0l=Z*M@vdZ0@%O*dQ;0zklUellj75WVdhY4 zB;BkU*bYkc7>y&NO0L) zIFr-MN+pVsKa{&nLL&1@?6qaxxIBCJPTwQ7-a2LY4$<;v{yG0@yUhzj70%9m1rUE# zwg?jHzU9HESdIgROLE@%_%s*{UC>XxGMw}JBDNH7sUV&kNz47(H<*L|Lp9~u^YDdW zemNvUV>w)3V{qk(CnXuuY+rZ^xTa%Pt>Y?BXp{eV+MMh!cxb-k{2Ug*ii`G6IHO8x zP2Gr%L&S_06$|4K7M9$mC@laiK`!_|-XsfUbNvJVoxpN{eHJFe9_G5PqSgeH&OPx6 z_ma~yftpAS)ny$1EC3?sY~R1kEGJz7V>YQ{C@~pMz!re1HBy z+|kTDdN^X97opi$Nl*>wr73)8G4}oh>E7a-)1v}L9X?i-Q#O!Xq|N{q#vmDsm6cjFVxzaW^)=OM&MOB(bTESQfv8qKKL{i3Gm8j%z7hRY`L9IQ#Z zusK0&@=6C?mvRGB0Ear+8r)oSU5KQO zUsIYdwM`&3sHbyt?eK&4(R)}xd9FYex(ury&}})~td;5F!v4j+Sf5`W?O_sn4mw+No37)ZwC)~koJX2x zy~ne|33xZDZ#p1nF~zw5%GU^+C8~(BA zKmeYe#l8y~>BFRL;Gm?hwxhtzT3m&ZX=6yFqSvnckBmBTBO^6K{!ApVVF1y&>7Xdw z-9aCwmpMCY>Dhl%A^;lSa7}Kj9fcSg{!9df4&jyqjqmqEP?#utNW;xo9vXdqIE;jEe<$nc9UyUf{_blyF2@g73N4a5N-az%q zf{^V-;uvs#A+(Q%MH?P@+c)Tcpv0_4c+1bAi2j-6;#Tcnl5`cYU%U%I&tPb;SNH{+ zAm3HZksLdA&rcSDRL20ZCmIU=GvfyBgMc+de%Ekk#*=cGm{>-XKT1JbGZ@guj_rU0QD${mJ8a%b49vbzU{A*{l7ufglcIS;vXOn z71=G_5X5iK90<14_fpzjuzPv5t~o~K1V8N)SP6|y0Tv7AI)-4&sUUG7D8C8zP9*kD zP2L@-5mHq;9w?ZiemGEXDS zyX}+#4yAOU#uSUB>kG9E!Az`%I9a5ur$cqH9tsq;I7{;tE&kZTnyh_4e8CzF{#S++ zTJzcF0~8|h^;AnMs`}ubge?=J=et^685C~_@nMz~4zovcwEpN);fwz%;L3at^~6|` zLmr)DjHB?f+j>&l4WT5|&<(*;WnLe#0MM@}apk_Ic2$X3ihZE)drdCrMPmg5Cug!C zp<$Ow7NEofM=QqRJG5uAe$kEN;_V2CgaGX?GP$D-;<;7{>@IFsxx%-xVXInqBd9u-zvAw0F3m&utQ4W{DUo=i8Zso2E?*9T z@$3J3Zg*6mX+b&%$h9Pkna6KAhVc=7%h7i+Fn~jnn1_k?kC0ta>&K=dTrmtBlVhUXZr603o&2!F8#2Y=Br%g+OBX)zfbWALsOnnw^AZ=MSH z=pR+VAL{1$%rt*|WQBT6a_CGK_d_?t*l!DF=Z zx**qC^A&V^^^!oeGIxxgls;-E@YsY}_9y0*Iw>2BqQglc9FQo5EGYjz+?($C`@6u% z;+Y^)>uaLZQlW052mZK?1C_Cw8T55;h#6Ag;{fD^<}ca0jutU@N9c#yp?RY{$rU%9 zP`s-La_!;ZQwEFL8L1vJV-g0ZOZu`51w~-?;9D3@dAnJV?y0*e5R38U&s+7Rr;=ESlNZNh7>s zbqD{)1DNE@o50?hBN(4UYjQHK_5A*X9uxB30sOjDKY4bG{^KJ8x`Vnv;in>|0i+Nu z$Xpu!6RzO5u>*c_K`)6EtlGYP21XBAOEA$}CA)l2#+N@xwuI|zZp^2&k_N?$faVN; z&L1Xe95IM=`i|$QB0ghat{Au`C@XmbD>Tw#O>yxAbzbkk4lCdn;~NhEuep{2TJ0__ z&+nQ%+hL(A0*3z062_ zh;(%x)%5~WSD*PuIlb1l4ZyF^>-sR)U8&o>)$fWLt-J8fF3sp@3>n0UoIsjwCc7-v zmUi1cJ-5O0B^;jR0=73!l^>ZJ56*3IEqpNGK~c?vKz(@6A5^DS038K5V!#7#>S=#C zH)FwV$=Cf`_Y%bn0pV6igH_DDY4~EuVqW7S2eXkQH?&P@i6xkLK#SV@V30m)0OhAFVI0AIz5Ov$OtdcxPvWjtZlnp#)ZY7i z`vX^NdZvj$)l9)PaH^-GZ=r+o^gn`_<2-CWByLBc^X1&--D^jxSO7W(Tvro79t}e!hse$G;Jsp25QO@hxe3$#c#P%q_jCR^B zpmKlPD(2ohs3bN0M+mLnctDX`@^sB`#u+(oM@2OY`45bLDhWzqz4!)9Mx>!Nm4u}! zmo$&O$FrdX>@2^Dv90WSN+E&Ryj?%FK&3{SOQ1R&Q&>HuO7!c1w=pG!Qnj?TgZP@B zpm6oKF3zbdInj z{E^JKMj%aS!VbF5vsy!?mRALZ&}~6yH0aFhcQRJ^MF`j*fJc`%Q(~0M7++QBsn3YS zzFbHiC#_3#(t>2nOjwIj){r>FZ6MoRb1?ID{8G7R>wMp7)Md$}itG3zDag(Y zV08SCR;8v>H{3pEMv4(IYYzeionU3*{Cg*V+8(60+066C`}K&*3sw4_yOiqSKHN?F zgk1}-+<3{U<02Ee9Mgjt7zDOy^k=uMt1a8)IB^v-yima^x%+5G;zgD=-L|>I*czlf zuD`&mcX9~6(}ZG$4zsV^s8zQutAW98%3u3)y5SAMu0{1x@rE4NJ>Pysc#8_VZE7t(shmA^i z;11!R&erbJjig;)Z>(m&spaSxMtz6xiUB6_dTkm>7Cb=2CNQVS)siPoMU>p82OGHL zqqIQ6cVT^#RO4}e-X7*^VV(|tZqGx7@1iW>`bsbd9I~77WuR&3mWoC9y*h*jf$rW5 zk($5VX{hB-Q(hJ+1)qIbJwQe;N9cifjaPjF(id9sCKje8;9accshDwLt8k8INTBQT zf1=Zp;^^;nisPRc!Iwr;Q?P)efdwXF-U-RHJchd`d{ZFs&54BX`v&(BS#mxN#6mr3 zidh7R*B0UV3>x0T|32DVFe);2pNYkTAoYpV98-=s1JEz^DpYI-v#>@h?q6ZLE@2u= zR?M)h`XTgs%stw|X9FEcR# z6&fg%91N4DFr@oWcJ#1)gO`HoxSIb0QOu_%M-GFMP?|`vhK30%@l&F@Ey%(fH>1)hAdaP|I$r%aV4J8! z6RmTFaNwt#&A9n_f@FB8`BKw3|7B)H84dzhp?+si8>qA(Hg2;}5YH|7=T4sxC_Q{> z^40v;f9~?|UHu;mU{&<9UPP-W00y;ckODlB;)z*i_{J0<|M1J0mw5Zp=!x8(da{ge zc73fnMt(0$CJ-xMg?=`pyK{N1D*>OLH6FW zJOqLZ&mu`K5exI?6{Uys8@cu(FRym7o&T~)?Py9bLy{w8Y2h%V=RYHUxofW%vSCt2 zKht=Z&~S2JQV%hU1&B};IH8zVKWAec+=3(y36dBPz z^d=QWa^zkB?yK58nKLZGTCJZu2p)$}cU?eUF1LzYwa5m*s4|fnflUULRCpjs$Og6j zKC(qPu-gSz|Ifn$sK*u8i6w}Z))omiu?pt{e1aAjffn+l1fE-u$fc6AdJh8R)IYhX zh4~M~)%WD}lKD=hMNmrWOmfuJ<>pa>^f6zf=>U_uC_GsVnTkkSw8!_9cBN=QJ@nNOzH2Qyger zpgzPSQaMZaF-h6%5u6^wSgM)M6!Fi0kuxT|>6`rA-X|&FgUH4QH|%Ocr_Ol3M4@w5Jo;3R7R ze+N7z!ifPAbd$gOJDKN6A>Nm9n^z6mssTD5Vvj|4wudPr@xum z82f%D!VCB+cI7d-`~YbRT%8(%Nta?-v#Mg49H(z6Y<0~ZscE^kjpd7?uxtIDi2$f9 zK~4lh#aAqLkDz`pi%uv}-%9!6_{g>B8 zV_-NWmE!pBxnewI!s0U%rhTTH*1}hR&x@4x+al*z;%6M0EtNrl8!@v)|E6_3rP#Nm z>@s!3!Oc$fs>9zXLxf0nVikZ3ApH@qDn5WZLvGI{Hk?DR(FG?4B1PcZB(fy>jc!Jvwp^5zN|Uv+AI;Ro5XAfg2&V9G5W>T+ zH|N=P3jy6^e5k2&?Gw&?(5TZ%`|)Np&>MNQIokA6T75UiC5k%M832jzwgyyXDQ0pV zbM6;r02{9Z%Y|8I!#T7yXbXh zIbOgra>_7lBq3ZPL;%riC#xkFTwWosspZlr?!syl^wK0Irm6*V7w54A>!xj(oFEHT z1nW6{0zb7As)B2av8>)mRp5V}tcLsLS(S&gT>W5MS-mcL2F@9N9V;k$J1!p8NtGE? zdEul-ib%VSu)%N6rL;%d*ZG5F3Ao$u>sdpyxOsv%F$mPcJH+w#(?PoI+2qU0P(qb(a0ssigHXmG?j8dK`A*Q!~-}qkN2l9=-AQ0^PFj$=v*L|6k z5V}L8I9u+2x*()&sjh0KeU*zPD6@8s+n@DaZg=+3~q7H!evm(WzrX-I~o2xSUCrNvpq5Z#MRim0% zVXo5W8oX=I&e~t}Gj;AdWt$)lM>->=n&%sf;q7fQNwRiP*3wveoH`LdFc3f2Y)s|c z@rVkD>UQ?`g%xtJO6nq26lfJ!IA6lg3_}B zx_JHIOE`vI&5*23<$mET{0%qeZg=_1UT(B&Jc{MFiZ$$*dJ#~HFmp$hjhJ$~!Y#$J zNYMqfMAQd&h zFYPB3)3VXl{W(W!0N8p6!#iSF1sEfi3-^b4djD7IZ@xUU$(<+KIpWuJ^JbLeV~>@2 zM0yeg1-hrSZ(o3L#XCf`I?qywcK;Z$S@JDfW)VH@CCV(YbA-%>B8bO52-hVssUBev zHc$=g#|EM)_Y{xj*!vf|AZJ7cv1caMZ4^K+XO9CgP)MpGCfyPOxy@_lG%N9CmGFI> zIrN(hk{N9Lse|l5g`gKscyG&dA2P;##ePXvpuCb%~&x8030G;N|@!J;m z*`#TYiEQsR&3o@drj3)og7=6rOG2sCKLExmYCTWMO)?{u8D2Pm6KE7+H~D9gSpajy zZ6_@U2yT7pgkI2kf>;B?X_tO(Yf$^NH7ZD~b5R>kco@1$Ns@mt0a@oK4p7q^cc~MV zx-&cOB``svpT9UiaSUF)Cumx}-{0S6w)86+7_{F(bvtKag7VL_=@(g;J7uG{O5KEM=To!1(Z*hl^+t!M}lU_&P|PFm#m z8>5kABo);HT#+V?}h^6(tolYfK9?uFFV%+ zK9}eB3^k{_yWakYqv(NB!PaOP>S!4}C4})ri0d_-sDlY254u5Y>@S&JqpE9Aap2jDo_mx?^lR6|it$29 z^Sxah13ekqzRyRuo6yr7j;9UiABc}vtNvgHxlHhjgFUN?2^+TYc(U-wQnv^(owjfM zN(ck6ou`_e^#kwtmCDcej(G$el@uq3|KwRB{q^DY<7Ewu_E81N>UxT z$N?0;>07g+0jc;f@EZ&jRQB51K^VU~L?h$sVQ9=WzKR*nlRTd&lYm_LzjyH-4s^E) zQMEMPRzSoe{tCs2MXbk)^tUPg_MCF&!Cv4L9lW4?UyFfExyrJlNF6e!S7nT<(kkn= zj>2l|OJ1f8AR5xdA{mmV4nk)e)GePM z&lfX=wD1}Ep}uPGxUu`TTENS4F7$jjn8FN)Km$NygJiHurK9l>15in6p~<6@{#GDK!+BlKfWvPsy{4-1+j@Dj1fJthAL9nP&hL}9 z^@x(~Z&rvgAwK`DHd3@km~!exUbG)}p$E9S0JA{tx)sha;)9^@7ty~L%_ul_13trO zd3+iZLfEmUIPjKlz!OniT(|H44-Lqs*IIi!;xZ9g1N3PV{@aD&0mD{!u4CHJqp4mZ zcrREcM5tk?mp=A48__@fU*9a6cC3asu*oVzmBX?Sll0C1ZG~}1A;rs$2Z87SD8X!{ z>(G=7ox53mqGnu@P|KVQkYH*(%F2MCQyTM%Nv1U@#g)N?5jo{BIsMyY z!yrlsN5U@Nuukr$D&wOT@fxuE82rB9o0th7pE6S+zf)wRmO>a4FAy6L?(zKVNTJe4 zP0*%_LF+Gj$Iw+L=Q3yL)!O#Ntci)ZR9|# zfP{R>uMVxCN*)*4fwf`REkee1YE($g`B&)xGu4KPC&1;>()T$iVa0=TmQ|PTr?VL_ zmd}KHcc;jZO^fd5kTcW(M_i>}gt_rOM;u+-xLAn^LQ`aiOUezFKzGdd@3UUB5oi)6eOwdY#iUAU7KAd7O2ZApTQER zDI(%ug$)^2<1GCiR7EUO{!EeMc-wEz3ZdjMLY}aYN+)25&_xB86zaxyRR9_{q~DC% z>s2QVusGFPC2rstr8CSUoQdT_ZOD@IJQ&a$y+Y%E9q6dug7jEwBwhna>6=N}1x{uFIE5cE{xGUf5XX>kjN1OSLBvlKvcOm} zR!8ElxBHYbjVFCf^BHZeF(VhIvjN2sVWGMIR`gugGs#C?I(2^owpL-8P}OUc{u8P! zMoFUOsRU5sX5gpH8Ry?FY?FXndJH|07=%hse&@>*a?qy+PP)(Amk=<=R0R)tCPG3< zyOSb{xNGFdLQS4D>W`a*z6zp3rA!-FL+D@_i0)UEr%R)n$8Vh@4V+h!8SuraIhvm3 z>$sbyKI${0KCrw@RFU&(Wt0QX9x7e@nRU(wi)1~B(62l3Y76Zh+6`FBo9k0E4Rwzb z{Y&BnD&~#?yu4lx=Gv6PAk&wWE1=YP*pc&qb}|_D=8UZ9FM-?vz>r>{cx1Z;bRvO9 zOAOLRETm2*;HuOCyq(cZ8Wr$_4;IY|-uosh0De+cHPtyC_je_R3-AX<)_ZKfz{b9O zjUzbMG>PF1J9GB-%7`fHKZVq(nFR_~Gx7glRc9F%Rk!x>8Cn`d8l=0sQA#?b1pyhl zedruX?!DH!*8Z~By6^w*-^r!H z3Lb3AkV3oK%tO1r7TN@qai}E8M}I?pC|8c=(8{2-R}d?HIA3_C92vTai@$cc*4(|j zF28Bm9>u_2Gc&VTw5N6?+x_1gwFAvB*f=>&7IM3S4Zie?LKmr4&38C ze!vuY{e&lcR$jNlhG^Y42KLb7!NzZ=cb7d#uCUafe28=R%LUt;B0X4*!Ri}TT=43i zsF1X{0rm2Gy5O+$PVdO2aERfW(i6SZ-bq^ly#4|{8|PmBexR4CP+)*tm5}p}^O3&? z(pN)%U+a>M8x~>f>HaXX0oqo z(%V>4D^{kf_qPPJE*y?gKf~Hry2H`Pq}0r$3EuH^i#4h^ziF|KQZ8qG7V=S5PW0ZK zUABh&)HQbbk+XB0Mu-eFtD z6MCRpc$Sb++<-X|8v~~uU$`bNN|NnFL1{Hv32N0`TpFlMwuQ%X*QL4BCCOTj88+w- zy3P}jf9hPl=S8L#Vf$Bdk3Ex&N#crk0%3V^b%QQ+=SLkCr!!?1Fy7Y%>)yy)=cG6X zc9ujfJ+lYHMAm^n;qlCgkZ=vznbJ3r%kWXO@NEU|9(qK*U_64SEsx{1r7c(Ls9+fh zcjW-z+wH|#%>P@0qqSFuL)7yuQ3pT0A|5j?0qvAhs8g#8tuW10#(0Tj?RJK%6-s|mnt`?l(c5%zsgWx9heOD&UfZvIxs+S1H`ENB>m?hAYs zJos=vY3N-Uy@-C&XOcP-wYO!W7OxXY5O`-fZSxO5m86g=1V- z-j?=FZG={i`!;*CHz6A3&T9YB?z_`!TkZ8EMnsh5|5HBz9L)aXXt55}A{hb>{t84F zqY@|vm*1_6WBmB9n}uM5pmky!K=r9vS0mpV{(tN&U>V2OkZ>Zw)fX>reeA*OUHh#B zb~#);be|1G*&o_)L<@0#w^+m4`I9Rit80B*OAJk+#tCHnPK(kmlwzA`o12T(BO<&Y zJlvmeuE$ksf*`E8jr)k0S{xG?HlFM;BhscL9{HQp3fYXlkwvb4<%JE;T&fl`__L%~ zwfo^PX=}yBY5f8}{+k8`_C~WC(0lnWe{bzw0c#SegH$B5itYS*IW`^W!W{3!~B5VY64Z zE+HqEbGsA)I4_jLg@4nx)R&yQ$4QIXa0Q>H2#slqpHtwbSz`MVl19Fe+4osnC^@}2 zz%sL}n&n*XH>hC?=?wWp2L<1gldpxzF&Y^mYqnj>e}}n@l-GVIq2wSw?gHjY1=zS; zpZ0bjLvxxDRAsnh9JL>OI;>{)ceb6CEbW9QCzVIDAYyY!EQaMQz7N70>uBM0U%CT_ zM@Tbjx-=0?EJmxb?e0i~B=vTybqq-f$V`HRKu+(aCC z(DHK5KIs>dfIqqux9zM;UH^WB&vy0-^(yXAXSNs=2LS}?ihP@;6} zE`9z*1Z?3P&Abz;%n(%@iVN)#LQ%^GAD>j7tXLX4f;uGf>E36rNM6_P3C}SPkkBgx z1pGxyxpYYo`OexmNtQ8e^;PU5)wqD*ie>vXPZJZG8M=V_?n#{+ODYrRe&KDU&;6C& z!$|j6xyMXQYKP@kF7!5n%@(szuPO1%-w+Nkxz$|0u9k-IyQF}j9FtvV_k;2xigeq} zsC2e!%9gT>;|?Cd3IVJ0>pDCkSz8Q#ynb8~y*D7K{;}|-p9y-0oGAAYbv1IkV+P^o znOz=^FJ7&z97}(3Mi1U@9BKAl%iM^z{R~_RXZCf&^NxsHyOkZ0L_l1hBt>(-$8>QA zr_0ltiVKc?@cJv}S&oxx|BRZWaHiq?ubHD)`_nWJE3PbyK&6+KTDPIqqWGm5#X}ZW za;qIz59+)W0)4{g=PMD)Q3=nXnYnT1HMmGwxiqhHqe<5m_eHx82=(;AvG9P)(}AQSOVlS_PU2DDK&O$(-v_9w?e;>iu30rN zc1qzdk{2$f-ctP)&djYkd9$1Q!Eq~y_Dz;mltt+a=mfkje<#X`dm*&6_G zokwC8q718&ODP8ozRaHPGdVf=)fAwc61KBqn*60Fhi>)1*YeNW5lZ~u{*Z7c2)JA8 z`%KvTy*LI+@q;EOYHK0UU2(T|uMSUpFQ;nAmxg*&8ppv8t#0IQf1a#wFKUrcE_j0J z(8wGxnwhhnE?Isdd8c7LvB|R=XENS~xSc3v$`G`+HZyOU2s<$e*cQFiB2bAWf2z1U z#)2;a)%*)0>`QIBXi%M3^%+TEc{RX$)JpmRM^MKE0U#VPUl5UBE_?@36pYu|OAJ(9 z?jKq@R@nyV7FZek5T_Wse>2mU&dG7B@^%Hs+g&~-oYr{f`&KiiBCO6RJzxi9AVKb$ zYD{O&6aVtvX~#rS80>miLqRLF*5ZNHW9callV{=u<~*@vQsNG8T2&o}3uaZTiS3A5 z^D$5u6S{4H2}AN3zqWWjorH4!AzzHv;v#>apj5jr3P#uw)uq(3O{GbTia`LDE1wwf zYcfGj<(|eq%9tguph~!;)<;qug+Y1K3Ker&N()^tTpUxI4V-xEHwMa#?O|8hJR9s; z&S4gAP_h@W0reU)#=OyD1b;(+W;1!c$s}(oMuFFgT$ak}<3C^(wr9+PB6N%A*#mZq zr4ch-KkLqq99^sbQm;v=UX2*uFxUmxoeTQevu6@DZfTUkeDzv5OO4=-3fwO$*W zNB_C-mhH50Os1;6f_!B2rZBmqNieCmz94{+ozKmCLinwNX^X~7Ay|rv7d7~ifhTiW z@zdOrLedNWok>t{PgLL^Yvl57tXem&-rk^}5=f_B6}>MU?ae;bZ=pRXf5~(I{*S#y z^tJdxL2M!k0g_G(K24+aJ(h-U))eAzbQuFM6_rsT*SV-a&5gYr!DwZG!W;=?*V==n;nag4q?)(^TMA=P{cUjs^;LKeGg% zOL_I9hsp{=dXSHeK)QE^RJKJY@pvB7A1m@f`}7FGEUc!Dw&TL;hVGNqWs_i=ub|v7 z?!T%VSCB~bKo;7aWzEULUxN9yA@<}^TGIq+G$>T$k0V#`%di_(aG8akW0jN#{y>yT zg|#48$H6}LsBs_VTWQ)Vt4w+f6R_h)u7+RG1RW^ijR7sqdt{umq7?GpMHtg_fy~0+ zEuGD%^E2jNmNl*{3;C?aY6n)fwN(hVrE3HMmC1d80Or_9JQOl(2vLRps1+YjF1 zl-TK(GA``#yYDpGz*B@ueIMsE;+_kV+`&38w*nwEDse9#EMnCV{VFyiDT#Sc0|%LQ zzgRbB_tlQ&$t(fYVk?_+)QrsumsjvH#PQSf^-0u{#B$PJi)kUX#7!=`* z(4pN02t0NTFD&j&*zxOgm?EW?C~-4Tc+hqSUiMA0FuuLSlOw=%utkGY#adFmBP8-SKhEfWQ&@ z1sjj?I{J-)I^D6sI{F4jbK=E%zUU+KjGmu-SfscTzSPi5G+r6qQxoe5VL$dQI!*`z zS*+96TslM;ii)JkHSv%5oD8N(VY(A~j3j{rm^@+@Uy1oStW`p?GEcwq88wO$OdpMQ zM&L$^h_hn8BR(AMw)1l+XbFF5j^}KOvp_vsH&67_ajpRO1{9I@N)z`+bac`N3{R;i z)dELdJw6;4`VG0G*#Uo2?71cR>6rC9e2$O(2hOQNzLg6j{h$apX067AZ!{8qxt9lC z$hH^3snhO%k}*U*C_)1z0%=EM|`EMh@(-N%r{`qKiw(!{RIy`r6> zAHVS|aX3oCO>;ng5i-0X93Gn;G+>rjxIryrh6OE{-&r<;&m|cuM~FP2wJ8EL8*v>L zQFGlV8O#zi%ObthPZ|k@1!nn`-3)w3NG;6Jk0`0ExgI#sEDw*!)SUH%!Du&ZgBl6V zzl#f~`BgF>wDn87HqzFSck7!d#ngWg(21=t@}Q|pnEW|+kF1WWDxxq=F!iZqZm?{z zA8cXVh)od??@ec47O}Ipc#W-sel_9wt^R6B)MXcXCRN%@VGbuI$|k6ltn{|c(nAlO zVL1}>a`CXMg%XXk8zj1G-6er{Z8zCtHd~F%JV04o3|W4dl`v2d1Ihz?FANmHsO5nn zg@GwpZ=hx4FlQ0q0PZ|55D?%d2rCo@Qo?jZfwY(aJ|N6h07wUm6a|vfxf%O%E5`x= zaC&S21>j#75Ws}Kv4MRO1#)txq@P=VBnALNeE3R+Tv`1n9sQ+h-Y?8l2VV&YYL0~fMR2;~Qvn2pT$NV414kNt) From c11d89defe91567c7414573f16d8ea9ab27848d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 17:16:39 +0800 Subject: [PATCH 050/228] =?UTF-8?q?[IMP]=20=E6=8B=86=E5=88=86=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AppServiceHelmVersionService.java | 12 ++ .../AppServiceImageVersionService.java | 12 ++ .../AppServiceMavenVersionService.java | 12 ++ .../AppServiceHelmVersionServiceImpl.java | 22 +++ .../AppServiceImageVersionServiceImpl.java | 22 +++ .../AppServiceMavenVersionServiceImpl.java | 22 +++ .../infra/dto/AppServiceHelmVersionDTO.java | 153 ++++++++++++++++++ .../infra/dto/AppServiceImageVersionDTO.java | 101 ++++++++++++ .../infra/dto/AppServiceMavenVersion.java | 146 +++++++++++++++++ .../mapper/AppServiceHelmVersionMapper.java | 14 ++ .../mapper/AppServiceImageVersionMapper.java | 14 ++ .../mapper/AppServiceMavenVersionMapper.java | 14 ++ .../mapper/AppServiceHelmVersionMapper.xml | 6 + .../mapper/AppServiceImageVersionMapper.xml | 6 + .../mapper/AppServiceMavenVersionMapper.xml | 6 + .../devops_app_service_helm_version.groovy | 43 +++++ .../devops_app_service_image_version.groovy | 31 ++++ .../devops_app_service_maven_version.groovy | 35 ++++ 18 files changed, 671 insertions(+) create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java create mode 100644 src/main/resources/mapper/AppServiceHelmVersionMapper.xml create mode 100644 src/main/resources/mapper/AppServiceImageVersionMapper.xml create mode 100644 src/main/resources/mapper/AppServiceMavenVersionMapper.xml create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java new file mode 100644 index 0000000000..31c3cc3e59 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +public interface AppServiceHelmVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java new file mode 100644 index 0000000000..b2d78d6036 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +public interface AppServiceImageVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java new file mode 100644 index 0000000000..0ac28aae0e --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +public interface AppServiceMavenVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java new file mode 100644 index 0000000000..385d168fe5 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceHelmVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceHelmVersionMapper; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +@Service +public class AppServiceHelmVersionServiceImpl implements AppServiceHelmVersionService { + @Autowired + private AppServiceHelmVersionMapper appServiceHelmVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java new file mode 100644 index 0000000000..85be74fa23 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceImageVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceImageVersionMapper; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +@Service +public class AppServiceImageVersionServiceImpl implements AppServiceImageVersionService { + @Autowired + private AppServiceImageVersionMapper appServiceImageVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java new file mode 100644 index 0000000000..99b7ef5f97 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceMavenVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceMavenVersionMapper; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +@Service +public class AppServiceMavenVersionServiceImpl implements AppServiceMavenVersionService { + @Autowired + private AppServiceMavenVersionMapper appServiceMavenVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java new file mode 100644 index 0000000000..f1753c0d7e --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java @@ -0,0 +1,153 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceHelmVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_helm_version") +public class AppServiceHelmVersionDTO extends AuditDomain { + private static final long serialVersionUID = 769273160524234032L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_HELM_CONFIG_ID = "helmConfigId"; + public static final String FIELD_HARBOR_REPO_TYPE = "harborRepoType"; + public static final String FIELD_HARBOR_CONFIG_ID = "harborConfigId"; + public static final String FIELD_VALUE_ID = "valueId"; + public static final String FIELD_README_VALUE_ID = "readmeValueId"; + public static final String FIELD_IMAGE = "image"; + public static final String FIELD_REPOSITORY = "repository"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long helmConfigId; + + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + @NotBlank + private String harborRepoType; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long harborConfigId; + + @ApiModelProperty(value = "参数 ID", required = true) + @NotNull + private Long valueId; + + @ApiModelProperty(value = "readme value id", required = true) + @NotNull + private Long readmeValueId; + + @ApiModelProperty(value = "镜像名", required = true) + @NotBlank + private String image; + + @ApiModelProperty(value = "仓库地址", required = true) + @NotBlank + private String repository; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public Long getHelmConfigId() { + return helmConfigId; + } + + public void setHelmConfigId(Long helmConfigId) { + this.helmConfigId = helmConfigId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public Long getValueId() { + return valueId; + } + + public void setValueId(Long valueId) { + this.valueId = valueId; + } + + public Long getReadmeValueId() { + return readmeValueId; + } + + public void setReadmeValueId(Long readmeValueId) { + this.readmeValueId = readmeValueId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getRepository() { + return repository; + } + + public void setRepository(String repository) { + this.repository = repository; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java new file mode 100644 index 0000000000..801d83f46c --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java @@ -0,0 +1,101 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceImageVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_image_version") +public class AppServiceImageVersionDTO extends AuditDomain { + private static final long serialVersionUID = 311223429472258678L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_HARBOR_REPO_TYPE = "harborRepoType"; + public static final String FIELD_HARBOR_CONFIG_ID = "harborConfigId"; + public static final String FIELD_IMAGE = "image"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + @NotBlank + private String harborRepoType; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long harborConfigId; + + @ApiModelProperty(value = "镜像名", required = true) + @NotBlank + private String image; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java new file mode 100644 index 0000000000..ae989695b6 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java @@ -0,0 +1,146 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceMavenVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_maven_version") +public class AppServiceMavenVersionDTO extends AuditDomain { + private static final long serialVersionUID = 801548481676256212L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_GROUP_ID = "groupId"; + public static final String FIELD_ARTIFACT_ID = "artifactId"; + public static final String FIELD_VERSION = "version"; + public static final String FIELD_NEXUS_REPO_ID = "nexusRepoId"; + public static final String FIELD_MAVEN_REPO_URL = "mavenRepoUrl"; + public static final String FIELD_USERNAME = "username"; + public static final String FIELD_PASSWORD = "password"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "groupId", required = true) + @NotBlank + private String groupId; + + @ApiModelProperty(value = "artifactId", required = true) + @NotBlank + private String artifactId; + + @ApiModelProperty(value = "版本", required = true) + @NotBlank + private String version; + + @ApiModelProperty(value = "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + private Long nexusRepoId; + + private String mavenRepoUrl; + + private String username; + + private String password; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getArtifactId() { + return artifactId; + } + + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Long getNexusRepoId() { + return nexusRepoId; + } + + public void setNexusRepoId(Long nexusRepoId) { + this.nexusRepoId = nexusRepoId; + } + + public String getMavenRepoUrl() { + return mavenRepoUrl; + } + + public void setMavenRepoUrl(String mavenRepoUrl) { + this.mavenRepoUrl = mavenRepoUrl; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java new file mode 100644 index 0000000000..cd16f9578d --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +public interface AppServiceHelmVersionMapper extends BaseMapper { +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java new file mode 100644 index 0000000000..f9aaa324f4 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +public interface AppServiceImageVersionMapper extends BaseMapper { +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java new file mode 100644 index 0000000000..53823584e8 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +public interface AppServiceMavenVersionMapper extends BaseMapper { +} + diff --git a/src/main/resources/mapper/AppServiceHelmVersionMapper.xml b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml new file mode 100644 index 0000000000..2976e73b65 --- /dev/null +++ b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/mapper/AppServiceImageVersionMapper.xml b/src/main/resources/mapper/AppServiceImageVersionMapper.xml new file mode 100644 index 0000000000..1f5bc7f627 --- /dev/null +++ b/src/main/resources/mapper/AppServiceImageVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/mapper/AppServiceMavenVersionMapper.xml b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml new file mode 100644 index 0000000000..b7b6c5becd --- /dev/null +++ b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy new file mode 100644 index 0000000000..a8286a6137 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy @@ -0,0 +1,43 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_helm_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_helm_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: 'helm_config_id', type: 'BIGINT UNSIGNED', remarks: '配置Id,devops_helm_config.id') { + constraints(nullable: false) + } + column(name: 'harbor_repo_type', type: 'VARCHAR(64)', remarks: '仓库类型(DEFAULT_REPO、CUSTOM_REPO)') { + constraints(nullable: false) + } + column(name: 'harbor_config_id', type: 'BIGINT UNSIGNED', remarks: 'harbor仓库配置Id,hrds_prod_repo.rdupm_harbor_repository.id/hrds_prod_repo.rdupm_harbor_custom_repo.id') { + constraints(nullable: false) + } + column(name: 'value_id', type: 'BIGINT UNSIGNED', remarks: 'chart包values ID,devops_app_service_version_value.id') { + constraints(nullable: false) + } + column(name: 'readme_value_id', type: 'BIGINT UNSIGNED', remarks: 'readme value id,devops_app_service_version_readme.id') { + constraints(nullable: false) + } + column(name: 'image', type: 'VARCHAR(255)', remarks: '镜像名') { + constraints(nullable: false) + } + column(name: 'repository', type: 'VARCHAR(255)', remarks: '仓库地址') { + constraints(nullable: false) + } + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_helm_version', + constraintName: 'devops_app_service_helm_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy new file mode 100644 index 0000000000..8bc335bfcc --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy @@ -0,0 +1,31 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_image_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_image_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: 'harbor_repo_type', type: 'VARCHAR(64)', remarks: '仓库类型(DEFAULT_REPO、CUSTOM_REPO)') { + constraints(nullable: false) + } + column(name: 'harbor_config_id', type: 'BIGINT UNSIGNED', remarks: 'harbor仓库配置Id,hrds_prod_repo.rdupm_harbor_repository.id/hrds_prod_repo.rdupm_harbor_custom_repo.id') { + constraints(nullable: false) + } + column(name: 'image', type: 'VARCHAR(255)', remarks: '镜像名') { + constraints(nullable: false) + } + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_image_version', + constraintName: 'devops_app_service_image_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy new file mode 100644 index 0000000000..769789c620 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy @@ -0,0 +1,35 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_maven_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_maven_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: "group_id", type: "VARCHAR(60)", remarks: "groupId") { + constraints(nullable: false) + } + column(name: "artifact_id", type: "VARCHAR(60)", remarks: "artifactId") { + constraints(nullable: false) + } + column(name: "version", type: "VARCHAR(60)", remarks: "版本") { + constraints(nullable: false) + } + column(name: "nexus_repo_id", type: "BIGINT UNSIGNED", remarks: "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + column(name: "maven_repo_url", type: "VARCHAR(255)") + column(name: "username", type: "VARCHAR(255)") + column(name: "password", type: "VARCHAR(255)") + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_maven_version', + constraintName: 'devops_app_service_maven_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file From 38504ad4f87a4c8d6708522c1c855f27dc8c6048 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 17:17:10 +0800 Subject: [PATCH 051/228] =?UTF-8?q?[IMP]=20=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=A7=8D=E5=AD=90=E6=95=B0=E6=8D=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=89=88=E6=9C=AC=E5=8F=91=E5=B8=83=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops_pipeline_template.xlsx | Bin 153640 -> 154110 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx b/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx index 7a09a901530f9735b67f7eb52c4f8cb9c418a1c0..56b979068f48739004f39d2263d2a76be795ebe9 100644 GIT binary patch delta 133132 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\&gq5G2-nJ*kmfVt{5?)2Tu$A0 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%0Ax z4gV;3y;b?g;xgo}eu~m>f3@F+5U>^gv6-fh$B}~%R^(d;2tNL;^Zkj+-bZ$-WMnEj z?EY4qaj1{zBhp|E^;z{^eUzIr`;3!4evP1af~X*bpgfes>Tk$-!^1j>R_T~X{yuvU z?Up*NNZ_PAxUINN7jF36d?o`sa1w8OB{Scx%a43oumiVe_R%*Qe<~-npW^B%2?w{z zk2|qgswQ6%YqLOzl;@h9KBv!zSk7hWc-2Y;#Yy$~btqm zOsEdt{RV%rrM=avyDIx1E%k~zH%jWa{5(7k$JD@kN@ z=KgfoNGc)tXO-45B-wVp_iloT7?azD2X?z%#a5zh|S z2nFf+=U&%r3I)Rpw>U~f2F`=Obm^kZEq&j`5kl)n`5xeqCh-V3-zU;ZT!6hpN>NwL zblnhU;tllCYmgnhXG9QgZHx!KL#yJREhP_7FV0}rY&ivUV22W4(k&(zCMbzx{6SpoKE9;{ef@k$3?!S_fxELov zFCE`#6H`J@S7Gsf2LNl{G-FSC97^R{GAg8Q{t&~AUF>5#QyM--n_rBhq@JQV2QOH} z@$y1sf7D?g$ylt6m!u1_UH$x(-5$MJ$j_7snNVEqg2UGEH0CPVtk>q~)GO=i9Hs7Y z=g#x#4SD`jf6vU9OlfBY^*a7p<*76G|A_2f9(Roopu{5~tiP!w=ri1Sj% zVuN`YPwz+i-Qn%V$&Uk^0hKx#Gt-XG!v%`1e+QRousYFb-%>02{NyTBi#GwRZ{fNg z5go8 zU@jYe9dXtIFIuI%YZyeAXD}i-pV^iaLR_uEOt3OT_%xR6T;tdGfU|U?3*Tn+v2MOS zf8K=0hy~Q8vJQSW(_}cyy5dnMmIxGA9sN;Z_s#yEh$p-CK{b6NpG6!%fWIXxGaIL; zy4~;llKds1@3QJ4JDWW828*oIrk5YH8#FS%=*Gj51e7S3KmM6E5AWxomK zH{>0)anK0s!OdKVdLe@i`}?t%Z;!Cse;(|2rd!LNVMTBicua@dp1b0H~oxQR_P{O=E9$qDsS3cdC3re;iFjSn2T$9`<7Sm$8z=5L(f zCZFRsp95Ml^UO_zfyiy;Bf2{-Fz6`S?45ZAL%sRLYFhAl)U=Qr6u4;8XKXmf7-0a`4q%h?a9|5HkCo5s9v6?YCOaL<- zu&kv3tNJhe0e`Q~8J~k$mc^de|M`)Q<;ng&r+alc{4bO(nC;r(KjP1SASuz7;h6qM zjQ{s;`t|?h|MhRS)-iADfBmcf9;j=-`v-Ex6Sph>_mlkJ19k0wfBy;ULU9>?WDk<8 z{cRC@lJu^Hv$fynarz+VEt8!zlk|@yhteVi9$4z1-rqT{TPW=695?>wU;F1s=nnTtc zJaEmsT`lZN;oS;v4TSOk`MwEHq-twL@VD)`iR=esF3vcTtYs)Sx;}8XLk*pAZ_I+B5wv*FWY12=wps z02LhrseIFfe-i*UX# z$G|8(&L^lzx|%FXAP!p!O8fo%6cDzhoIONqYUT`wQ z3SvGef5XE*0?jdR-F07sTtCr+uV|1X9Z)f+RL`RKNB()OcRWE?6UTvMzVlCMyWmA# z_;!4r9$9c!NA3I}UKPLwBH%dI^fUMRlwh^<#r0Y!@_ufff$sW zHqmO|x3&y0(>=y=T~#_zEN#y;<zG5m$04wwj(qBh}X+3!Hmr{79m)2F`x;_Jmiu- zf09vp3*WaWDm!*ppn@2+bRk};8=1M~j^#&HRn`pw5#HxT&OowPU5j(aT0(sMwKAUbe?Ww9UY0?l)*lKn+30n6=i#PTdlaVLlWWu} zK0Lo)g}Bes3gqA1CVSj8@$4@UNT~;>w6Fs!g9PUtzKVt5bL89gO|pp&r)2+wgsCB5 zGus*Tm3@LN-r06-Ja>Kln=W24wApe$%BZsZs<%p0g8gDWyL(hw^_tS{Gf;1te^}!N zJK$GzAW(D8f}#(=FA3hWHzJMOO5@hUy2~dF3cqDN!u5B<04h_-=cRLTeh|HWhX%a) z@aG$pWoE}Y)-*VQ;yms*i714?h&^otE3fm_=7r$l8g6(wG@qx}Q7^F4aZbR;bAnOt zb7a+d-jQI_mEWn&?BBa*Usq5Le}wB%i+ZX5oOdV63AgAmZQj{?`lEOH#u7Yj@&NFv->V{NyaA zvhU@n2e=Y{P4Och5u8)#_}BkFGN^o+|L#6<xjTPIO)i%EkKiz2Q^im1~~RavmabrJk^1 zs^eDo-#Knb9d7OOedv9_0qSm)KHre;N-RV!GJb!a79pQ0cm?r{f2`~a-*O2SC}{pl z2)fV7`wCH`QjPv1?5lTRh+T3gzlw`LWWpf6J7eOx02RR4`U- zs*f-XWd#q0BHvH7823kT5Plx@I%kf+yU@+r2?fvEE0}3CX|4>Ypy`9rI~Sgy>@kRC zW@slc@73!C?1mmIRh6U0N<0^6>VW;8DQBKVCWBq{{2P<6qFYYbhWESUe_yRrs-Kv3E2NSqk-V4wg!eY<1H|#zBZwJ`)$~Er^#B)T5yN6O zKToi%8(QQ2v}P+o-a#{-cf1H$13W}gpy8kJq+vlwA}BP`j=0zA3+$yBDe@-SP_}B8 zkJ&ub#|jCi*Xh}xmgdE(8#@)o#av3!0+(^VStz*k?J`e_0U6^o{xU_8zT}qaSDI0>OA}(hz(%0oB=^gL2Q3{f z!-Z$pnu)|~Dj>EsPpBe>&vofXOi+L|16T48pPe_$kWP(Op8}!h#2j^Ro9UsI(iLS) zf317Yh~+ozeu?kk7VT>wY&!NPGe*l`G55uTi3alvSnz_`OW^Kx%ZN;_(9*9rMdmr)|&2sFGDc@RRPAne4W z)M0<+Zi(w{x>PaNH+`rj7m<@Vo^Gnff3mErNPw!DS+Yr}>QO3b8moo9X!jaD39K<* zw7$bs^$>A)4oQhn;ed~fXqhQ9}KB0 z6-2XR!AT~?3lyT-G5{wA+@8mKS&`~o3|dc*=+}UwF*7>BglEi}`uk3%55EKwe@8sq zA1hbhq8n>@A=()qb#yL@he;*@*eqKvT-;eGqC^FZ-gPgf!n@{vB_m0@9#KxDqwe@! z#MJT4bFw!H-g_DMvkp>>bdYC@6}WWuAQB^K9CICFEU*vE+rwAjD_o`GBCtd;e~G-W znD`~41s1P)J@Zc7LCi8%-N6>6e8y>0{tsV&dkk28Drssy$8X`-7PqP&#Y zMnod+1eQtK-LjLCo{{q@W{-!kY~6~Ex_FOA_gCl8r^V?UN;^@PZNR>~D_)aFKT)1H zpGWeA?UQi6WGvuL$&a};V!?ggoV`3d`SJD6DgQXA#&v$!IZ|jBPtU$Pe}JrmnO%1| z=armz<)maGNFWgBrEJ{f%E)IDwwm{Mlb`)ur)Q_!6giX)fWMx*oUe4AO-j$~Wjy~s zQXucx$JT;=nGJ|qu)=_yq)FK4$|35=$IhDAga?g*D%MTc+wFuk-Ak80Zr28bdS{cV zj`96Q>34~IxA_?j%OOz3f6?hpRfm+ujah~+YtydF?Ky!>@S}wjHFR2~%jajxuWCQ;F+e&bko6@Y6AnAD5ol!^Jieh8wBn~^l`d8^y7k`5 zpX}MtC1f_JluMkI9e=ug02^c^cKvK0pwjEmLZt$QBfh!#$XJB1e`HG(jD4@p^^S}> zMpm&O5uXH>u47pVv_5#qtcDdn*Xl( z<#Zd9M`iBaj{#56_Y#VXC`)wHEWk_|)*YW6o{Pa}0~GnwTM4&p5)$F5!DeE8s((vt zvQ>O{=GAvazwEP5f93&-9gXvu`aU!GvToQZytCW;1_~1sRk?2lPbJ^|j-jW#-_?g2 z&i>85ofRc`AC9n&vc>J&1UL3(=dB;8#qJ>{pM7g6{@u{%gm!3WBhJXJFrj{DqXz?5SZ(_yC7jFe+<|1<5%&9jox=^%nH2w zT%kr5-M%A3zVOcx!`;jw0MD?9rHWG}e_LmTux>nHR}GBvx}%QPHJU_WqX%5`khUSS zF`MI#I=osaUhmW*29b02s;as?Bdl%#nHRBOR<1!^jEFva2M!G;2UrQ1rnQF>AiPk_mqF^O#5c zQ4^K!m&@@r2uRakyeAq)EauoQn`QaqVEMnze;OpI*m@ySY-`4F<{dCpnz4URhh!?L z>v6FkPv-#L_}|lSnNMuy+JW&G(tUV$VprS~ZYV#pe;!dM8mB;dw{wI=oU`k16r1-w z{)yzxe!b-`{rO}?jNZ#C%4g3HH|g~~(f#+;8nUzTI1=2p7qX0s2Xm^DzR(2X({$es z!cOg-wUSQ|5-VR6UsO7&0#tUKj^l3JX;Mu3xQ!z1XP>pD^)-b1 zZa3dgLFa{H^{QInGd01#t|vsW#2J}^?4#951t8lmbd=m8THUIz`SOwc}oc3(Eh;b4d&ds&Z;FR=Vf0p32XKv?7T%7p@KSCHw8lt|ugr75| zeb~xcAl$Ckas{&SdQgF@lB8^h)cqQO0okLt6A0&p6@*5;%s*4N086p(iT6*rxrj8& zAC7?C4(Lf(4+8Pto0NUzWCx&;14gV$egQjpaEFOek}w@_VDF>#ajlXWT|M(b_ThLy zf1=Qefh@QY&KIays_0&mDi+NuD;Y8-JKaMyZ5=zZ$*LqGn$_6 zQ9duo;Cuuib|2_j6_=ZLZPk!RqMZJOf1nM$uKnWr@`O$PdvYK(To8y;ri8P7#45b* zW@6}HK05s;riPckLw*62DLPzu+*e6)_sq;9*>DSe#TynYb>{$@mBnejg>E?+XQiC8 z@Gcb=s5k&U@4T{H(&~07S96|P=FNR2kw8Zu2|Tj-YMuvYtlmLN+wfkzF#K`nf8tQy zRPLvfbmhK&Z>ZB1Gy8|uaXCMGTUzITjrzdPhXWU)(iM76dFF>bc6{T2z1&?K?<~3v zCB4I1@WREPzn;`6c3ES?jVvFrBFSZ2 zsFs|Lmu#lLPg;~rn(86$n|lv0CK0OLiu(qsf-iQ02)jwaeKV}{U&F!v1sKVxW!*>2 z15~7xka^26GHC9^#x#e?S4*pf(Jh z$++MC!$^1u7blte%x5C}JZi=~11W%yxvb0JAG#`k{9Su~dQGqW9E6YTIs?3KPf_j+ znvb68m+jkIY**$i;V!+lsx+RkVBlW^abEf!$LDaTQD27WKl;^zhpl2l?3hC1Myajy zBBp!Cojv)@zxrg@F$rSkf4IaWy^lHP+Hwt?fX~i2plb(~Km=g_d`RVKt5k)41~c|v zzk46~Oah?Ln$5!%Eq3Pco9A=EcE@^pYCt!A4E(6LRC?#Fd^ksRp@!VNNW>c}V!@ONHHfB!vUfY}|E;-TiV zKB@D)-lPS9E1mv6{ORb#vgrdv?|H21>PYlaUwibN?|iYxI2Jg9>8LmL6?9H@2Ty9) zU@t0|4buMAI-@UeJfz(f&!DfLHQy5%lY}gQsQ4&q<=`w)yIVn{?uU3N17B_d5j{SM zFN*bK6lv`~Vm{*ge?V@UaJ#|J_h`Gzxf;!On1VFBI=Sedk1S@%5;b`gLj)H!HD12F zJVdROSl>n_GLdEXd7y*RbA-^m`r{3CAaiS%C~TXz7>(__;9E|VFX{xi@bk-YmUUK7 z?=og- zN2GX?Iw0342)*XX4oWRYv*A_?>Qp5ChZf1O%8TSsJ{=eXB*8xC zvdlr0={QFi)~}+oG2Pp6m(K{6o$vo0EpBONXPBDSf1xJhWN5EnahDeR&ktebucIvd zb=5hO0E`kR%CB?897(;`i`!99XgBPY`TdOawm$Fztw-ZfgZFg3iWo(v#`bj&rESe_ z(=|Kq``1WVt@YUB8d=*Z^G>YkEMC7@FTVELjJzQrptYVGqOZge45KT8VN zgH9!Rf0K%BT}^LB7|roE-l}q_KYLB=nfFmd=^oh-&{Ek^@;ksUBL7|Kjp3KRxKn?m z(5IPMo*)z-J|$Qrmv%tG(sgBN0?%kS>1br0)Q2z0NrI2lYx^?2SeJ_LqoD@v1`;e& z&(M2-?&U|ml}_!eXY%-*9`x@TVO*0AuLJcHfAP3~>9*<|F0isA9b2ecx2B)?$w1)>^!2W(RRw#-Wx9OibYK;Y#`PRmo3yV7;onz5(H0 ze}`XpzZz=3e;U6Gq7E98^w&u~g}hBbf9%IS~xqLDEe>a*3 zO18BXDNfHP2=dLXFXd*LKCpFUEi&0EK$;YKyZgIJHcHH(sjb{?tXS3c%W@r51Sj)$ z0@-OY*McP-b^OWGe0$2J_PjuI?%K>QLp%K*dp}-2wJo#iY8)5<{NGe`-Gn=>eCOZ2 z{%u)p8(7}Z^prH8!_vqPTfo-le|L~;VaqGAQ%4_ZE&dU?L<_Ge$TOHi5^udV7mXVR zRp7tO{2*qk$BzAh^BwY{ZO4d}zC#@Q^z#H%2~HQBZsIPxm3bz3sGvKXD6Q%Na8XO# zO>iaCqsr1I-lZ1uHbm2lH}25O$VIV-1Y5-B3iLjvce{>f06Rd$zc;TPPRC<9zkhgo z`w_ogd6b3r>x|N&SNj6*}%##5o5h}Nn(50%B*yxbvPQ6 zScR2M!y|28=c7FNkZa@AIzfr^!j$_Y|2i+ZF$vDwrv$CT<|l3q=#w#9ig$^zEs&`9 zU~=q{E@KzJcrdRzZj8!>;ayOu6CSYu%4)=~MYA_NR?;0GcJiD7Jg84MQ-22}mKcGb zm!HhhstYv~B=I^^#j#YRQgKFacbIS-J%8(tmFe|MN9?(`?qc5tJ8`~3Km>=E5WCNb zXXIW1Z4o5m^^nYkkXUF85@c9_iCUa%Z$EIFbA4e)8Ox{HPS;PxU9J+;DzZD@0>N)F zC~4zu_qw1Bja4CkC7E+_a(`|;P?pVv&_);XFS=AmNDU);& z++I|xzKrszo9xKS67xZ*|C_Dcyxake5D8)dS_Bx|L9ZP-kMpr}(+OfOMXRZBXA1;< zRslt+U*c2X?;m-6-2oubj{4$JM^2Nz57qlZM5Nc%)9^m~H(`x>8h_h$tmEyW?F4X< zy*qA-)DHM7d^zqXA}-(Z&OGJxPMrD`8>cUB#oa!>5z)J8{{}TPXC1*wz|jk@2EGJ? zUI~XP&7)z5);47|I3zk#^!=T}i!?t!<Z(F+rp&ZH(5!4VSl{4ZtLSV*%w_4dL}PHDsDhZ(Bi8#vAnATZK}@lJkxX>P4CE) zlJQ|lq_|Ew2}fAAy|%8%3nlIT84m-Q6N`tgdH z`e7q3p{b5~QN7Yq^iHUuezA(+OkKjQ4NoY&^X6<4`Ac(FBYS_B zXV#N%pRaqlP9*mo%^@%Awa+vjn1q(Edc zu0Q69%gZrBEZbhYYk(L|hM}B4Zg?d=bac6^&utd06N==nD;z!*{Tfc?`SM{C*+u{H za--x7BL|o~KHh8Sj6jngSaZ^({Z@PV%tLS_Yk$QD-_2D)BeHTz$wML>kL&Jt;dR43 zQ%{;0akns~@{vcy4%f)Eqzs@0EBR4&Cnhlp!PvHmV8+)n4Sn+AdfqxdDy6`v3FN_R zgSJ_W-rD{v(fs_XzlndWzPk@e>tBrRx#QR})HMambPxEO?1!)8vPV#3I$zIt;O*;B2_%;=Ve3n0Ln{4Ktbg~b zq?DHNQ`p48%;&KYp;xQ75LJi$+MHeim0){w7q3iJ{`%$Z>8HbL8bGZ^*)*I9l$OBv z6@8r3J3JMc^ZDYfDKTn)_*;Z3AhVe2i6{YjqAr4E*fG4A*5|?3$qpUln9fFTQ!gi< z^RQAJ!HMs5= zI3I8YpYr1u{n6ip6wNU9-M!;KwfofVXD)` zMhSJdMM@X>=`(4>L5~OEm0l~Ed3&13b;iWVaau-4!|=8u2p*^opCCyeN`I{>1c(2_+Tu^CL4J`~c2Li>w%Ur+oto*=z5T!rZ~`Nm@&aK;@w|_^Fb)F`%e3#~*w_uVWP2Vm@FJkZba?BD&%XyWj_st&i z$G+T`^WrfeYvt(!Bv`RX;JV$L@;{I*^Lhc4>!s(%u2U?37n~^OFY=q^!{!*Ak zkGFnQ`rp-R7DZpi$xjgT;bTtU;Fx^;>UjkF=_XdxvUgsi)pJM|ytVr&*GugyWd?@J zG@oh~it0in3*4Mi&3_LQ84-JuZ!stkv1GBPAEB%1HPet(CGWT0^Fo^l2kwG*r0b7y z_9U=7EiXWqzh|drsYd?z*a@h#;qbI12)+N2Rc_I?GVW^*0#~IzAPXUPHQ=tZn9kR{ z4-)j8GEYvY=3`y0z|ZX*y-1HO=XiQ{u3S(LF zzg2BUn+-C@lPe|IcV@G`9J7^qf68MVfiYpS09HLtp|+vY^J;EewfeW0ta2ATQ@-)W zjt7{RJnhi9p9*j1XP{7o7ybGFI0eFtWFRhSlI16xeZPGd7G3M?i^auAcFB#vHwm-; zVqp{<>G7d$MSsOx6;IC*5)3BZH4oMi`THu_M6c3UOH*B=qA05rCEM7pMzK!kx}-HR$|3oUFVrUq{904DJI>i+@qwQ}bmj5$aoD=C(t` z65Om_=QMa;7nGB`%fV!-gCNRxS5R1l4(HSU5=k3ggntd_pMx)Y$gNJdC5wOL?o$nB z+r@UI6j3z_r~4gKrSdGQD$RN`u}Z=F$OTvDAsl)De3ffqq}LqWw@(bj^zO8NY}1`5ZstKbm)4c+_Cw%?>BMaBpBwul zVcf%xIW-mcS)7FZQJzm@fzvfmf}88|hX<2P*~503_7Yue=l8p=ljJujZkhBnM#?Df z&!fevPQHj@IuWB~HtiX$W$U+EP9hg6(XEj}q<>FkauUPr@2Es}hZ?EP7}edLz>?XB&OTOMpjoqH!n#nn7@w-KoN&>$tS z7&rU^;;Lb2Do-SfsU#&1KF&QRu9Bxq-g zf%jk!5OiN>y9W}Lon&DXn3`AFh6ZL%7AM1i6{~PRL+kIsLp}Q1|5%ji(u}9?w(2r6 zfu#=WjQMU=Jz8g$_h}Ol$_h1Z<+jsb}dXkwS+EtF| zOX5C6cTu-#?%6tdt=r{b1I4(j#h0%~+AX($l%6%kxYgi)0_D4`fI4QDpYwsQ<+AUq zLgrlWup9~Wz9qkkX2>ia4&?z)xA=aX8bmsv9=xPD66@tb$G((p4^(vtaN`?|o_{BU z$4%TELoY*Uy}t8jy*6~yUk-cVmtTvVK&HnH2V}8Q+#$ym-y(OLeWZJ8U3no`+Xpj4 zYYfyfw@+_iy`xE-n7@U10D#qgMT?k8m>ETcKW+T;1eDK|I3=ics&E^hF-WhT@r`m$ zxMp#?$78wv9Bp?|vG<>*crITZxqp`qkKfGy47!+qbk zsd%`n(FD^qjYRTzruJ^~+fF0O{{pN0jM^dL14ZOnKVyuD`&I3wHlUc$3J~9)9O-F3{K&kLmJ!7KG6CTlyr>k=_kKbe{8|zHn=b@AvM&uL@N$(0?Zx^ZC=r zwc1hqlWAIH&wa2{JpL%P$V<6}B9<*woA|KBa02|Yx z2-JLg7U7$biqA#7^+lB4+;iw|9Sf?k*om)C1>?>9oGj}2_D$jF@0EKTW6;C504259 z21PclRqXnrvfH6WIIUZvQ*e2~7S#U$dKk6(7Cq_wHqih$dWw?YkAF=ZgE&)F)Aye7 zdjiDZ4!@xyjnbAABD3uZh@HhEcoJl3Odx|_Z^`TNGJYR_)vr6ns$Yy4Dq#Kfhy`LZ z@G~Brvu_fa4j`W8Bv0cy(4#ioKh^8t-eISv;EA)=U(mHa97+t^Hg4G8xV{XIr|LY_ z!k**=&OL70{v#AOjDLvO!wykF2y|rktG0!7Q^-l$JN);v=xkc@(YaJs3VO^$_g%An(6#4B%8bGa+yioRl3j5Stz>BgI&E)k}$Vk``kO8vujtK zsxRRC%#mWL_`F#axo8j&)}MtPyanqGJ|$9$I&)dbE|gjtb$`fH!7+L8)$v?4k5;j` zu6ph7MALH8{GJb3!lvZVwH6HZ>ZIm%j_>j?8wh7DG6f`mpMR0B16)0aE&pt?Kdm@l zi{%Fk%?zj&9M(8F$LQR|hE@7{rIQNSHC=Q7RH|a@9i4dJ$PFnmQ5{9|EUVJDpZCYc zj-vRLBVKzBqklbk=c22c$^cJI*ALAx=;`GyNLH&TB*6J+an{rSfV1t*05vWVOgzHWa1(-t62Kbw2$<`&ZUrT23zLnw~Na$-}QHCAg(Sc zJs*aQ68Lw^T(KG+0QKa79pA#3@^tu%qXSma-&}Xa+kYV;dBZOX_%%|Ni zTlhX5pFh1MC*=mk;^B=q8ZXX+rsK#fAKyBbPBatDeFv^$lOcNItROn99TV3ld^fdH z!{fAc83%2Q4rM5 zLM0(gQ$UP+bTxe-U%(>64J|imwIS}!VtQmtDambq{88~kIL0}WN&EZgzkBe)}xH>{p-QX%q^*mokR+u*UOzdqg-`yZc%V$XE0!~`||my9w3`~o)b30?=jKy*;R!6 zfH|oal7eZ)3cJM(^(lJ2hM@Q3dqInqM1R1Oh(xqVbPgkhdr2{W@{a2K(}9PoJ$$jF z1;InchmG{O^*8o>M<0=CuhWW%`rDDqjNgT#1`(b~veHpYXH|oE-FfODjj&(+HxGIq ziYN>)g`4;$h6S>pSP0)pB-Ty$1Yh#h@JVL+F1h;#kJmb@Cnoq#+xOdukJ9n+B-y^QxZucz5=*i2B9B_bJ;zVZkdx0y}E?RzsXfK&c~~SnulMBd4Xq{ zlJ5)lyshGdS;0QVIq@PK)N){+ClU`bI%=kBKG%*-aBtwE4A$KKu#uqHe4CH<^${Ka zRakAX_s6!Ic~ZgVXXa|bY;H?q>wl*Q3I4#>7iaZtJ~A;&@SDKWKgudg=Q?^iR(~k{bdM$1xb0liU&Chh4%mnHh&|*T8}ec zu1|cF?$mPHA=5h^;2|-@v&agaMaC0=xV01@F6`n#@o`C2xJRUURAn>^u6gH)&OLpBKW6vkvCj|y zm8oNdYhtRT`YK!H^FGe`fqw*_kbeMkCSP_|K^Kp*?#$Pv$bF}!oF4kgFhj5h z>U$^?8~lvuDjN6Y?YG#N$NY(;A3uPw1*|h5T9=HyM~gLMKuimVO0FCA_kGmPGS=S@ zbE2QpoxZz1yuQaWtAq7IRi9)fa*XjL)lAOWj@g?+^Kilv4j8qdq_0Uw$1x)59C8{scl8eYr#$ zk<9d3bOICu^OQ4d=m&g-`}Zr0vQt$Os|SKoD}Ove6cwP%{>KfbV1LjN zP%eOhywymkJn+f@9TOZLWUdrE9(cx%)hZ*gLy%4;D*VGI+G$dvxu+UpwqA zyHNN_5?%HlIe$xH-CE@mI1XLJV=UiGU7Ei>lDxLyf`wacPAfWpG7}a z)9Y9Hbx!jG@J9DhZYI7tUE}uL(X|bfWnTzKN`F_>F<8b`3Xh%LXl5wbh&6k0ivGv> zQRz{`z><|ygh=t#{`zh>MR%4y07RD8&OG!|#N(a)q?yU;YH<;G+Hu0FVr=}9xp^(a7qb=00OHcdqu zzeWxB0>GT^Qe?3B%;R5$jW_-7oCN(uQ^xK!%CR@_2SU&obyr>leSZ-~mVmt`ThvVP$gMaY3?exAh zl|o;ASc}}UbzA8)8287{n3NAwe?GNk*-R}?et(u4jmOEh-HTm_p{O`UW+LN_?(OhR zQC%yy@d6<}7b(<0w+>^Aoa6PkA{c_RIM43JXv17Z8yiX`uc{D-?2#)A)nNyc+1hTYj_p$22mqOcbUdIiDgw0>)>4Pz5~gQnS%?A z6!ZLU8VF`eEz2M%bChD2%rgIa&CFYQ*MA5i6&RM@iAFS2_nbCl;UWOe0~w z14muS142)8<~v6c%JGNr&fV99tG2aWLdM@68p|r&Bf4e*I^`753~$Tku zI4XY#3U(gk;jzi+=**U-oog0n(0gCQk!XH>_F2F*;RxIIcw6jub&wxeM@|RmihuBR z);?H|a>{SlwQ zK*s|gHLrzA58;g@)_dRqcb_45gzCNUE8UR8*u!0vVx<9y+Nv_DTECr6)pfW=AL-mIY=4l=z->cG z!N-F*50jJdu5%Gq@|1lAN_W-U`fbzi%hwQJ#|Mjl;^Ywq2hdJ$1fI>N?}gksD?`+Q zLeyo@IN|8w`xLG@7M##v`_A1IC!J>dD_}5dN104GZz~vC-m^tu2K}or4a#A97vhmV zYE#!Xf^~iCk0BHq$UFR#w0{vKCAs6_#3E$h%WvAn{uOh6)O>P*?a$}h4Iv|f{)ruc z-j48Xs%#&ej2<#G$O63`ket`iec)ZMXT6d0J#qZUt$Xk!#TOl(wuCQi=3GLlh=1;|J`^m6IcVhC z$)!^G9Zhk3gLOXtdA-+NL&j$|{OyYTUW`{=tLJbnA`?^2uC(Q8hvNF^eRJMJiZwd+ zJyDQ{H@>UMMc&UuQt5AA*eAO^F~c_SRr(#03A6MycOZ|!EKQ_o(Wvv6r{HG+5NfA} zJ0;og?#KVaf4)cdntzdUZD%@j@(t+^ma_XdK{CR>B4cnt{@1_s?@?q9|4?KU>2M&h z0{h>l$dLa@kvS)A6ABAL$j4y@Pv-acRkqNy{*OP@Kp0bTmSl`qAmE&1>qJ8(w(h^d z*;xPqKv~po1hZbGOn=g2xVq7QC(CI6oh+mL&mT!&1>E2@e}A_->~{Zb>eK@FF`Uqu zNdV^ek>Ch^3BhDx$-ac@;qp3D6gJ+dSqx}Et9}l+T(Okr``=gk|HnV}A4w)oghN>3 zk3_E(9$B2xe-^k5mi(3~%G3I3pZ&lhACLRTF21WTg=((~2t0DOLnpDAI}<3wJqC2o z>LZc}CqL-Vjepz&R`|smrU;1#nG^oR>^_F*kq0ygqe|{v{u?-;re#oN9-LJMZ?~dU z31l}0RM z6!hlm5iq{!enZ3UM*>@>Y5>48gKv}ohY|c@8Ev{8FMlfO!BFOf8;M35eOqr>S7ay7 z^4V}f%1d=Z7LfI77l<%O0ozU5-HAqu8%8>DhvOS4X@i6c6gkr$jOK*yKC8Q$kBH3BKXoA16pWEy~W!&*#*> zVm|rwvOEoWPyTts)_?2hd&Kc3vVnntL`6Zf5+9tjX{ zADO#45)W;hMlX!8J_B&-UmBPRHi_Nz{vkZ|>VNS)>ukblWfB_Tygxlup1P85A#(ZV z%*mi1t10R0hXCMXjk>v;ir=FN7wo??#Hvm1rha+edI5C%^yKrgz&RTBcwJoD!!)M6 zB86p05Vn;|>+~$D1h~dT!mA=}+QT+7ncHM){HTxEaJ`>ZkBxOI@f1N^X|DFk_i&7l zN`Jh)$qUA6hA2#|>wf7Cz%@}AY)a>Pt~HBP+lyrg#}0UtmSB5CQ>qE+NDLnlZ{h;3 zhWRNDx<{R6cA z>Owf1El#nZa?{}U>u&;Fp6IMq6Ot;%0V)d7Ae4YT9x0MU2XclA z!eN(PG~%DLc#BAuk>EFX#NCByp&9|3-B$S5C%b|1(QzJlIb*%eInEzrx=GNY8R(7! zr%p(*g#JUyCn4EkS_B7OmX@nchJUBKccDq=Ji=#BjZDc1qhUmSla@N0&+_0F!tjI!n*Dr5?7Co)J|IHaMp6eF+T&2o`hR*Ot$})+ z$d?uM5y$n@W;z*Iu6=OShWgEi^0TxvkkWPOotjc!gU-m?uMI(_=i1dg9TNCvj$)~1rqYjM-&WHh4e|4$o+rwS8`78BJ(2W5#q+h zc1s%jJ$-#8k3~$)hI3kU_uM;jd)PcTlE4C50JQ6QHI;;Y${@e6*MENM?Hz5E!|(Rj zjh@!P?sSDVI0ykntlKBUWN zPTVQM8m%CwZE9_2h=RUuJk54hykanL#|m1&2~J0mAi?EOaYF&a4EXe}82BUUC7cP5r*CWsc{$yv^_P!*1vKWP)K&$Zsg$Z=9E{ z7`SjpB;c4WO@CIN*|;yAnHK~jZsKdP4g z<2QZRQzAFU2vJJEB1dhN8w1{(qLH@C&+)JsQ$U!q94$1wH`0DV7wVR>pPY`|DhOV` z)>7JF8-G0l%nB=e_il++!s*%AYI-~vWN_bY@~eGgo09Li>MAo@xWwz2l&4zvQei+% z_C^>ffT6N3oI7p<%m6t_bYH&)!<~8cNG$~G;`0O*vShjv#XJ)!qcC|`G1ZM(J(m~oFL|~7#yS8a)7hwGhJjp zSxU(UpnQ=Pe&%AGoxjv1lN-)JI)Cbe7{##tpKQEh=afgG5d{GQw{}UlR!;ZvU z(K`neAc$6xZFC?!45V^C!mYA`Gu%7c9Ea{bXBJvi-0sNgn|&1#{2hMw(BnOi#($33 z08=?-G6xEbPnhi~B>GlQPDGZZ%&iu!TdK0Botv`$0?u53)V|7MV5ZFoQ;R4<-Ll&>v!i;By`d$f*4`!$b}RtnM9(~b=yCeE~&I3i0M{pFY5aRd>H zw+IO^w8*DpoU}&U(^CW;$kV#UH-FjEKIA#+K7^U9tLBx6?w#UCFjVnt$P5g{Z(aYj zqYav1sC7ib7JmGzW21h(b_aju!>f6QA*V86khbvfh0c6DltNtcGa%mBMf^lmP=8%+&UqGa z!yWCXb=wmrzUa@wj7rW$QRulbVnoJt%Pt7u$5pUdMxJcRU>elLf=BpE`5% zD-W^6_;x$@z+1Yt*6IZT7a?eR}iSqAyB|dzuTvUBuz= z71%^*;{e4)T)cff9hxCbSAVGmfK&n>sd|VhKya@~5T6+gom=$QWmaXuGXm8kn1&N0 zOIH+=iW`G;{_&hH(9StU;mJ=wf`6(nmXCHw{GTW9jGFEnp&AUQXPFNroYsPNIR!@W zguIq7I8xihv7!$Y5@2#Gmrq!#FOrmg=x{y}MV*)2N(4k7!BxgU8-MlF==*SaQRFfB zJHE~@rLZf1&UqKc2-i1V`x_*nRXIQx!eyMR{iHkEr(!kZ3>iRb$-H#H_ouV&U zqaB@TE1*Pe{Zl_3<$p&KB}^jmYzs5SGbeYUTczra{Z=j;Tf=!x3p0BuCzupG>UkYr zA3Hl)RiBxyH4*p5nBs-}igdRL+x!NK;U^KS+1IJ@OB3UX(qTDWCMLPkh1qY^D=YTm ze12|eKeXQOZv%p$OM!jcCyL3fCM0i$sy&)iyv(H(Wc)bB+kcIIuT0b;GIibbU@XyK z(JTz^ev#sXtnUrNhgl9z z^0j&NCh@@}Wehl5)CZ=U$g4~1y?wXHO=ge)POre+pnq_E&yT?K{LQS+1qJBYernc} zNe^{`yVmFr_up-!WL=~-Pf%#uty{Que{YU@-8 z^{A8gCT4AEd7c%9T7}Peu#=~;;>qYA&X-I51Z&y-gt@zdC5q8U-8>^$CEr}nCLcjN z6`fUDO@B!D6QBW94uM7R5bgMhaC(%^deeAnmY*6u8 z?cXOvhyCOFWJ(r9AK8LJPHHvJQ5qw>bkmChR>R@k&si{^`_qpJch?=J_7sAUXxg8c zl3xmagrQrN{|baEW7i52X0g^z=?X!X>4r0W@_#_8k1u;lJ5GBqXcKnIg$p}*@(pWa&^-IfUI}sJ+d#J_76l_wX(5yo=L&hwd1~zD~$oESt;+J z?|)G@nIGLzYQ{|+63q}UMPnWzvXXhd%)4;a{Ux z`;4rc+Fo*ifPMc;^lv7f^YyIhf_;VI27i2bWO|274QRmKdu{1$FRAKr^^W8j;)q53 z$%ZTkD6n+jrbQ<}yD_u^6oR@^WNmOLlQ*;vwces2OdVJu3#!n5l)dB zGa|fp)eM<7h(=FmMiUi zH2jji)$rE0zt@MJ4bKM$FN2)Y$a6(h-xzr>H0<8E4;m{%PjQL-X8!w4oBR5%Y-SU7 z|D5x9zPHk09GcvG)qOuy5{|R^&ws~<+1i{J{y?kD=@1{(pLD_I>4` z<_gGZsC*wO&y6?ytXhIIPN)48j4&3AS=J6?C|@RMXZNc*1>gLjustD!j)i4up6bOs zf0z?8`x-qrOJLn$a%`w+pMbG>^{4iJ*6MTo1bZ9()i#VRD8cZn`2@55nU0-(4OR}& zWF>j$ZEO3Pg5C5Zfo*B|y?+e+hE0|)S(ESp?1-O^$@|b>9}5c;ihYtkFa{WC8Xq3K zGzrON0eMR2ijOW3=4HM%Uv*7S9D!KW{wZXWp1Ny>lG^ksdQl;-w_NMrs-N5sspBY; zck~x1cuf1z4u(#<5eU1SJzcf{--I{Z8uqUsYL4b~z^!TNuDs@vseiuzd?>zT@meQ$ zI)McmWgex)+l36iho1k8HTP^kS9uMJZLz4KC4&W9qlodXBwg${_wM; zNQK->d`{_uc>f6H{eO|;a*ym^md`EWj?MXZzlj(A1T}}8Eo_> z!o+PvT|ernK2**-MNfQkh<@F?XS4flX!ae4b`NWH1Q@(c6?#?qz>l@uYKpw}Kf>^> zhcBv^M7)Jh}e3ZFncfRM{GK7 zK)>TX@7PyTV%o)#DvXXA^Nf$XW4yI5WAyt zhIZ!HHdH9$5wI$A&EY7~oSrCO$c6h7ArRm%a4ZgB-m{YSo@2^!>z^raFD*Iy_M6fU z#-s5HU3PM-XmNvIq6=BUEIo(Qmg1NCS2@B}bcf83AAb@1rmo$~i~>+^)brJ=&46z|082w;erTc@RE5uN_xRe4oqap`2q`vN9{CF68TC_;B`Bq8M+0F*?%xaJ+HbSq zI&!HH6MwCph+s!=1Xy(VHjT6r zD~jxneSdNaq=*w{cL-JETy#uJw6bIUz*{*rD1QxRPVD2tk2C;`)pdRsc1=xhz{X@` zBWoi1tZXYf}4Y`l4Jh_uY#2O|&V1ONC_3;`s z)-yQ!{d>26BOjJtfnjr%-Qf|O6!mo1fA@x~o{o9?1n;qRZ8-2|}IBKoXZ zXjOe>n>y2@Xy;}~+uUsXDX?pYnRy%m(SO^SAz^YU;y#{-2{vsewKL!9YGtli)E#@j zeL@Jmb?b-(3dFUuo|x;H@tntaf>6wr7qC??YV^T%ZC z9VLeT+3$+17MF=2oc3F<2Nfe7Eq{N-{zATPhv!uAYnYW@wE&q^%p%5z92|#x89(o! z4CEO&-?Oh)W>ns$Jpej&KVjPMmG5*50wcRgydj&PkMI?*Sz%rYAR|w=d$wPg*9{s* zRSAeIo?FlSQs`M@TCP`)*Da%=%lr;_3}pDdsFu4Kv6uiqtD1O(t_ zjXYfHzt=r8;PkCwDysYQ$zx+r+(jtJN<$R?xxbp77AtSM?Y_Wwc=@ZQeoh)RHJ4r4 zrW?iVcY0&tO=tYv9#tbnNq_q*1((0)iQV7M{Ij0Tj%Lw|X(&DjPm3*+(L{dI6MX3LP!BQxLPmC1^OkBEo-Q4JK|=sdfC9y3B@?$iz01HPL9cY?%oZ^0$dSWL81 zxn~Q(-ZVK}=MFhs*!)gV8P0v2*Or-2I<1LEiM=Q8M%q2fRJeflIe(skoQ*)7<#W+D z`=Kh6(f)&Shvn(7{bDDgHnYb=`Atd3CGnmc8T`k0sw+Y-*=d`L592tZyNaat-d^h; z1EV({_-qD60>}ZOT|8EJN_{&@1yEFbVzrmai~I_Ul=tm;;HKM)SL zhrd?@_~O+Iu|+8uS9T=wnOq|a#F=bsY9X0sj7i^wej@MEhZRRc!P+33@rDHMO=W{9 zB_4S)Ar>e9+;1*{*2_vB>7p`Wez?fQqQqW7wI^gTTE~Tj{x{_-L0q9 z+um2h=n1fdeZVO%o!N94frRFlWm}cAQhW4SOa^)5q{Wmds{0P=o((o!ZOeYCn>@Fk z%ok}LGejwx^C!3+k!K(Y$cb1In)~-bExKGLq@QV-ihm|F5^NcKOMz+-%Ih<`5HeIH zLahWblmI7jG7qyCYhxs0`A23&ws534BCctiIlv4M+>e7~S;EMYSJW-MlL&Y^IT^(v z*ly|8104xQt@EJiD$XSWtpc_Puv}oK`a$ys_g0BS6X7b%?wo(3-P0OHV6i{bA(GEH zRd`jW)PFW=sk-W}`XwXSpcx-*A0$OOO5Ya+wDznctbtE=D0H$s0^Rg8Z(sS9%~C%2 zGByz`f1WhvVuexv-lJ$DJ12qxjwwe(7oR85=Ohe|AK6}&euFQ#Hx&zT6dO%f0pXOr zT7-IEc-AB(z)LR=O&I!<05)4>iYS)JK_V_y4}S`eWHGyKKW)dQo)0rS(QiPH8F-ds zW0~$Z*P2f|%lmjt_>ksdqxDJtF==d8Q|pTl`-b`>vM_a=|8BiXJ)0-?GB5As3%ctO z<8V`w-OnTi&e$J@%ml-cFQHUD^YM57e$RO58+dvtKa6(C6TwT#>YI*oI6)+6 zCCT8x%ow7M1fcZG+4HnbUKaZ0+Q0x>zdD`e1TBId(f%D^k#0n5OXhA>B?*0H^HF|ioKgO2{5_0C*nb6~dV3zIvrCECf;t3Az+#phOuGddvk|o* zt2#bu@O&7N!J&P<*Rjo)FUJBHBGs-PsTx>C-nVXT;jzETJN$*-c>G1e8`O#!lj&BNXp+J*PTpqsl0K>9azcYha( z){jC5+8r4G=J%u%z9UeW;0m=ZgsB|-8c{;{HOt6cRE)v15JP6kkmj6iIh4j)W&05Z z3Wi?|n*xFQnJ%AaNd5X^vQ9I;9tFiR{o7>SBMr|l&DSrkC__#b2LVFq6lJ(aws;*E2K zB?By!8QAH9eHUd7YEn6C94R8x&hVCY+!JWg=CJS;=`PQpK@j0j*BcH<-t*bUcTzBwqyWL0B{xd6}Ejm*O}}w4|UlK3V-I;_x=up z#Vu1{wMV8Tx!m)simz@Tu>IjCQwv@wV|(n%?`J&|wOXexBt9|9G2scAwJ8Qjgs^dd zT5c)xv`ub^bztnfHWImQQ-L`Qrk~t0oCu)QTwBN{33`>15>{S6aTKxbT6v$R8)KCX ztG>8*{`)=2+{^TIfGobM4uAcf^a<&ec)YQ&PdA9}>~Ld`?C-m#dHf2l`U#S%95l-; zIq4%@JMZL~u8Qzr>wf#t%r4F@VxFvZMjQ^L{ec`Uvg1c~qT*h;|B~;6sF=^2Jg{!* z9VwptKF3NHf|v+UTR^%f;lYoNv>mtC+rH^Nn?3$Ab}%I2MbaS96Mrro2ovpLDGAp5 zGP=3gSvSEmHK}KVKUCzjx^-LwMdFwsn-!lw-|%1cXU<4w54SY|D~(G(t@`jZl6pEl zE0a&kIfSz6<6`dF9rKBl0|j~mp{#S#o`k->Pd8*|x{SOJs% z?9P6}Qkvi_r74%cwSRQFe%BuPbqy(PP?#LcUq0; z12#o^_XaZTn0=$ka4O|u>5_GNkGe@X|MH$GY&e|IrVt~vk`gpb;OEw&Z92)o8EIn` z70)y2`tAiliGPH{&s5qFWLF_1{d^-XJU9?2kuDfO6t50iG;Sc$D4^9bkIG3B=6 zFtI1cGF5!-lMDvz>B+wQjJd{9GOIsN9ZCWb%3a7sv^)bLB(;z^TB{m9^mKL3EKZAj zUAeyCp9pxiWNMrL24HKIj`u_y+N*;f&4`VvKSF1cdVfLWjS)Zw^STlYasHEwq@R<4 zclbJ>tt3Wa^Wv!o`A+Ql(JbVrPvi01P8S3y6h+@7kyGAb{h=(*y{zQBUte$L9%~t$ zOxBP?oYF1aoxOYfrQW01k*xg4)IoLZ%>W)^4KsNt>w)L2_G%+M*>XDpgcuUmQIb^9 z#Vq+dAAdyP&&X|dPC~gV#)DNW+fSnF$f(wOm2UX4Uzh}?bz%i6W?C2RBFiT-MT}t} z51y13_uk?hA)pPTJU&L!5J&;xzL^|cDd8pq$dJK1q0fliDO;q;|7hzGv@x3EO^7hZ-8CqJN}*I_=#%9!?*-bs4*Rs;1c?I>u5F zCw{*ZvtpNwOU+c9&L+N*f0z&`jLtW*RPgV+!d)ymN2jApNhd@{H^w|a81h|RA6L)$ z$hJ{3Tl@usw7#&+@6M1lBDFynqQhzlr zr+;B!iQvJaYn{b?9<^K$zfT_TleG4#8eoU1V3F)3zS-Z%Ms|iFp)BeuotEQww$|rSFtK;&bbz0DIY@U* z&7!H=?MRO>AId9J{Q{r1COKZculG`0+|5)ekgk8+S!~(+n*z(Icz@t6%0LUt!&MSY2#`RR^wCSt1pvv(=4LXeAM$;fEX zZ(x5VQ2?eE)tBcz8!PIa354#LfLK;CFQ@Y2V#sh8KCB*gdIx%8Rz*MQWs|fcc;XMz z<2n=a?#q;SLRY;T1jj*T&C6;3wS4?h2?)y)0l}&WSMwrKO;3|Fxx%{! z)vmvNxi?11CgrPK{@kUQgD8N8Fe?)nLsGXua_ToNmSFNWpVt0B!rv< zNqF0sQ!+37D20TJkDW_0NTbrqUsvJ(YkwG@ko+Bo@iv=gsCn)E?)pZ@Fr@bC3U{!I(<_dok1)+Ui>j;Q~-BlNGq z=kh0?zAcPm1|Pb{+{jBW9R>;k=B5}6J^jb-eE1*M;ZuBYI1Rs#Pze3=UQH3QLJ@U7 z14aG@4K;=%Tf7>(^~w|&2PSfR{6&8TR*PZIO|QysLs-Gor#lbTFJN07F4DwC-g`lC z)7lcJ`#|4`)dlxK)eRo8FN`P_OU_?k)=N(mz)dyITQD&CKL2t5{(twys?eUmcha(y z%@#vG?%d&U{t+o_84Et+CVwS}>~_Dz!jC;usuDd?;VN3@rx8ZhMCT_tw^ z?QG00Sw$8{(wTngfVC*dl~)K9t#kBaWI6r*Qn+i$Gal1uQyLksAkqia?8u1nDjax_P@sJ1-4?yEHg zRmOg%bq%dTb(hC!_CxdGeJTM87!rHiWis7>#0me`iEfI-KjZ(Zea?RsGBLj0aAhBi zAn6Qyww^O5$B0>K=EXZJ@8)-6w-2&d0&9-me%(l<--RH`p&LA;_YLyF3I$P6ICsTq zkt{-K1t*1a6+B`MgoV{-_w=_GAu;-1w{31aO^mYP^v&zk+>yrPfP~*+jvDba)$Z-o zOEyxm`aZz>2~{5Jx=4S?ZzR8kNoxccXp#(Vyhu48W*bj9J#4R;L*?(QsZFLFZ#7~I zFC}Wlv@~b->|z-=LcGVl9?}Z`)-k@+?tYfDr#{xg+zod%Dm`jnQ16xS5t<=q`*>92 zi(V!x7r-L(IHY6a=;a{hv*Us#eLX3#p$TyvszgU4;X>ES)< z@WELr`r%Ts&)MHphjytIJrC^Ed9W-_bGGbC*7I>?dZKuf7A&otz-s=G_jB@`Zi%8} zYUE7vvDHmWZT5ev-%`22Wkzzabj18_YWT~TQ~~aX09_=pu&qFwf>qjqWlrDwO}Fd& z>GApTG$eN4G1HEk-L|8XJ}&7;emi}??7^cmFLY--gp_D}+*M94rns=9xwbQKf#Rzzjy;lW1yx99&nzXf8s#~I$2Nx{N39Yuv=vJ~L0PNh}h0%Y)e zlEY$77Nw;nGw>;bwcVA{FDep9HXARozS~G1b&~Yh@~xIQYM9JBZFNa}9{bkYGBEv9 zIX31~*z-ce@5=U56ol2vU(IJ76CTb0$Meia-$Z}FgpN+jZl<|=`_avyuP5=R={#*T zU%0~}WJ34x z0q}pk)8^1HgT7Qo8e8;LI*rujEKY7)IZF@}|d{ZbuJ~9Uh`Q^_21; zWE(hjRyT9tpzXfAp-==K+4vE{UeIGb=s{NAj*=*Uyb4u!ASN}?u=AD09k#@NGEl1% zylACH65#EjNn_}9)3&l=3=4pdvV7aG)_>}x`N1fyF~q?D%)cIIJEfoHl(Q8#V{dU~uZ;j&Gy!mnsLZw7^{#YR z`mVFq`ZUS0B(TRL7SjQ@zb-=k;8=E>C4<_+v53 z$pU%utF^U|$GF(w*RH9VQzt&s6#vh@r(h7q?BS8 z&Eh0*`}57e=`<81q*4CJpg+Sy`Ez^WMo@nzAFgvBZ;tA|&*oUdWxTsct9^fWO(n%1 z>EL0#>pMvABgcb{IIJbk_b%ATv3>)WYD}M(qF_&3_u6l`&VybF=fb~qyi|^lhKK~% z<^&IWtgciG{y8yu)~F_9AKefI^Rrxz*)g}~tH1@~Ve)V`oW9k_E&Vu+j)F&b?5)JA zOvVwiS!aIQF9AngG?X06Mi77Aites!gTl4z5wtnc4CkI$-0gr9ReD+QR9i0hb2?~> zeURK8OQ2YQY#a>kqtaX=kXN~lzJ|?N3y19MN-ZPcA&>- z>!l!IWmfT$k*98gbl+|A@&IRqW(1QgjlJxk*0A7)YuC#zQGqzBFdn<^?W-2Il7cL# zdhQNm)chrDHKvj)EEmmYNIH5chLFikld)YT#KnQ?=6yMVGiJTbA^HNhg*MjKNLwU( z(@My)xY$86z(0RuhdCpiwpznXuERyFFUd9@!*&C)1tNmle)_D9`9uLwbbl@8Lz%HF zK^)28o?|nd(;fZTTwCNnfy0LE2IW3VFr1^C03)tNie!Pdax3tpn_1r-4(HQY=v=|&JBKyQYodWoP-%r$j?X-5M^h$`9~L5io_nm8RQ20GYkG(K|n$>vDt=vWXChubQ&CDYA=pcJRE` zczoa=G!%ceBakJiGjSB)AqQ_Y=X@5&nMg`|evz>p^wY8}$`};jM{$i{>gw$4WiVQr zQw=A1-KyNJ=*{&`4)&S!tVIIyuNK{J zK|9Ro8aW*jF7f;230eVSt(~obeYllivSY>Hxh8*b4*I^9u01(**J2^XBGa2;u`i=L z3-HvSu>$Y~8QPJAci|-=l9W=Qt3L0n2`CwCnCFoXp|St0V_Olc4}9rj`GyKTfO z^Xo(AteNN&ZxiXOA{lTpKXQvj0ap%6=!#=-w5!=S(`^x(>f8#9;m_dn6DlM z3M_vJcF!aGR6zrz5d?!;_MwCc2+J&ZSkYdB``le$g$s?D?6>9_9ce|D-S9?+6!~`w z``j2c00nI6oM&Cf3ubqFlJ#3s8j_g_zhz!$rs*cc?u- zqS;nwtJ6q+6r(m;4P@c!@V>hquJ|TLanpau#_*^}D{!GnLcywF?$%r3Tbd-IcIpVT1Ni%aI^&ixZaHB0sJdbZTuEHWH)5c`A`492TbMlY1;#=E8pw&qik1>?+vE0Ct7{*)p~HI~FGXX1C zhwRSU3X29M0nHvXTT3839YFW1nC<7aHh}S+x>=;}p-08>dVEf1(Ma2xCZ@D(mPQkn z%5LXMUq8f$NO$%v4X?SB&!BHdDr135`(t8kb_4r0qHTf zN%el&QoQK-^)%WOV*t+}s@TQ!y5Z(MOs-KdrG?REQF)6h7TCvj+bDl)YGZ{OU&m`I zyIjWhppX>~-@s6wGqdR>Zt>Ti8BCqL!ZW2cW zJhP8*qx068&ilLbI&KCVR?Ny}G9^Z>W+E^O@05IlQ62y)mr$0d*@j(=;Q=DHY^P39 zlsSM@f5~E@Jm1|VF;joqT|dPJ;Q$936VCY-5tX|xWUk?wiW}QZ7*dX zF{&QItq(D|0UyZ7uBVEqjgB+T#>(E`pz06f9$${7oZ*pt*NF2islnA0i2H)1inR{^ z*gQV3hfOYI7;2Weo?Tc4GI9Hhzjc(dhT$_X(ifX&^z$Pf)8l`+x-Se)h@cN_-%0pj z8Z-+!<4QeIk*tyGdA&-hih>_yN{HNm!=0jI>5Pn`bQ1hnV`{!M5XO@vL0M z5OLd<^wIZZnkF=3dquJ3kP=f{(3MF@Q8!N0NCtf=4#k?Nv`)v&1Tua7WBgh4?WD1>kAW|I^GEkf_!d8|1iJqS}LLe7X3 z;6W)VfdKnXl|Ik+nigSAU$KQ#46Up%$qBfSRVE7JP&-=7+;*@truBj}bhfyxT(+|x zeQs@sU69au{TK*?aOcWy0f5~`)q-tlCe=yXG@~t`lp=rhHGQf#*3pGbm0`Jq#6ZD2 z8npXdIv+Dk3Y7%j#y?pQcb!q6@Suq3YsZg+657?#?0RXEykhy4y04B$$S`cDcYRx| zjtP`s7VN2HlnqO{90%3FirVBE%zy?ggAZy6%u8pAwmx#o zO#w$H+N0DN>zUz&zbor7&uV{3Uu}2@26DtkbFVq%#RDw->8a)QM=1?Uw*>&l9jfzc zC!FC2#GNNSebx_MN$c+*z`?gi8(^=EvxS{m#V% zv`q}=7~;khUMKWDe9Xu6!uA>N!k^EW|0ffV-Hf1}w$zuvRS#!CwkvMK<<}B|CE>&z zLDlgJuwnn`ILHwwyslBQ#H=KMBDRTFB^-a{q#m_D_smkdjygwFn&y-|3Z7oT2=fTb zF!L19Q}qg_JtBK&bP7~aiKHg41j1bp_h=0jormHY@pbGA-DOyGd=FK{kw&D$O%a(b zc31r}2e2uMa%m1`A9P4kAw)t^ecZ6 zwr0#DQrUWx3=6y^W0n~y*TMbJahD+>4;AE^9>RHNIU=Q#^RY>g5}eq3 zaaKbf!`(fqGkpsgD>Fs-1vSccZf2Rr)H!Lj#&mBU>Nw3kP7;$fxz$i(PxF5j10VT$ z-}i17=#S zI(Y(W5>AYqvD?O;sRZCii??upg`p*HDX)gdPyC&kI7hCnBDH!-=lqa z>mj^g>&LA!!ZRK2z--hd~}ac{P}BR`(*!FAX| zBPe-9To^!fDpU=P@#D1!p7XW6v~Ux5+BRv|Nhxal!#ZpZHY8b_P1c>1mb0fqz_qrD z9OObxs_Xtnna1)wq6BKV5mUpW0X>ET->mkJ>vRq&+F5&>l;xCnKze@!J$&xL`GAHr zJQGx)JV`8E?IF6G#!OYZ?J-^;K{4tp{^D-g$D>HM_d!)uT};C>Rc~i{e4PzsGo-r> zChfG-PE-Qsy%WH=n6)UG*0^#^RM!il9`5SoImSu8%eafriMcU&bIj)5Wqh8~yjcu6javd~!;5~Lf}G3s$M03S44Y3hVN!ovqz z+ptyjYPwJ$qG_$;R71{Y1AitVE{})Ov{Q1u2#JkK&HH+BIU`K($n#U+a6gS#u+Oxld#gS=e&ZmPJDMEt1>1;T`kRa57U2YIAMg=_>h!cEViqB ze?DC{{Vs~wG2m+sHK%t)w66ECEJO8r&Z)({pkn`hwa#G= zj;#=hl@CSSM?;fqu?|yHCprFUpDP9;Um5o zd1txVZzY!0;7Aa)owz@d*vP}2Bv|ZPFTQauu<09rzmBfQ>HY#9q;}nxEr6iQJa~-B zBaHKUMXI{)yqv@KQ)K6UX!qx+oBPBp2RgL_pJH^+0i1u@-MH&qQp|d<#e=vVF*G+i zjYp5;Xg#azWer|-4^5BA_pz20ryiMXOM)6{oNVjaE@@WKCv!yznsYYCh9@N_!+3YE z{S6fMPq#Sn{UGX~Y6yOyXF{3@sWWQX9m~6YgTX-C$Li={dNW9mT)YEs z3$}WRIp2TCMC06I0|u?~v5`k9bD-zyD3UhE4G1gio0RSxa&$Bx)&ij)Sv~9zw-Ic{ zMcM06a@1jW4a~G`om_33yVM?ifbFrIZF}M*bFog6QZ>1W`TMeqwPJ zWf?feQPMX5NqhCJ8jt(kPb^=7LSBvc+6rRpRZTpn%c1j=N@!%~FV=2O>Akc4(+Az?iN$(*I%iH)UP5mH*y0b;^U?B!639KyUd`@$b*CxHzSEX^fer2N%yd1ComDAXeI(lTNq0Y3n-ogVJFdO6k>l@wMU3R zT*rHAXnUA$k??3C00qA$NL$7dNIC7KS{bjK?a`?^H|6lxjj(JdFNS%{7 zjvaQ@8#vHkQ>9gS7g8fb4wHX)_rtG=vsoVTNQy2?&^?vp&NaCB%`@&-j!o(C)ER}G zg-=vFch$VuY$?fjIz_@C==GBH^h;^-^vCSY=lBQr^z-uRBm50Kjq#+YYQ6ng0#-&+ ze&Xk+-$-)cKA7F}DYnN+1l|KI=S^sxk<8i!Cn0eMC`ni}j8(StMO+*+~ z8|@e}jm7>Bz)i6lQf|MAoBe6Gst(tq52s+}Db_%SsX;otuN=B@z}-DBi|Jx~x7){I zZd{oLn7hu}yUjE_c$aCgqSn)Hf9z{$YC+P}G?IAU$K!+VE!Ka2p?i_HTb^f&)@8P^ z`d0O}#Nx1+189G`($W^Mm|f9@J0dAJhvmqzawrti1y8v=d7(p zK^b;TZOno@k}8rg{h=4RTQTA0v`0Z#!bXDIjmNi1vrBZx7~G0t|C*8@@V{ zoLbLX?wm$zIm=Q50xM5?3H3=I4n)0T5aJdE4V^^Tfb@S`0WuQ?vpJMK4E^R%%Ofu+ z#n87A`k{Q?%U+pys(0j?zIA2BFxPM^-8n+sMUa~@i3`V@5aJ7h-dzZ*DqEv>X3h8< z4QaYz>w_c%;9wy;547Y#&Tr23h8m#OarOG-F2E^vp^w-o0qEjQ|0qgSMC0wF33Od) zT{72}z;l0Q=dRduDszGBx!_8t*<>$2vSmx;rzL#P>PcuHdUClu5tjwj;=0oJ@)lH| zb16+LxtNUhrjP=^PFDO$lke-1!yV5_+uR_SL9DB%YUz4`l#L0G$-f6D&(!Vo|XI>vfeyJ+mpFd!ZNG>w4 zd?h>R*MPE${R5`19nq=L1?8;NSRqffJ-Mbs592|to%`%k$2w|+mKdmnz__+HE8)Of zw0nPVa=CWhyz;Nje~hw3l0 z6%xAQ3K%k??na|&%nh|9PzrIrhu}*}U3shs%%doigW$7WO;DJ*S}Q_XjP?W-WDXo} z9iOm*$SnhQe^wC#-C2`^fsNXgxjSz%M|*OzUjS`M)EC&lfR>CD0pLLs&$fTm(^|eh zl*XAG3_OI64DW)Q${$#Fy5^TgcUQf-U+!;m4%0%G!2V`?-yB)#p06Z`mT06r0P97R zv&DK40uMuA923(4BdT%mu?JGE@D)#YhNC;lUEkmr6PwbT9$twrod3tsFU58%^x_1&puNwrzNCOv``FV|C1`CWj2T zGSN1IV}*XJ&gW1_TIR=s?=*`p+MX}&6lOY3HK^^uzOq@9-cF$br@a}or8lj*PAu8n zc$?WeqRta1)i1y&ta@Y@9%~0?9U;~DVhs{z*j-ZiR9&GgbO!TY6R{ zZ_-(+8Xi^6;&wmnQ=We|wg&cZ#cEWKu7EtwvpZ}RRlP@DceQE5^aOEp*d>VCZaimH zAQu{2_M1u_>8NVWsfg!8t~ro$@|fx1m)3LfQnU|hH_0SUK1pbyCdTHI%%R6h`y3`;b+}n+z?tK+@+CcyzXk z=$g9Np{RS41vDL-F;KJ5M~xH-co0qZcrwJpl=}%KCV-dCLjADIQ1y+E>JYu zNX|nXw%F;6ZD)UPE<;k8JG<2JLgYvw&c}KTGw=A?4J`+j+a9@c(p;E9#ntXx4+#96 zs_rY|QXlcdtq7#SoYM=pxO2nVN_ZyhV97X2vCF-#*ZShnUL;lDOv)Y_MgzSRfXGy} zDd;9hgHw~xTKMJx6?m)MS^+YwN89J)9qeGpCVNons6>BwED`+LS!U|JM4HYQhSHyq zn3-*E3Ramh#+ty;7O_eQx zvD2WOEgOg^#OrEhj1G%lIVENWX}uA=L{Jgeg(MVr3sXIH@VpjVgN2_0Sq&FpWv$A# zTIUQeqUnD`kfyhyy|WuGbWp2VT_u{66SkR)C8S4Dv)@Cj!w+czCSRCNkOE!>dHhvM5CEJTk(?{vgf5HC_&?|u2Z>vq|=Lhyi9M#MDNaqG;a>(a76A~6lnuS zOvPx;LI5-e>cZDGFu`}AkV}F}-lsh&ZH*%#Y zJEVVgnHD*0(9M!w&#nEWHYj8V*r#>pK%`yi`Z<%{G{0Jk*nv>a5-?m^hn) zR1*8ddJvMhkr^1g7z$f})rxW~c>y5BdSqg`o$U1DHn#OGGj+h3C7`+Aa0v%ZOJ~&7 z_f9`f#NA-bSMW1Krf-hL;rc+iI=DkHhM#|RZZ1!oG#aH3B}36W(dR`yS&wR+(dV=} z?d8SD2;m*cv>^w-C2(uuAbvn&8k$V_$`NJa&ahXQ@I3j$Mt=M_?RL0X%T9z`KAtcO5O z^SL4T)$t5}>0(&)MxjQ#aKdCGO^S_?s{7`2-4|?^X8qw7`-B9O?jXEQ7S~oI z?4@&DK#h-4)$6R&v(g7gYfLN>r-|e}eV-(&W>)y}Xcme99J$HOql3)b2GM`1f{q<& zjFx9(B>CoOec2OwdD5K`EV1l^d|A>Kb%D)UA`O;C6dF;-s<&)TWEW!L)HS+g9@Au1 z#HlW7;}ihp*>sy=i#@8C!gjgIP^n0D54>$H+a`=NurhJHTlORthueA94E2m7Ea3L(qF2}R@shFT0pOd4 z8H?wLS*~wRvRzomtqpt{gHn&A%V&Li4*gVkTy$^HdUsjh%xgUA8kwulQA9x3H(R(! zg!>D9Ia(rpqwUU`bZviuzm<$frW#7;4(jq~2@Zr!n&7Y;oi;HwvP=mQeN#f0CiJo^ zP4Wqe!>9-KFyj<>H8avywUgir( zJ)Dc;NIsU1TB%a1&y~t-Ckdm#D|}VfyJ7(#Jr588E7s=?a_N6h<{9oFFuU<=nVD6X zPTgCJYAfttv*e&!ire{_Ac%D!??glHyh(D#6khcD;YQ^1<9I9aChf=i5eodeRUhXQ zb-k7$Z9g%qOn1)l*jkb!D3~dU89DRONStp5Wi~R6X+53v_M z3Ahzs<_$zb>T_}<2B`@dALWG}e^fN1x@>@qbU*-)VaQ8((ldW%v5<(lG=;#>guLz@eIg^I z^&yZ8TU7bTR}!~4Y~3dajRtc-;{XXn5)-g_2lT`OrYY)B8l!L1x>P2i z>4=i7F4lk3Txg;2vrF}zbc*!^y538wnep>L28wC|Q4NqEIOP<((so{D>TC+BG-+}M zgE=~d`81fVcAh;ibCMcOL~`sZ;~B85)L}{51=tN>LCnjz*eFEpZx{J}y-TmE*Agnq zijfOtirtbyolm+nip z2UYEQx&s4ylSKCehNJt zi0XgArR*?B3+;BeRZzS;`s~7#-BKHIa!5>USnpIT=u4{X_;!@TZ7@?ZMvIZz#5z=` zYrpC9RYt&-TGOl86)g(pcR<#(^8zweTIdhDv6gSSBAx@69Aw*S@(K!UgnunA3lDPw93w>g@=kHK}}BvWn1e!~^Eo3ElW( zRqQ>dnR)y~NMj${aO!FVnyB1zdT^YZQ-BHqQ-zDQa=q!+o;Q~wx;K$SiDEwQQXX)* z9jNh;G&#H2u@bzs-q-svq+lL3rE3VURC2=5+4XZz@}<+NV|VY zd7XnRoI{FjJ(l4~$h9pKF;U*x2((ba-dfc|oxtTDSfxy#rSs|}Z|7t_nHOtdrXdia zrE^di2lr&B)%Z3~&oIP1MbM$UWbsT@`=K^UD^(+z`W=4AIQYt!%G2_QvhK0tFleCeE`= zpDd=)6xB+Gg~NAZ1$jm@&{Vd}G_tW5&%hm6Lj5=KN5ow>AfCOV^J1#UGw?13k_!1j z86IZ|@%ij3UDs9>&*uYt`kY;x^?^w4F-5Pr_PSupOXYgETiZvOART?V4K#l+)ryo} z-;gErgE-Ga~I=U00U0(K@Z&&zF0W$|fz>s1d8L)iLs%AorFI8PsqM->Gx4h%zF zeFmvlJ0Py^quEYrKa@~!tY?3Vg{h%7#HrgFYDI7e+}=(CU+r~Po|0-8T8~(Rcz;#Z z&;ao_Wh3)uvhJv z*qzfQuCz1S!Onb4(iIH=FW&qi)(5bLWLnz?!qb z6Ly>4+o51ggWa*p_AGQTU1sE6{APAK(Khym@<_$DHB%{V14+1KTiN4PZ-;F$J4o!_ z5g{H}uMOXIbrPBhax;I|jU=^$G$Mjs682p?d#oSfA(&Qsj{=wsh6gZ`Xj_v(EEr-h zH3;*uuaWJcZ3Dp4jHR+F#2FK1%_Ca&69?KQNyi6nstc2;cL?OKzO*lOMtK@JXKI1O&Q)vN zr__trnYy-Z=_s`Jv2g(Us`DE)Up>s5wO_({_$tp=*L+%#&2Egc3K@2t>^?^B*+c9a zGjrx1Fp_ymW{rOX4R3sR)k$Xe-SWXlGwAW&%4Q%2=DIqSuqtpTqnVCA>1~%4E5`@7 zc$8$ja%mCjpY2xQq~mNGkLr`v!({>H^|BnE0DP3{SXLok2P026g_D}+_};P8orXrC zfhLaI$~A7(&Jgq=>4Wo9YjW`d7bh@h_Z8g9^3dRxw{m}dUmooX@~%dQ9)Xv;$&%$ETy6CEl=WhIDu&v0w>T-#1KbB2aRhe|J~{%vsH84B37qsE zO&nc}86vN1f7RB|e6u%O;ar8rCRHvMROewwER)J)zIx2yM`)ju+zIv8CJ9R&h_+$9 z{P0*oEaiW8&Rpv$+r9DKC6qr+%}{2u_0>zKa4k}A>vKl0c78d!E7h%r9IrU(a=O2d zT@y5zv{&MjMpM~wdO=aX9nGdRwTFwTH0>cXIe{dEr^4KYqHe3gg!cf%oHn%RE_azs zLt;6p6PoK+#38X8as(1}pbpc;DpkRzZf?b8BTs)dbsB7HdCbhxZadX3L|{xd@C=$U z-r9{6%>*m@7zHP`^tiEpd zOgfp=I%?LaGaZ;rFh?7zlkXGv+U}YSrO%mh#RpbI+(@6=1eCJcP5LRL@9N`Wv|v=! zQ#Ui{v!0!EI4chnXiDc~3QEfAVOvEZLzjOga}POx$cBV3o7!pGbatAMr}#8L9SAPl zMIDnA+EtsWV&F|c-!3;ku%DZmy}mp1%4Ae&-LYkKJA;y(G67y$ zo5BTXkWm3%=0(PEh`Z=ya*ImbA?CcAFk2u5h#Bl z^>X5tC}DTH%|L%VItgOXQHp*U z1B5kmir{uA!})Bykf%=;*$}Iu>8uGq?JPxMGx5!= zwW1bb+3Mt-IJ-FJPG4^!TASa}iMQxv!5?;c10SM1fEnKnCWh(d0uj}*5OjY+GP=z5 zaN}rnVqQoiXvE98b4k|Kqm#a?D7J0fG6|j}GeSSUCD6SFT~!TO1T$IPmNtTdI`%tA{AX+(r;Iwy9FJ_KJ=mJ?QCFKT&EX z1NV7)DD-`Ii8u)bun4Iyrw@O8Ub~J8xbB^`F;u)J8YLE>nCr!LS9lPm@T1B}SITXUVn@D)!Ta^bJQ}&0uNd<&Pp`?< z79pY&HuMBV&ht*E%6?nQ{G>YEL}@r2$XMzymVI4q=i3q*iiL^HTY7&6k;?@duW)P< zT>kT5H1mquGmE)wxj8Cr&D}Py6IG>rep?bp$Ubk+_tnv$7H~){vw-ot(q?oM^^keTDNyPQarG@&b?U#P(Q8`t*l zNtgl>pdP$YxT7aoD29I$asqH|H(O<2h_qO9j#aU6G)t+8&(*!?9OsOs>$=k&SJjdB zSH6vMfK>+}Tjb4d@IY&8z^~n32dh|A5WXCv^wQnj2P~$&Gb6SA_!9Wo6Er3ut2sNn z3}-_=AGvD@CCKRmZ~CBCXHdnl=$pJS+t2uLyIsl4Xa}l}=K6oPU}>)Tm4_KZ5h15+ zc6|~+*vO;8i5*(^D2Ugy@qHQ}CqSHfb<58;upS!Q>7c^hRs!mpkpy3^>mYDfzI^c^ zhUhzEgI4St9Byp$p^AT`KFwelsV59r8{^;2lkVzHqjqr3Fi6 zmujqfdzL6AZzKP)B_7^<1~peRTwP&o60VJSdDb~P?ZpRc*xE_`I*jw^=1GBMbw!jJ;SEtG9 zvFNKY8>ib4wIXdaJ&MPB89ZhU$zs=GiXKwKq^uhKZ3M=quoDwD%o*p%a85;)U{1q7 z6E?$&xG#UJ3-V4{YlPz&1G9z0K1%My;X2)~0i@dBG5ODLi$w>cEjA~le#esZY_vHI z6;yB8b_rX{#4O}B8Cww}*hAD~CDan?1PjiU_f-S3}M-v%Owt&+~+{=A94A zgqbPw@P2~BhOa`+d@PiHOO()s53OZwtDM&a3^g8~A#A+v8I_F9!h>aXg>~QA~NB zyi8ZnfOLl8Lax}>o?s)d(2#ttp(O;NQnBmCyn4MMxpodRV9t8VrZ*ZKR`U@M`1O&Q z;LVLDODR3Y`@eiX5*@_5{jHHLw=t8qWOrhBH8sS6R3 zkz-6VbtwhlC^SGkQxKbu(_zM+!#QXUtW`}Wu~9K>%rX;*qaIDsuoe2kiw|nw0uG~C zF1B3T@u)Gkuw@ZU9>Ts=)C>pbCF!z754~>QA zTdE3&Me0tulN6p%Yq7@8^maiCWjQ~n=2|~eqc9G|_7E6{BHXEqR#aD`(ofDH9eAMIs%q?p>|5ex*6#f<|l zv5d@_rEF{~8+GZ~-Py~D+tN+Z8^@i}^4Zito||uU4l0)$$fJLn5Wec+lXclCCV&}f z-+OSVg`7bE5K2ag%7htNE6B8tTjZ1c=?X^6v#DpyVdI%Hv6k(O#7#7jBB4}!e9XPL zJAp44tlY@R(Hsg%A4dKfl0tn+jeH3SplagkyE4?^2gE^ZBA+GsjBJwwikyr{dZ#@I zIctks=s9$RFX?}+RPNwj%mU~~uu)f*YsuHii0>h13)xm3wROej?g1z5>eWrV?#6}_ zF&k4wy$gylCz!JfnRQlI?h;JAA)h}P&gBnPfM~qwK{IF(8h)1c1C%7WZ3OsrG2L{& zj2Hl%!Ao|Jgh#$x<)Wq^A?|Q)IDUkE^;?zC^EZujDIwjUG}0Z4fC6txsY3}O-F;^A{Wf57*Ly{`FT_qumy=bo9}nSD)?Y&TyE!Ie5H5M>HT zvdfT>ISM@?omy#nwyp?Mcaybdu}1xw&m}M2yJFw17c?&ZvKEssTU#!^Z z@!}uwa_cMdYlI$Rg(3SR-k8KrU&H-?-%?#a#i1`|mHyd0_gN-+d2HVLO9Y#WT6;yq!Q@iVv-^e0(uwew!kA<46MFXK#j<}EMR5!T!M^1|IqmR33@csQJFb(ksbjA`PRqpBxU zSN>Y)Z@JR`e&+?dQSgMRy@frkar2U9rnPEih_A#&C9>fu&_{=p_bHPvI0njVBi2(G zb3mMeDJ=D~7(N(@{nOmq;fqa{E)cscNPLY`kuyJ_rKR$oz+xaI`d7JfoOd%N;E*el>Q52ux{?klgU;rtI;=}QM=mOcB{}v?(3&P=s^?(q>PozN z*GK7-QD?Cm1sgj1-UjJw@d)G;4Hiu$TkSLzZ*Mk}nQ@eIixmwf+jcKd-9JOoPz0W_|E7!2+Nc25fgi@|QHSFPRUY!FJTt;V<;B>tBece{5jgOMc7oxZJHiJ&jY% z^(#N5C$B?kP;3NVK8KV3jZ^NkLe&*#C`VN-(-HHJW?3nNx<4OV%q(DJiGv zJ+^KC3P(zn!*~To6-kc)cU}v$DI?Q9{3_DouQTfnPLxHNDG3OX=8(VN^3J6g7(^x} z6lbdkczF(&YX6Intw6tAt9VU2SQOviYl)Uvz&78xy}O3Rl}=J$aI_9x)V%p`#86nda%|^1rU29zXH54W%d&mNxqsn0*-YgY zgm9dsf2z;3%r7doQCAytdSx=K@?7S>ndViA0Ww&QA@S_2Ju^?uX9Ay;g^eHcUgqR= zBspli5{7aRb6SA^m?*6zBY3BbAG>;{vINIP|em?a@2xlbw!K_;?#8oDnxag=p#e?9R zXsZn+-Im(({KnTfNb2aO(D-6UF~Lc!INa}+e`TeZp7ADOh$W`vudY>j_5E|PDiE|| z=l%6tB#Yb#@D&w4CNCVGd@!6o~gqpWUm)*yBkkv?~Po)}qalra!0sBGhS=-MW3 z6ZNLCX8C}x+WieLUo15(&U)0cNzzD|jH_G8x9WTKTeDV73;UzDYVY>yxt?OOa>}YM zEBB;|)q=olI+et#cf@G|B)DFwy(Nc}`S#0pYB)nvV6iy?YX8d=`NOf2e61 zZ9WB-^`7JuS2HN5yX$gTiR<-R?yZK7O3lJ57Bk$khAlFR;TyL*Gqz$cYLSnTc3(ltZUx*B=C2FK;A}$+AD!qu6J5V z;8!M&FJMMf-PyeT!-QOK^Ica|qfCW?H|sFYh7T)rGLX5ksF%!S2rZRULdZ+zX!&0~ z@#&A03-Nru_*kQ^!v8dg$?@Il=#7Qi+ZOYifB6~7(Cg^FTs(5dz~&es9^g)1^K})4 zHWhlAC1Ilbz6xl0zBO61{Pi)7d8&>t=CS4T0s+vf6|+;_axBf6L7D49TPgalGptHh zAVlix*!%9K4@UE%By=`2@|~3uRz8}YTSfXDJ{dI4KN&AQHSO{4!5g0{%9zF|l_+zA&;OSVM zPE7y=E~rxg7hL#E5-?rl!R>w|nHKSfI z-QAKjz0R&H!=_>37WO)>i1VwecvsKEc^;(*V6_>dDmIblf61d~TZIWXD ziuL?vnD7iY>UgE^gFjpJ0qa3Gqb#EVv>#|t!9dTS*9i!sk+++u{g?Fv+h65fLAS#j zj2~R$bjgUj6~;nzoht_p_WL7i@(AoEw)7EO?#bjtBUTfckai6#qXSCYqJ2DhQT)tA zKzz8R=&nc`o>n)q$kxI?tIhHI%A$lfc5=~R{3=N{_@g0o*`0bgN=A=I40M`HD#h4x z?tP)A$+&Xgh1={;m!09g+nP=s1zuardB^$73GGbWgvYw2m8G1Jy7xW={2PBAGg)WX zk$y8sp^Q2`xbV0pR4$=yGJuEixXNec+PlZ@Oht&t5-@7z7i&i};pDnE*v;Lk_4B**+LJ7Z{ccCPB< z4GiAqk&;!_wJjfEcM0z;A{!y?HfpAL@0|BecvMY4i}`!Aj!M^18OuJFH&fCX5Q#ZT z-4I6P?2xItHkU>f-Ik(x#kN0A8Em2QCEihJ!4}uU^QdXa!E279Nt}qdCzT3=`UY#U zC)8UN%{WBs(3|#4^2k$}tdpzp?+lKQF-FXD^A7rpxzCg_$h^6k6`$gW_8Tg9oDIghDiVGB-;_~R-qDV&3xR3`k{#2__un)dHV_=(6Ox}T zIgXVol+x#b&e&)__sh2F!r1Z8OLZHTxc%!j_cjt$n+tRD;%h;>*qttW@zp^J=2SQ6 zzs6RLr6U1@R0?xPqQ=*4x&4ufuk3sE=%bC(canPf#NR)lU$2b3Om7nO{)<~1so?Bo=(ojCHUi9z3BTq<#Wb%I|5zl9Vt3<1m;mQKgWoI)Nx1gslE%_J zZZ~ezWXdzO`6aY!#$hX1lA#hq~KwVlMX^;_cB zEBV37W{moi^t-PGMv{P=`8Gxc50~5X4?himH#F0J_4(g>OX zOUGds@-Y2~ub@eb7+}o$JJ&;#)H>3idM%l#DPEoQ=NdiS@du44kf7Gc^eV>FFDTUY zwEHmeh$vT+%3iYK?}soABdl$lQ=$;LjQlcqr^Pm=fAzHZjgm%X2{yWPoq*$8kjH<~SYafcn)PlnN{1WyL-dnem&FU2w zWoSfJo3cPsWe7LJfCb!FMD~l($bSWa-`%{!Z#-ohe=#B`Kl5c!PSlOw4Te$=0r>eBpp;HDW+J2*N(rMCxmAueMgrmQI z23hrcix==!q9u{@*Rh7Ab`$$A{}%E@Z_J^JVc!^{!t+(z8GwQ1Yi&rDoFUsfX!z=% zH67CPH;W(3cXUA$%lt_zc{aQsk3l0)XPRj3q}~n`(Qq5I|2DdT{EO%w)ER?G8SmO|40lo z%_$1}b!xM8)7XpEZseWMdmQpzQCn@LM= zOSMA(Rh0tOh0;LsSBX>WC^kx8vDT0F;1*%M;Dp%9cKeHK)_PwBYnY!viOd-TGuYXw zD~9(d9WeYXN;!iaSdIY+3rgxcDBz?Y7%82VK0WuzT`uN+3-@sl%m2Y?;s;&1VI_hM zsw+5^RN$|FG5UnwsLMZ^b3$dwgwVf6L&P3oPy*@kG5Es7#cm_%A;K^ zmlU|4ReCAG2B>)^4tMe0)-?XOkbj{Ngom*IShnLB-V|qSF9OC@id}ALyZ=YOkujtj zmjQe(zd^ghK*pcwJ2rp#fXVGi?iEP(c_Zl6oi*QNhs*75C>9MoVIE`FPc32PcEhrN znG}EOzrb2qiF)DJLf#8;!L0=fbi?eM8wWWxigMVL(l>5G zjGANbN<)LwO;UT+GsP^ZQ|Z<=TK(`&+5n)Vq(zX_jyu=}5=fW4-|V${ta>$TZRu#G z@}Hyk>vLksl|Qel2zZ1Xlf`z4DDw|6ad9GU`{#+-Yc+>MjZ71#RsV^>LPbCht}eP= zdcSKp%Ar_^NAz@(zN*h3Oangf4LBUW@e;>&8bGA1Tu)g`g6}xN(p*$sBR`GC?gIgS zo5|ltQhZnQk$KiC<4qFJvqWCfw59REuWsM|d=v8-xg+%K%nT!jyCEHStdvKRu);7XySIES}89b&flsmyN-9 zSZ7}l*U z>_x0T8@JWxJv=;SQnkZgTi?ZW{SjM;uh}}IPRNyOuVjh*ESqVg{gqFwC)YrSoQps7 zqd0R|;jd?zT9~ztbDm)v&IsvQswrE2Ukn|Q#I&sY)*|UN@>El;&Wlxoj~l(`Zw;aGzX(;jz3|InSxCHHp0+dFhpLPH?tgy_7}jmS@T(v9ITa& zzERMw6B))&8?!#EHHrE*@RJ6Zm||~U6F@%C8NMYGKj||Xz~oWR86oTP@(P$4({#*{Y%-5@V$ZDrshq~yyjM5hg+5c%(uv-ZphX{+-Oz(DDfuk5VH z+ze4;oPu8sIYuZ|!~lNus=Qs1HxMjjAp#^o7ZQ1Mo>g>Ih?(CnFWWcIK2nzD<#V%-`p+sBA5Dh zmz*Ic11~7a)(r=*mGt{0a9OxpSlueIER^&6+2I+>x^{-R1?k?#ZG!F8ThW|B^|{wy zM}_*cs{SnHk~5finoKCpD@Do-F5Rp#Oz~FrBy^T5?ov$EpL>Q#Csm61xPILFwV8LW z^Xs!-< zh}(p4{tz5l?W)f`%P6@L5fp=I*d8i>`!QxqH0tvSb@O+H!GC5P?+doz%NIN(l0)j@ zNyARB-v)W^eUZBWT&?Rz)c9ri$8jB#_)720`Ep}hiJ2Bh`0y>?4QsRv{Vf1XVp{Sm zDOmoOoLhTHLQvKga(S>i%rQ4(-$rS?s19D6y$bF3K|}L|b-#WL0BmP}m%ojhQ6Y2A2Ta#Y zX{EHQ#;v@n3ugM)#C0)kmusCZPfDI!bJkl`bU!Pk-!7g{ynJP|otE3l|8t|FwFNt~ z59F00^8FK7=5)p^z#)$>hRh5@!;*x2U$+~q>8+ys`M;|Z&zT5zVDIbSwB!Ix=DJ!j zhXL+U+IpOt4WN_VbmBrf(~)y^Lru#r1$gX5a~1WFC3+M_W5>xY99U>wx(}r;B=PvU z!Z3EKfMHppWZvKWoLjm{;&tNb`XJ||B`1}Bz`wR}vwks4Afxk+e$Xp_Ar2P0Y8N^m zd^XSDWe|?g>TKDnS2GF1YS9PqDVK~@uH&S7dHqWbrRY9HToJJ{PA$rl?s zt+xHFHt!oq-YZM*f0I7`R@3;kk7j!MpdoQUQ}m5{EeqpxBvz$(jB+yR zz8_VWZE}dQsx(K-{YldOr#Mq#LA{1ETNZ!bidJ6q>C5|VA?*q9@9vR8Bir5u`GJfS znOCY+UcbG9ytW7OBH3R|J6G2Ykl4pbRK~;_ny3P!4nj%}(l2lO`B*ouf75H|`K8eb z70ke^H9zKw5ATd17U~)5D1Dnf(PPlv&e!#{NmLojy)#05#BX)i#rFpE{%X3uk)o3-=NgnUB@D-@&3m6T#594VgHs7qEZWHLJz*razcf0ecA@%1N6kHf(BgbdL zSRn`aS*M);ql?M&w}{&iiI~{F+>A5=Ny%D&;mm~(Xj6TccD87(@c*)**II&~T;@jO zi?g3%^Ab~yeSGCBhO;dvwpg|O1J{pL@u59+Dd~cF4~NOiP4D&|P(Xc$hB!tq!JROp zW}zwBh0fvxwlao3lQhqQpB9$Ap3i#)Z)PXpW95IckwakwNtzkKm>kJMr}@>af@|nb zZcb7iU-J7u;(Ur-DOyJUMH3Iq*L16!c2uJ8`RV!oordw}^q3o!S;AZC8_Ud>a2BS4 zMs2iFCZE@TtPbBGzv_x#ZSFd+kxSi#D{bzuHc|~PAI^Af4xuGUxCMDQ5?A5o&pllJ z2b>0)Fb_?#Df-wnR2xxMn*jzc5+oWC!R1uOgZSroxdj*{Q%4_zya=)44o+Qir1)Jj zxe+PyrykmqE+K#IiG^smY)eJ?%jkPrPGYy6q6J-46#J|`C`6<#)RRUGfkD|Z2DMQt5D0#0I-wX4?E&cmgq~s5t3YO`H{izmAt=p$I)Q( z&(q@LpNh1%olHG=M5gG?>@#KQ%eRu%TjuraF=b22tAw5~EtH!N@Byj|Ze^Y4hVNW^ z{*jwe%O04PSDP^>u4v<0F8}@~9L9$aQJz4=o^60_=<_GM-MKP0aRoO`6S+QcH&&038fy`OU;YFb>nu#-|(=*z~x zD4zBax!%hHO`lC6EwA00o~?RiadVNiHc^SauhD-YSuCr@?~lEKyJ;Nf0|3ofVHlzZ z)gmpJzf?pIU7Itv33$1ihQw)AW475xjG7L7PZDZK5+=#lLW}--2+t<-p{hV(4Tcz%}sj~WiBYoYB zu$JDmh~IZ!S&HkiD$&$b0Y^Kc1L=!AyoybBtMcV#qp4A8KJRYewmp~5zLKlD z1A!XQ>cE-M(Sj+Q5S1?+gUR6@i_>pAjH4~jL-Os=&#blL#4imgH!njkx=wt8Ev_!n4E^}!kW6`>J)&bJ#z9J^NY>Xhj zxH`Pfm(=kro!6MdWBFf#tO`xu{R8%FT87yh9B@n31I1RtqZTabfnQ_BMnla8+ey;R zB}Yo{s#rgZ!`wN3nBgnB5u%S{#yAHR^E&I+C<)Jgv8PU0-hRftrwBPPGE4I^E7Z>2 zj&jRn5WbS&J-63Coppms;xDS(j$!%(3s}<q|BJ(jh}hY7xW&X7jS~_!an6+@>?Wvcg#~^>zF7QuK##Su7xkDzN{&KCSK(CA}-m zUdD6pM|9iMJ*n1qZKd$>37#uww3W`O`r5~bK64-hJLQD;myDgsj2;cSE*%xzf5DtW zdf~ld%dBnpt;;|hJkh#rA%}I>MYjL1N@0%M1mnx6oYa*Sj&s}LPqbD;UB<_%jfr)9 ziH0*r>&)&X*=@rc^=pN-LCl$f%v_92j_Xu4TDlUBfTUC=Zv^MEae#$lRY8`$IxT7 zx%hFG7_9P~O8#Q6)mp)Xrm< zwrhBdhE^WJ?X{~`@_^BNDOy0I0 zvr*U^&Jyolt%hY9&Z*_-KV4#b74+2YI&)Irh|;{&00cCypW)xErc72@f4^$WU7jur zJ9GG?5g@7cqbsDjW+(Kq{DrQ<*c9zjmMo6{>YHqarmu5c_hZI2N0%K6P%?=ymIPMg zq*i|;);%wdbxn7n+pvl_fh7`K?KR7Luy%|qv!_u5_5fY)?&9rF*-_El~Jvu(mc2iHe;@%V>z`Um;zsm1v92Zc? zH((cG@%L53T(d$U`?j@tyS-KBAw@E+nEdynS3Ye570juD1-@MdQl9PM1N95%ymCvi z^RP_d$6CNkYp+6(`tQ#~i4PXBLDcellvG=_E}6tVYR5|M^>KS8dT;&=kG4a zZrMa$+|WYLr`3N`KIg}Zx6+p1>6{TrUJgA34lsW$rFHAYp88`~3UN4+k$2gH6%oWt zetm7@osslr9^3ZYiBb^#2EteC|AjKM%$P96J!**^IePJpYbF}F{(Cg1v}$(cDd-Of z*>J&GYAtj_^DLg-iQ=U=ren7?q*4y=%V;}n?{sYlVke>u_QM zpC7hXX!mJ1vM2PkR!ecVzQ$X@nyK_|e#e;`9*!id zO?8p}%`sN;>#R@68qfum}Dn=f^)r9!sG7DN-dvTv#MSF$ot^g-((cWc-Z4MQZ^!EJ!3rfM>pQ}`ro{> zqHR&Unag^D<1#r*yLI#{bor}Xx@G#3a^i>o!ZUkql`@xkQ#D4)u#3Q&eQxp#`an-g z+f`d&?$kT(a8*hC$OE_m0}ea@Z=N*XHfd9bE?x@}jvv1uBaqKb#+LESrPb;+2VT1+ zNH*#H#~lh&=eMYu>{d;f@!Hc~XwP3drhVGO1_r5U@=*~-f0bpklMHT+vCfHtTyDO> z-h0s4*4wrd@p`ZjiAhPcGQA~=08&YXB3|KUmVNV`O0;apk#$XhI^=MF6!Rd=kX+{J zL4a%3KP&JTd~EVtXqzU%+44%IpXo*@TnHrwmA@-s8^IRh1?v-d9DW;p2}d>JleA;jJiog#br*uc~NG1$lN-efX0HG@1Yj) zywr4bC3RaMw3>b9KrBD<)5L+*Wwf5Fo~*cn*inVaw63eHw1f*`V-60X8|KN9ivo)P zcZ6TA$F^$#&+Ja{n-|#F+E&2Y?@nl0`q6j^E_>?7cZZ|JEhQ11>69uR_yfFj|$IpBY;U)tmwNMShp`%h-VW6S zf(_LqP`yR+-FA<2 zKq;AO-@-n*Kz79zde+RFi?aSW3&?$WAI(Ii@SCJd(ueI?Tq|XRE&2$7bIUhAz8Brb zT_Jzs`jm2Bi)7?wea33@!>`rH#5G30cyn<3daK3pKP#9mv=k2=6a_FU1m{cD%_kW2 z{b>}73}+l0cK@dh$cq;<1I-W zaKLMa5z)1dhEgfOkwAlJ_;yTO*W~NF!I09Kkd@Lu^rvmg?4swLerJ4LjRj=8ks=-c zN(BdlSGZOBdBjbI6X>O7@$6qw=qQ_Jc(kmTl<1D^j^aze3zMY_vh(k473jQr9Ck+W zh#Hzs2z4NRhQ@4T8PZ}09tL%LE(v3>E*dR7#2lZUzSnRb51@ff@G3a^Klb;ZHOr_7 zAf>lQI0r3R?G6}n1h2SUbVAjLNo(YS=p)Q1^C;nNU;pEC++;HGE;HQf5EG?Wz@-iI zi}8y`tLKm?`}uZ1LA%-@V&zW;|GTaXDYoC+wDR9p{iX1BDTos|cq0E5wF|d{%$~4^dASk2mPAuLj#NXi>m%prnRd; zl8NNZJ^Y|FoPBb~UixuOYxUT{nJfwuT;i(rH6FLjltgEMK79yfm2U3+Exv(V`f5d) zs7a>|Z4g>*KKs{mq2|7C?KG-(GwAvMD1Ej^WFDz8HC;v0dFA#t+&)mv!V5E4B{O8$ z7$truFnSfC|M|5QOr4V((*BapLM{JrF0{*8wC9&Xyzc^Y_rp?Z&%AD}ehjf1>eevm z7}Q-`jXNX+;E~54Myr(e`nD{we$6a#EKX;g655^r`aOl9kZkL-@d+`x+28LgJrUpd z9XwZp0n%+EKNppg+4QsCB1^)#-msLD+ShWFj?tE6fy_Nc=)Prw| zUsS@uAAfo}3>96buGp%>R;S|<%%P4_=Gss-b2`!}d+B0aI?gaBpNB!2ku%An(A>~2 z=#ME`8Z)xusut zE_m_Mbx@wNuQ$rQ&)juj1B?3LaF}y#)^Y>{afX=FxdhH96O*DqX> zz#?{o^@bLW|FHa^=yC&{`M37n;7G0;$3L3$FGtT6RWDe)?j$C zrozwSxq$;^7u%8P|L{e}4;I~YkRkJKBMfyu9plE%yXU7hg+Hqt^F3^DXo z1{Pi6HO6FY?TaQ4W{IFWnRFM+Vm*h-bcxm!JbkHYg*m$rGdvdXFXIv^W{gK%n#K+; z&ucLG8h-KLJG5M$U>T+gq*i*D{XAWfyd&w*b@$mD(_YfOv6xWq1Fd9+)^Z_*jGsz! z{HZ^O`2u;rz=R_t-jqpJFb}x${1^C76nLo{ELrf;O1v*|?cy7WK)^lfKS;7yfK63l zr#Vl1l$O%e*#Z9Y8-vU32%pSS-NDP&Qw2suBXBp#h#DFIkot^>$ur>E54bt4WPK_j zc7kjEpg=|C0p8yvIecy%X-fm~+n=bLeZeu!m_JE{C~TeQAIGn-T?_b;#6PY8Om~Ri z*~mW9F*EE&#BT4c2=I|8AUBU?!zguh!RJ2uNN(tr%)_dU-SlZ+-(EQK39Eq#V>li; zD+fj(b1LNi79%{_iyt<9ItJhF8k<1ykG%xy z;`I^Cs9k7oD&#G41x2n0_{_F_i|Z0Y&AF?!-=7_9SsVUdy>h8UT}oxc*IVV_t04FW z40Vt$tPx%q3q>Yat7vBbbgEcE7(e=t6d56)&W()iYAZ4J+WsPNC}M@GU1PK7EC7|~ zgu0&xejaOf44&>;&x%>kLf_NInwmb`x152I(=UDDr(LfN`hX6=5%AQd0`g>{9*4yq z>>zf?Rim=A)sj~z>vz2b+I95}$n@r#yHiUDhwdm(y(?)Lf&b zBZUUIE|UY`$-u*;7jjwO)Mn|_+25sFw8MBy$p7Mg&mStb2gzuYgCik`J1D#-zT*Z6 zxK0P{l*@p2GHsh4neum7PumaB<`a}IaKEMDhM*+!z(9=+8Hcw(OzluTg>*2 zq$+=W?(hzDM9y!BkjQxqx-ba+ywV1{IlIj52{AxG?Rt8mo9>FhP^!#>8z%sMH4nKX zc#>$)<8~_wzFHZ;JAK;D=h*56TxdI8l08>LeDVJX;QL1J#=+&VepM+m3Ubl9PbPD@MeToc|gDJkyJ@;rmN{ z0!Z8ahs!$BG@OO&DuhX2r{8Tu-(7Q zvVC7adr>{0&*^rvee^G6w8*Ni@cJX3<~ADGsS$9uAasvS%_swaq(Dt&)GvCPNvLJS_aZXLRc|A^GbmsqR2 zjLr&|8G@cG$;4Jv-le5bjs4YGeRZ1UDI~}1h_EBPex_#S0yB+XjC>q!kMtqS4!9ga zZQOW)_j=?WfjLgpotNyxE#MFH3!85!jq;KW5P5ztw)8;S4}}|fP&B$s4**Ad$fE2& zB@mc!<-b=G>cgnJXb|cg7r41_LQSfmmb1avPRQdt=-oI81o6c3J>Yus3^}U;xd7mI z`}2?+T1M2P9Fh^Zc+Cht%WjMHUh}`)03p@@6$p|<4!$-4T#f*ja>z|1CymZNxg5yF zZg!=q4D`rI4)q|1D&0ej73n{C7$4kJ!udWaIKgE8_t9GmCryB&0@#{$tA%f~qY#`B z)KMjHK=o7N;d((Vdb&sqd~?{YFPQ%bLTD!2%_7>hGxlanX+Lo0p$4uv0$?>W~V!dxWC)VPI6x8R}pe^REyDb(i}wqfQQaaKO=r-qg3NqW^gA2f0`z zK=u}FGRGX94irJ!sBhg*($x{8rJ5a&XR=5nzf7Z4+CkzO5;hOHkC(l_2i-j_UaF{~ zblEBA198U6<3QaANmn{hFBqqqBX}0h!s(#!QJld2YF10oJPB>|9L0{;ZnpeNWMI}1Pj>NQ}J4g_4UnvTMq$R*?)PJt|< zwQ)hn9Y_vY2}NzgQ2VQ#$c*LoRBl=CG{3aFw`DMj$csHzInMB_#pCFR%cb zEARmgf7nuT)`i9UfCCy(K{I$0(GIhS@js9;B@E-2*?J2>O$nP`pZ||UJx&RCeA2l} zrRee2L$IcLD9APqF?s=VX?Z-R0iC1+w=tEseR6*N^T;*+qE-?J ztdtSi2f2?r+gk0B4R}HeMUOm6=AZIWb1?vzu)v;-ci5_lVh2CG7&qOdm`|^B(W8oT zk8w2@`JRiLTDO9CXP5(oSh7fOgpPQHabvLDr)L=Pk$D>Sm_& z>O9yjvhpDabUnXE1#ecJnCMt(aGbiN*3pIaKvA{v08EN8;3&Htc?0r)tn!8{rTkgH zdJuy=KAF?=8%EUB5ef;C1&~Om4x}dP@}?2>jFw8i))WN+BRs##K8OJq5By+?Z2xP1 zFim<2Bl6PeiA3IUR@_|o@T2aR-M|Q{?1~%z$tM+X1Uv+jKv1{~L^4kJ6VGBm?J)NP zv1~c9ebnO~YH~UJVc!e2eZvSJKROH8yQxHGGa_f7+!hi568&-b>dB)ilJoW}hdh`V z6XQYRAqcyDMW?jgF{*&GgLE+Fa?QiZY}PI3f@XcC?86PHzhci;^WilLu_cFsRRTMx z?%EEY$V#omv-5-{M&zcGKRozM8c;fpHAS^PsUpaOsA+HfbRqOnb3&?!1O-oC%XoO= z!{QMjhqB4`-{W^-7{813+ib{&&pOG-aNOoVAMc+Q6s&o6B`Z4lBtB>UckNFm3Rlh> z@fwKX6*AntAwf#;eXoqz$_A}o9d*|Nx4nC37x2>TCaB*4W55vV0TB;DRRY)Sa(=hz z!eD8=HPI(UW_k&~1kZ4TrCDSj>QMl4C>y?}9sS1~*om)JQ0_+fNL|iAAuu~{8>b4o zxylwLw-~8Qt@*R95dAaYp|Wym67->V*yi+hlf?-P>)MM8;!pc)iuGqgNe@Rn?{PaB zbu<7$GJ@}dArBh>GTQ6xMmj|9S$3Qs%nRgRNhLUX)xPVr#^!kYppU!;ZsZ=r_Z81f z&rinAaiEB?iMEGHE_oZ|`2-5@-BLJkYghTCy(fq+x5)0&QP(#x@J6lJeQV{~hcd|b z4w!VHoDai0ryOB`>PkTJfYG8V0R9M7nA�*_&n#H;q&}r*OQsCidwdL&EPKQG|`i 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 I%mm~C03#6L9smFU delta 132695 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 SW?(BGM>2`BO$h{gl>q?T;f@6W From 3a1c192142e1397651e6c96f1d7e3a217a1f5f57 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 20:31:30 +0800 Subject: [PATCH 052/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8Dmvn=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E6=B7=BB=E5=8A=A0setting.xml=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/validator/DevopsCiPipelineAdditionalValidator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java index bd506c881c..879ac64f3c 100644 --- a/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java +++ b/src/main/java/io/choerodon/devops/api/validator/DevopsCiPipelineAdditionalValidator.java @@ -216,7 +216,7 @@ public static void validateMavenBuildStep(DevopsCiMavenBuildConfigVO config) { // 校验用户直接粘贴的maven的settings文件的内容 if (!StringUtils.isEmpty(config.getMavenSettings()) - && !MavenSettingsUtil.isXmlFormat(Base64Util.getBase64DecodedString(config.getMavenSettings()))) { + && !MavenSettingsUtil.isXmlFormat(config.getMavenSettings())) { // 如果不符合xml格式,抛异常 throw new CommonException(ERROR_MAVEN_SETTINGS_NOT_XML_FORMAT); } From fa8775b2b4673f77ac1a4b5083f54af286beb71e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 20:33:39 +0800 Subject: [PATCH 053/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8Dmvn=E6=9E=84?= =?UTF-8?q?=E5=BB=BA=E6=B7=BB=E5=8A=A0setting.xml=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pipeline/step/DevopsCiMavenBuildStepHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java index 0c47e4200f..89580066d2 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiMavenBuildStepHandler.java @@ -142,7 +142,7 @@ private boolean buildAndSaveMavenSettings(Long projectId, Long jobId, Long seque if (!StringUtils.isEmpty(devopsCiMavenBuildConfigVO.getMavenSettings())) { // 使用用户提供的xml内容,不进行内容的校验 - settings = Base64Util.getBase64DecodedString(devopsCiMavenBuildConfigVO.getMavenSettings()); + settings = devopsCiMavenBuildConfigVO.getMavenSettings(); } else if (hasManualRepos || hasNexusRepos) { if (hasNexusRepos) { // 用户选择的已有的maven仓库 From 00d1d6c28fdf9117b99d69bc7c2b5bbc1fec966b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 20:42:52 +0800 Subject: [PATCH 054/228] [FIX] update pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1283bb7c53..e29226c2e7 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.1-SNAPSHOT + 2.1.1.RELEASE jar https://github.com/open-hand/devops-service From 9f2b6acec7ba9b87eab5cc90d6a45b854b11b456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 10:13:06 +0800 Subject: [PATCH 055/228] =?UTF-8?q?[ADD]=20=E5=AE=8C=E6=88=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E4=BB=93=E5=BA=93=E5=88=97=E8=A1=A8=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 4 +- ...mConfigVO.java => DevopsHelmConfigVO.java} | 4 +- .../app/service/DevopsHelmConfigService.java | 4 +- .../impl/DevopsHelmConfigServiceImpl.java | 108 ++++++++++++------ .../devops/infra/dto/DevopsHelmConfigDTO.java | 2 +- .../infra/mapper/DevopsHelmConfigMapper.java | 7 ++ .../devops_service/devops_helm_config.groovy | 2 +- 7 files changed, 89 insertions(+), 42 deletions(-) rename src/main/java/io/choerodon/devops/api/vo/{HelmConfigVO.java => DevopsHelmConfigVO.java} (98%) create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index f2c2d10797..e699241228 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -12,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import io.choerodon.devops.api.vo.HelmConfigVO; +import io.choerodon.devops.api.vo.DevopsHelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; @RestController("DevopsHelmConfigController.v1") @@ -24,7 +24,7 @@ public class DevopsHelmConfigController { @ApiOperation("查询helm仓库") @GetMapping("/list") - public ResponseEntity> listHelmConfig( + public ResponseEntity> listHelmConfig( @ApiParam("项目id") @PathVariable("project_id") Long projectId) { return Results.success(helmConfigService.listHelmConfig(projectId)); diff --git a/src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java similarity index 98% rename from src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java rename to src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java index 3c71eb0cc5..469f57a5cd 100644 --- a/src/main/java/io/choerodon/devops/api/vo/HelmConfigVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java @@ -4,7 +4,7 @@ import io.swagger.annotations.ApiModelProperty; -public class HelmConfigVO { +public class DevopsHelmConfigVO { private Long id; @ApiModelProperty("仓库名称") @@ -19,7 +19,7 @@ public class HelmConfigVO { @ApiModelProperty("仓库密码") private String password; - @ApiModelProperty("关联该配置的层级 project/organization/platform") + @ApiModelProperty("关联该配置的层级 project/organization/side") private String resourceType; @ApiModelProperty("关联该仓库配置的资源id, 项目id 组织id 平台层为0") diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index aed010674f..ed06bb43a8 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -2,8 +2,8 @@ import java.util.List; -import io.choerodon.devops.api.vo.HelmConfigVO; +import io.choerodon.devops.api.vo.DevopsHelmConfigVO; public interface DevopsHelmConfigService { - List listHelmConfig(Long projectId); + List listHelmConfig(Long projectId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 91493799b9..5b4600222b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -4,46 +4,86 @@ import java.util.Date; import java.util.List; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import io.choerodon.devops.api.vo.HelmConfigVO; +import io.choerodon.core.iam.ResourceLevel; +import io.choerodon.devops.api.vo.DevopsHelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; +import io.choerodon.devops.infra.dto.iam.ProjectDTO; +import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; +import io.choerodon.devops.infra.mapper.DevopsHelmConfigMapper; +import io.choerodon.devops.infra.util.ConvertUtils; @Service public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { + + @Autowired + private DevopsHelmConfigMapper devopsHelmConfigMapper; + + @Autowired + private BaseServiceClientOperator baseServiceClientOperator; + @Override - public List listHelmConfig(Long projectId) { - - List helmConfigVOList = new ArrayList<>(); - - HelmConfigVO helmConfigVO1 = new HelmConfigVO(); - helmConfigVO1.setUrl("http://www.example.com/org/projects/"); - helmConfigVO1.setUsername("username"); - helmConfigVO1.setPassword("password"); - helmConfigVO1.setName("测试仓库1"); - helmConfigVO1.setRepoPrivate(true); - helmConfigVO1.setRepoDefault(true); - helmConfigVO1.setResourceType("organization"); - helmConfigVO1.setCreationDate(new Date()); - helmConfigVO1.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); - helmConfigVO1.setCreatorLoginName("25147"); - helmConfigVO1.setCreatorRealName("周扒皮"); - - HelmConfigVO helmConfigVO2 = new HelmConfigVO(); - helmConfigVO2.setUrl("http://www.example.com/org/projects/"); - helmConfigVO2.setUsername("username"); - helmConfigVO2.setPassword("password"); - helmConfigVO2.setName("测试仓库1"); - helmConfigVO2.setRepoPrivate(false); - helmConfigVO2.setRepoDefault(false); - helmConfigVO2.setResourceType("project"); - helmConfigVO2.setCreationDate(new Date()); - helmConfigVO2.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); - helmConfigVO2.setCreatorLoginName("25147"); - helmConfigVO2.setCreatorRealName("周扒皮"); - - helmConfigVOList.add(helmConfigVO1); - helmConfigVOList.add(helmConfigVO2); - return helmConfigVOList; + public List listHelmConfig(Long projectId) { + + List devopsHelmConfigVOList = new ArrayList<>(); + + DevopsHelmConfigVO devopsHelmConfigVO1 = new DevopsHelmConfigVO(); + devopsHelmConfigVO1.setUrl("http://www.example.com/org/projects/"); + devopsHelmConfigVO1.setUsername("username"); + devopsHelmConfigVO1.setPassword("password"); + devopsHelmConfigVO1.setName("测试仓库1"); + devopsHelmConfigVO1.setRepoPrivate(true); + devopsHelmConfigVO1.setRepoDefault(true); + devopsHelmConfigVO1.setResourceType("organization"); + devopsHelmConfigVO1.setCreationDate(new Date()); + devopsHelmConfigVO1.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); + devopsHelmConfigVO1.setCreatorLoginName("25147"); + devopsHelmConfigVO1.setCreatorRealName("周扒皮"); + + DevopsHelmConfigVO devopsHelmConfigVO2 = new DevopsHelmConfigVO(); + devopsHelmConfigVO2.setUrl("http://www.example.com/org/projects/"); + devopsHelmConfigVO2.setUsername("username"); + devopsHelmConfigVO2.setPassword("password"); + devopsHelmConfigVO2.setName("测试仓库1"); + devopsHelmConfigVO2.setRepoPrivate(false); + devopsHelmConfigVO2.setRepoDefault(false); + devopsHelmConfigVO2.setResourceType("project"); + devopsHelmConfigVO2.setCreationDate(new Date()); + devopsHelmConfigVO2.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); + devopsHelmConfigVO2.setCreatorLoginName("25147"); + devopsHelmConfigVO2.setCreatorRealName("周扒皮"); + + devopsHelmConfigVOList.add(devopsHelmConfigVO1); + devopsHelmConfigVOList.add(devopsHelmConfigVO2); + List devopsHelmConfigDTOS = new ArrayList<>(); + + // 查询项目层设置helm仓库 + DevopsHelmConfigDTO helmConfigSearchDTOOnProject = new DevopsHelmConfigDTO(); + helmConfigSearchDTOOnProject.setResourceId(projectId); + helmConfigSearchDTOOnProject.setResourceType(ResourceLevel.PROJECT.value()); + List devopsHelmConfigDTOListOnProject = devopsHelmConfigMapper.select(helmConfigSearchDTOOnProject); + devopsHelmConfigDTOS.addAll(devopsHelmConfigDTOListOnProject); + + // 查询组织层helm仓库 + ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false); + DevopsHelmConfigDTO helmConfigSearchDTOOnOrganization = new DevopsHelmConfigDTO(); + helmConfigSearchDTOOnOrganization.setResourceId(projectDTO.getOrganizationId()); + helmConfigSearchDTOOnOrganization.setResourceType(ResourceLevel.ORGANIZATION.value()); + List devopsHelmConfigDTOListOnOrganization = devopsHelmConfigMapper.select(helmConfigSearchDTOOnOrganization); + devopsHelmConfigDTOS.addAll(devopsHelmConfigDTOListOnOrganization); + + // 如果组织层的仓库为空,查询平台默认 + if (CollectionUtils.isEmpty(devopsHelmConfigDTOListOnOrganization)) { + DevopsHelmConfigDTO helmConfigSearchDTOOnSite = new DevopsHelmConfigDTO(); + helmConfigSearchDTOOnSite.setResourceId(projectDTO.getOrganizationId()); + helmConfigSearchDTOOnSite.setResourceType(ResourceLevel.ORGANIZATION.value()); + DevopsHelmConfigDTO devopsHelmConfigDTOListOnSite = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnSite); + devopsHelmConfigDTOS.add(devopsHelmConfigDTOListOnSite); + } + return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); } } diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java index b74202d4d8..6b8162559c 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java @@ -31,7 +31,7 @@ public class DevopsHelmConfigDTO extends AuditDomain { @ApiModelProperty("仓库密码") private String password; - @ApiModelProperty("关联该配置的层级 project/organization/platform") + @ApiModelProperty("关联该配置的层级 project/organization/side") private String resourceType; @ApiModelProperty("关联该仓库配置的资源id, 项目id 组织id 平台层为0") diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java new file mode 100644 index 0000000000..6bb31e60f8 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -0,0 +1,7 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; +import io.choerodon.mybatis.common.BaseMapper; + +public interface DevopsHelmConfigMapper extends BaseMapper { +} diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 6831aac973..90077c868d 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -15,7 +15,7 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { column(name: 'username', type: 'VARCHAR(64)', remarks: '用户名') column(name: 'password', type: 'VARCHAR(128)', remarks: '密码') - column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/platform') + column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/site') column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是') column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库') From 31eb503776569476f2a1dfbcfe813e957dd5b888 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 17:16:39 +0800 Subject: [PATCH 056/228] =?UTF-8?q?[IMP]=20=E6=8B=86=E5=88=86=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AppServiceHelmVersionService.java | 12 ++ .../AppServiceImageVersionService.java | 12 ++ .../AppServiceMavenVersionService.java | 12 ++ .../AppServiceHelmVersionServiceImpl.java | 22 +++ .../AppServiceImageVersionServiceImpl.java | 22 +++ .../AppServiceMavenVersionServiceImpl.java | 22 +++ .../infra/dto/AppServiceHelmVersionDTO.java | 153 ++++++++++++++++++ .../infra/dto/AppServiceImageVersionDTO.java | 101 ++++++++++++ .../infra/dto/AppServiceMavenVersion.java | 146 +++++++++++++++++ .../mapper/AppServiceHelmVersionMapper.java | 14 ++ .../mapper/AppServiceImageVersionMapper.java | 14 ++ .../mapper/AppServiceMavenVersionMapper.java | 14 ++ .../mapper/AppServiceHelmVersionMapper.xml | 6 + .../mapper/AppServiceImageVersionMapper.xml | 6 + .../mapper/AppServiceMavenVersionMapper.xml | 6 + .../devops_app_service_helm_version.groovy | 43 +++++ .../devops_app_service_image_version.groovy | 31 ++++ .../devops_app_service_maven_version.groovy | 35 ++++ 18 files changed, 671 insertions(+) create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java create mode 100644 src/main/resources/mapper/AppServiceHelmVersionMapper.xml create mode 100644 src/main/resources/mapper/AppServiceImageVersionMapper.xml create mode 100644 src/main/resources/mapper/AppServiceMavenVersionMapper.xml create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java new file mode 100644 index 0000000000..31c3cc3e59 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +public interface AppServiceHelmVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java new file mode 100644 index 0000000000..b2d78d6036 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +public interface AppServiceImageVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java new file mode 100644 index 0000000000..0ac28aae0e --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -0,0 +1,12 @@ +package io.choerodon.devops.app.service; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +public interface AppServiceMavenVersionService { + +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java new file mode 100644 index 0000000000..385d168fe5 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceHelmVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceHelmVersionMapper; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +@Service +public class AppServiceHelmVersionServiceImpl implements AppServiceHelmVersionService { + @Autowired + private AppServiceHelmVersionMapper appServiceHelmVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java new file mode 100644 index 0000000000..85be74fa23 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceImageVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceImageVersionMapper; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +@Service +public class AppServiceImageVersionServiceImpl implements AppServiceImageVersionService { + @Autowired + private AppServiceImageVersionMapper appServiceImageVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java new file mode 100644 index 0000000000..99b7ef5f97 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -0,0 +1,22 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; + +import io.choerodon.devops.app.service.AppServiceMavenVersionService; + +import org.springframework.stereotype.Service; + +import io.choerodon.devops.infra.mapper.AppServiceMavenVersionMapper; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +@Service +public class AppServiceMavenVersionServiceImpl implements AppServiceMavenVersionService { + @Autowired + private AppServiceMavenVersionMapper appServiceMavenVersionMapper; +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java new file mode 100644 index 0000000000..f1753c0d7e --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceHelmVersionDTO.java @@ -0,0 +1,153 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceHelmVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_helm_version") +public class AppServiceHelmVersionDTO extends AuditDomain { + private static final long serialVersionUID = 769273160524234032L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_HELM_CONFIG_ID = "helmConfigId"; + public static final String FIELD_HARBOR_REPO_TYPE = "harborRepoType"; + public static final String FIELD_HARBOR_CONFIG_ID = "harborConfigId"; + public static final String FIELD_VALUE_ID = "valueId"; + public static final String FIELD_README_VALUE_ID = "readmeValueId"; + public static final String FIELD_IMAGE = "image"; + public static final String FIELD_REPOSITORY = "repository"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long helmConfigId; + + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + @NotBlank + private String harborRepoType; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long harborConfigId; + + @ApiModelProperty(value = "参数 ID", required = true) + @NotNull + private Long valueId; + + @ApiModelProperty(value = "readme value id", required = true) + @NotNull + private Long readmeValueId; + + @ApiModelProperty(value = "镜像名", required = true) + @NotBlank + private String image; + + @ApiModelProperty(value = "仓库地址", required = true) + @NotBlank + private String repository; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public Long getHelmConfigId() { + return helmConfigId; + } + + public void setHelmConfigId(Long helmConfigId) { + this.helmConfigId = helmConfigId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public Long getValueId() { + return valueId; + } + + public void setValueId(Long valueId) { + this.valueId = valueId; + } + + public Long getReadmeValueId() { + return readmeValueId; + } + + public void setReadmeValueId(Long readmeValueId) { + this.readmeValueId = readmeValueId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getRepository() { + return repository; + } + + public void setRepository(String repository) { + this.repository = repository; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java new file mode 100644 index 0000000000..801d83f46c --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceImageVersionDTO.java @@ -0,0 +1,101 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceImageVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_image_version") +public class AppServiceImageVersionDTO extends AuditDomain { + private static final long serialVersionUID = 311223429472258678L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_HARBOR_REPO_TYPE = "harborRepoType"; + public static final String FIELD_HARBOR_CONFIG_ID = "harborConfigId"; + public static final String FIELD_IMAGE = "image"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + @NotBlank + private String harborRepoType; + + @ApiModelProperty(value = "配置Id", required = true) + @NotNull + private Long harborConfigId; + + @ApiModelProperty(value = "镜像名", required = true) + @NotBlank + private String image; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java new file mode 100644 index 0000000000..ae989695b6 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java @@ -0,0 +1,146 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 应用版本表(AppServiceMavenVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ + +@ApiModel("应用版本表") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_app_service_maven_version") +public class AppServiceMavenVersionDTO extends AuditDomain { + private static final long serialVersionUID = 801548481676256212L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + public static final String FIELD_GROUP_ID = "groupId"; + public static final String FIELD_ARTIFACT_ID = "artifactId"; + public static final String FIELD_VERSION = "version"; + public static final String FIELD_NEXUS_REPO_ID = "nexusRepoId"; + public static final String FIELD_MAVEN_REPO_URL = "mavenRepoUrl"; + public static final String FIELD_USERNAME = "username"; + public static final String FIELD_PASSWORD = "password"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + @ApiModelProperty(value = "groupId", required = true) + @NotBlank + private String groupId; + + @ApiModelProperty(value = "artifactId", required = true) + @NotBlank + private String artifactId; + + @ApiModelProperty(value = "版本", required = true) + @NotBlank + private String version; + + @ApiModelProperty(value = "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + private Long nexusRepoId; + + private String mavenRepoUrl; + + private String username; + + private String password; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getArtifactId() { + return artifactId; + } + + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Long getNexusRepoId() { + return nexusRepoId; + } + + public void setNexusRepoId(Long nexusRepoId) { + this.nexusRepoId = nexusRepoId; + } + + public String getMavenRepoUrl() { + return mavenRepoUrl; + } + + public void setMavenRepoUrl(String mavenRepoUrl) { + this.mavenRepoUrl = mavenRepoUrl; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java new file mode 100644 index 0000000000..cd16f9578d --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO; + +/** + * 应用版本表(AppServiceHelmVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:41 + */ +public interface AppServiceHelmVersionMapper extends BaseMapper { +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java new file mode 100644 index 0000000000..f9aaa324f4 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; + +/** + * 应用版本表(AppServiceImageVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:42 + */ +public interface AppServiceImageVersionMapper extends BaseMapper { +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java new file mode 100644 index 0000000000..53823584e8 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java @@ -0,0 +1,14 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.mybatis.common.BaseMapper; +import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; + +/** + * 应用版本表(AppServiceMavenVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-13 16:47:43 + */ +public interface AppServiceMavenVersionMapper extends BaseMapper { +} + diff --git a/src/main/resources/mapper/AppServiceHelmVersionMapper.xml b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml new file mode 100644 index 0000000000..2976e73b65 --- /dev/null +++ b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/mapper/AppServiceImageVersionMapper.xml b/src/main/resources/mapper/AppServiceImageVersionMapper.xml new file mode 100644 index 0000000000..1f5bc7f627 --- /dev/null +++ b/src/main/resources/mapper/AppServiceImageVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/mapper/AppServiceMavenVersionMapper.xml b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml new file mode 100644 index 0000000000..b7b6c5becd --- /dev/null +++ b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy new file mode 100644 index 0000000000..a8286a6137 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_helm_version.groovy @@ -0,0 +1,43 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_helm_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_helm_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: 'helm_config_id', type: 'BIGINT UNSIGNED', remarks: '配置Id,devops_helm_config.id') { + constraints(nullable: false) + } + column(name: 'harbor_repo_type', type: 'VARCHAR(64)', remarks: '仓库类型(DEFAULT_REPO、CUSTOM_REPO)') { + constraints(nullable: false) + } + column(name: 'harbor_config_id', type: 'BIGINT UNSIGNED', remarks: 'harbor仓库配置Id,hrds_prod_repo.rdupm_harbor_repository.id/hrds_prod_repo.rdupm_harbor_custom_repo.id') { + constraints(nullable: false) + } + column(name: 'value_id', type: 'BIGINT UNSIGNED', remarks: 'chart包values ID,devops_app_service_version_value.id') { + constraints(nullable: false) + } + column(name: 'readme_value_id', type: 'BIGINT UNSIGNED', remarks: 'readme value id,devops_app_service_version_readme.id') { + constraints(nullable: false) + } + column(name: 'image', type: 'VARCHAR(255)', remarks: '镜像名') { + constraints(nullable: false) + } + column(name: 'repository', type: 'VARCHAR(255)', remarks: '仓库地址') { + constraints(nullable: false) + } + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_helm_version', + constraintName: 'devops_app_service_helm_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy new file mode 100644 index 0000000000..8bc335bfcc --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_image_version.groovy @@ -0,0 +1,31 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_image_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_image_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: 'harbor_repo_type', type: 'VARCHAR(64)', remarks: '仓库类型(DEFAULT_REPO、CUSTOM_REPO)') { + constraints(nullable: false) + } + column(name: 'harbor_config_id', type: 'BIGINT UNSIGNED', remarks: 'harbor仓库配置Id,hrds_prod_repo.rdupm_harbor_repository.id/hrds_prod_repo.rdupm_harbor_custom_repo.id') { + constraints(nullable: false) + } + column(name: 'image', type: 'VARCHAR(255)', remarks: '镜像名') { + constraints(nullable: false) + } + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_image_version', + constraintName: 'devops_app_service_image_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file diff --git a/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy new file mode 100644 index 0000000000..769789c620 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_app_service_maven_version.groovy @@ -0,0 +1,35 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_app_service_maven_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-13-create-table') { + createTable(tableName: "devops_app_service_maven_version", remarks: '应用版本表') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_version_id', type: 'BIGINT UNSIGNED', remarks: '应用服务版本,devops_app_service_version.id') { + constraints(nullable: false) + } + column(name: "group_id", type: "VARCHAR(60)", remarks: "groupId") { + constraints(nullable: false) + } + column(name: "artifact_id", type: "VARCHAR(60)", remarks: "artifactId") { + constraints(nullable: false) + } + column(name: "version", type: "VARCHAR(60)", remarks: "版本") { + constraints(nullable: false) + } + column(name: "nexus_repo_id", type: "BIGINT UNSIGNED", remarks: "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + column(name: "maven_repo_url", type: "VARCHAR(255)") + column(name: "username", type: "VARCHAR(255)") + column(name: "password", type: "VARCHAR(255)") + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_app_service_maven_version', + constraintName: 'devops_app_service_maven_version_u1', columnNames: 'app_service_version_id') + } +} \ No newline at end of file From 5bc087be9ff6b6f6611d4e1529db9344ec9b4148 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 13 Jul 2022 17:17:10 +0800 Subject: [PATCH 057/228] =?UTF-8?q?[IMP]=20=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E7=A7=8D=E5=AD=90=E6=95=B0=E6=8D=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=89=88=E6=9C=AC=E5=8F=91=E5=B8=83=E6=AD=A5=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops_pipeline_template.xlsx | Bin 153640 -> 154110 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx b/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx index 7a09a901530f9735b67f7eb52c4f8cb9c418a1c0..56b979068f48739004f39d2263d2a76be795ebe9 100644 GIT binary patch delta 133132 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\&gq5G2-nJ*kmfVt{5?)2Tu$A0 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%0Ax z4gV;3y;b?g;xgo}eu~m>f3@F+5U>^gv6-fh$B}~%R^(d;2tNL;^Zkj+-bZ$-WMnEj z?EY4qaj1{zBhp|E^;z{^eUzIr`;3!4evP1af~X*bpgfes>Tk$-!^1j>R_T~X{yuvU z?Up*NNZ_PAxUINN7jF36d?o`sa1w8OB{Scx%a43oumiVe_R%*Qe<~-npW^B%2?w{z zk2|qgswQ6%YqLOzl;@h9KBv!zSk7hWc-2Y;#Yy$~btqm zOsEdt{RV%rrM=avyDIx1E%k~zH%jWa{5(7k$JD@kN@ z=KgfoNGc)tXO-45B-wVp_iloT7?azD2X?z%#a5zh|S z2nFf+=U&%r3I)Rpw>U~f2F`=Obm^kZEq&j`5kl)n`5xeqCh-V3-zU;ZT!6hpN>NwL zblnhU;tllCYmgnhXG9QgZHx!KL#yJREhP_7FV0}rY&ivUV22W4(k&(zCMbzx{6SpoKE9;{ef@k$3?!S_fxELov zFCE`#6H`J@S7Gsf2LNl{G-FSC97^R{GAg8Q{t&~AUF>5#QyM--n_rBhq@JQV2QOH} z@$y1sf7D?g$ylt6m!u1_UH$x(-5$MJ$j_7snNVEqg2UGEH0CPVtk>q~)GO=i9Hs7Y z=g#x#4SD`jf6vU9OlfBY^*a7p<*76G|A_2f9(Roopu{5~tiP!w=ri1Sj% zVuN`YPwz+i-Qn%V$&Uk^0hKx#Gt-XG!v%`1e+QRousYFb-%>02{NyTBi#GwRZ{fNg z5go8 zU@jYe9dXtIFIuI%YZyeAXD}i-pV^iaLR_uEOt3OT_%xR6T;tdGfU|U?3*Tn+v2MOS zf8K=0hy~Q8vJQSW(_}cyy5dnMmIxGA9sN;Z_s#yEh$p-CK{b6NpG6!%fWIXxGaIL; zy4~;llKds1@3QJ4JDWW828*oIrk5YH8#FS%=*Gj51e7S3KmM6E5AWxomK zH{>0)anK0s!OdKVdLe@i`}?t%Z;!Cse;(|2rd!LNVMTBicua@dp1b0H~oxQR_P{O=E9$qDsS3cdC3re;iFjSn2T$9`<7Sm$8z=5L(f zCZFRsp95Ml^UO_zfyiy;Bf2{-Fz6`S?45ZAL%sRLYFhAl)U=Qr6u4;8XKXmf7-0a`4q%h?a9|5HkCo5s9v6?YCOaL<- zu&kv3tNJhe0e`Q~8J~k$mc^de|M`)Q<;ng&r+alc{4bO(nC;r(KjP1SASuz7;h6qM zjQ{s;`t|?h|MhRS)-iADfBmcf9;j=-`v-Ex6Sph>_mlkJ19k0wfBy;ULU9>?WDk<8 z{cRC@lJu^Hv$fynarz+VEt8!zlk|@yhteVi9$4z1-rqT{TPW=695?>wU;F1s=nnTtc zJaEmsT`lZN;oS;v4TSOk`MwEHq-twL@VD)`iR=esF3vcTtYs)Sx;}8XLk*pAZ_I+B5wv*FWY12=wps z02LhrseIFfe-i*UX# z$G|8(&L^lzx|%FXAP!p!O8fo%6cDzhoIONqYUT`wQ z3SvGef5XE*0?jdR-F07sTtCr+uV|1X9Z)f+RL`RKNB()OcRWE?6UTvMzVlCMyWmA# z_;!4r9$9c!NA3I}UKPLwBH%dI^fUMRlwh^<#r0Y!@_ufff$sW zHqmO|x3&y0(>=y=T~#_zEN#y;<zG5m$04wwj(qBh}X+3!Hmr{79m)2F`x;_Jmiu- zf09vp3*WaWDm!*ppn@2+bRk};8=1M~j^#&HRn`pw5#HxT&OowPU5j(aT0(sMwKAUbe?Ww9UY0?l)*lKn+30n6=i#PTdlaVLlWWu} zK0Lo)g}Bes3gqA1CVSj8@$4@UNT~;>w6Fs!g9PUtzKVt5bL89gO|pp&r)2+wgsCB5 zGus*Tm3@LN-r06-Ja>Kln=W24wApe$%BZsZs<%p0g8gDWyL(hw^_tS{Gf;1te^}!N zJK$GzAW(D8f}#(=FA3hWHzJMOO5@hUy2~dF3cqDN!u5B<04h_-=cRLTeh|HWhX%a) z@aG$pWoE}Y)-*VQ;yms*i714?h&^otE3fm_=7r$l8g6(wG@qx}Q7^F4aZbR;bAnOt zb7a+d-jQI_mEWn&?BBa*Usq5Le}wB%i+ZX5oOdV63AgAmZQj{?`lEOH#u7Yj@&NFv->V{NyaA zvhU@n2e=Y{P4Och5u8)#_}BkFGN^o+|L#6<xjTPIO)i%EkKiz2Q^im1~~RavmabrJk^1 zs^eDo-#Knb9d7OOedv9_0qSm)KHre;N-RV!GJb!a79pQ0cm?r{f2`~a-*O2SC}{pl z2)fV7`wCH`QjPv1?5lTRh+T3gzlw`LWWpf6J7eOx02RR4`U- zs*f-XWd#q0BHvH7823kT5Plx@I%kf+yU@+r2?fvEE0}3CX|4>Ypy`9rI~Sgy>@kRC zW@slc@73!C?1mmIRh6U0N<0^6>VW;8DQBKVCWBq{{2P<6qFYYbhWESUe_yRrs-Kv3E2NSqk-V4wg!eY<1H|#zBZwJ`)$~Er^#B)T5yN6O zKToi%8(QQ2v}P+o-a#{-cf1H$13W}gpy8kJq+vlwA}BP`j=0zA3+$yBDe@-SP_}B8 zkJ&ub#|jCi*Xh}xmgdE(8#@)o#av3!0+(^VStz*k?J`e_0U6^o{xU_8zT}qaSDI0>OA}(hz(%0oB=^gL2Q3{f z!-Z$pnu)|~Dj>EsPpBe>&vofXOi+L|16T48pPe_$kWP(Op8}!h#2j^Ro9UsI(iLS) zf317Yh~+ozeu?kk7VT>wY&!NPGe*l`G55uTi3alvSnz_`OW^Kx%ZN;_(9*9rMdmr)|&2sFGDc@RRPAne4W z)M0<+Zi(w{x>PaNH+`rj7m<@Vo^Gnff3mErNPw!DS+Yr}>QO3b8moo9X!jaD39K<* zw7$bs^$>A)4oQhn;ed~fXqhQ9}KB0 z6-2XR!AT~?3lyT-G5{wA+@8mKS&`~o3|dc*=+}UwF*7>BglEi}`uk3%55EKwe@8sq zA1hbhq8n>@A=()qb#yL@he;*@*eqKvT-;eGqC^FZ-gPgf!n@{vB_m0@9#KxDqwe@! z#MJT4bFw!H-g_DMvkp>>bdYC@6}WWuAQB^K9CICFEU*vE+rwAjD_o`GBCtd;e~G-W znD`~41s1P)J@Zc7LCi8%-N6>6e8y>0{tsV&dkk28Drssy$8X`-7PqP&#Y zMnod+1eQtK-LjLCo{{q@W{-!kY~6~Ex_FOA_gCl8r^V?UN;^@PZNR>~D_)aFKT)1H zpGWeA?UQi6WGvuL$&a};V!?ggoV`3d`SJD6DgQXA#&v$!IZ|jBPtU$Pe}JrmnO%1| z=armz<)maGNFWgBrEJ{f%E)IDwwm{Mlb`)ur)Q_!6giX)fWMx*oUe4AO-j$~Wjy~s zQXucx$JT;=nGJ|qu)=_yq)FK4$|35=$IhDAga?g*D%MTc+wFuk-Ak80Zr28bdS{cV zj`96Q>34~IxA_?j%OOz3f6?hpRfm+ujah~+YtydF?Ky!>@S}wjHFR2~%jajxuWCQ;F+e&bko6@Y6AnAD5ol!^Jieh8wBn~^l`d8^y7k`5 zpX}MtC1f_JluMkI9e=ug02^c^cKvK0pwjEmLZt$QBfh!#$XJB1e`HG(jD4@p^^S}> zMpm&O5uXH>u47pVv_5#qtcDdn*Xl( z<#Zd9M`iBaj{#56_Y#VXC`)wHEWk_|)*YW6o{Pa}0~GnwTM4&p5)$F5!DeE8s((vt zvQ>O{=GAvazwEP5f93&-9gXvu`aU!GvToQZytCW;1_~1sRk?2lPbJ^|j-jW#-_?g2 z&i>85ofRc`AC9n&vc>J&1UL3(=dB;8#qJ>{pM7g6{@u{%gm!3WBhJXJFrj{DqXz?5SZ(_yC7jFe+<|1<5%&9jox=^%nH2w zT%kr5-M%A3zVOcx!`;jw0MD?9rHWG}e_LmTux>nHR}GBvx}%QPHJU_WqX%5`khUSS zF`MI#I=osaUhmW*29b02s;as?Bdl%#nHRBOR<1!^jEFva2M!G;2UrQ1rnQF>AiPk_mqF^O#5c zQ4^K!m&@@r2uRakyeAq)EauoQn`QaqVEMnze;OpI*m@ySY-`4F<{dCpnz4URhh!?L z>v6FkPv-#L_}|lSnNMuy+JW&G(tUV$VprS~ZYV#pe;!dM8mB;dw{wI=oU`k16r1-w z{)yzxe!b-`{rO}?jNZ#C%4g3HH|g~~(f#+;8nUzTI1=2p7qX0s2Xm^DzR(2X({$es z!cOg-wUSQ|5-VR6UsO7&0#tUKj^l3JX;Mu3xQ!z1XP>pD^)-b1 zZa3dgLFa{H^{QInGd01#t|vsW#2J}^?4#951t8lmbd=m8THUIz`SOwc}oc3(Eh;b4d&ds&Z;FR=Vf0p32XKv?7T%7p@KSCHw8lt|ugr75| zeb~xcAl$Ckas{&SdQgF@lB8^h)cqQO0okLt6A0&p6@*5;%s*4N086p(iT6*rxrj8& zAC7?C4(Lf(4+8Pto0NUzWCx&;14gV$egQjpaEFOek}w@_VDF>#ajlXWT|M(b_ThLy zf1=Qefh@QY&KIays_0&mDi+NuD;Y8-JKaMyZ5=zZ$*LqGn$_6 zQ9duo;Cuuib|2_j6_=ZLZPk!RqMZJOf1nM$uKnWr@`O$PdvYK(To8y;ri8P7#45b* zW@6}HK05s;riPckLw*62DLPzu+*e6)_sq;9*>DSe#TynYb>{$@mBnejg>E?+XQiC8 z@Gcb=s5k&U@4T{H(&~07S96|P=FNR2kw8Zu2|Tj-YMuvYtlmLN+wfkzF#K`nf8tQy zRPLvfbmhK&Z>ZB1Gy8|uaXCMGTUzITjrzdPhXWU)(iM76dFF>bc6{T2z1&?K?<~3v zCB4I1@WREPzn;`6c3ES?jVvFrBFSZ2 zsFs|Lmu#lLPg;~rn(86$n|lv0CK0OLiu(qsf-iQ02)jwaeKV}{U&F!v1sKVxW!*>2 z15~7xka^26GHC9^#x#e?S4*pf(Jh z$++MC!$^1u7blte%x5C}JZi=~11W%yxvb0JAG#`k{9Su~dQGqW9E6YTIs?3KPf_j+ znvb68m+jkIY**$i;V!+lsx+RkVBlW^abEf!$LDaTQD27WKl;^zhpl2l?3hC1Myajy zBBp!Cojv)@zxrg@F$rSkf4IaWy^lHP+Hwt?fX~i2plb(~Km=g_d`RVKt5k)41~c|v zzk46~Oah?Ln$5!%Eq3Pco9A=EcE@^pYCt!A4E(6LRC?#Fd^ksRp@!VNNW>c}V!@ONHHfB!vUfY}|E;-TiV zKB@D)-lPS9E1mv6{ORb#vgrdv?|H21>PYlaUwibN?|iYxI2Jg9>8LmL6?9H@2Ty9) zU@t0|4buMAI-@UeJfz(f&!DfLHQy5%lY}gQsQ4&q<=`w)yIVn{?uU3N17B_d5j{SM zFN*bK6lv`~Vm{*ge?V@UaJ#|J_h`Gzxf;!On1VFBI=Sedk1S@%5;b`gLj)H!HD12F zJVdROSl>n_GLdEXd7y*RbA-^m`r{3CAaiS%C~TXz7>(__;9E|VFX{xi@bk-YmUUK7 z?=og- zN2GX?Iw0342)*XX4oWRYv*A_?>Qp5ChZf1O%8TSsJ{=eXB*8xC zvdlr0={QFi)~}+oG2Pp6m(K{6o$vo0EpBONXPBDSf1xJhWN5EnahDeR&ktebucIvd zb=5hO0E`kR%CB?897(;`i`!99XgBPY`TdOawm$Fztw-ZfgZFg3iWo(v#`bj&rESe_ z(=|Kq``1WVt@YUB8d=*Z^G>YkEMC7@FTVELjJzQrptYVGqOZge45KT8VN zgH9!Rf0K%BT}^LB7|roE-l}q_KYLB=nfFmd=^oh-&{Ek^@;ksUBL7|Kjp3KRxKn?m z(5IPMo*)z-J|$Qrmv%tG(sgBN0?%kS>1br0)Q2z0NrI2lYx^?2SeJ_LqoD@v1`;e& z&(M2-?&U|ml}_!eXY%-*9`x@TVO*0AuLJcHfAP3~>9*<|F0isA9b2ecx2B)?$w1)>^!2W(RRw#-Wx9OibYK;Y#`PRmo3yV7;onz5(H0 ze}`XpzZz=3e;U6Gq7E98^w&u~g}hBbf9%IS~xqLDEe>a*3 zO18BXDNfHP2=dLXFXd*LKCpFUEi&0EK$;YKyZgIJHcHH(sjb{?tXS3c%W@r51Sj)$ z0@-OY*McP-b^OWGe0$2J_PjuI?%K>QLp%K*dp}-2wJo#iY8)5<{NGe`-Gn=>eCOZ2 z{%u)p8(7}Z^prH8!_vqPTfo-le|L~;VaqGAQ%4_ZE&dU?L<_Ge$TOHi5^udV7mXVR zRp7tO{2*qk$BzAh^BwY{ZO4d}zC#@Q^z#H%2~HQBZsIPxm3bz3sGvKXD6Q%Na8XO# zO>iaCqsr1I-lZ1uHbm2lH}25O$VIV-1Y5-B3iLjvce{>f06Rd$zc;TPPRC<9zkhgo z`w_ogd6b3r>x|N&SNj6*}%##5o5h}Nn(50%B*yxbvPQ6 zScR2M!y|28=c7FNkZa@AIzfr^!j$_Y|2i+ZF$vDwrv$CT<|l3q=#w#9ig$^zEs&`9 zU~=q{E@KzJcrdRzZj8!>;ayOu6CSYu%4)=~MYA_NR?;0GcJiD7Jg84MQ-22}mKcGb zm!HhhstYv~B=I^^#j#YRQgKFacbIS-J%8(tmFe|MN9?(`?qc5tJ8`~3Km>=E5WCNb zXXIW1Z4o5m^^nYkkXUF85@c9_iCUa%Z$EIFbA4e)8Ox{HPS;PxU9J+;DzZD@0>N)F zC~4zu_qw1Bja4CkC7E+_a(`|;P?pVv&_);XFS=AmNDU);& z++I|xzKrszo9xKS67xZ*|C_Dcyxake5D8)dS_Bx|L9ZP-kMpr}(+OfOMXRZBXA1;< zRslt+U*c2X?;m-6-2oubj{4$JM^2Nz57qlZM5Nc%)9^m~H(`x>8h_h$tmEyW?F4X< zy*qA-)DHM7d^zqXA}-(Z&OGJxPMrD`8>cUB#oa!>5z)J8{{}TPXC1*wz|jk@2EGJ? zUI~XP&7)z5);47|I3zk#^!=T}i!?t!<Z(F+rp&ZH(5!4VSl{4ZtLSV*%w_4dL}PHDsDhZ(Bi8#vAnATZK}@lJkxX>P4CE) zlJQ|lq_|Ew2}fAAy|%8%3nlIT84m-Q6N`tgdH z`e7q3p{b5~QN7Yq^iHUuezA(+OkKjQ4NoY&^X6<4`Ac(FBYS_B zXV#N%pRaqlP9*mo%^@%Awa+vjn1q(Edc zu0Q69%gZrBEZbhYYk(L|hM}B4Zg?d=bac6^&utd06N==nD;z!*{Tfc?`SM{C*+u{H za--x7BL|o~KHh8Sj6jngSaZ^({Z@PV%tLS_Yk$QD-_2D)BeHTz$wML>kL&Jt;dR43 zQ%{;0akns~@{vcy4%f)Eqzs@0EBR4&Cnhlp!PvHmV8+)n4Sn+AdfqxdDy6`v3FN_R zgSJ_W-rD{v(fs_XzlndWzPk@e>tBrRx#QR})HMambPxEO?1!)8vPV#3I$zIt;O*;B2_%;=Ve3n0Ln{4Ktbg~b zq?DHNQ`p48%;&KYp;xQ75LJi$+MHeim0){w7q3iJ{`%$Z>8HbL8bGZ^*)*I9l$OBv z6@8r3J3JMc^ZDYfDKTn)_*;Z3AhVe2i6{YjqAr4E*fG4A*5|?3$qpUln9fFTQ!gi< z^RQAJ!HMs5= zI3I8YpYr1u{n6ip6wNU9-M!;KwfofVXD)` zMhSJdMM@X>=`(4>L5~OEm0l~Ed3&13b;iWVaau-4!|=8u2p*^opCCyeN`I{>1c(2_+Tu^CL4J`~c2Li>w%Ur+oto*=z5T!rZ~`Nm@&aK;@w|_^Fb)F`%e3#~*w_uVWP2Vm@FJkZba?BD&%XyWj_st&i z$G+T`^WrfeYvt(!Bv`RX;JV$L@;{I*^Lhc4>!s(%u2U?37n~^OFY=q^!{!*Ak zkGFnQ`rp-R7DZpi$xjgT;bTtU;Fx^;>UjkF=_XdxvUgsi)pJM|ytVr&*GugyWd?@J zG@oh~it0in3*4Mi&3_LQ84-JuZ!stkv1GBPAEB%1HPet(CGWT0^Fo^l2kwG*r0b7y z_9U=7EiXWqzh|drsYd?z*a@h#;qbI12)+N2Rc_I?GVW^*0#~IzAPXUPHQ=tZn9kR{ z4-)j8GEYvY=3`y0z|ZX*y-1HO=XiQ{u3S(LF zzg2BUn+-C@lPe|IcV@G`9J7^qf68MVfiYpS09HLtp|+vY^J;EewfeW0ta2ATQ@-)W zjt7{RJnhi9p9*j1XP{7o7ybGFI0eFtWFRhSlI16xeZPGd7G3M?i^auAcFB#vHwm-; zVqp{<>G7d$MSsOx6;IC*5)3BZH4oMi`THu_M6c3UOH*B=qA05rCEM7pMzK!kx}-HR$|3oUFVrUq{904DJI>i+@qwQ}bmj5$aoD=C(t` z65Om_=QMa;7nGB`%fV!-gCNRxS5R1l4(HSU5=k3ggntd_pMx)Y$gNJdC5wOL?o$nB z+r@UI6j3z_r~4gKrSdGQD$RN`u}Z=F$OTvDAsl)De3ffqq}LqWw@(bj^zO8NY}1`5ZstKbm)4c+_Cw%?>BMaBpBwul zVcf%xIW-mcS)7FZQJzm@fzvfmf}88|hX<2P*~503_7Yue=l8p=ljJujZkhBnM#?Df z&!fevPQHj@IuWB~HtiX$W$U+EP9hg6(XEj}q<>FkauUPr@2Es}hZ?EP7}edLz>?XB&OTOMpjoqH!n#nn7@w-KoN&>$tS z7&rU^;;Lb2Do-SfsU#&1KF&QRu9Bxq-g zf%jk!5OiN>y9W}Lon&DXn3`AFh6ZL%7AM1i6{~PRL+kIsLp}Q1|5%ji(u}9?w(2r6 zfu#=WjQMU=Jz8g$_h}Ol$_h1Z<+jsb}dXkwS+EtF| zOX5C6cTu-#?%6tdt=r{b1I4(j#h0%~+AX($l%6%kxYgi)0_D4`fI4QDpYwsQ<+AUq zLgrlWup9~Wz9qkkX2>ia4&?z)xA=aX8bmsv9=xPD66@tb$G((p4^(vtaN`?|o_{BU z$4%TELoY*Uy}t8jy*6~yUk-cVmtTvVK&HnH2V}8Q+#$ym-y(OLeWZJ8U3no`+Xpj4 zYYfyfw@+_iy`xE-n7@U10D#qgMT?k8m>ETcKW+T;1eDK|I3=ics&E^hF-WhT@r`m$ zxMp#?$78wv9Bp?|vG<>*crITZxqp`qkKfGy47!+qbk zsd%`n(FD^qjYRTzruJ^~+fF0O{{pN0jM^dL14ZOnKVyuD`&I3wHlUc$3J~9)9O-F3{K&kLmJ!7KG6CTlyr>k=_kKbe{8|zHn=b@AvM&uL@N$(0?Zx^ZC=r zwc1hqlWAIH&wa2{JpL%P$V<6}B9<*woA|KBa02|Yx z2-JLg7U7$biqA#7^+lB4+;iw|9Sf?k*om)C1>?>9oGj}2_D$jF@0EKTW6;C504259 z21PclRqXnrvfH6WIIUZvQ*e2~7S#U$dKk6(7Cq_wHqih$dWw?YkAF=ZgE&)F)Aye7 zdjiDZ4!@xyjnbAABD3uZh@HhEcoJl3Odx|_Z^`TNGJYR_)vr6ns$Yy4Dq#Kfhy`LZ z@G~Brvu_fa4j`W8Bv0cy(4#ioKh^8t-eISv;EA)=U(mHa97+t^Hg4G8xV{XIr|LY_ z!k**=&OL70{v#AOjDLvO!wykF2y|rktG0!7Q^-l$JN);v=xkc@(YaJs3VO^$_g%An(6#4B%8bGa+yioRl3j5Stz>BgI&E)k}$Vk``kO8vujtK zsxRRC%#mWL_`F#axo8j&)}MtPyanqGJ|$9$I&)dbE|gjtb$`fH!7+L8)$v?4k5;j` zu6ph7MALH8{GJb3!lvZVwH6HZ>ZIm%j_>j?8wh7DG6f`mpMR0B16)0aE&pt?Kdm@l zi{%Fk%?zj&9M(8F$LQR|hE@7{rIQNSHC=Q7RH|a@9i4dJ$PFnmQ5{9|EUVJDpZCYc zj-vRLBVKzBqklbk=c22c$^cJI*ALAx=;`GyNLH&TB*6J+an{rSfV1t*05vWVOgzHWa1(-t62Kbw2$<`&ZUrT23zLnw~Na$-}QHCAg(Sc zJs*aQ68Lw^T(KG+0QKa79pA#3@^tu%qXSma-&}Xa+kYV;dBZOX_%%|Ni zTlhX5pFh1MC*=mk;^B=q8ZXX+rsK#fAKyBbPBatDeFv^$lOcNItROn99TV3ld^fdH z!{fAc83%2Q4rM5 zLM0(gQ$UP+bTxe-U%(>64J|imwIS}!VtQmtDambq{88~kIL0}WN&EZgzkBe)}xH>{p-QX%q^*mokR+u*UOzdqg-`yZc%V$XE0!~`||my9w3`~o)b30?=jKy*;R!6 zfH|oal7eZ)3cJM(^(lJ2hM@Q3dqInqM1R1Oh(xqVbPgkhdr2{W@{a2K(}9PoJ$$jF z1;InchmG{O^*8o>M<0=CuhWW%`rDDqjNgT#1`(b~veHpYXH|oE-FfODjj&(+HxGIq ziYN>)g`4;$h6S>pSP0)pB-Ty$1Yh#h@JVL+F1h;#kJmb@Cnoq#+xOdukJ9n+B-y^QxZucz5=*i2B9B_bJ;zVZkdx0y}E?RzsXfK&c~~SnulMBd4Xq{ zlJ5)lyshGdS;0QVIq@PK)N){+ClU`bI%=kBKG%*-aBtwE4A$KKu#uqHe4CH<^${Ka zRakAX_s6!Ic~ZgVXXa|bY;H?q>wl*Q3I4#>7iaZtJ~A;&@SDKWKgudg=Q?^iR(~k{bdM$1xb0liU&Chh4%mnHh&|*T8}ec zu1|cF?$mPHA=5h^;2|-@v&agaMaC0=xV01@F6`n#@o`C2xJRUURAn>^u6gH)&OLpBKW6vkvCj|y zm8oNdYhtRT`YK!H^FGe`fqw*_kbeMkCSP_|K^Kp*?#$Pv$bF}!oF4kgFhj5h z>U$^?8~lvuDjN6Y?YG#N$NY(;A3uPw1*|h5T9=HyM~gLMKuimVO0FCA_kGmPGS=S@ zbE2QpoxZz1yuQaWtAq7IRi9)fa*XjL)lAOWj@g?+^Kilv4j8qdq_0Uw$1x)59C8{scl8eYr#$ zk<9d3bOICu^OQ4d=m&g-`}Zr0vQt$Os|SKoD}Ove6cwP%{>KfbV1LjN zP%eOhywymkJn+f@9TOZLWUdrE9(cx%)hZ*gLy%4;D*VGI+G$dvxu+UpwqA zyHNN_5?%HlIe$xH-CE@mI1XLJV=UiGU7Ei>lDxLyf`wacPAfWpG7}a z)9Y9Hbx!jG@J9DhZYI7tUE}uL(X|bfWnTzKN`F_>F<8b`3Xh%LXl5wbh&6k0ivGv> zQRz{`z><|ygh=t#{`zh>MR%4y07RD8&OG!|#N(a)q?yU;YH<;G+Hu0FVr=}9xp^(a7qb=00OHcdqu zzeWxB0>GT^Qe?3B%;R5$jW_-7oCN(uQ^xK!%CR@_2SU&obyr>leSZ-~mVmt`ThvVP$gMaY3?exAh zl|o;ASc}}UbzA8)8287{n3NAwe?GNk*-R}?et(u4jmOEh-HTm_p{O`UW+LN_?(OhR zQC%yy@d6<}7b(<0w+>^Aoa6PkA{c_RIM43JXv17Z8yiX`uc{D-?2#)A)nNyc+1hTYj_p$22mqOcbUdIiDgw0>)>4Pz5~gQnS%?A z6!ZLU8VF`eEz2M%bChD2%rgIa&CFYQ*MA5i6&RM@iAFS2_nbCl;UWOe0~w z14muS142)8<~v6c%JGNr&fV99tG2aWLdM@68p|r&Bf4e*I^`753~$Tku zI4XY#3U(gk;jzi+=**U-oog0n(0gCQk!XH>_F2F*;RxIIcw6jub&wxeM@|RmihuBR z);?H|a>{SlwQ zK*s|gHLrzA58;g@)_dRqcb_45gzCNUE8UR8*u!0vVx<9y+Nv_DTECr6)pfW=AL-mIY=4l=z->cG z!N-F*50jJdu5%Gq@|1lAN_W-U`fbzi%hwQJ#|Mjl;^Ywq2hdJ$1fI>N?}gksD?`+Q zLeyo@IN|8w`xLG@7M##v`_A1IC!J>dD_}5dN104GZz~vC-m^tu2K}or4a#A97vhmV zYE#!Xf^~iCk0BHq$UFR#w0{vKCAs6_#3E$h%WvAn{uOh6)O>P*?a$}h4Iv|f{)ruc z-j48Xs%#&ej2<#G$O63`ket`iec)ZMXT6d0J#qZUt$Xk!#TOl(wuCQi=3GLlh=1;|J`^m6IcVhC z$)!^G9Zhk3gLOXtdA-+NL&j$|{OyYTUW`{=tLJbnA`?^2uC(Q8hvNF^eRJMJiZwd+ zJyDQ{H@>UMMc&UuQt5AA*eAO^F~c_SRr(#03A6MycOZ|!EKQ_o(Wvv6r{HG+5NfA} zJ0;og?#KVaf4)cdntzdUZD%@j@(t+^ma_XdK{CR>B4cnt{@1_s?@?q9|4?KU>2M&h z0{h>l$dLa@kvS)A6ABAL$j4y@Pv-acRkqNy{*OP@Kp0bTmSl`qAmE&1>qJ8(w(h^d z*;xPqKv~po1hZbGOn=g2xVq7QC(CI6oh+mL&mT!&1>E2@e}A_->~{Zb>eK@FF`Uqu zNdV^ek>Ch^3BhDx$-ac@;qp3D6gJ+dSqx}Et9}l+T(Okr``=gk|HnV}A4w)oghN>3 zk3_E(9$B2xe-^k5mi(3~%G3I3pZ&lhACLRTF21WTg=((~2t0DOLnpDAI}<3wJqC2o z>LZc}CqL-Vjepz&R`|smrU;1#nG^oR>^_F*kq0ygqe|{v{u?-;re#oN9-LJMZ?~dU z31l}0RM z6!hlm5iq{!enZ3UM*>@>Y5>48gKv}ohY|c@8Ev{8FMlfO!BFOf8;M35eOqr>S7ay7 z^4V}f%1d=Z7LfI77l<%O0ozU5-HAqu8%8>DhvOS4X@i6c6gkr$jOK*yKC8Q$kBH3BKXoA16pWEy~W!&*#*> zVm|rwvOEoWPyTts)_?2hd&Kc3vVnntL`6Zf5+9tjX{ zADO#45)W;hMlX!8J_B&-UmBPRHi_Nz{vkZ|>VNS)>ukblWfB_Tygxlup1P85A#(ZV z%*mi1t10R0hXCMXjk>v;ir=FN7wo??#Hvm1rha+edI5C%^yKrgz&RTBcwJoD!!)M6 zB86p05Vn;|>+~$D1h~dT!mA=}+QT+7ncHM){HTxEaJ`>ZkBxOI@f1N^X|DFk_i&7l zN`Jh)$qUA6hA2#|>wf7Cz%@}AY)a>Pt~HBP+lyrg#}0UtmSB5CQ>qE+NDLnlZ{h;3 zhWRNDx<{R6cA z>Owf1El#nZa?{}U>u&;Fp6IMq6Ot;%0V)d7Ae4YT9x0MU2XclA z!eN(PG~%DLc#BAuk>EFX#NCByp&9|3-B$S5C%b|1(QzJlIb*%eInEzrx=GNY8R(7! zr%p(*g#JUyCn4EkS_B7OmX@nchJUBKccDq=Ji=#BjZDc1qhUmSla@N0&+_0F!tjI!n*Dr5?7Co)J|IHaMp6eF+T&2o`hR*Ot$})+ z$d?uM5y$n@W;z*Iu6=OShWgEi^0TxvkkWPOotjc!gU-m?uMI(_=i1dg9TNCvj$)~1rqYjM-&WHh4e|4$o+rwS8`78BJ(2W5#q+h zc1s%jJ$-#8k3~$)hI3kU_uM;jd)PcTlE4C50JQ6QHI;;Y${@e6*MENM?Hz5E!|(Rj zjh@!P?sSDVI0ykntlKBUWN zPTVQM8m%CwZE9_2h=RUuJk54hykanL#|m1&2~J0mAi?EOaYF&a4EXe}82BUUC7cP5r*CWsc{$yv^_P!*1vKWP)K&$Zsg$Z=9E{ z7`SjpB;c4WO@CIN*|;yAnHK~jZsKdP4g z<2QZRQzAFU2vJJEB1dhN8w1{(qLH@C&+)JsQ$U!q94$1wH`0DV7wVR>pPY`|DhOV` z)>7JF8-G0l%nB=e_il++!s*%AYI-~vWN_bY@~eGgo09Li>MAo@xWwz2l&4zvQei+% z_C^>ffT6N3oI7p<%m6t_bYH&)!<~8cNG$~G;`0O*vShjv#XJ)!qcC|`G1ZM(J(m~oFL|~7#yS8a)7hwGhJjp zSxU(UpnQ=Pe&%AGoxjv1lN-)JI)Cbe7{##tpKQEh=afgG5d{GQw{}UlR!;ZvU z(K`neAc$6xZFC?!45V^C!mYA`Gu%7c9Ea{bXBJvi-0sNgn|&1#{2hMw(BnOi#($33 z08=?-G6xEbPnhi~B>GlQPDGZZ%&iu!TdK0Botv`$0?u53)V|7MV5ZFoQ;R4<-Ll&>v!i;By`d$f*4`!$b}RtnM9(~b=yCeE~&I3i0M{pFY5aRd>H zw+IO^w8*DpoU}&U(^CW;$kV#UH-FjEKIA#+K7^U9tLBx6?w#UCFjVnt$P5g{Z(aYj zqYav1sC7ib7JmGzW21h(b_aju!>f6QA*V86khbvfh0c6DltNtcGa%mBMf^lmP=8%+&UqGa z!yWCXb=wmrzUa@wj7rW$QRulbVnoJt%Pt7u$5pUdMxJcRU>elLf=BpE`5% zD-W^6_;x$@z+1Yt*6IZT7a?eR}iSqAyB|dzuTvUBuz= z71%^*;{e4)T)cff9hxCbSAVGmfK&n>sd|VhKya@~5T6+gom=$QWmaXuGXm8kn1&N0 zOIH+=iW`G;{_&hH(9StU;mJ=wf`6(nmXCHw{GTW9jGFEnp&AUQXPFNroYsPNIR!@W zguIq7I8xihv7!$Y5@2#Gmrq!#FOrmg=x{y}MV*)2N(4k7!BxgU8-MlF==*SaQRFfB zJHE~@rLZf1&UqKc2-i1V`x_*nRXIQx!eyMR{iHkEr(!kZ3>iRb$-H#H_ouV&U zqaB@TE1*Pe{Zl_3<$p&KB}^jmYzs5SGbeYUTczra{Z=j;Tf=!x3p0BuCzupG>UkYr zA3Hl)RiBxyH4*p5nBs-}igdRL+x!NK;U^KS+1IJ@OB3UX(qTDWCMLPkh1qY^D=YTm ze12|eKeXQOZv%p$OM!jcCyL3fCM0i$sy&)iyv(H(Wc)bB+kcIIuT0b;GIibbU@XyK z(JTz^ev#sXtnUrNhgl9z z^0j&NCh@@}Wehl5)CZ=U$g4~1y?wXHO=ge)POre+pnq_E&yT?K{LQS+1qJBYernc} zNe^{`yVmFr_up-!WL=~-Pf%#uty{Que{YU@-8 z^{A8gCT4AEd7c%9T7}Peu#=~;;>qYA&X-I51Z&y-gt@zdC5q8U-8>^$CEr}nCLcjN z6`fUDO@B!D6QBW94uM7R5bgMhaC(%^deeAnmY*6u8 z?cXOvhyCOFWJ(r9AK8LJPHHvJQ5qw>bkmChR>R@k&si{^`_qpJch?=J_7sAUXxg8c zl3xmagrQrN{|baEW7i52X0g^z=?X!X>4r0W@_#_8k1u;lJ5GBqXcKnIg$p}*@(pWa&^-IfUI}sJ+d#J_76l_wX(5yo=L&hwd1~zD~$oESt;+J z?|)G@nIGLzYQ{|+63q}UMPnWzvXXhd%)4;a{Ux z`;4rc+Fo*ifPMc;^lv7f^YyIhf_;VI27i2bWO|274QRmKdu{1$FRAKr^^W8j;)q53 z$%ZTkD6n+jrbQ<}yD_u^6oR@^WNmOLlQ*;vwces2OdVJu3#!n5l)dB zGa|fp)eM<7h(=FmMiUi zH2jji)$rE0zt@MJ4bKM$FN2)Y$a6(h-xzr>H0<8E4;m{%PjQL-X8!w4oBR5%Y-SU7 z|D5x9zPHk09GcvG)qOuy5{|R^&ws~<+1i{J{y?kD=@1{(pLD_I>4` z<_gGZsC*wO&y6?ytXhIIPN)48j4&3AS=J6?C|@RMXZNc*1>gLjustD!j)i4up6bOs zf0z?8`x-qrOJLn$a%`w+pMbG>^{4iJ*6MTo1bZ9()i#VRD8cZn`2@55nU0-(4OR}& zWF>j$ZEO3Pg5C5Zfo*B|y?+e+hE0|)S(ESp?1-O^$@|b>9}5c;ihYtkFa{WC8Xq3K zGzrON0eMR2ijOW3=4HM%Uv*7S9D!KW{wZXWp1Ny>lG^ksdQl;-w_NMrs-N5sspBY; zck~x1cuf1z4u(#<5eU1SJzcf{--I{Z8uqUsYL4b~z^!TNuDs@vseiuzd?>zT@meQ$ zI)McmWgex)+l36iho1k8HTP^kS9uMJZLz4KC4&W9qlodXBwg${_wM; zNQK->d`{_uc>f6H{eO|;a*ym^md`EWj?MXZzlj(A1T}}8Eo_> z!o+PvT|ernK2**-MNfQkh<@F?XS4flX!ae4b`NWH1Q@(c6?#?qz>l@uYKpw}Kf>^> zhcBv^M7)Jh}e3ZFncfRM{GK7 zK)>TX@7PyTV%o)#DvXXA^Nf$XW4yI5WAyt zhIZ!HHdH9$5wI$A&EY7~oSrCO$c6h7ArRm%a4ZgB-m{YSo@2^!>z^raFD*Iy_M6fU z#-s5HU3PM-XmNvIq6=BUEIo(Qmg1NCS2@B}bcf83AAb@1rmo$~i~>+^)brJ=&46z|082w;erTc@RE5uN_xRe4oqap`2q`vN9{CF68TC_;B`Bq8M+0F*?%xaJ+HbSq zI&!HH6MwCph+s!=1Xy(VHjT6r zD~jxneSdNaq=*w{cL-JETy#uJw6bIUz*{*rD1QxRPVD2tk2C;`)pdRsc1=xhz{X@` zBWoi1tZXYf}4Y`l4Jh_uY#2O|&V1ONC_3;`s z)-yQ!{d>26BOjJtfnjr%-Qf|O6!mo1fA@x~o{o9?1n;qRZ8-2|}IBKoXZ zXjOe>n>y2@Xy;}~+uUsXDX?pYnRy%m(SO^SAz^YU;y#{-2{vsewKL!9YGtli)E#@j zeL@Jmb?b-(3dFUuo|x;H@tntaf>6wr7qC??YV^T%ZC z9VLeT+3$+17MF=2oc3F<2Nfe7Eq{N-{zATPhv!uAYnYW@wE&q^%p%5z92|#x89(o! z4CEO&-?Oh)W>ns$Jpej&KVjPMmG5*50wcRgydj&PkMI?*Sz%rYAR|w=d$wPg*9{s* zRSAeIo?FlSQs`M@TCP`)*Da%=%lr;_3}pDdsFu4Kv6uiqtD1O(t_ zjXYfHzt=r8;PkCwDysYQ$zx+r+(jtJN<$R?xxbp77AtSM?Y_Wwc=@ZQeoh)RHJ4r4 zrW?iVcY0&tO=tYv9#tbnNq_q*1((0)iQV7M{Ij0Tj%Lw|X(&DjPm3*+(L{dI6MX3LP!BQxLPmC1^OkBEo-Q4JK|=sdfC9y3B@?$iz01HPL9cY?%oZ^0$dSWL81 zxn~Q(-ZVK}=MFhs*!)gV8P0v2*Or-2I<1LEiM=Q8M%q2fRJeflIe(skoQ*)7<#W+D z`=Kh6(f)&Shvn(7{bDDgHnYb=`Atd3CGnmc8T`k0sw+Y-*=d`L592tZyNaat-d^h; z1EV({_-qD60>}ZOT|8EJN_{&@1yEFbVzrmai~I_Ul=tm;;HKM)SL zhrd?@_~O+Iu|+8uS9T=wnOq|a#F=bsY9X0sj7i^wej@MEhZRRc!P+33@rDHMO=W{9 zB_4S)Ar>e9+;1*{*2_vB>7p`Wez?fQqQqW7wI^gTTE~Tj{x{_-L0q9 z+um2h=n1fdeZVO%o!N94frRFlWm}cAQhW4SOa^)5q{Wmds{0P=o((o!ZOeYCn>@Fk z%ok}LGejwx^C!3+k!K(Y$cb1In)~-bExKGLq@QV-ihm|F5^NcKOMz+-%Ih<`5HeIH zLahWblmI7jG7qyCYhxs0`A23&ws534BCctiIlv4M+>e7~S;EMYSJW-MlL&Y^IT^(v z*ly|8104xQt@EJiD$XSWtpc_Puv}oK`a$ys_g0BS6X7b%?wo(3-P0OHV6i{bA(GEH zRd`jW)PFW=sk-W}`XwXSpcx-*A0$OOO5Ya+wDznctbtE=D0H$s0^Rg8Z(sS9%~C%2 zGByz`f1WhvVuexv-lJ$DJ12qxjwwe(7oR85=Ohe|AK6}&euFQ#Hx&zT6dO%f0pXOr zT7-IEc-AB(z)LR=O&I!<05)4>iYS)JK_V_y4}S`eWHGyKKW)dQo)0rS(QiPH8F-ds zW0~$Z*P2f|%lmjt_>ksdqxDJtF==d8Q|pTl`-b`>vM_a=|8BiXJ)0-?GB5As3%ctO z<8V`w-OnTi&e$J@%ml-cFQHUD^YM57e$RO58+dvtKa6(C6TwT#>YI*oI6)+6 zCCT8x%ow7M1fcZG+4HnbUKaZ0+Q0x>zdD`e1TBId(f%D^k#0n5OXhA>B?*0H^HF|ioKgO2{5_0C*nb6~dV3zIvrCECf;t3Az+#phOuGddvk|o* zt2#bu@O&7N!J&P<*Rjo)FUJBHBGs-PsTx>C-nVXT;jzETJN$*-c>G1e8`O#!lj&BNXp+J*PTpqsl0K>9azcYha( z){jC5+8r4G=J%u%z9UeW;0m=ZgsB|-8c{;{HOt6cRE)v15JP6kkmj6iIh4j)W&05Z z3Wi?|n*xFQnJ%AaNd5X^vQ9I;9tFiR{o7>SBMr|l&DSrkC__#b2LVFq6lJ(aws;*E2K zB?By!8QAH9eHUd7YEn6C94R8x&hVCY+!JWg=CJS;=`PQpK@j0j*BcH<-t*bUcTzBwqyWL0B{xd6}Ejm*O}}w4|UlK3V-I;_x=up z#Vu1{wMV8Tx!m)simz@Tu>IjCQwv@wV|(n%?`J&|wOXexBt9|9G2scAwJ8Qjgs^dd zT5c)xv`ub^bztnfHWImQQ-L`Qrk~t0oCu)QTwBN{33`>15>{S6aTKxbT6v$R8)KCX ztG>8*{`)=2+{^TIfGobM4uAcf^a<&ec)YQ&PdA9}>~Ld`?C-m#dHf2l`U#S%95l-; zIq4%@JMZL~u8Qzr>wf#t%r4F@VxFvZMjQ^L{ec`Uvg1c~qT*h;|B~;6sF=^2Jg{!* z9VwptKF3NHf|v+UTR^%f;lYoNv>mtC+rH^Nn?3$Ab}%I2MbaS96Mrro2ovpLDGAp5 zGP=3gSvSEmHK}KVKUCzjx^-LwMdFwsn-!lw-|%1cXU<4w54SY|D~(G(t@`jZl6pEl zE0a&kIfSz6<6`dF9rKBl0|j~mp{#S#o`k->Pd8*|x{SOJs% z?9P6}Qkvi_r74%cwSRQFe%BuPbqy(PP?#LcUq0; z12#o^_XaZTn0=$ka4O|u>5_GNkGe@X|MH$GY&e|IrVt~vk`gpb;OEw&Z92)o8EIn` z70)y2`tAiliGPH{&s5qFWLF_1{d^-XJU9?2kuDfO6t50iG;Sc$D4^9bkIG3B=6 zFtI1cGF5!-lMDvz>B+wQjJd{9GOIsN9ZCWb%3a7sv^)bLB(;z^TB{m9^mKL3EKZAj zUAeyCp9pxiWNMrL24HKIj`u_y+N*;f&4`VvKSF1cdVfLWjS)Zw^STlYasHEwq@R<4 zclbJ>tt3Wa^Wv!o`A+Ql(JbVrPvi01P8S3y6h+@7kyGAb{h=(*y{zQBUte$L9%~t$ zOxBP?oYF1aoxOYfrQW01k*xg4)IoLZ%>W)^4KsNt>w)L2_G%+M*>XDpgcuUmQIb^9 z#Vq+dAAdyP&&X|dPC~gV#)DNW+fSnF$f(wOm2UX4Uzh}?bz%i6W?C2RBFiT-MT}t} z51y13_uk?hA)pPTJU&L!5J&;xzL^|cDd8pq$dJK1q0fliDO;q;|7hzGv@x3EO^7hZ-8CqJN}*I_=#%9!?*-bs4*Rs;1c?I>u5F zCw{*ZvtpNwOU+c9&L+N*f0z&`jLtW*RPgV+!d)ymN2jApNhd@{H^w|a81h|RA6L)$ z$hJ{3Tl@usw7#&+@6M1lBDFynqQhzlr zr+;B!iQvJaYn{b?9<^K$zfT_TleG4#8eoU1V3F)3zS-Z%Ms|iFp)BeuotEQww$|rSFtK;&bbz0DIY@U* z&7!H=?MRO>AId9J{Q{r1COKZculG`0+|5)ekgk8+S!~(+n*z(Icz@t6%0LUt!&MSY2#`RR^wCSt1pvv(=4LXeAM$;fEX zZ(x5VQ2?eE)tBcz8!PIa354#LfLK;CFQ@Y2V#sh8KCB*gdIx%8Rz*MQWs|fcc;XMz z<2n=a?#q;SLRY;T1jj*T&C6;3wS4?h2?)y)0l}&WSMwrKO;3|Fxx%{! z)vmvNxi?11CgrPK{@kUQgD8N8Fe?)nLsGXua_ToNmSFNWpVt0B!rv< zNqF0sQ!+37D20TJkDW_0NTbrqUsvJ(YkwG@ko+Bo@iv=gsCn)E?)pZ@Fr@bC3U{!I(<_dok1)+Ui>j;Q~-BlNGq z=kh0?zAcPm1|Pb{+{jBW9R>;k=B5}6J^jb-eE1*M;ZuBYI1Rs#Pze3=UQH3QLJ@U7 z14aG@4K;=%Tf7>(^~w|&2PSfR{6&8TR*PZIO|QysLs-Gor#lbTFJN07F4DwC-g`lC z)7lcJ`#|4`)dlxK)eRo8FN`P_OU_?k)=N(mz)dyITQD&CKL2t5{(twys?eUmcha(y z%@#vG?%d&U{t+o_84Et+CVwS}>~_Dz!jC;usuDd?;VN3@rx8ZhMCT_tw^ z?QG00Sw$8{(wTngfVC*dl~)K9t#kBaWI6r*Qn+i$Gal1uQyLksAkqia?8u1nDjax_P@sJ1-4?yEHg zRmOg%bq%dTb(hC!_CxdGeJTM87!rHiWis7>#0me`iEfI-KjZ(Zea?RsGBLj0aAhBi zAn6Qyww^O5$B0>K=EXZJ@8)-6w-2&d0&9-me%(l<--RH`p&LA;_YLyF3I$P6ICsTq zkt{-K1t*1a6+B`MgoV{-_w=_GAu;-1w{31aO^mYP^v&zk+>yrPfP~*+jvDba)$Z-o zOEyxm`aZz>2~{5Jx=4S?ZzR8kNoxccXp#(Vyhu48W*bj9J#4R;L*?(QsZFLFZ#7~I zFC}Wlv@~b->|z-=LcGVl9?}Z`)-k@+?tYfDr#{xg+zod%Dm`jnQ16xS5t<=q`*>92 zi(V!x7r-L(IHY6a=;a{hv*Us#eLX3#p$TyvszgU4;X>ES)< z@WELr`r%Ts&)MHphjytIJrC^Ed9W-_bGGbC*7I>?dZKuf7A&otz-s=G_jB@`Zi%8} zYUE7vvDHmWZT5ev-%`22Wkzzabj18_YWT~TQ~~aX09_=pu&qFwf>qjqWlrDwO}Fd& z>GApTG$eN4G1HEk-L|8XJ}&7;emi}??7^cmFLY--gp_D}+*M94rns=9xwbQKf#Rzzjy;lW1yx99&nzXf8s#~I$2Nx{N39Yuv=vJ~L0PNh}h0%Y)e zlEY$77Nw;nGw>;bwcVA{FDep9HXARozS~G1b&~Yh@~xIQYM9JBZFNa}9{bkYGBEv9 zIX31~*z-ce@5=U56ol2vU(IJ76CTb0$Meia-$Z}FgpN+jZl<|=`_avyuP5=R={#*T zU%0~}WJ34x z0q}pk)8^1HgT7Qo8e8;LI*rujEKY7)IZF@}|d{ZbuJ~9Uh`Q^_21; zWE(hjRyT9tpzXfAp-==K+4vE{UeIGb=s{NAj*=*Uyb4u!ASN}?u=AD09k#@NGEl1% zylACH65#EjNn_}9)3&l=3=4pdvV7aG)_>}x`N1fyF~q?D%)cIIJEfoHl(Q8#V{dU~uZ;j&Gy!mnsLZw7^{#YR z`mVFq`ZUS0B(TRL7SjQ@zb-=k;8=E>C4<_+v53 z$pU%utF^U|$GF(w*RH9VQzt&s6#vh@r(h7q?BS8 z&Eh0*`}57e=`<81q*4CJpg+Sy`Ez^WMo@nzAFgvBZ;tA|&*oUdWxTsct9^fWO(n%1 z>EL0#>pMvABgcb{IIJbk_b%ATv3>)WYD}M(qF_&3_u6l`&VybF=fb~qyi|^lhKK~% z<^&IWtgciG{y8yu)~F_9AKefI^Rrxz*)g}~tH1@~Ve)V`oW9k_E&Vu+j)F&b?5)JA zOvVwiS!aIQF9AngG?X06Mi77Aites!gTl4z5wtnc4CkI$-0gr9ReD+QR9i0hb2?~> zeURK8OQ2YQY#a>kqtaX=kXN~lzJ|?N3y19MN-ZPcA&>- z>!l!IWmfT$k*98gbl+|A@&IRqW(1QgjlJxk*0A7)YuC#zQGqzBFdn<^?W-2Il7cL# zdhQNm)chrDHKvj)EEmmYNIH5chLFikld)YT#KnQ?=6yMVGiJTbA^HNhg*MjKNLwU( z(@My)xY$86z(0RuhdCpiwpznXuERyFFUd9@!*&C)1tNmle)_D9`9uLwbbl@8Lz%HF zK^)28o?|nd(;fZTTwCNnfy0LE2IW3VFr1^C03)tNie!Pdax3tpn_1r-4(HQY=v=|&JBKyQYodWoP-%r$j?X-5M^h$`9~L5io_nm8RQ20GYkG(K|n$>vDt=vWXChubQ&CDYA=pcJRE` zczoa=G!%ceBakJiGjSB)AqQ_Y=X@5&nMg`|evz>p^wY8}$`};jM{$i{>gw$4WiVQr zQw=A1-KyNJ=*{&`4)&S!tVIIyuNK{J zK|9Ro8aW*jF7f;230eVSt(~obeYllivSY>Hxh8*b4*I^9u01(**J2^XBGa2;u`i=L z3-HvSu>$Y~8QPJAci|-=l9W=Qt3L0n2`CwCnCFoXp|St0V_Olc4}9rj`GyKTfO z^Xo(AteNN&ZxiXOA{lTpKXQvj0ap%6=!#=-w5!=S(`^x(>f8#9;m_dn6DlM z3M_vJcF!aGR6zrz5d?!;_MwCc2+J&ZSkYdB``le$g$s?D?6>9_9ce|D-S9?+6!~`w z``j2c00nI6oM&Cf3ubqFlJ#3s8j_g_zhz!$rs*cc?u- zqS;nwtJ6q+6r(m;4P@c!@V>hquJ|TLanpau#_*^}D{!GnLcywF?$%r3Tbd-IcIpVT1Ni%aI^&ixZaHB0sJdbZTuEHWH)5c`A`492TbMlY1;#=E8pw&qik1>?+vE0Ct7{*)p~HI~FGXX1C zhwRSU3X29M0nHvXTT3839YFW1nC<7aHh}S+x>=;}p-08>dVEf1(Ma2xCZ@D(mPQkn z%5LXMUq8f$NO$%v4X?SB&!BHdDr135`(t8kb_4r0qHTf zN%el&QoQK-^)%WOV*t+}s@TQ!y5Z(MOs-KdrG?REQF)6h7TCvj+bDl)YGZ{OU&m`I zyIjWhppX>~-@s6wGqdR>Zt>Ti8BCqL!ZW2cW zJhP8*qx068&ilLbI&KCVR?Ny}G9^Z>W+E^O@05IlQ62y)mr$0d*@j(=;Q=DHY^P39 zlsSM@f5~E@Jm1|VF;joqT|dPJ;Q$936VCY-5tX|xWUk?wiW}QZ7*dX zF{&QItq(D|0UyZ7uBVEqjgB+T#>(E`pz06f9$${7oZ*pt*NF2islnA0i2H)1inR{^ z*gQV3hfOYI7;2Weo?Tc4GI9Hhzjc(dhT$_X(ifX&^z$Pf)8l`+x-Se)h@cN_-%0pj z8Z-+!<4QeIk*tyGdA&-hih>_yN{HNm!=0jI>5Pn`bQ1hnV`{!M5XO@vL0M z5OLd<^wIZZnkF=3dquJ3kP=f{(3MF@Q8!N0NCtf=4#k?Nv`)v&1Tua7WBgh4?WD1>kAW|I^GEkf_!d8|1iJqS}LLe7X3 z;6W)VfdKnXl|Ik+nigSAU$KQ#46Up%$qBfSRVE7JP&-=7+;*@truBj}bhfyxT(+|x zeQs@sU69au{TK*?aOcWy0f5~`)q-tlCe=yXG@~t`lp=rhHGQf#*3pGbm0`Jq#6ZD2 z8npXdIv+Dk3Y7%j#y?pQcb!q6@Suq3YsZg+657?#?0RXEykhy4y04B$$S`cDcYRx| zjtP`s7VN2HlnqO{90%3FirVBE%zy?ggAZy6%u8pAwmx#o zO#w$H+N0DN>zUz&zbor7&uV{3Uu}2@26DtkbFVq%#RDw->8a)QM=1?Uw*>&l9jfzc zC!FC2#GNNSebx_MN$c+*z`?gi8(^=EvxS{m#V% zv`q}=7~;khUMKWDe9Xu6!uA>N!k^EW|0ffV-Hf1}w$zuvRS#!CwkvMK<<}B|CE>&z zLDlgJuwnn`ILHwwyslBQ#H=KMBDRTFB^-a{q#m_D_smkdjygwFn&y-|3Z7oT2=fTb zF!L19Q}qg_JtBK&bP7~aiKHg41j1bp_h=0jormHY@pbGA-DOyGd=FK{kw&D$O%a(b zc31r}2e2uMa%m1`A9P4kAw)t^ecZ6 zwr0#DQrUWx3=6y^W0n~y*TMbJahD+>4;AE^9>RHNIU=Q#^RY>g5}eq3 zaaKbf!`(fqGkpsgD>Fs-1vSccZf2Rr)H!Lj#&mBU>Nw3kP7;$fxz$i(PxF5j10VT$ z-}i17=#S zI(Y(W5>AYqvD?O;sRZCii??upg`p*HDX)gdPyC&kI7hCnBDH!-=lqa z>mj^g>&LA!!ZRK2z--hd~}ac{P}BR`(*!FAX| zBPe-9To^!fDpU=P@#D1!p7XW6v~Ux5+BRv|Nhxal!#ZpZHY8b_P1c>1mb0fqz_qrD z9OObxs_Xtnna1)wq6BKV5mUpW0X>ET->mkJ>vRq&+F5&>l;xCnKze@!J$&xL`GAHr zJQGx)JV`8E?IF6G#!OYZ?J-^;K{4tp{^D-g$D>HM_d!)uT};C>Rc~i{e4PzsGo-r> zChfG-PE-Qsy%WH=n6)UG*0^#^RM!il9`5SoImSu8%eafriMcU&bIj)5Wqh8~yjcu6javd~!;5~Lf}G3s$M03S44Y3hVN!ovqz z+ptyjYPwJ$qG_$;R71{Y1AitVE{})Ov{Q1u2#JkK&HH+BIU`K($n#U+a6gS#u+Oxld#gS=e&ZmPJDMEt1>1;T`kRa57U2YIAMg=_>h!cEViqB ze?DC{{Vs~wG2m+sHK%t)w66ECEJO8r&Z)({pkn`hwa#G= zj;#=hl@CSSM?;fqu?|yHCprFUpDP9;Um5o zd1txVZzY!0;7Aa)owz@d*vP}2Bv|ZPFTQauu<09rzmBfQ>HY#9q;}nxEr6iQJa~-B zBaHKUMXI{)yqv@KQ)K6UX!qx+oBPBp2RgL_pJH^+0i1u@-MH&qQp|d<#e=vVF*G+i zjYp5;Xg#azWer|-4^5BA_pz20ryiMXOM)6{oNVjaE@@WKCv!yznsYYCh9@N_!+3YE z{S6fMPq#Sn{UGX~Y6yOyXF{3@sWWQX9m~6YgTX-C$Li={dNW9mT)YEs z3$}WRIp2TCMC06I0|u?~v5`k9bD-zyD3UhE4G1gio0RSxa&$Bx)&ij)Sv~9zw-Ic{ zMcM06a@1jW4a~G`om_33yVM?ifbFrIZF}M*bFog6QZ>1W`TMeqwPJ zWf?feQPMX5NqhCJ8jt(kPb^=7LSBvc+6rRpRZTpn%c1j=N@!%~FV=2O>Akc4(+Az?iN$(*I%iH)UP5mH*y0b;^U?B!639KyUd`@$b*CxHzSEX^fer2N%yd1ComDAXeI(lTNq0Y3n-ogVJFdO6k>l@wMU3R zT*rHAXnUA$k??3C00qA$NL$7dNIC7KS{bjK?a`?^H|6lxjj(JdFNS%{7 zjvaQ@8#vHkQ>9gS7g8fb4wHX)_rtG=vsoVTNQy2?&^?vp&NaCB%`@&-j!o(C)ER}G zg-=vFch$VuY$?fjIz_@C==GBH^h;^-^vCSY=lBQr^z-uRBm50Kjq#+YYQ6ng0#-&+ ze&Xk+-$-)cKA7F}DYnN+1l|KI=S^sxk<8i!Cn0eMC`ni}j8(StMO+*+~ z8|@e}jm7>Bz)i6lQf|MAoBe6Gst(tq52s+}Db_%SsX;otuN=B@z}-DBi|Jx~x7){I zZd{oLn7hu}yUjE_c$aCgqSn)Hf9z{$YC+P}G?IAU$K!+VE!Ka2p?i_HTb^f&)@8P^ z`d0O}#Nx1+189G`($W^Mm|f9@J0dAJhvmqzawrti1y8v=d7(p zK^b;TZOno@k}8rg{h=4RTQTA0v`0Z#!bXDIjmNi1vrBZx7~G0t|C*8@@V{ zoLbLX?wm$zIm=Q50xM5?3H3=I4n)0T5aJdE4V^^Tfb@S`0WuQ?vpJMK4E^R%%Ofu+ z#n87A`k{Q?%U+pys(0j?zIA2BFxPM^-8n+sMUa~@i3`V@5aJ7h-dzZ*DqEv>X3h8< z4QaYz>w_c%;9wy;547Y#&Tr23h8m#OarOG-F2E^vp^w-o0qEjQ|0qgSMC0wF33Od) zT{72}z;l0Q=dRduDszGBx!_8t*<>$2vSmx;rzL#P>PcuHdUClu5tjwj;=0oJ@)lH| zb16+LxtNUhrjP=^PFDO$lke-1!yV5_+uR_SL9DB%YUz4`l#L0G$-f6D&(!Vo|XI>vfeyJ+mpFd!ZNG>w4 zd?h>R*MPE${R5`19nq=L1?8;NSRqffJ-Mbs592|to%`%k$2w|+mKdmnz__+HE8)Of zw0nPVa=CWhyz;Nje~hw3l0 z6%xAQ3K%k??na|&%nh|9PzrIrhu}*}U3shs%%doigW$7WO;DJ*S}Q_XjP?W-WDXo} z9iOm*$SnhQe^wC#-C2`^fsNXgxjSz%M|*OzUjS`M)EC&lfR>CD0pLLs&$fTm(^|eh zl*XAG3_OI64DW)Q${$#Fy5^TgcUQf-U+!;m4%0%G!2V`?-yB)#p06Z`mT06r0P97R zv&DK40uMuA923(4BdT%mu?JGE@D)#YhNC;lUEkmr6PwbT9$twrod3tsFU58%^x_1&puNwrzNCOv``FV|C1`CWj2T zGSN1IV}*XJ&gW1_TIR=s?=*`p+MX}&6lOY3HK^^uzOq@9-cF$br@a}or8lj*PAu8n zc$?WeqRta1)i1y&ta@Y@9%~0?9U;~DVhs{z*j-ZiR9&GgbO!TY6R{ zZ_-(+8Xi^6;&wmnQ=We|wg&cZ#cEWKu7EtwvpZ}RRlP@DceQE5^aOEp*d>VCZaimH zAQu{2_M1u_>8NVWsfg!8t~ro$@|fx1m)3LfQnU|hH_0SUK1pbyCdTHI%%R6h`y3`;b+}n+z?tK+@+CcyzXk z=$g9Np{RS41vDL-F;KJ5M~xH-co0qZcrwJpl=}%KCV-dCLjADIQ1y+E>JYu zNX|nXw%F;6ZD)UPE<;k8JG<2JLgYvw&c}KTGw=A?4J`+j+a9@c(p;E9#ntXx4+#96 zs_rY|QXlcdtq7#SoYM=pxO2nVN_ZyhV97X2vCF-#*ZShnUL;lDOv)Y_MgzSRfXGy} zDd;9hgHw~xTKMJx6?m)MS^+YwN89J)9qeGpCVNons6>BwED`+LS!U|JM4HYQhSHyq zn3-*E3Ramh#+ty;7O_eQx zvD2WOEgOg^#OrEhj1G%lIVENWX}uA=L{Jgeg(MVr3sXIH@VpjVgN2_0Sq&FpWv$A# zTIUQeqUnD`kfyhyy|WuGbWp2VT_u{66SkR)C8S4Dv)@Cj!w+czCSRCNkOE!>dHhvM5CEJTk(?{vgf5HC_&?|u2Z>vq|=Lhyi9M#MDNaqG;a>(a76A~6lnuS zOvPx;LI5-e>cZDGFu`}AkV}F}-lsh&ZH*%#Y zJEVVgnHD*0(9M!w&#nEWHYj8V*r#>pK%`yi`Z<%{G{0Jk*nv>a5-?m^hn) zR1*8ddJvMhkr^1g7z$f})rxW~c>y5BdSqg`o$U1DHn#OGGj+h3C7`+Aa0v%ZOJ~&7 z_f9`f#NA-bSMW1Krf-hL;rc+iI=DkHhM#|RZZ1!oG#aH3B}36W(dR`yS&wR+(dV=} z?d8SD2;m*cv>^w-C2(uuAbvn&8k$V_$`NJa&ahXQ@I3j$Mt=M_?RL0X%T9z`KAtcO5O z^SL4T)$t5}>0(&)MxjQ#aKdCGO^S_?s{7`2-4|?^X8qw7`-B9O?jXEQ7S~oI z?4@&DK#h-4)$6R&v(g7gYfLN>r-|e}eV-(&W>)y}Xcme99J$HOql3)b2GM`1f{q<& zjFx9(B>CoOec2OwdD5K`EV1l^d|A>Kb%D)UA`O;C6dF;-s<&)TWEW!L)HS+g9@Au1 z#HlW7;}ihp*>sy=i#@8C!gjgIP^n0D54>$H+a`=NurhJHTlORthueA94E2m7Ea3L(qF2}R@shFT0pOd4 z8H?wLS*~wRvRzomtqpt{gHn&A%V&Li4*gVkTy$^HdUsjh%xgUA8kwulQA9x3H(R(! zg!>D9Ia(rpqwUU`bZviuzm<$frW#7;4(jq~2@Zr!n&7Y;oi;HwvP=mQeN#f0CiJo^ zP4Wqe!>9-KFyj<>H8avywUgir( zJ)Dc;NIsU1TB%a1&y~t-Ckdm#D|}VfyJ7(#Jr588E7s=?a_N6h<{9oFFuU<=nVD6X zPTgCJYAfttv*e&!ire{_Ac%D!??glHyh(D#6khcD;YQ^1<9I9aChf=i5eodeRUhXQ zb-k7$Z9g%qOn1)l*jkb!D3~dU89DRONStp5Wi~R6X+53v_M z3Ahzs<_$zb>T_}<2B`@dALWG}e^fN1x@>@qbU*-)VaQ8((ldW%v5<(lG=;#>guLz@eIg^I z^&yZ8TU7bTR}!~4Y~3dajRtc-;{XXn5)-g_2lT`OrYY)B8l!L1x>P2i z>4=i7F4lk3Txg;2vrF}zbc*!^y538wnep>L28wC|Q4NqEIOP<((so{D>TC+BG-+}M zgE=~d`81fVcAh;ibCMcOL~`sZ;~B85)L}{51=tN>LCnjz*eFEpZx{J}y-TmE*Agnq zijfOtirtbyolm+nip z2UYEQx&s4ylSKCehNJt zi0XgArR*?B3+;BeRZzS;`s~7#-BKHIa!5>USnpIT=u4{X_;!@TZ7@?ZMvIZz#5z=` zYrpC9RYt&-TGOl86)g(pcR<#(^8zweTIdhDv6gSSBAx@69Aw*S@(K!UgnunA3lDPw93w>g@=kHK}}BvWn1e!~^Eo3ElW( zRqQ>dnR)y~NMj${aO!FVnyB1zdT^YZQ-BHqQ-zDQa=q!+o;Q~wx;K$SiDEwQQXX)* z9jNh;G&#H2u@bzs-q-svq+lL3rE3VURC2=5+4XZz@}<+NV|VY zd7XnRoI{FjJ(l4~$h9pKF;U*x2((ba-dfc|oxtTDSfxy#rSs|}Z|7t_nHOtdrXdia zrE^di2lr&B)%Z3~&oIP1MbM$UWbsT@`=K^UD^(+z`W=4AIQYt!%G2_QvhK0tFleCeE`= zpDd=)6xB+Gg~NAZ1$jm@&{Vd}G_tW5&%hm6Lj5=KN5ow>AfCOV^J1#UGw?13k_!1j z86IZ|@%ij3UDs9>&*uYt`kY;x^?^w4F-5Pr_PSupOXYgETiZvOART?V4K#l+)ryo} z-;gErgE-Ga~I=U00U0(K@Z&&zF0W$|fz>s1d8L)iLs%AorFI8PsqM->Gx4h%zF zeFmvlJ0Py^quEYrKa@~!tY?3Vg{h%7#HrgFYDI7e+}=(CU+r~Po|0-8T8~(Rcz;#Z z&;ao_Wh3)uvhJv z*qzfQuCz1S!Onb4(iIH=FW&qi)(5bLWLnz?!qb z6Ly>4+o51ggWa*p_AGQTU1sE6{APAK(Khym@<_$DHB%{V14+1KTiN4PZ-;F$J4o!_ z5g{H}uMOXIbrPBhax;I|jU=^$G$Mjs682p?d#oSfA(&Qsj{=wsh6gZ`Xj_v(EEr-h zH3;*uuaWJcZ3Dp4jHR+F#2FK1%_Ca&69?KQNyi6nstc2;cL?OKzO*lOMtK@JXKI1O&Q)vN zr__trnYy-Z=_s`Jv2g(Us`DE)Up>s5wO_({_$tp=*L+%#&2Egc3K@2t>^?^B*+c9a zGjrx1Fp_ymW{rOX4R3sR)k$Xe-SWXlGwAW&%4Q%2=DIqSuqtpTqnVCA>1~%4E5`@7 zc$8$ja%mCjpY2xQq~mNGkLr`v!({>H^|BnE0DP3{SXLok2P026g_D}+_};P8orXrC zfhLaI$~A7(&Jgq=>4Wo9YjW`d7bh@h_Z8g9^3dRxw{m}dUmooX@~%dQ9)Xv;$&%$ETy6CEl=WhIDu&v0w>T-#1KbB2aRhe|J~{%vsH84B37qsE zO&nc}86vN1f7RB|e6u%O;ar8rCRHvMROewwER)J)zIx2yM`)ju+zIv8CJ9R&h_+$9 z{P0*oEaiW8&Rpv$+r9DKC6qr+%}{2u_0>zKa4k}A>vKl0c78d!E7h%r9IrU(a=O2d zT@y5zv{&MjMpM~wdO=aX9nGdRwTFwTH0>cXIe{dEr^4KYqHe3gg!cf%oHn%RE_azs zLt;6p6PoK+#38X8as(1}pbpc;DpkRzZf?b8BTs)dbsB7HdCbhxZadX3L|{xd@C=$U z-r9{6%>*m@7zHP`^tiEpd zOgfp=I%?LaGaZ;rFh?7zlkXGv+U}YSrO%mh#RpbI+(@6=1eCJcP5LRL@9N`Wv|v=! zQ#Ui{v!0!EI4chnXiDc~3QEfAVOvEZLzjOga}POx$cBV3o7!pGbatAMr}#8L9SAPl zMIDnA+EtsWV&F|c-!3;ku%DZmy}mp1%4Ae&-LYkKJA;y(G67y$ zo5BTXkWm3%=0(PEh`Z=ya*ImbA?CcAFk2u5h#Bl z^>X5tC}DTH%|L%VItgOXQHp*U z1B5kmir{uA!})Bykf%=;*$}Iu>8uGq?JPxMGx5!= zwW1bb+3Mt-IJ-FJPG4^!TASa}iMQxv!5?;c10SM1fEnKnCWh(d0uj}*5OjY+GP=z5 zaN}rnVqQoiXvE98b4k|Kqm#a?D7J0fG6|j}GeSSUCD6SFT~!TO1T$IPmNtTdI`%tA{AX+(r;Iwy9FJ_KJ=mJ?QCFKT&EX z1NV7)DD-`Ii8u)bun4Iyrw@O8Ub~J8xbB^`F;u)J8YLE>nCr!LS9lPm@T1B}SITXUVn@D)!Ta^bJQ}&0uNd<&Pp`?< z79pY&HuMBV&ht*E%6?nQ{G>YEL}@r2$XMzymVI4q=i3q*iiL^HTY7&6k;?@duW)P< zT>kT5H1mquGmE)wxj8Cr&D}Py6IG>rep?bp$Ubk+_tnv$7H~){vw-ot(q?oM^^keTDNyPQarG@&b?U#P(Q8`t*l zNtgl>pdP$YxT7aoD29I$asqH|H(O<2h_qO9j#aU6G)t+8&(*!?9OsOs>$=k&SJjdB zSH6vMfK>+}Tjb4d@IY&8z^~n32dh|A5WXCv^wQnj2P~$&Gb6SA_!9Wo6Er3ut2sNn z3}-_=AGvD@CCKRmZ~CBCXHdnl=$pJS+t2uLyIsl4Xa}l}=K6oPU}>)Tm4_KZ5h15+ zc6|~+*vO;8i5*(^D2Ugy@qHQ}CqSHfb<58;upS!Q>7c^hRs!mpkpy3^>mYDfzI^c^ zhUhzEgI4St9Byp$p^AT`KFwelsV59r8{^;2lkVzHqjqr3Fi6 zmujqfdzL6AZzKP)B_7^<1~peRTwP&o60VJSdDb~P?ZpRc*xE_`I*jw^=1GBMbw!jJ;SEtG9 zvFNKY8>ib4wIXdaJ&MPB89ZhU$zs=GiXKwKq^uhKZ3M=quoDwD%o*p%a85;)U{1q7 z6E?$&xG#UJ3-V4{YlPz&1G9z0K1%My;X2)~0i@dBG5ODLi$w>cEjA~le#esZY_vHI z6;yB8b_rX{#4O}B8Cww}*hAD~CDan?1PjiU_f-S3}M-v%Owt&+~+{=A94A zgqbPw@P2~BhOa`+d@PiHOO()s53OZwtDM&a3^g8~A#A+v8I_F9!h>aXg>~QA~NB zyi8ZnfOLl8Lax}>o?s)d(2#ttp(O;NQnBmCyn4MMxpodRV9t8VrZ*ZKR`U@M`1O&Q z;LVLDODR3Y`@eiX5*@_5{jHHLw=t8qWOrhBH8sS6R3 zkz-6VbtwhlC^SGkQxKbu(_zM+!#QXUtW`}Wu~9K>%rX;*qaIDsuoe2kiw|nw0uG~C zF1B3T@u)Gkuw@ZU9>Ts=)C>pbCF!z754~>QA zTdE3&Me0tulN6p%Yq7@8^maiCWjQ~n=2|~eqc9G|_7E6{BHXEqR#aD`(ofDH9eAMIs%q?p>|5ex*6#f<|l zv5d@_rEF{~8+GZ~-Py~D+tN+Z8^@i}^4Zito||uU4l0)$$fJLn5Wec+lXclCCV&}f z-+OSVg`7bE5K2ag%7htNE6B8tTjZ1c=?X^6v#DpyVdI%Hv6k(O#7#7jBB4}!e9XPL zJAp44tlY@R(Hsg%A4dKfl0tn+jeH3SplagkyE4?^2gE^ZBA+GsjBJwwikyr{dZ#@I zIctks=s9$RFX?}+RPNwj%mU~~uu)f*YsuHii0>h13)xm3wROej?g1z5>eWrV?#6}_ zF&k4wy$gylCz!JfnRQlI?h;JAA)h}P&gBnPfM~qwK{IF(8h)1c1C%7WZ3OsrG2L{& zj2Hl%!Ao|Jgh#$x<)Wq^A?|Q)IDUkE^;?zC^EZujDIwjUG}0Z4fC6txsY3}O-F;^A{Wf57*Ly{`FT_qumy=bo9}nSD)?Y&TyE!Ie5H5M>HT zvdfT>ISM@?omy#nwyp?Mcaybdu}1xw&m}M2yJFw17c?&ZvKEssTU#!^Z z@!}uwa_cMdYlI$Rg(3SR-k8KrU&H-?-%?#a#i1`|mHyd0_gN-+d2HVLO9Y#WT6;yq!Q@iVv-^e0(uwew!kA<46MFXK#j<}EMR5!T!M^1|IqmR33@csQJFb(ksbjA`PRqpBxU zSN>Y)Z@JR`e&+?dQSgMRy@frkar2U9rnPEih_A#&C9>fu&_{=p_bHPvI0njVBi2(G zb3mMeDJ=D~7(N(@{nOmq;fqa{E)cscNPLY`kuyJ_rKR$oz+xaI`d7JfoOd%N;E*el>Q52ux{?klgU;rtI;=}QM=mOcB{}v?(3&P=s^?(q>PozN z*GK7-QD?Cm1sgj1-UjJw@d)G;4Hiu$TkSLzZ*Mk}nQ@eIixmwf+jcKd-9JOoPz0W_|E7!2+Nc25fgi@|QHSFPRUY!FJTt;V<;B>tBece{5jgOMc7oxZJHiJ&jY% z^(#N5C$B?kP;3NVK8KV3jZ^NkLe&*#C`VN-(-HHJW?3nNx<4OV%q(DJiGv zJ+^KC3P(zn!*~To6-kc)cU}v$DI?Q9{3_DouQTfnPLxHNDG3OX=8(VN^3J6g7(^x} z6lbdkczF(&YX6Intw6tAt9VU2SQOviYl)Uvz&78xy}O3Rl}=J$aI_9x)V%p`#86nda%|^1rU29zXH54W%d&mNxqsn0*-YgY zgm9dsf2z;3%r7doQCAytdSx=K@?7S>ndViA0Ww&QA@S_2Ju^?uX9Ay;g^eHcUgqR= zBspli5{7aRb6SA^m?*6zBY3BbAG>;{vINIP|em?a@2xlbw!K_;?#8oDnxag=p#e?9R zXsZn+-Im(({KnTfNb2aO(D-6UF~Lc!INa}+e`TeZp7ADOh$W`vudY>j_5E|PDiE|| z=l%6tB#Yb#@D&w4CNCVGd@!6o~gqpWUm)*yBkkv?~Po)}qalra!0sBGhS=-MW3 z6ZNLCX8C}x+WieLUo15(&U)0cNzzD|jH_G8x9WTKTeDV73;UzDYVY>yxt?OOa>}YM zEBB;|)q=olI+et#cf@G|B)DFwy(Nc}`S#0pYB)nvV6iy?YX8d=`NOf2e61 zZ9WB-^`7JuS2HN5yX$gTiR<-R?yZK7O3lJ57Bk$khAlFR;TyL*Gqz$cYLSnTc3(ltZUx*B=C2FK;A}$+AD!qu6J5V z;8!M&FJMMf-PyeT!-QOK^Ica|qfCW?H|sFYh7T)rGLX5ksF%!S2rZRULdZ+zX!&0~ z@#&A03-Nru_*kQ^!v8dg$?@Il=#7Qi+ZOYifB6~7(Cg^FTs(5dz~&es9^g)1^K})4 zHWhlAC1Ilbz6xl0zBO61{Pi)7d8&>t=CS4T0s+vf6|+;_axBf6L7D49TPgalGptHh zAVlix*!%9K4@UE%By=`2@|~3uRz8}YTSfXDJ{dI4KN&AQHSO{4!5g0{%9zF|l_+zA&;OSVM zPE7y=E~rxg7hL#E5-?rl!R>w|nHKSfI z-QAKjz0R&H!=_>37WO)>i1VwecvsKEc^;(*V6_>dDmIblf61d~TZIWXD ziuL?vnD7iY>UgE^gFjpJ0qa3Gqb#EVv>#|t!9dTS*9i!sk+++u{g?Fv+h65fLAS#j zj2~R$bjgUj6~;nzoht_p_WL7i@(AoEw)7EO?#bjtBUTfckai6#qXSCYqJ2DhQT)tA zKzz8R=&nc`o>n)q$kxI?tIhHI%A$lfc5=~R{3=N{_@g0o*`0bgN=A=I40M`HD#h4x z?tP)A$+&Xgh1={;m!09g+nP=s1zuardB^$73GGbWgvYw2m8G1Jy7xW={2PBAGg)WX zk$y8sp^Q2`xbV0pR4$=yGJuEixXNec+PlZ@Oht&t5-@7z7i&i};pDnE*v;Lk_4B**+LJ7Z{ccCPB< z4GiAqk&;!_wJjfEcM0z;A{!y?HfpAL@0|BecvMY4i}`!Aj!M^18OuJFH&fCX5Q#ZT z-4I6P?2xItHkU>f-Ik(x#kN0A8Em2QCEihJ!4}uU^QdXa!E279Nt}qdCzT3=`UY#U zC)8UN%{WBs(3|#4^2k$}tdpzp?+lKQF-FXD^A7rpxzCg_$h^6k6`$gW_8Tg9oDIghDiVGB-;_~R-qDV&3xR3`k{#2__un)dHV_=(6Ox}T zIgXVol+x#b&e&)__sh2F!r1Z8OLZHTxc%!j_cjt$n+tRD;%h;>*qttW@zp^J=2SQ6 zzs6RLr6U1@R0?xPqQ=*4x&4ufuk3sE=%bC(canPf#NR)lU$2b3Om7nO{)<~1so?Bo=(ojCHUi9z3BTq<#Wb%I|5zl9Vt3<1m;mQKgWoI)Nx1gslE%_J zZZ~ezWXdzO`6aY!#$hX1lA#hq~KwVlMX^;_cB zEBV37W{moi^t-PGMv{P=`8Gxc50~5X4?himH#F0J_4(g>OX zOUGds@-Y2~ub@eb7+}o$JJ&;#)H>3idM%l#DPEoQ=NdiS@du44kf7Gc^eV>FFDTUY zwEHmeh$vT+%3iYK?}soABdl$lQ=$;LjQlcqr^Pm=fAzHZjgm%X2{yWPoq*$8kjH<~SYafcn)PlnN{1WyL-dnem&FU2w zWoSfJo3cPsWe7LJfCb!FMD~l($bSWa-`%{!Z#-ohe=#B`Kl5c!PSlOw4Te$=0r>eBpp;HDW+J2*N(rMCxmAueMgrmQI z23hrcix==!q9u{@*Rh7Ab`$$A{}%E@Z_J^JVc!^{!t+(z8GwQ1Yi&rDoFUsfX!z=% zH67CPH;W(3cXUA$%lt_zc{aQsk3l0)XPRj3q}~n`(Qq5I|2DdT{EO%w)ER?G8SmO|40lo z%_$1}b!xM8)7XpEZseWMdmQpzQCn@LM= zOSMA(Rh0tOh0;LsSBX>WC^kx8vDT0F;1*%M;Dp%9cKeHK)_PwBYnY!viOd-TGuYXw zD~9(d9WeYXN;!iaSdIY+3rgxcDBz?Y7%82VK0WuzT`uN+3-@sl%m2Y?;s;&1VI_hM zsw+5^RN$|FG5UnwsLMZ^b3$dwgwVf6L&P3oPy*@kG5Es7#cm_%A;K^ zmlU|4ReCAG2B>)^4tMe0)-?XOkbj{Ngom*IShnLB-V|qSF9OC@id}ALyZ=YOkujtj zmjQe(zd^ghK*pcwJ2rp#fXVGi?iEP(c_Zl6oi*QNhs*75C>9MoVIE`FPc32PcEhrN znG}EOzrb2qiF)DJLf#8;!L0=fbi?eM8wWWxigMVL(l>5G zjGANbN<)LwO;UT+GsP^ZQ|Z<=TK(`&+5n)Vq(zX_jyu=}5=fW4-|V${ta>$TZRu#G z@}Hyk>vLksl|Qel2zZ1Xlf`z4DDw|6ad9GU`{#+-Yc+>MjZ71#RsV^>LPbCht}eP= zdcSKp%Ar_^NAz@(zN*h3Oangf4LBUW@e;>&8bGA1Tu)g`g6}xN(p*$sBR`GC?gIgS zo5|ltQhZnQk$KiC<4qFJvqWCfw59REuWsM|d=v8-xg+%K%nT!jyCEHStdvKRu);7XySIES}89b&flsmyN-9 zSZ7}l*U z>_x0T8@JWxJv=;SQnkZgTi?ZW{SjM;uh}}IPRNyOuVjh*ESqVg{gqFwC)YrSoQps7 zqd0R|;jd?zT9~ztbDm)v&IsvQswrE2Ukn|Q#I&sY)*|UN@>El;&Wlxoj~l(`Zw;aGzX(;jz3|InSxCHHp0+dFhpLPH?tgy_7}jmS@T(v9ITa& zzERMw6B))&8?!#EHHrE*@RJ6Zm||~U6F@%C8NMYGKj||Xz~oWR86oTP@(P$4({#*{Y%-5@V$ZDrshq~yyjM5hg+5c%(uv-ZphX{+-Oz(DDfuk5VH z+ze4;oPu8sIYuZ|!~lNus=Qs1HxMjjAp#^o7ZQ1Mo>g>Ih?(CnFWWcIK2nzD<#V%-`p+sBA5Dh zmz*Ic11~7a)(r=*mGt{0a9OxpSlueIER^&6+2I+>x^{-R1?k?#ZG!F8ThW|B^|{wy zM}_*cs{SnHk~5finoKCpD@Do-F5Rp#Oz~FrBy^T5?ov$EpL>Q#Csm61xPILFwV8LW z^Xs!-< zh}(p4{tz5l?W)f`%P6@L5fp=I*d8i>`!QxqH0tvSb@O+H!GC5P?+doz%NIN(l0)j@ zNyARB-v)W^eUZBWT&?Rz)c9ri$8jB#_)720`Ep}hiJ2Bh`0y>?4QsRv{Vf1XVp{Sm zDOmoOoLhTHLQvKga(S>i%rQ4(-$rS?s19D6y$bF3K|}L|b-#WL0BmP}m%ojhQ6Y2A2Ta#Y zX{EHQ#;v@n3ugM)#C0)kmusCZPfDI!bJkl`bU!Pk-!7g{ynJP|otE3l|8t|FwFNt~ z59F00^8FK7=5)p^z#)$>hRh5@!;*x2U$+~q>8+ys`M;|Z&zT5zVDIbSwB!Ix=DJ!j zhXL+U+IpOt4WN_VbmBrf(~)y^Lru#r1$gX5a~1WFC3+M_W5>xY99U>wx(}r;B=PvU z!Z3EKfMHppWZvKWoLjm{;&tNb`XJ||B`1}Bz`wR}vwks4Afxk+e$Xp_Ar2P0Y8N^m zd^XSDWe|?g>TKDnS2GF1YS9PqDVK~@uH&S7dHqWbrRY9HToJJ{PA$rl?s zt+xHFHt!oq-YZM*f0I7`R@3;kk7j!MpdoQUQ}m5{EeqpxBvz$(jB+yR zz8_VWZE}dQsx(K-{YldOr#Mq#LA{1ETNZ!bidJ6q>C5|VA?*q9@9vR8Bir5u`GJfS znOCY+UcbG9ytW7OBH3R|J6G2Ykl4pbRK~;_ny3P!4nj%}(l2lO`B*ouf75H|`K8eb z70ke^H9zKw5ATd17U~)5D1Dnf(PPlv&e!#{NmLojy)#05#BX)i#rFpE{%X3uk)o3-=NgnUB@D-@&3m6T#594VgHs7qEZWHLJz*razcf0ecA@%1N6kHf(BgbdL zSRn`aS*M);ql?M&w}{&iiI~{F+>A5=Ny%D&;mm~(Xj6TccD87(@c*)**II&~T;@jO zi?g3%^Ab~yeSGCBhO;dvwpg|O1J{pL@u59+Dd~cF4~NOiP4D&|P(Xc$hB!tq!JROp zW}zwBh0fvxwlao3lQhqQpB9$Ap3i#)Z)PXpW95IckwakwNtzkKm>kJMr}@>af@|nb zZcb7iU-J7u;(Ur-DOyJUMH3Iq*L16!c2uJ8`RV!oordw}^q3o!S;AZC8_Ud>a2BS4 zMs2iFCZE@TtPbBGzv_x#ZSFd+kxSi#D{bzuHc|~PAI^Af4xuGUxCMDQ5?A5o&pllJ z2b>0)Fb_?#Df-wnR2xxMn*jzc5+oWC!R1uOgZSroxdj*{Q%4_zya=)44o+Qir1)Jj zxe+PyrykmqE+K#IiG^smY)eJ?%jkPrPGYy6q6J-46#J|`C`6<#)RRUGfkD|Z2DMQt5D0#0I-wX4?E&cmgq~s5t3YO`H{izmAt=p$I)Q( z&(q@LpNh1%olHG=M5gG?>@#KQ%eRu%TjuraF=b22tAw5~EtH!N@Byj|Ze^Y4hVNW^ z{*jwe%O04PSDP^>u4v<0F8}@~9L9$aQJz4=o^60_=<_GM-MKP0aRoO`6S+QcH&&038fy`OU;YFb>nu#-|(=*z~x zD4zBax!%hHO`lC6EwA00o~?RiadVNiHc^SauhD-YSuCr@?~lEKyJ;Nf0|3ofVHlzZ z)gmpJzf?pIU7Itv33$1ihQw)AW475xjG7L7PZDZK5+=#lLW}--2+t<-p{hV(4Tcz%}sj~WiBYoYB zu$JDmh~IZ!S&HkiD$&$b0Y^Kc1L=!AyoybBtMcV#qp4A8KJRYewmp~5zLKlD z1A!XQ>cE-M(Sj+Q5S1?+gUR6@i_>pAjH4~jL-Os=&#blL#4imgH!njkx=wt8Ev_!n4E^}!kW6`>J)&bJ#z9J^NY>Xhj zxH`Pfm(=kro!6MdWBFf#tO`xu{R8%FT87yh9B@n31I1RtqZTabfnQ_BMnla8+ey;R zB}Yo{s#rgZ!`wN3nBgnB5u%S{#yAHR^E&I+C<)Jgv8PU0-hRftrwBPPGE4I^E7Z>2 zj&jRn5WbS&J-63Coppms;xDS(j$!%(3s}<q|BJ(jh}hY7xW&X7jS~_!an6+@>?Wvcg#~^>zF7QuK##Su7xkDzN{&KCSK(CA}-m zUdD6pM|9iMJ*n1qZKd$>37#uww3W`O`r5~bK64-hJLQD;myDgsj2;cSE*%xzf5DtW zdf~ld%dBnpt;;|hJkh#rA%}I>MYjL1N@0%M1mnx6oYa*Sj&s}LPqbD;UB<_%jfr)9 ziH0*r>&)&X*=@rc^=pN-LCl$f%v_92j_Xu4TDlUBfTUC=Zv^MEae#$lRY8`$IxT7 zx%hFG7_9P~O8#Q6)mp)Xrm< zwrhBdhE^WJ?X{~`@_^BNDOy0I0 zvr*U^&Jyolt%hY9&Z*_-KV4#b74+2YI&)Irh|;{&00cCypW)xErc72@f4^$WU7jur zJ9GG?5g@7cqbsDjW+(Kq{DrQ<*c9zjmMo6{>YHqarmu5c_hZI2N0%K6P%?=ymIPMg zq*i|;);%wdbxn7n+pvl_fh7`K?KR7Luy%|qv!_u5_5fY)?&9rF*-_El~Jvu(mc2iHe;@%V>z`Um;zsm1v92Zc? zH((cG@%L53T(d$U`?j@tyS-KBAw@E+nEdynS3Ye570juD1-@MdQl9PM1N95%ymCvi z^RP_d$6CNkYp+6(`tQ#~i4PXBLDcellvG=_E}6tVYR5|M^>KS8dT;&=kG4a zZrMa$+|WYLr`3N`KIg}Zx6+p1>6{TrUJgA34lsW$rFHAYp88`~3UN4+k$2gH6%oWt zetm7@osslr9^3ZYiBb^#2EteC|AjKM%$P96J!**^IePJpYbF}F{(Cg1v}$(cDd-Of z*>J&GYAtj_^DLg-iQ=U=ren7?q*4y=%V;}n?{sYlVke>u_QM zpC7hXX!mJ1vM2PkR!ecVzQ$X@nyK_|e#e;`9*!id zO?8p}%`sN;>#R@68qfum}Dn=f^)r9!sG7DN-dvTv#MSF$ot^g-((cWc-Z4MQZ^!EJ!3rfM>pQ}`ro{> zqHR&Unag^D<1#r*yLI#{bor}Xx@G#3a^i>o!ZUkql`@xkQ#D4)u#3Q&eQxp#`an-g z+f`d&?$kT(a8*hC$OE_m0}ea@Z=N*XHfd9bE?x@}jvv1uBaqKb#+LESrPb;+2VT1+ zNH*#H#~lh&=eMYu>{d;f@!Hc~XwP3drhVGO1_r5U@=*~-f0bpklMHT+vCfHtTyDO> z-h0s4*4wrd@p`ZjiAhPcGQA~=08&YXB3|KUmVNV`O0;apk#$XhI^=MF6!Rd=kX+{J zL4a%3KP&JTd~EVtXqzU%+44%IpXo*@TnHrwmA@-s8^IRh1?v-d9DW;p2}d>JleA;jJiog#br*uc~NG1$lN-efX0HG@1Yj) zywr4bC3RaMw3>b9KrBD<)5L+*Wwf5Fo~*cn*inVaw63eHw1f*`V-60X8|KN9ivo)P zcZ6TA$F^$#&+Ja{n-|#F+E&2Y?@nl0`q6j^E_>?7cZZ|JEhQ11>69uR_yfFj|$IpBY;U)tmwNMShp`%h-VW6S zf(_LqP`yR+-FA<2 zKq;AO-@-n*Kz79zde+RFi?aSW3&?$WAI(Ii@SCJd(ueI?Tq|XRE&2$7bIUhAz8Brb zT_Jzs`jm2Bi)7?wea33@!>`rH#5G30cyn<3daK3pKP#9mv=k2=6a_FU1m{cD%_kW2 z{b>}73}+l0cK@dh$cq;<1I-W zaKLMa5z)1dhEgfOkwAlJ_;yTO*W~NF!I09Kkd@Lu^rvmg?4swLerJ4LjRj=8ks=-c zN(BdlSGZOBdBjbI6X>O7@$6qw=qQ_Jc(kmTl<1D^j^aze3zMY_vh(k473jQr9Ck+W zh#Hzs2z4NRhQ@4T8PZ}09tL%LE(v3>E*dR7#2lZUzSnRb51@ff@G3a^Klb;ZHOr_7 zAf>lQI0r3R?G6}n1h2SUbVAjLNo(YS=p)Q1^C;nNU;pEC++;HGE;HQf5EG?Wz@-iI zi}8y`tLKm?`}uZ1LA%-@V&zW;|GTaXDYoC+wDR9p{iX1BDTos|cq0E5wF|d{%$~4^dASk2mPAuLj#NXi>m%prnRd; zl8NNZJ^Y|FoPBb~UixuOYxUT{nJfwuT;i(rH6FLjltgEMK79yfm2U3+Exv(V`f5d) zs7a>|Z4g>*KKs{mq2|7C?KG-(GwAvMD1Ej^WFDz8HC;v0dFA#t+&)mv!V5E4B{O8$ z7$truFnSfC|M|5QOr4V((*BapLM{JrF0{*8wC9&Xyzc^Y_rp?Z&%AD}ehjf1>eevm z7}Q-`jXNX+;E~54Myr(e`nD{we$6a#EKX;g655^r`aOl9kZkL-@d+`x+28LgJrUpd z9XwZp0n%+EKNppg+4QsCB1^)#-msLD+ShWFj?tE6fy_Nc=)Prw| zUsS@uAAfo}3>96buGp%>R;S|<%%P4_=Gss-b2`!}d+B0aI?gaBpNB!2ku%An(A>~2 z=#ME`8Z)xusut zE_m_Mbx@wNuQ$rQ&)juj1B?3LaF}y#)^Y>{afX=FxdhH96O*DqX> zz#?{o^@bLW|FHa^=yC&{`M37n;7G0;$3L3$FGtT6RWDe)?j$C zrozwSxq$;^7u%8P|L{e}4;I~YkRkJKBMfyu9plE%yXU7hg+Hqt^F3^DXo z1{Pi6HO6FY?TaQ4W{IFWnRFM+Vm*h-bcxm!JbkHYg*m$rGdvdXFXIv^W{gK%n#K+; z&ucLG8h-KLJG5M$U>T+gq*i*D{XAWfyd&w*b@$mD(_YfOv6xWq1Fd9+)^Z_*jGsz! z{HZ^O`2u;rz=R_t-jqpJFb}x${1^C76nLo{ELrf;O1v*|?cy7WK)^lfKS;7yfK63l zr#Vl1l$O%e*#Z9Y8-vU32%pSS-NDP&Qw2suBXBp#h#DFIkot^>$ur>E54bt4WPK_j zc7kjEpg=|C0p8yvIecy%X-fm~+n=bLeZeu!m_JE{C~TeQAIGn-T?_b;#6PY8Om~Ri z*~mW9F*EE&#BT4c2=I|8AUBU?!zguh!RJ2uNN(tr%)_dU-SlZ+-(EQK39Eq#V>li; zD+fj(b1LNi79%{_iyt<9ItJhF8k<1ykG%xy z;`I^Cs9k7oD&#G41x2n0_{_F_i|Z0Y&AF?!-=7_9SsVUdy>h8UT}oxc*IVV_t04FW z40Vt$tPx%q3q>Yat7vBbbgEcE7(e=t6d56)&W()iYAZ4J+WsPNC}M@GU1PK7EC7|~ zgu0&xejaOf44&>;&x%>kLf_NInwmb`x152I(=UDDr(LfN`hX6=5%AQd0`g>{9*4yq z>>zf?Rim=A)sj~z>vz2b+I95}$n@r#yHiUDhwdm(y(?)Lf&b zBZUUIE|UY`$-u*;7jjwO)Mn|_+25sFw8MBy$p7Mg&mStb2gzuYgCik`J1D#-zT*Z6 zxK0P{l*@p2GHsh4neum7PumaB<`a}IaKEMDhM*+!z(9=+8Hcw(OzluTg>*2 zq$+=W?(hzDM9y!BkjQxqx-ba+ywV1{IlIj52{AxG?Rt8mo9>FhP^!#>8z%sMH4nKX zc#>$)<8~_wzFHZ;JAK;D=h*56TxdI8l08>LeDVJX;QL1J#=+&VepM+m3Ubl9PbPD@MeToc|gDJkyJ@;rmN{ z0!Z8ahs!$BG@OO&DuhX2r{8Tu-(7Q zvVC7adr>{0&*^rvee^G6w8*Ni@cJX3<~ADGsS$9uAasvS%_swaq(Dt&)GvCPNvLJS_aZXLRc|A^GbmsqR2 zjLr&|8G@cG$;4Jv-le5bjs4YGeRZ1UDI~}1h_EBPex_#S0yB+XjC>q!kMtqS4!9ga zZQOW)_j=?WfjLgpotNyxE#MFH3!85!jq;KW5P5ztw)8;S4}}|fP&B$s4**Ad$fE2& zB@mc!<-b=G>cgnJXb|cg7r41_LQSfmmb1avPRQdt=-oI81o6c3J>Yus3^}U;xd7mI z`}2?+T1M2P9Fh^Zc+Cht%WjMHUh}`)03p@@6$p|<4!$-4T#f*ja>z|1CymZNxg5yF zZg!=q4D`rI4)q|1D&0ej73n{C7$4kJ!udWaIKgE8_t9GmCryB&0@#{$tA%f~qY#`B z)KMjHK=o7N;d((Vdb&sqd~?{YFPQ%bLTD!2%_7>hGxlanX+Lo0p$4uv0$?>W~V!dxWC)VPI6x8R}pe^REyDb(i}wqfQQaaKO=r-qg3NqW^gA2f0`z zK=u}FGRGX94irJ!sBhg*($x{8rJ5a&XR=5nzf7Z4+CkzO5;hOHkC(l_2i-j_UaF{~ zblEBA198U6<3QaANmn{hFBqqqBX}0h!s(#!QJld2YF10oJPB>|9L0{;ZnpeNWMI}1Pj>NQ}J4g_4UnvTMq$R*?)PJt|< zwQ)hn9Y_vY2}NzgQ2VQ#$c*LoRBl=CG{3aFw`DMj$csHzInMB_#pCFR%cb zEARmgf7nuT)`i9UfCCy(K{I$0(GIhS@js9;B@E-2*?J2>O$nP`pZ||UJx&RCeA2l} zrRee2L$IcLD9APqF?s=VX?Z-R0iC1+w=tEseR6*N^T;*+qE-?J ztdtSi2f2?r+gk0B4R}HeMUOm6=AZIWb1?vzu)v;-ci5_lVh2CG7&qOdm`|^B(W8oT zk8w2@`JRiLTDO9CXP5(oSh7fOgpPQHabvLDr)L=Pk$D>Sm_& z>O9yjvhpDabUnXE1#ecJnCMt(aGbiN*3pIaKvA{v08EN8;3&Htc?0r)tn!8{rTkgH zdJuy=KAF?=8%EUB5ef;C1&~Om4x}dP@}?2>jFw8i))WN+BRs##K8OJq5By+?Z2xP1 zFim<2Bl6PeiA3IUR@_|o@T2aR-M|Q{?1~%z$tM+X1Uv+jKv1{~L^4kJ6VGBm?J)NP zv1~c9ebnO~YH~UJVc!e2eZvSJKROH8yQxHGGa_f7+!hi568&-b>dB)ilJoW}hdh`V z6XQYRAqcyDMW?jgF{*&GgLE+Fa?QiZY}PI3f@XcC?86PHzhci;^WilLu_cFsRRTMx z?%EEY$V#omv-5-{M&zcGKRozM8c;fpHAS^PsUpaOsA+HfbRqOnb3&?!1O-oC%XoO= z!{QMjhqB4`-{W^-7{813+ib{&&pOG-aNOoVAMc+Q6s&o6B`Z4lBtB>UckNFm3Rlh> z@fwKX6*AntAwf#;eXoqz$_A}o9d*|Nx4nC37x2>TCaB*4W55vV0TB;DRRY)Sa(=hz z!eD8=HPI(UW_k&~1kZ4TrCDSj>QMl4C>y?}9sS1~*om)JQ0_+fNL|iAAuu~{8>b4o zxylwLw-~8Qt@*R95dAaYp|Wym67->V*yi+hlf?-P>)MM8;!pc)iuGqgNe@Rn?{PaB zbu<7$GJ@}dArBh>GTQ6xMmj|9S$3Qs%nRgRNhLUX)xPVr#^!kYppU!;ZsZ=r_Z81f z&rinAaiEB?iMEGHE_oZ|`2-5@-BLJkYghTCy(fq+x5)0&QP(#x@J6lJeQV{~hcd|b z4w!VHoDai0ryOB`>PkTJfYG8V0R9M7nA�*_&n#H;q&}r*OQsCidwdL&EPKQG|`i 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 I%mm~C03#6L9smFU delta 132695 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 SW?(BGM>2`BO$h{gl>q?T;f@6W From 2d9f66ce3174b0254ae613423ee4ba5e1177be27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 10:32:55 +0800 Subject: [PATCH 058/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E7=89=88=E6=9C=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/v1/CiController.java | 19 ++++++ .../DevopsCiPublishAppVersionStepHandler.java | 20 ++++++ .../AppServiceImageVersionService.java | 5 ++ .../AppServiceMavenVersionService.java | 6 ++ .../app/service/AppServiceVersionService.java | 21 ++++++ .../app/service/CiPipelineImageService.java | 4 ++ .../app/service/CiPipelineMavenService.java | 2 + .../AppServiceImageVersionServiceImpl.java | 19 ++++++ .../AppServiceMavenVersionServiceImpl.java | 22 ++++++ .../impl/AppServiceVersionServiceImpl.java | 68 +++++++++++++++++-- .../impl/CiPipelineImageServiceImpl.java | 10 +++ .../impl/CiPipelineMavenServiceImpl.java | 8 +++ .../infra/constant/ResourceCheckConstant.java | 1 + ...on.java => AppServiceMavenVersionDTO.java} | 0 .../infra/enums/DevopsCiStepTypeEnum.java | 7 +- .../infra/mapper/CiPipelineMavenMapper.java | 5 ++ .../mapper/CiPipelineMavenMapper.xml | 14 ++++ src/main/resources/shell/ci.sh | 30 ++++++++ 18 files changed, 256 insertions(+), 5 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java rename src/main/java/io/choerodon/devops/infra/dto/{AppServiceMavenVersion.java => AppServiceMavenVersionDTO.java} (100%) create mode 100644 src/main/resources/mapper/CiPipelineMavenMapper.xml diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java index f603d51495..084790287b 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java @@ -116,6 +116,25 @@ public ResponseEntity create( return ResponseEntity.ok().build(); } + @Permission(permissionPublic = true) + @ApiOperation(value = "发布应用服务版本") + @PostMapping("/app_version") + public ResponseEntity publishAppVersion( + @ApiParam(value = "token", required = true) + @RequestParam String token, + @ApiParam(value = "版本", required = true) + @RequestParam String version, + @ApiParam(value = "commit", required = true) + @RequestParam String commit, + @ApiParam(value = "GitLab流水线id") + @RequestParam(value = "gitlabPipelineId", required = false) Long gitlabPipelineId, + @ApiParam(value = "job_name") + @RequestParam(value = "jobName", required = false) String jobName, + @RequestParam String ref) { + appServiceVersionService.publishAppVersion(token, version, commit, ref, gitlabPipelineId, jobName); + return ResponseEntity.ok().build(); + } + @Permission(permissionPublic = true) @ApiOperation(value = "查询CI流水线默认的镜像地址") @GetMapping("/default_image") diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java new file mode 100644 index 0000000000..bbd28a5e88 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/eventhandler/pipeline/step/DevopsCiPublishAppVersionStepHandler.java @@ -0,0 +1,20 @@ +package io.choerodon.devops.app.eventhandler.pipeline.step; + +import org.springframework.stereotype.Component; + +import io.choerodon.devops.infra.enums.DevopsCiStepTypeEnum; + +/** + * 〈功能简述〉 + * 〈〉 + * + * @author wanghao + * @since 2022/7/13 17:21 + */ +@Component +public class DevopsCiPublishAppVersionStepHandler extends AbstractDevopsCiStepHandler { + @Override + public DevopsCiStepTypeEnum getType() { + return DevopsCiStepTypeEnum.PUBLISH_APP_VERSION; + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java index b2d78d6036..9aabd1e0d6 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; + /** * 应用版本表(AppServiceImageVersion)应用服务 * @@ -8,5 +10,8 @@ */ public interface AppServiceImageVersionService { + void create(AppServiceImageVersionDTO appServiceImageVersionDTO); + + AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java index 0ac28aae0e..0c0bf46206 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service; +import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; + /** * 应用版本表(AppServiceMavenVersion)应用服务 * @@ -8,5 +10,9 @@ */ public interface AppServiceMavenVersionService { + AppServiceMavenVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); + + void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO); + } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index d04c4ddc2c..9d97fd6f7a 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -226,4 +226,25 @@ void create(String image, AppServiceVersionDTO queryByCommitShaAndRef(Long appServiceId, String commitSha, String ref); AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long projectId, Long appServiceVersionId); + + /** + * 发布应用服务版本 + * @param token + * @param version + * @param commit + * @param ref + * @param gitlabPipelineId + * @param jobName + */ + void publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName); + + /** + * 保存应用服务版本 + * @param appServiceId 应用服务id + * @param version 版本名 + * @param commit commit sha + * @param ref 分支 + * @return + */ + AppServiceVersionDTO create(Long appServiceId, String version, String commit, String ref); } diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java index dd86ff4073..9372ef6149 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service; +import org.apache.ibatis.annotations.Param; + import io.choerodon.devops.api.vo.CiPipelineImageVO; import io.choerodon.devops.api.vo.ImageRepoInfoVO; import io.choerodon.devops.infra.dto.CiPipelineImageDTO; @@ -18,4 +20,6 @@ public interface CiPipelineImageService { ImageRepoInfoVO queryRewriteRepoInfoScript(Long projectId, String token, String repoType, Long repoId); ImageRepoInfoVO queryImageRepoInfo(String token, Long gitlabPipelineId); + + CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId); } diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java index 5b53000540..08e1ca0159 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java @@ -38,4 +38,6 @@ void createOrUpdate(Long nexusRepoId, String password); CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlabPipelineId, String jobName); + + CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java index 85be74fa23..f317065faa 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -5,8 +5,12 @@ import io.choerodon.devops.app.service.AppServiceImageVersionService; import org.springframework.stereotype.Service; +import org.springframework.util.Assert; +import io.choerodon.devops.infra.constant.ResourceCheckConstant; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; import io.choerodon.devops.infra.mapper.AppServiceImageVersionMapper; +import io.choerodon.devops.infra.util.MapperUtil; /** * 应用版本表(AppServiceImageVersion)应用服务 @@ -18,5 +22,20 @@ public class AppServiceImageVersionServiceImpl implements AppServiceImageVersionService { @Autowired private AppServiceImageVersionMapper appServiceImageVersionMapper; + + @Override + public void create(AppServiceImageVersionDTO appServiceImageVersionDTO) { + MapperUtil.resultJudgedInsertSelective(appServiceImageVersionMapper, appServiceImageVersionDTO, "error.save.image.version"); + } + + @Override + public AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceImageVersionDTO appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId); + + return appServiceImageVersionMapper.selectOne(appServiceImageVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java index 99b7ef5f97..8c360cac04 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -5,8 +5,14 @@ import io.choerodon.devops.app.service.AppServiceMavenVersionService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import io.choerodon.devops.infra.constant.ResourceCheckConstant; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; +import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; import io.choerodon.devops.infra.mapper.AppServiceMavenVersionMapper; +import io.choerodon.devops.infra.util.MapperUtil; /** * 应用版本表(AppServiceMavenVersion)应用服务 @@ -18,5 +24,21 @@ public class AppServiceMavenVersionServiceImpl implements AppServiceMavenVersionService { @Autowired private AppServiceMavenVersionMapper appServiceMavenVersionMapper; + + @Override + public AppServiceMavenVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceMavenVersionDTO appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId); + + return appServiceMavenVersionMapper.selectOne(appServiceMavenVersionDTO); + } + + @Override + @Transactional + public void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO) { + MapperUtil.resultJudgedInsertSelective(appServiceMavenVersionMapper, appServiceMavenVersionDTO, "error.save.maven.version"); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index c91de02fc5..144e2f4865 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -106,10 +106,6 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService { @Autowired private DevopsCiPipelineChartService devopsCiPipelineChartService; @Autowired - private DevopsCiPipelineService devopsCiPipelineService; - @Autowired - private RdupmClient rdupmClient; - @Autowired private DevopsConfigMapper devopsConfigMapper; @Autowired private DevopsRegistrySecretMapper devopsRegistrySecretMapper; @@ -117,6 +113,17 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService { private AppServiceShareRuleMapper appServiceShareRuleMapper; @Autowired private AppServiceInstanceMapper appServiceInstanceMapper; + @Autowired + private CiPipelineImageService ciPipelineImageService; + @Autowired + private AppServiceHelmVersionService appServiceHelmVersionService; + @Autowired + private AppServiceImageVersionService appServiceImageVersionService; + @Autowired + private AppServiceMavenVersionService appServiceMavenVersionService; + @Autowired + private CiPipelineMavenService ciPipelineMavenService; + @Autowired private TransactionalProducer producer; @@ -892,6 +899,59 @@ public AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long project return appServiceVersionWithHelmConfigVO; } + @Override + @Transactional + public void publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName) { + try { + // 1. 创建应用服务版本 + AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); + Long appServiceId = appServiceDTO.getId(); + AppServiceVersionDTO appServiceVersionDTO = baseQueryByAppServiceIdAndVersion(appServiceId, version); + // 不存在才创建 + if (appServiceVersionDTO == null) { + appServiceVersionDTO = create(appServiceId, version, commit, ref); + } + // 2. 创建helm版本 + + // 3. 创建image版本 + // 3.1 查询流水线中最新的镜像版本 + AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceImageVersionDTO == null) { + CiPipelineImageDTO ciPipelineImageDTO = ciPipelineImageService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); + if (ciPipelineImageDTO != null) { + appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionService.create(appServiceImageVersionDTO); + } + } + + // 4. 创建jar版本 + AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceMavenVersionDTO == null) { + CiPipelineMavenDTO ciPipelineMavenDTO = ciPipelineMavenService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); + if (ciPipelineMavenDTO != null) { + appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionService.create(appServiceMavenVersionDTO); + } + } + } catch (Exception e) { + if (e instanceof CommonException) { + throw new DevopsCiInvalidException(((CommonException) e).getCode(), e, ((CommonException) e).getParameters()); + } + throw new DevopsCiInvalidException(e); + } + } + + @Override + @Transactional + public AppServiceVersionDTO create(Long appServiceId, String version, String commit, String ref) { + AppServiceVersionDTO appServiceVersionDTO = new AppServiceVersionDTO(); + appServiceVersionDTO.setAppServiceId(appServiceId); + appServiceVersionDTO.setVersion(version); + appServiceVersionDTO.setCommit(commit); + appServiceVersionDTO.setRef(ref); + return MapperUtil.resultJudgedInsertSelective(appServiceVersionMapper, appServiceVersionDTO, "error.save.version"); + } + private Set checkVersion(Long appServiceId, Set versionIds) { Set deleteErrorVersion = new HashSet<>(); AppServiceInstanceDTO appServiceInstanceDTO = new AppServiceInstanceDTO(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java index 3c2e234f1a..11abf32c76 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java @@ -4,6 +4,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.CiPipelineImageVO; @@ -11,6 +12,7 @@ import io.choerodon.devops.app.service.AppServiceService; import io.choerodon.devops.app.service.CiPipelineImageService; import io.choerodon.devops.infra.constant.MiscConstants; +import io.choerodon.devops.infra.constant.ResourceCheckConstant; import io.choerodon.devops.infra.dto.AppServiceDTO; import io.choerodon.devops.infra.dto.CiPipelineImageDTO; import io.choerodon.devops.infra.dto.harbor.HarborRepoDTO; @@ -141,6 +143,14 @@ public ImageRepoInfoVO queryImageRepoInfo(String token, Long gitlabPipelineId) { return new ImageRepoInfoVO(String.valueOf(repoId), repoType, trimPrefix(dockerRegistry), groupName); } + @Override + public CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL); + + return ciPipelineImageMapper.queryPipelineLatestImage(appServiceId, gitlabPipelineId); + } + private String trimPrefix(String dockerRegistry) { String dockerUrl = dockerRegistry.replace("http://", "").replace("https://", ""); return dockerUrl.endsWith("/") ? dockerUrl.substring(0, dockerUrl.length() - 1) : dockerUrl; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java index 99e115b1e2..9c29da405a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java @@ -280,4 +280,12 @@ public CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlab ciPipelineMavenDTO.setJobName(jobName); return ciPipelineMavenMapper.selectOne(ciPipelineMavenDTO); } + + @Override + public CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL); + + return ciPipelineMavenMapper.queryPipelineLatestMaven(appServiceId, gitlabPipelineId); + } } diff --git a/src/main/java/io/choerodon/devops/infra/constant/ResourceCheckConstant.java b/src/main/java/io/choerodon/devops/infra/constant/ResourceCheckConstant.java index 8a1186a42f..88eabc3dae 100644 --- a/src/main/java/io/choerodon/devops/infra/constant/ResourceCheckConstant.java +++ b/src/main/java/io/choerodon/devops/infra/constant/ResourceCheckConstant.java @@ -19,6 +19,7 @@ private ResourceCheckConstant() { // app service version public static final String ERROR_SERVICE_VERSION_VALUE_ID_IS_NULL = "error.service.version.value.id.is.null"; + public static final String ERROR_SERVICE_VERSION_ID_IS_NULL = "error.service.version.id.is.null"; public static final String ERROR_PARAM_IS_INVALID = "error.param.is.invalid"; diff --git a/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java b/src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersionDTO.java similarity index 100% rename from src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersion.java rename to src/main/java/io/choerodon/devops/infra/dto/AppServiceMavenVersionDTO.java diff --git a/src/main/java/io/choerodon/devops/infra/enums/DevopsCiStepTypeEnum.java b/src/main/java/io/choerodon/devops/infra/enums/DevopsCiStepTypeEnum.java index 9818cb8fdc..bfcbd124a6 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/DevopsCiStepTypeEnum.java +++ b/src/main/java/io/choerodon/devops/infra/enums/DevopsCiStepTypeEnum.java @@ -78,7 +78,12 @@ public enum DevopsCiStepTypeEnum { /** * 自定义任务 */ - CUSTOM("custom"); + CUSTOM("custom"), + + /** + * 发布应用服务版本 + */ + PUBLISH_APP_VERSION("publish_app_version"); private String value; diff --git a/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineMavenMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineMavenMapper.java index 4e56cca282..2ad64bd7f8 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineMavenMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineMavenMapper.java @@ -1,5 +1,7 @@ package io.choerodon.devops.infra.mapper; +import org.apache.ibatis.annotations.Param; + import io.choerodon.devops.infra.dto.CiPipelineMavenDTO; import io.choerodon.mybatis.common.BaseMapper; @@ -9,4 +11,7 @@ * @description */ public interface CiPipelineMavenMapper extends BaseMapper { + + CiPipelineMavenDTO queryPipelineLatestMaven(@Param("appServiceId") Long appServiceId, + @Param("gitlabPipelineId") Long gitlabPipelineId); } diff --git a/src/main/resources/mapper/CiPipelineMavenMapper.xml b/src/main/resources/mapper/CiPipelineMavenMapper.xml new file mode 100644 index 0000000000..e35a0a0de2 --- /dev/null +++ b/src/main/resources/mapper/CiPipelineMavenMapper.xml @@ -0,0 +1,14 @@ + + + + + + + \ No newline at end of file diff --git a/src/main/resources/shell/ci.sh b/src/main/resources/shell/ci.sh index f8745c2ad5..ef10d6c443 100644 --- a/src/main/resources/shell/ci.sh +++ b/src/main/resources/shell/ci.sh @@ -235,6 +235,36 @@ function chart_build() { fi fi +} + +#################################### 发布应用服务版本 #################################### +function publish_app_version() { + # 8位sha值 + export C7N_COMMIT_SHA=$(git log -1 --pretty=format:"%H" | awk '{print substr($1,1,8)}') + + # 通过Choerodon API上传chart包到devops-service + result_upload_to_devops=$(curl -X POST \ + -H 'Expect:' \ + -F "token=${Token}" \ + -F "version=${CI_COMMIT_TAG}" \ + -F "commit=${CI_COMMIT_SHA}" \ + -F "ref=${CI_COMMIT_REF_NAME}" \ + -F "gitlabPipelineId=${CI_PIPELINE_ID}" \ + -F "jobName=${CI_JOB_NAME}" \ + "${CHOERODON_URL}/devops/app_version" \ + -o "${CI_COMMIT_SHA}-ci.response" \ + -w %{http_code}) + # 判断本次上传到devops是否出错 + if [ -e "${CI_COMMIT_SHA}-ci.response" ]; then + response_upload_to_devops=$(cat "${CI_COMMIT_SHA}-ci.response") + rm "${CI_COMMIT_SHA}-ci.response" + if [ "$result_upload_to_devops" != "200" ]; then + echo $response_upload_to_devops + echo "upload to devops error" + exit 1 + fi + fi + } #################################### 下载settings文件 #################################### # $1 fileName 下载settings文件后保存为的文件名称 From 45d51ace0d4cb2ecdf71cec3831e1de25a076778 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 10:38:25 +0800 Subject: [PATCH 059/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=A7=8D=E5=AD=90=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops_pipeline_template.xlsx | Bin 154110 -> 154126 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx b/src/main/resources/script/db/init-data/devops_service/devops_service/devops_pipeline_template.xlsx index 56b979068f48739004f39d2263d2a76be795ebe9..6e3e7a5b1577e330b4309ffbfdb5ed602653a68e 100644 GIT binary patch delta 134807 zcmXV1by!r-*GEFSK_p}aBoz=T30Xu0X+fl63F+?UN~eSfNVjyi#1aD1CEeZ4vI}gy zeBbBy$9RZx1>r-b}aJ}8fBfel{vf85aH1+sow*x>`!lfd@+6~+Yje~MOl_znb~0zyF^>P z9Qi#a*#(HEkG{MwKBFvjCtoj^H#e2Ev@?C7397RnX}=h6Z%b48m`vgG=o3{UI)+5I zsh_~RRPae=RkWSxpkXZ#sX&!@`SaT1naT2l{C1oT=6K=AII!9^X(o`lKjG|pm~*?lwryR4dbj#MjPk@ff%(+&ft{KMbK1&bORKBoC!XP5 z2da9xVqA~OFE6f+b6)_BmP0P{VDC}3v*`e@3#1LH(Vubn^$pA!^WLfcF{eMp88_5m z7mj~?XVl_{a_<<>HV?pSnLI@`ay3G#k{SO-3p`VWZK?_EF$(BBYJDGIn6<$*f^F;M`TrC}z5_1XHcmfj|G!5}|0LYsy7C-xb3 zc-&o0j22U@@{|#gm{p~6^uUi#zKRrhztRK+nunN-=a9X`E?Bc!PD&Jqf8%<$m>cN!ker+LAvrl2 zb9rZq>DO#WzqKD^8Ig(4#Mub=LbsV+&Th97)x`OM@do5{?yzT-*4eU34dyJy3njCf z-Yfh2=h>esl~>&#Ge5f5!2Vd1hc~xo7)R1m3go;Gxi|EHm({d0=0he|UI`a(10>jb z`IRhtu~=oq*K#pdjX5exf{PwjnbNKQj1>g%hfeP>O={46g8V!CS6_{au&( z4l$( zLns2TYGFs#ty+AgK7T^fcELimn_(!sV7DM}bWKOb=Uv!_1#n<%4=CG@;x7eSKOA}U>@Z{%sgr(Do(qLC6@U?z9?Gu|i}PbT~W zj_EE_s5^uuZ7k{E>Hf*c+tmz}4^c0SJ+sMKu#(9IT;~aJw!|lm@$7M~Ze#$4J!euo zOP(jAA~{tJQ(B7P6hYWX>h)d_=K%W#_Sw#}vQ-~P2ZZwK@i~{(hC_4Tg_wQ2%Xe$W zeNNrNfo*RZk)oRK0UTpWLot;CxrXmlU%gaS5au)f&bdjyWR!u9GqzTt!Q(ROi?4if^=bZ-pDuwPg$5Fc9C&x0az{=P)W35j1wQYwsY|4fsZu|)= zNgK~bB11;algNswVGWJch4sCWnN^;DTn6VNetJ+)-1(7s(hv2|)v>)MWKQnd5c%>k zt7Ka3it)2Fh{r;C-$@(-v6X-*>SwH``s7&aEyOc>ar26%6YL8S|J-^`{J_8u!99@I z*9w~AmtT)?EBO&YX#H3E$gRBcpGWzR+b6_muQ@?t)2YxzRw)7Cg#2sFa!GX3`l(M+ObLh)5&_g6n{dI4r|*;KH=JbC29_xB-x}J>A>M6? zMY(Euj5+BNw6+5z=sn;1mM^XW{t^N*hsBiZvjvavL5;T*cA37_Lxq!n9e}0@*Gm8btht*r{}B z_9)BAjp`ll8&bwtOTmJ;_clECsOE10gCh84lJDs@0{5g#L2@jUuc)nibP+xAX^NKi zh6nW4{H~or9}aiyE%-%z@HJ3&M9ymW66;@BVTGVy{D8Hdu9eMke8*LeaIOra$6Mjw zuF{IEq>Q7nAcEfZ|O8M*~1=)=}&!(LcJOAWb7*bu9`ww zQHPb|l}m-^`f<%x@wSfiIAel8+eA8wm9!8MnVY63@vjulq8l+*!PF4dv$J_Yk!hz@ z?pON{dk%0_*x-C_jZ2>v(%+&f@lM`1ScwcN#&w3*!~u3z39!h08-OkIQG?x~>wsG< zHfc*)?%!zqjaSWNqZmFZb9F+xz`E1OPcB`hBt&EvRYP2r-p4iTj|u5Q>(yaNZb6!n z*$ia^z08nCV>;7{=$_Y}tfKZCJv&v}p)ub%GYWudZP<|9)>WYD%8y9NBn8pG5esA` zBn*BfM>}c>UD=Pf)fAVgjMSpnjTI#B>*!Aww|KiS16{B2Nu{bCh-m3)qNWE}_^=e0 zuxDI#T&fGQEo6^3BL%q5Ox#_I|E_(Eap7VQuqpo`>#fSqtTQ>W`(H;c$IJCaBcn*D zfZh+41&T{SwBPHw@x2Wc4u|gBcZSt+`5B+&JbG;aH&pe80`9C=zd7_94(+1Vo!H+x~3w`M4h|W#iQS8(3eo%0bQoaBJ+c6 zO3EV<3;lHEDWbg&Dti9Yn4>7kk@+_+R zPMh#Xayx5ma6VM}=iw#vfI%`rW$7PbxN!9|eT{pFt6j8{dgH(*T`$#q6_=I>!)>e8 z4Nrqqxtxi0)Oyc_I0zFd8w6J=N0gGK{$vF|#MNK4y#k8rok@}< zKf4ccDfA8Ze-ZSl=ueKSy1&&xr{aAK2v19)jqok*cxFa2se&aY!1gNtVcNZ8+Z%%T zBD+tL9U)Xf$E_S?OvXS_>H!gOo%^4lhT6R#tOnFiRbkjkbn=g2MkR|XSn~Z314(XY z;<;q~^3PQv67CV@Pu0E|FCTFW%q3pyVd>Uzj9B}iS6$|FL4bvg_I?jvF6~tbWkoue z{UH!VFmWF+?Dfog(d|E(8R^v*@haBTRIJWvU&a;{y)Ms`Oe}dP0Wh$B-gs0WPo>h2 zZ%HdWm0-19sbNo7A0#83cRxXDx^nlFI5gO=^I_+2Vw2r&V~UT1wBn29>Kz^li|G7- zxe&5Dyj`3ueB8oiDf^$E+`Zl5X`;^ncT^jqv|hZJ(pDQDMBXE#JDWf==87sql zNBPfj+LB_R7klpN-M$lurlvE8-%LgouezbSzxkpxP*_#gl(j#|yW`&Zh0+77lLK{7 z*&bqG->;3n@P2Ql?23g&iiL&cWykO8=51&0%I9ToH*I+6$fQk+iT#6lxj=wRJK6y$ zIX15Hd{&_GSuvjHLDbA)O}nXQ|55CxA_DICu<^X7pSf`r*%k9Cq$uc!g1GFz101b2 z;B$Vb(RM+&Fnn}a%A(z)z^h$w7bdZr<+=-urb?8h#Q7K={uX@fv4qy+00dHMG6EKt z_pjhHufWYVRsUYijN8II^$eR%%gr5L_Y7~tssMZUz2!Y|?dvD~bzk2D&B^odwqT|C zqw4n4E4`lRlfbEPw$_uJ*^9NYE+Y@Gmri;T@17mF*M%BXem`yyM-AWFV5%+QZMnd- z2l?HK-mgC$wR;Jt$DJvKG4ET1m!5pwPJ@kPGyh&W#Q2`a2Y8MAKFcJgbD?u>v7I?g z%LnU4N~yM#k3&-UsX12LEzD~J1M*&lei@Xt$pdrUhncL==kD;YAKNW%9^L^eolRD2 zjM76om;BF8UU})RwjP$XIzXIUnA?Du)$%H`)rQKZ-xL5IZtJnfa-i_sqS4TtM=X*8 zRPRIf#{LS4*qYxh0)G47Zij~$Lxms9Jk?bI}pD<}20bsL|ow1(1&E-p6=`KF29Q`JjeajJ5^u<35z)0lDlP3@HArZceX;+`JGP>QC=SJ~Q4| z(vT5-ui)xFH~fg5gd~#*%zsdu@}MK6yRlbR?cm9`?q0l5N4*KYh0pBg!xKU*MD)ob z$YEDm`PY>zU$=y`56Ry5hgS3$yoMZ_;?77L+gEN@P}`eK_W_qz*+P$ikb%$QW^cdC zeRoV_Q~UmijE>2__o|ZyS5*^-ilZhXP!#iufu($<_{Xk(U2652oxC>juk>RpuN09> zVRIRZv&IhL0HiVUPGYq$cQ&>??WJ0;!21#_6;4^AlWJl0APZp`QM&Bi3@uSmHYc#0 zA?YMTBJxE!YgVDQy(Mw?tOYnS9!1Zi@UUA6N1YpMlEt3KW{Ig8Hq zdL_r54f1sVHGS9kv4_XU==Lx#`=xS`=PDXOP1`v7BRjtg*@*~wI6sd)9a*tUZgQJ! zW|+TG*yP}9EM%?FwOY{sl4L?T$&mDG*(%Q$+uClsNJcwjCp_P<69Bk}E}rM$8WVBc zn3mEH9j-0#mD5eH7wME~6T$SP&<(X&o$R%geW)H|SLu@$4u>6gXNe zn9jXd%2$Vc-0FN1@ziA$SEH*i`kMjh@Y^f2k{G=cRO^$P3p#=ZsTY!~!JA^c?brTs zke{nEB*u;7Vo0)b43O=hn2k;vGaYGU{PtsWAx^m2{qa_O?*cbrp?(_3oAT*WNH;VmQSTMMF8 z+dk~KkMNDfOc$RVNkhJEH`Q<1R?|pB^&!XNt;_}=$i#i`5Wu1<`C08GOtJ|d^*3-Oy&uMuq*x!Mvn^4Nr^QdNc$dykNt;|Z3;$-2jEppcSa zUX>uUu%PZ$GKZbzi^#r7owS0+hwIqTw0pOso{N(_qQ z+2x7_bi6j+2~)66KLKrzV55~Z{kv&QV$5W%C}MLz*lYqn5ZLnu#xZ1CncuMAzj}-p z6!MaYW~!^0l<84=M5Y|I`QHykYDIEZ^<1pT&U*VjmK^F5E-~~!5(^*uqQ&;0Pqj^+ z^KMlc!Ee3lpSzK~vlJG|H{}!z2x(PE%ZoSU17D-4)FbQZKb1-<_mY0mI$X=~?Rj_| zB8DP*&SpAc8IAG`UFyDj(S=3EK=Z7%S+D~mSH=VS9r@O% z%AmmNkbccjvbRb?2?w`3CXS2ra|L12)~`<6Dism z%Z3vZ)IuI|bh@waOGn@hSL~{oo5W<&{RpMxEFpQqk)ZpQhi2a*H0UJ?qV>e&P1bwc zw`s`WK7exGUEvj-BsYCwVFvyrtTE!55#n5?LHWa@x2aDh6s8U&mD^a6nXf#$%hhIh z7+T#Ly3Z+$LmLu(Y4~@>$X>8itcApu(UQ&tg_r--Nxptn$5rl+<-??y@lW2%D6RJ6dGu%UwrM`l^)uL zHGgIQRj}Ppm3a5vhC7zI<&Xr3;cGa zs9ygWul^@hQ`7A;>eiR{s-xm%^3E@9Q^wFFc9OeCw%Fd5<{>Y?Cx6T- zmEQ+U6Mf6R^63895ffm=`}yqc2qgYl@q}w~h(Gs2bCBi}b{P+8V6uDai0rF77lt;Cf)-4x(e%xe*gC$UUi|6D+Uq_gO7#m2o)$ zcpTAt(8rx)PAT&)Ny(j*>m{8lQLS!*;>+K@hud|n`4G&()n*(nwLqq`Vr_b&qHdHh zr8cKnBI~@B-1e*6Q|BDs6`tLqo=n$o{&~M2JfWcvj6EqS!P1SKrX39LEGWQ-gPYV& z-+(a5-ndnQxI7i)5Y)L?jszN+FKu`Mgpf5Q9???CZAT|=(iOquApXb|g%71n;(9v$ znA^quO!A)}#N4FqN$cfebcEULu?<{x{Aa4^0iWHgIFFuaSi_jahmt@nf!m-J z?yW3|oSn!c%87@+Cm5AQyqklD!dk~I<|PmR*5G)?2+7LL50?~#CJu%5mk8Ot^j-F5 zK>T{j$u@2z?}ALx?uXMyGKr5TSFzB8o5j$VJrm2T-yBvMfLq%9qb9$c?iK-theBl`_VI~SPm6P(U@k`yJ1K$lbDrFP9xY3M`nECA zV|nD)lKeJ1Tkg;P2&BXB;%CBN7F-k`0~K5CnufRlo9C@qEqlcm(%Khj6D6MkO?zgc zgRc3%Zy#dW3=7PNkIKc0?iox}3)u8@=djYmu0snV`+wr0152*Gy~wu|v{5^)*s&Ua@JVQ|%{-{|q`ZsxImApBn= z0{WBPHpxh}&9qVG$T z$MQzIM?&8wLyNfQZ6BjU!siF%Z<*PD!-ST%_1*+kfpYY(!sBoy%*y1QJ^^n;3tl=4 zPOQOw7?4IlL7?NSrzHaA`h}+ARBepXg(b5pLP&pX9@2|EM}XmD+}U#MG~0*VqCkJK z10N-mDgz9=ERX1)u#=o(=5HS-n-9@3NEvRTsYL*X^X z-(^ct@2ORUn}C}4&qEZ0U9NN%J=!b5*!Iy}8QA@7 zy^|Ox_uQX%$Ds*UtsvVL%te1y9Lbq;1)Y-8=b5((L0waG!Fq?hnIl={8gaE>K5=j< zkIP*2Q8X3>uRdy{bl|({F_@^s6A|vsXTZ6 zS-5G-!T)4iDOX$NTKqUr!p*Zi+I~)YYR?6-oki}hS+-NOLq>*!-z z^s=5DVv}^KIBuA|Hb;c!rZeIwzWt#q3iDA32bbo4TT6fyuDT(en_B%*_vitZEeHqe zzfv!|L^TK;a7wKiTo8B!fw1WAl!1^9Qg>@r?q_jiz}1j82lT7&vyP~Mv)S(7#jRCt z)@M@?!yfX7;IWiecSF*uQ{PKS$N4h&b_b50n1#YKF_+ua+R(#IwSdUPvR&J~AyKI0 zUp3e_P&ZC@=C!kEF9fxgkGX?O-ReUxmceLz5D;((@xM9*!zUb3(d1B=(kdz)xJrVC zk&VTn_nJ6*KOdL}z*d_p$OoI1Hu?P<_+L_hkYE5YyPl01gLKwlP$N~yY!K!G)OIru zz|Wz#hoFF6&lThWKjvO6+OY$D=@@XgD}@{d`NMb7)9IKiM=&}ZILwFKjX477>(j0( zDYQO@a^-RYd#MJE`o^?Ut_#o7z zC>ns=F`hD0_^ZNqGcI;RFpqyB;h5fZFfz$g6u#~maI*&R zs--NzOQ7Q@lOG_50AG0hPMgp@_bLnNz>VjM%J}YF6l7-rj2MF4Dniz7qt}4c4Maidgio!v2hi(3`O4q!U+O);h2l? z)mzjlst*bXFFIXuiP}I&YX4BWV19QBb6kt{HaLo+G z9k6KWP|p7`b`01~zqjHkb-MudgAar2chEmz92zunn`5Y3f9LMq z%zfz9$#=)uX}b1Fy439=0M!JXZbI&gKqzEYN9!4#x0Z|rS0I`)8^+((y0z;yGuAdq z=RG3|y;gbs$3z2sO9#2z%SMm3+5!pvg<3D(YJkt0A$uG^2ima{26!HioiAm34~(^@ z1>7n@_KDvtIbv?%0mqDv=(AIQq%9PF(hd3I1+6bcBea3*)>XvyJxGhEd>An~gkaUJ zw>+Z#AvLJ&Hrp{^J>}^`^t~7FMw+1G8n>^=Z|7srA?P~7$6ZbS{}jK`syb!7mYuR= z2lz1%CohcHGL~b&iT1rT=H@0beMXL1_r%;l(R(1&xjgi042+ySlLaz;Z8o!kKLk6 zh2B$LW|2M`4fq9(HRb^@C^_rx`z$79;+$*{dcv{0(dW{?Yaknvk4<^v37}X1Be%1T z>jTR%7{mwTibB;PcRd44EFfJa+VHjI7tk@B^|~VDCU8X>p#*I!x)K|U80(1qec8i` zz7RcsA2TcuVA4--5MI!L!SpIj|2_IFb7If591Be^}&6hMdev(!iXjciOg$+*EXp?L9d zTMhUpV?;J;29BQQ?`YZ$7+XY$0;l;9L`wY6hyV6QW`W%v4ARs14MxmgE26jq4zxni zvVVN)j8-BbCFJQOht?3IE~3OJM{C|J?02G^I&>fp8kV3_=7K9*AQx*xOS zd5<8}7ZWRnYXTP902Eb$OToDPF^PrKc^1UYDq;_e?oNl?EK1AzU4EatyJYnGs(|Nv zd+zAJIU>5oKlW@Vn109!e=-s!~0M-}D_f4GehbbRp0G935JOd=Au7-sE9 zsOT`O9=qi;*Rz&`fPDE;5|k5 z7A)IW*8y_Z11@5uNIqxelJ=fgt)ib8D>%e?cY26{Pd#f7eIXSc3(x0^;&=Je?lZpX z2!b?iK8K^N>5WD^;UfB{v==DAj_xe+%hVwadNVt?^LD89ZT96E=7{k-$i%?!#uvdl zw2}A@```y=eyshbB^wpExh`+`GuxGB#WjlZ^)N75gIIP%&h)P$zJX`e?impvjs10s z-dOd!j6c1EvfKMeFj$o+3B1U&Ml_P7oj) z=byFiZp!Lt$d@3b9r49`lM?=F2e9vDo5MCgG_d0zS%3r|1TE5W<<&N`1>7*+XlyVcxW(OW)b>GckbqbtQQ=g%*l^o@F+AHtI zL?Xcg4?uoK@5}h#)ryzi3!%A5ZCM`X{^SCJs9rq^d_LRCjAUFSR>>~}yUr{w+Uw90uWpn+8Ap)Lh zf!YK}8a`LW5#QXWB^U5j-fH;oW&rXj3QX|E)9w2LsJK->RLTnS8j8DJ zdx~O0Zr^_ttv;v;^EA71P$zS;0rWJ^L~x}1upH4Rvr;wV*&RgBW`Nl$#8n~m3iTrm zgxrQ8>WATXS0FIz>@e(R|1^d0rmKpe%6(~C-4M0LFNN-bU=VQhs3+uSFBs9vm38n7 zllt;5m4z?88?=#4xE@!3vIFuvgbe0^{Py{A&9q3siKuaQOn3GbyY4>p^CjkL9sMI6 z@f<;JblK3ojt@Y--6t?5Dg5&3Jg8M1Xx#oZWYl2YYNckGqrw|8@nV-pf*Z*zutttY zeItm}U)aQ{yQCrfC=c2UWH2qE}l;Uu+=fo3vBwUt4n^Me3PbjJ?*&^2iv&|`SRCtUGiSI zp3(6R>~rnb@j$zRjaa7P1HO+%gqN?Kb$v363W!_XB4&{bUr+|ws`XJqnoJ4Z(_K0L z?3c^@au|5BA=4wW27Fyz$zm>wZtaw2t!?9U;cQM!>pK3Ejg&q%J{P&7Ty*OJZo_WdH~CU23HXd3Cm`TrL9K6%^KcEwYtKo3K5@Xgcs<;@@t#hG?Wb$KXd932;hRUN zR`e2~kvAWiM=H_^BA$@_8$C~m%n&?&v?0IPg%4sAB7t)7F;qyVFePm3%y-!=EaNB} z+1tE@(l@oqoqSe#n8omAIZL8kD^uoVwje12P+?hfwdpT<)AVFezTc|I;Yd82adwi{ ze9-7GEq}7Mhp_78PS@qZFWMOWe@T+i z19Zu(96HT?pi!iQtv`M=k|q5qPPAOhqUxlYWcZPO(F-a&5{ER9R+PZvEwrs**oHyQ=)0gPK$_9Fz`J`wl&k!%e#-4-FXF5njPKSLm{8BZxk=&BCDaKBOZth` zCGzfNy)du!2u=jkYRN1SRC-8IH}L>bu`_whbwVHPjbbOUR%i5m^6^w1%5ghN_vM@R zXM}1x)HJ^&(mOK!6BbZb`W?c-#}t2Lk>mS#r@2|zW@~{=0-{=P)kV73m#kVAM!8l_ zEBn}%*||QFCb@={(?jr)g-xXGb3@mOlFQ<0_ISeGWa3NLieZkfD|%I}B3^mm=YUuu zyLxqn_*ycxXT9F6jIdIRPe(n~CmrU;RfddoWY%aN2Gd&NJU%(RPvhTgg?0sBGrp47 zPm7YIX$WC61V4G!8Wq0VaMnGnVnib+o3n4(=QojM&F;?hF0n0^>WB;bT1Rcb^CJCH6Da5I%5RxQ zw)-%B`n)_?_G3$nTxr_+w*r-WidNT`ne|ahyyYcz_0r3*)MNj*A7uQ^7)1g!bPtoQ zJW3VK1R+E)5{@uYLK7FEx1M9)Cv5Tr!Ly6rj;}>^nsRd-OX5Z1VxtseIf97yi-q`= zMqTLM&;N{RDCXSH7oqw|vJ9v?2JlH%l~vw6$z*xqyH+6BAI=`b>#Du|VY5+!n&Yy# zv7v2eoNG>UZAH%A{AEC$!e^F_RFeD|Y^dTfeGRCZRz$RJCT#c8);lG5g4&=X#M{v_ zN+SIIB6E$BGX?0ov(5(*DyzWt^o4mR`;U~S?dGgxiOAPQUg?aVj|PFk>U=ecm7XrU z+;eo;Vj*{##7man?#Ywy1vS(Oym4#`pE=6xoKNZ_qn$^{VWm%g!v-UMvu*tjGoaJR%Sfl;*NFB5Bk6ybpx-PfN?BshZ# zgZo3*_( zL$dbmo7dIs#q9P<0CP_arkPc~oMs)C5DfO;R+b(ZRoixXM1?*(?dki7SL3w+Dr42B zo(UR)tX6X34<9>hOWq!%v@AK~91m#6v};3;-~3$Msj>bM@H!h&+QUrBSbApokc1d6 zL=;@|3-%k>k|Se@@=CF+F03i?RB9m9aL_VS5BK8NsJ6l<16rRR+3GG97Km(=9jZo+ zIB~YeBoLUndCEGQ9qg;daQf!Q`E$9pmVG~Hu#R9wOG2Hp7_KKT1IP1b5e$5#7LPOJ zscJ*soPSj@$=@yak+K!GF}Lv7Et21jgCmWN|%O7+TYHb5%MrzWs#hxSZ9HAtCno z>TFFJ0@?p&akf`urAgfwI$qTJmmor^{g>)2?Yflxb*ziy?UM||laOXh#kO=;9KnAj zjEkQ-k6gQXrcH{vZ>hFP`lda_n|h*DZPIyz-yBnW3;{1ko1=}DR!4V>yZtWUuI~oc zaG8}wcn{-u`gdF}H?bm=vlp`W_moW{|4l#QsDcE->8ia%dE`MI_^b3Sz7 z4O;yCYv}BWQ_SDspQ=fWe;*HHLbmus&P4RebQ*m4=63h{Th`Y%QeJkn!j2?6J*jSd zF<11@LLveAi!L@3?xl5UMU@z3SDkWf+&!`xhjHQw-IpaXZeThUvcq#@)7{!Ife$8` z&s&&@UG$zOmRKBJ`hJu0&&t0x)RB*3$%iL3_TkP|%`#PTx~w@ixL}ElKOdc+0t7#2 z`1XzOheE)!>*Hb(4Lj@7xwuOqRXW3U9IvZYr@H_hC2`S0@yaV!>^^4=6G(yR{6b*G zf{VbyX=C^&|Jt!_YR|P0y-jl+$1`{&)MJ#;@xxrXdrTFaup{XGGIwG1;2P7y8x+B} zK=uaOuGo`MK8ou#t|Kk=(yrHx^S@P|I6MDzv!>f|_I&7CO#Lh1mS`@O_WI?svks3p z1$2IZgmpb#wDB9!0L`@hWU1|rgib7aPBS(ceP#BNg#2NJt%JY8ETO`@tD*I!yZA~6 zC!a;f{|`=z}QAWg-EsBJUzgO03<*?%?HK0s%B(J(TRh-U2P{eEN%f3&uc**xLr zw>*9%slOl0qyy<(o7C_TkLI4*LM@z-+WC6{OEmA4+ckT;ntYGQX5X%yki^;5?r1J| zUA*xpt$_0z{bJDNBk3Y66VqPOvJB`6eJfT_{i{^TE_8`uC+$%KFRR_ZC0$NmYFqMI zjk1iwX=i&GU&mZoH;v!afp46&q>DoGYVsc3ZDhN1w?j$=x=u+VhlD%gYD{)4PO;@Q zfrR{uueZP05|Hml*M2BI(Rlb|2Tm0{paOJ6*$S?0>ROCMXJU9PR^=r8TU`W) zORfn5SGI~TKl85_d7GY3m{ffiFEwQ{)CD;Bjz`2-@b|Wv@Kj%CesuhG74x@=&J&+c zDO_Lv9}PlJE@TCa7+C?|EM-ytJK>u{R6b3yMaM_}t6~?!0j)Wl_->|UznCBooWs@O&`La=_6;4Iqpck~36j>pFEL zc2qB>jfrz&`2?XzjLo_B@XG(wI3G++3dgP~#IuY^Q&?9|^-o{C-uGXoSY&6Y;^}Ag zU7WSC4VK(2*{UB{Zxax?5H|P3_6K5&H#wfQ)KEk+`EJ{*-mfJo-y0)$G|)L%2__8qs|+_*J-z#_rjt*FWosj0^$MKeV3z znyCC=RZedmYkB3?!?a$7JOl4FDYg18)TbQZxfS7xFX^wH1_5XF3Fbtrmg&cQ;oQNz z4iU(Mmf7z1(H2ki=&K3i!L|Yh*z|N~t4;&i<{kpN)+aqP;@xmbm5x2I{jbIneVmii zNXJqQqDw+Yn-^HF>u;+6A&W4@kz=CmZQ9i`5d#Xfnnp+0tmMf1^TQQwbYR`FOz`T)$7v#`;U6td`gn1^A8Uox9z=4+S3nR_>$6WOQtaE~R2RMmXz zI}|8%_9n8O61{`vt}iZ$AANtxq41@^x^JfwyXQfq%&XFG=_?`qmn?mqa+_2RMoG(gyOSDtf0X=sg2M^yF>D^wM>Ytp^ zkmP315+)wy3z$KU&r6sIUO)Z*reb=*#zou=8+6yFYvA-n^eF3eJ%D{hzaoLx*QK@E z-CGkBB>TLq-DnBkS^}AwnaUEq9X{Sc4D+Ux5ePhG&EuBzc$fQuImtYSjji?ZKvYJ$ zAt%nWpAKQW?XN}?!tXQ+>>U~K1Gn;VC4U84yxy~L@BsoJH)U8Jv$4^^WY#|nR?|&N z)~P9*;8h0;4sc8grcX}J|FHFpz<>No+JTD|t1_BW4Gg@?_PSGNiwnIr9b-W z&ytws<)cEu;`MCNqz{SJhE2W`18LHJi0l(Mn(|RH|0-~-KM?;}%vSPhK|Siv_xW|^ zV}B9T2ZBH}TtD@*|JxSwf9Cj$XNmsqo37faWJ|-mAWhbkH5&;?Lq@2lFU}N zMg^I&|NQcuW8Zs%w+8>x>f1`KxL4BdlA(_GSKKUtpa7whfPj!@2TqUKbElU5flRxk z@%uyRxS(r_kJ(rhbiIO(6sX5LW`qus`Hl`uUVU0zzwMP21{JBwxFRZo)V$`{@&5RJ za+N&hW`RBQS*9PmwCk}vSLy8c%}B8;Qqs`gkIifh3EF;>ag%IbO2q^B+^=zE$$Dh_ z+8=)lm=QH}hVsh0cQp$bxRYCVQNA+eiHkt((@*)npcDP&5>YaOid3n5#T`1{`0kCi z!oaUq{h~B|b}_lDHO;zxq*GyVgeH7ZH@VADuzn=Iel+UozANuU6U)Emq|sARJF1sA z54^i(V-5DT+G~y?E=ee#14&JPR~kx5Tf9<60CP}cT2AxZG0!@t^Gp^Jm`_6yiFbbx z&NJ~ouNALaw75QWch`HQZ$L;X6KlJ+rJt4;)vRtI7CS+cB4d0S|a_EyrxTr79BO%1iFH2#I z4LBS*!Ku#Mq9gY+D>?hXp12~8%)`L+)N_lcEC1eH~0HX<`%xM+&bS(#Zlw=Szc!&oEg2QDzq{ic+G@wRQ#%AR6!H8#C3A&6+D>YyImIRnW@&3)xjOm0PD86L}nF%nzoaio3nUTf?ulaSa*rp9v1&}2xoNZlf)J|XR>1#o^8z^ji2@M zCyAdDa^jWm;-)eBQ93v5`|Y>bBS=M-&Xbf~^39*k?0j|q%=!uL5HHkYjs$KiC1n%3 zYHhELekPv8#!xQCTN)G0%qUy~Pc6GNGFw+@G84arY=tV$OPoL+!A?{jFcX*!{8H+7 z5B+ld=F@9a(WsH`fxo)1L@eyx7bm8~U6y`UC#No9<$X}8uBVI2SNcByBS750&s5BV z#a|uu84F^@uu6KYAhz~@!^StHq*ei=LgOdN>(k`WW#bNbT`i%2j1xG6;qLa z$_YcKqMLApb&!O-C0)SBcv&qEn<6wAn{FUWv$P>bEI4cQl5Wiqv<#>GV|UTdx$GSh zhHmYm+VDre^CsqSWah^R;nF;j<96QSddAH6Zmip#DBPZY^^M0?Wa5FU~yD*Lt-sti8QOFKiKqDkq%NS`Ue{(Tm4_`>7Sf zhW2llEuZXE9Mu-Jim;M;#N1FP?f~S0?7_=$5x(RKc&E zJy>-2J+ArcbUdnn3KN@bJ!74{<5pa@tdLOkx79Y-g-dg9*lt4U?b5HaSlIx-1ohb} zo0hVk0iHV}vLV3&scLE+TncZ0lpNaH-LAN&ggVpH(^-!ZmOjvWiR6RK9fretI4Fxy z?n?HNI|;T`TWY&s5e%2?kNy4n2rPZb@|PGi(%}R=ZG=&{=-0TqRJW-B&?~IBbD@>9 zFyohE>vu95B%~f<4iaQ%1-Y#m^1_}tm)I%ox^uK>k2(%#x*VTDWOQ-0*Sj21hs@0Aik zpGFJcTU&acR3+6@D6uqu^0gWEBx=tCu`bbbC@ogCwDGymAfs{U^s~UZt~Z4%mi3nG z5uayohj!ilz~!^|w5MLIZ3FUdj0Z^}8Ma0rXFZ$~W?B|6f0pp1Tm9fmznuT9jH*ROI2hpY0q>|aoy;IXo*BOQ9Gx(#5 zymf8@ZHb%6NTYx&pjp_+%o16OD+Qq=XAS8GpNXD0 zlceR%`w?|X?9L!16*mNUSXb1v8S;d%XozGuY*21E#akWH$ItQ3Xzf_B{f<7myRo22 z+k=IKvGk?sfbWPWj!T#n8V{VdIuZ)uB2uC!cI73TxYD}ezNh0$ zhWXr%i4Z3|;5xdfCZfhwERh%+b(z`~U>#3naz4|1GBfj4DhI_0tRq`Qhnq866NHa>4qvd*e?3Yl`@_Wuv4HKT3Npn}(rCM^;?&v*UxNIR2<{E?!Z?E|Hk~xY2EG#N5;L zD6|`D5N*|VCvD7qPU-@su%ZrVGcLz2|_?Fil);W4lAx#kX$T3W|RBF%@vn$r}BA zb^*SB2XiK-Du|Pqjfc{-qox`T*9SFp)p2(sCiR9~H)5by`0-G&G{%>@*HK0X>muv{ zkZ@1pj3%>LqF#AG;`RCw?4$~Lo_&bQntS7MHjc=y=|_%eEwo6hcxK+ z%_kld9!HPkeM&B2gcJyDM&~Lpnw}IE?N%sCt&juBcu_oBO%S4RQjPxc7>oj_h$0Do#^>%)p|t)MOOh`0j(tmKG(|B?INo^ro4;{^1pL zI%LFhB1^wNECRbtla+jw_mjO!JSXGQBQtVmU`#Lt8EaTs6OEfVhFb^Zz8Gk1 zdt#dQ60@XPjCi%mlto=0$T7C3Eo99?bdj6kG~@bnNt28*#lS=0j% z!-g_@e{2&tu85HeGRjLBw488`^ClG2^GD(l7nefH{)S~qK-KJ(!bO`oU1QGQ!rtI- zvi*wuu^!@sff$%DU;Ag%l)zXq(Pz=P~kt zGOIib-Nm^aAfvJ{we79}6gMv^OaMWg&svqi0IWK_K?;+U0&eH*P3L^*v5bu;2}j19VV5`xmt!eFPJ+~w(c~Mmx_)m9$ox1NuxN28g-5kyNGKxfG1SI zI<+H9HwwUi&?k$%3~hA0%ahSP_r$$8u4(HrovC2Uo}F~1g zS&w}5k&ZW-0|~b5%%zwHjbdQo>qdTq6BZ7ZvtKa^z8xQgXlVB-M9-+i?>iA?AJRPkU|?h&FkGGwwq{CN9Ez}syLM|sLe#$vDcZgo`w!3$bA%+6-hUJ zPD+b=-^l59`}DcCWQFaMP5{f)jr@@sYp6?HvuYy^m8x9K6Mi9T(^(m zty@Tc`y6Rbm7^9I>FGR?Xg2^NMvbQ+nhHn{Ud8z7zv`Qz&GK97D#xaXm}n6%LjWLv zdVF~FP3Yz$p3y}uiViL?U-1wL}uQJlnP zm&lNHmncd=E08VjK}J?`M3?oiI(~?I6P>+(HL(p>j{!F#EwYhTqepxr%){l@Q5}bk z>{ZuGlROsKq(&OkFz9qeR{_Vl(*C~YuA>uX4Aau(#CQ%GcsOagk3w2B=W?OSPLorW z6C>U@a{84EtvxL$p4WH>ZorrZSf+!phxs_7(wqhnkK@~;!Raaz#AC7LO580HeMDe? z6`9;>JeGSetcsAv9xX~M9rrjFN=jGlfvX}haRs=*V^ z%4j()cF<-nm349Bb_GS57Nj6>G(b6$h`{O6hZ_)|dzn(x>A>jhJtz_yJx;~-FiaRT zt!cBv2zJgVCM|l1@5Qq$2=;@;dHlS8zUD@@#d-3Hd#2Q(xVJcjN+YRL*MR6rob0+O z(gp~>%sqbdCU7aQDRT{F)f2caB?srmifJOTwn_BlU}}I0vJ1|M*Qnb7GpCyd@CDGL zZr@MdAxHNIg>i?u7E13%aYe--ekD(+AD|@bf_Y#0m&1MS9ah2CaN%nphmNd&glmYZ z>->6l#?_c4mrN~4PaP39z+)|-Ry|80vcr+%alI5{IEe%2?cH>u4d}Bi7I2&U zW3jcdGSQcTnj(RjJ;+!}H+xme5$B8OsLhaq1GWItA%JKQ$p((QD@jQ4I^I5pEkTcrhZ z7wBB#8r9v)DQh|htH{&Tf&i7&I-pB(aL_ zBW_h3w1-~a^R_DC1K>yAsz4v_fbYhQ`pVZGZYFzOfzP*(^Cnt*w{QX4%fYJ|>p~Sw z6c13FvGX~eDshyh^p-$jVltYEn1DsMRJs^o9eFfD(OtE>QxREAnx8=ivgy0jpZDC- zo^Qud41x833&|oS3>sspFw0f<%Zl)T{6b?S7X%ju>xMiwij`My8;UF;F)KnBcVl*oyewreO6 zJjaZUKF(v59W!zuJ^i9bK}QP)VpSm8x=Kuh(UNdKL6U5)_wYadX0AAzLm7Ld*~DMsC|=<#dE5c50w-u1 z?M{AwSmMoEfXWtGYAMG~Qm?$y%s4L(ElSLBD z;MWQ9MRja0T~QJgp(w|57j0u8_9gg{L-8^ob>)C@k22_Qv&m@ZrF62*RlM0%dooqT z=$PTW-6Tk71&tTgN0LF8j%wz1z`Y5}j6N%W49e|SC2_-!#Y(&YAG=UG`Am)3sQYZk z1dV@6C!Bx)&V&Gt!p#7Z7Wi~W(DlvfqH8o^^by_fsl1UVMx#%-oGi;Wibqrt7q>w^H^?@B zkbG~joCh842yjZbSBfRr`xfIfwJD#m`er`HL_>E_4gq#c>r&W6I<{d>C$Y-u6E?d0 zoMQY%nm2n6Aj@D_JRN+Fg=Qh2T88<4fhrjb3+D>iYL|1Bj1dM5NEf$;S3E36S)24q zR9=lI5&-Wg$j~c|dUXt0z`*Hdr;{Rogw8rn$61)<0kgSyz{tEWhIP;_QU^@UoXk&@ zYhudTqZZOd_(<9Fke4xLU@#sts1Z`TT3tf`b}38JBv3_N`lUS5Cbi5%NGLWxDnYE^ z3Dc6{9BYd%ttbOKX*4mf=MnKZIjA_%1g=~rPu4JAY3_*9U7uA+cAD9mSPklbgLufB zC#Owud|q1{Ro!~$saQDb7`PFHiY;+0#>1lQEmWNYpvI0TrNS>P+TAu4IUXEM?l&72 zHm-|u8CqG0NSNNj^npRHoNEDjoS_N>V+a62rf^3LFAcg{hsn;5XmECemZR_O-CXYL z6d*8atAb4d)8cSa%=I;Y(!(bt>#tX;Q>&7;yKLaFfz6IlGlgtOFPDylEc@!p z*5$I|ildikJWir0S&^mN38gb`FW1#{I9L-9XfVf920R?-Y>hdw2S`PzlJO2ux!H7( zLxqJW;V45oOzt>S$9j#Q`q*jCIf7{Dz?Y-0z|?(WCb^0^V~!CsE};7b5y7o z9s}PopAUm*09aFTC>&66?oCH#5rGnnt-?IHTjBct2#M`mj-w=h-mVr9X3qM0Ne(A* zTZSBO=*eU632|iux2*MidUG__DiF2PEO&Z|O(sS)@Q^vUH6-$@gP<761C@OLK|~#) zmr8SZ&Bg0anB%CT+>+4DQhtKb^yq?xh^L^>q~SAdKkt41c+oFT(N}=z6X}G&3`q z<&gh*^8LB=4q1S3y{?9xPoKdL=2sGhbSHhZvIqF&JZ1tR9`Z!nwaqUCdBE9zt>|NX zZc$;Iq`>{wu@mW@;!{G_+e-6kHx$+m@_6zLjH4%YMRg|0sTIaJ$WB+FEe~7ZDco1b3yhaR;D_q6ZEvW05Zaya zED;ga?#xpTS6!*232rBoCelpYoX7T#&Aobt3Ze}Ip5}TXV~4cY;84<;ethyoRYeud z$0a!Lp_F2OHWA}!4znXk7I21^o7zA?b}PFc=qiw}q8|NS)W$O=J!^cR9^#scdS`ng zwG41jR@H3vNm$fyLEuX0#!@KNDGb{q<8r_!43Qr7Xdv|cMKZ|ivg^kl>1gqbFw7tE!kicSbG~@H~z7AbdWLLWi zEjeAGW=M{$hi5&UbP!C6t`mA=a*3lCk#=BlVRrq>Eda0-a0)ynaOxwi``>F64$nlEcmk97gPG8LwXQ6QaR+1qhKku{O#e8`h7yrNxx;z303YMy`pF0CBOD61Y6=2O6 z#+uLdrk{<&mbJkdd!$y}Jh_Msp`K&X7Uu|9mUsAy=MfTN;t+1D$A;E$>7LcQsN5+L zdC?Yt?c<$FKzxG8=97DliQav+2lsk^jF}1$679KHG~;kNManwkki@?pV?j|y3pgMC zfqB;Iq$~cmj4@X3;>5d6yDOsBYW}PrHO|ucoY<$TA*Ahge&pmh$|RLtxz^+gCw-~C zll2m%B}4|*kW+L-`PPYDQMrT|&1YPM`ZC9))obB4pZZ)L%vlN;W(xY{AwFAUS%HB-bXn#5N{`p`X z47_(;MskJ&_Su>X?x+$#*^}SGD13TLTB2wTC927Pa>in9GhH0W zAMV#Jads4AKTuZ85(xdw#{>4LlL7u9%|m?ZZdl3mWTxJuBe7o-U}Yb`HHd=2ZfL8DXmJf^IxFO@UtQ{b zxP5T`2vh_L(yTrZ&C_9jIrqMf95z%BXKyu(mjjDF%8;yrjHp_T#G$0*Alh&r6xaFS zoLu4+7R6zEJ{W`^Nzr*yZrZ#JSb)I-2Z6{dLXRub*p|u^=A7C)ie1d9vo8>0IqRFn zWmnXt47|>DHTB5eQIAS-j;*v3%K9Idb~8sR)PvRQ4TxOiWWBk6@3w3D`pA~T(?)ZC z*wN;8U8oVNzDTX{D%5HVk zvT*o_InCvH2%pn+v|$c8Ac>pdFb44f>Kd!V-VCZz=~v5tru5K_l8xiJb>02xx&C(M z0Hs_SCQ}kHyHX*a@_Q>q7izpFMsf^1&JLP&e%h~R3&@gea1aw zsXh*e;8HFvB+shZ1g@VLF{skw2~ZyVGqX55)+1hOk8b^Xx(2+31Fp`B z$xmAQDDU9-K5GH*>xGWnAtspX$*dv9zBZeK6DMYW%BWMsfCS8@u_1NvFrMzrT}Cz$ zfkDZ~1dct>8=vP)ayqm<5omr3L_E|#q}c3Ecm#tm+94`;?0!4E@E(m-@4$%AJ>7PrJMSG}B^ z`r2B|fErJ3J=SWAc68%lv+ScY6h#+6o?UH!pXGmBTF!&*V>u&ZxnGyc15jSKTP#rIHwe>(fWo&_e zdqVH*%K=9=uWm}3&kJM?-~*9h$c;r00= z7i&AWMxzwPA5vEQlNBQW3h{$)-ujdOgRlM1F3kw0PJS!RNJIj4k6nNn7X~Oh?ZwL* zVIx9`3e9IC)M{%hx8^yg-3k_jU8X62I0@p>oO=dAj5P-mAF5Gj8^JYIqfz(V&a{F4 z4dE6bf;6!Jh)M!idpQLpd4Z%piC0uZPLy((`$emks*D+`Ad^ZzR#K&Gg!8i)NtEGu z7oL?c#uffhp^}+@ed!5hTwi|i^3qS<`#Ll~8HfMb#=+jDwa_hxdbpyu^J$=QMqYdG76gP(cf4do;PVP&-r8q}swqpYDmx7BP40%BU6N zet5T!(z9XZTPfH=DZ$Fg*Is%k2jTuWlC_8`S+>6)dVno`(OzQV$g781-G`QGc#B8T*Pr2~ir3~^`q_w_hT8Yd+ra>Z>10ZRgZDu)7(={mnM z;l9@V%r}!i19d5gAGbBcKp4LQi5e_A9On(sn>(u%_8X>*>P@iHqv^cND;3JA0dBq0 z8(caIP&Zp_AN*;xiwo1O3hizkYM=+D_jr>0rCy-42%jg zx^RnP3dOBDc59*hFn{oM4hk0@z`Qm{96<@=HJ4F?!}rPv@jC^7HKww7g_1HD0~1P3 za``D*v58Jnm+}y*KT@%^Vjjfy5E-nru-OXdBYW(Qx8&~0M`M<7kP^c1H49Q<&yvve zz_1|Qv&TSq1IAt5A3@_u5D$O~@A>0RmW<Da0@2Z1zRi>p|&GON)M8gMZi@0s~3dHI%jIT+S_qtz8$_@n8 zG)D%CvIE=%xJUjZ?B|294s8+ZAE43q*w$kDV6OKAK-)V@xt|RV!K+p^9){Y0yhYkD z?W&I`QHDwbfy}rjT*qW~U)?Z0Jf|Y)_1Ol%qh4}fNh?Kv6}@Fs-`!3>oNt@dw5&U@ z)dil`RaCm_gPAkW9$dVQ7DBhY%c2)r_akVK0_(-r~6g0WLE-|ZhI}x@i9CAK^>r( z?HXiXSg0I*cb2bl-%d(vVdP{BoakQF-u+IM&u|;7MiX*_6_{6`+_+H2o zt|-gOAer1<0}X1SvLG~ zP_FVVUssRVkk*MJgh|i8Ju6=J2&lUp9FT=_I2EZjR|e|pKRE}Eko6Szu|cf2@L5#j zSIC(^yt^mR=F2Iy7qhP5B9anmILO{!6SggX&VzP9bngw8;grBesdwMI-s)gVk=o!N z0Vh&d`W%B2$vYpg#~LTGO=M+&}RPw*t*y_Yd{qvA01RNytG9utbC>x!0b5 zL1g^xI+A$@c=Eh=_1M$y=o2dUP-;d@^ye46tR-Nc&%DXB&D~wCv!I!PCmP1v|LR#l z#T2UiM~RgWE>dbrvsoD$1rzgnUO(rK--jn!F)kJ8nnUj7C^GIrk>l^b4>5tY0`(Qh zvE;~t2^Gw{0&nQucsn@`2RU8cr^7XWODfxH!x?vk2T0((I!kMzg>g$%qn)lIoTazU zJ@_7xCii#a-dbl!1>nIdIT;U-B!i;gs;!j_G(%tCvy&V_v=DR7dTFg3x|zTw#8BSu zD+_*|C21qpr^6C~9|H;7jf=Q`o35lg?1ASV6H};%uO`80aIwYL$M}{+%|fbwzK5m3 z_uq??Vj)(0LYd`Sukg|s(H&B(v-Z>VDK}eVx9uLp2{o;Cy$@!No&6J*qBCd*y{?6w zbxLK>?>lU7rYS8bh7GPTD=>jC&s1!8JXAHLR~ynl$1}Neh^pAr#?wD|-M69(&%A2p zrr(`+XPr*5Bkio)YR32Ga-g7pNP!2k{mYuFLX`z;9888^z5s-_85?kNE&KW@*&o>dzU5hj6to8^-K&7AOuZrD(+8lVkIoF;~ zFFq9bK$e~J*+oM^@8YZpjZjOg^FN0PJ z_+U~FRnY=>D#1tS)~(H2EHfZI;LK1jq+gC$aHZ}|2TFO==yb||MBQ_e;XwuTdGq!T z6u#tHp`iAcfMN_!Pd59Ky4;475;^i9ZI`@VvqnemDmw=ai4w)zwU<|S$?RX(z)m=b zPNv3L?a=5nUv3+0h$d-OQ-+pOCuC2H-3cQJih^=w?e!~Fl4t2$5f8;@ z>*7?0QO_VOeEwm7aYON-&9Eg7RPRko)Ot6dXJ)$|N6#RW`m#577C2`~tqaL;B%pLk zIO8`HJM9^tfAl5M-%E9^V?fbtr4>RasobyEpPXOn;lA1C9-ip^vC4SIE0PUYH)k-m+C zJLDT7f5alCfx1!O*%OsMa~RKk(`+s9Ig8|a3B_z%By2Fmv1@OHKR>p>rh z*#>`!8DIB*i@?L8Q45i>cgKLF+;bQtoxMWDg#p#HWL;d_v+Au*D@b~-I(-h0Q^`wj z7y{ls_aH~ZLw6!q16 zh|1v%3OC~s6^4cIME0H^*2rc=cPO$k>R>OtJu{zwZufOp@DDq7_^Z_G#{zD4riHP< z*e^T&-8iSVMY>fVSl&&u z?syP?;8+^esp3h4YBx5bQJxIJiFsX{z9pyUV8@NXfUgfyAwwbN83!)G3fZ;je(Y=r zjY9U`g#MJPP-#p3)JNmD3J?{PaD@e?ZNX9D+Dk+LDO8i>94ZOlO%0 zpt^02=#^84pX?8a_jA?SJ|H7;57R-wx9SRYAFHC{?QzRf76}WXYjKjT^W2(O@{WuCgaDy8H0WS6>K! zO4WHIx53Br3Q*2%A6a+AtKh*-r3+dV#SYodsjPS-w>2gPboEEzCSG19?g`5sEGgy9 z7F?-^u$mudkfdorHN2|)Bir}x{d$GLCaq%-IC{e;Z`XG%gOAy!4{>Dc;o1MCBOzI* zPO$^kcTu4{8`LBU40OCis>^3DzQOZO z5phzC3OSJ=M)Voi6abryV|u%)(0xt#P-5vsMwNvfu`6~2qwg1#=?a<34Q{i!slhXH z0DAxuvap|Pr3M37TC2SSQX655`XB?;o>|6I=dxFSsJUX!6U{_G!T=SKmG=hD(Vt~-$a!L4q}A>eO+q3lQEj#cY4 z;U4+)`C0iQ)r*0f2(Vv3e-@f(AkhCI>vaj~WG(3UrSAjjEcaLnx^=IPg(KWyJ+}55 zL`+wKM0jo(&fK882_Q54t>eyewC*lC!aNhapZLrI|KN?n1rY7tqz%~T1#J?GDYUIt zQefzVkSo!pCus_kvbjKiV*_II7kg>2GR~i`-l+kBmCUyyjGXg;KJ0XPO`%15-Fu_R zY=^j(%24{`{Dmbr^5-hPKwE*S3uG2V65~!_=xJZUxr@<35QPN)a%MiS^9+@@N=tz3 ziY6aGW675ichf*f)W_mDh-_Id*tKx{E2>Iw&jOIlOAlsi<~I?4DkM}8!SB|3M;)?E zo)6vP&I;5}IUts;Zr|B19dxa9vp1J(z!UiXcF@mj%(anwenqBZhCy`~i)^E`H4d-O zzXeo4ID00D{qKSDzE2BDn7BqM z4cJ<{g%AscJ=HBm26Uey4@sw?YU=EG#so#Jv>aHF(g2KqZ{oXU0qXrhep>pywq~m` zz#80b_V%((Ca5O9mHlqsvxK)fz+BcK$|vhKsM7h~ML3+@*>OJ~rlHt%6vL*b-2X{Xg_bWND+ zh+O2L7jYs5+7jP`^Ckwd&LiVc2qPFpx$HoXkWc-Pu)OUVY7dx{MCo508RuMMNIla;PRRJxM zm$B)8p7*_*C00DIPr_l3+>(cF->-CKl3OQT9=aSdr<0%?~m@ulmNAFZ?}aT->$cC-|L4AY{PJ!2C%+Y#jI{GqiMC~ zYSlXX{sjv_o*1xR@}_oiK!*=moAJg@we*sjfKA@q42ou#UOXEE zRJ|ROH8vSK=+4kP?dFou2t?gDAe(78c#w|AQBS4z-bK!316A>b9TSzU;%)1kNznfA zR`%9bVT&fuXEc1#dScPJL2s{oxkWBP%&tayzdo&xpc9NyCgWm4lQ(K9TGw0vYO#cW z-O}qr0p&tcfa5~IuFVJyQ7$f&jq@hSGAWli346|W&-2XY;S-O%o`JZZMuW(S-R@KZ zjLC6HT{Lum>2PDdi+R1}V{^-6hY`wuP{@@#hU8g-;g#9LtQhj?t{(!d<0VEemG{uYrZKYe}B%%#}$&T2e zLhMeBP@2J`d;56q(U+Ws>R6P1$K>F;Sq6}DJUjjQUQ@@jxhMdMNEWw+N=-bHs2hvz zcE?Zr0!OLgEG^NscFiZZs!a6K6sU@Hj>Js1MQLnw0bqeH7}}Wy`K_O10FQi&tNB$t zLO+U=X%CQinJ%0d7%2j^n1qRcOvyULF7gx8{^Zz(ju^0RXOP(kGA#gfaZB|mc@(%R z%vUV|>Og+ITw8`_hyGI-A7aaj$NgfX6vu6Ggby<@AZog))tYY6*{jW4^oAhG5?I z#^qF966Y)phG9q5bi|RZkrp88`09T^ZU%Z!1lfaM>#VcFHo1z0pQmXSD#3bSIFMY4Wl&q;bdXt)5N%+WblUY;za=fBdv{iYbn+I0 zBWK0eXnVUUYV8@MpE#<2G%SW1UBL9jP&|J~-{MNpzA6)}> zBg+u@ER0pV8*n9mD<$5blqyKgtdz{!GMLx>{agq8&6GCNt}~pyhz1wzqS;G;>a`Sk z)za+_%rf5+OQ71CxE#>eXSvBxge=n_Hm%tVU`OP-TXhy>Gteu$-Bsj;gv!PEMgm4Y zpr2yo8ehU#XZZb~u4Z@G7J*m=duV0Sf==jigUX@cK|*4GVnbW+a68D$0xo-7Y-$a3 zei&#b&7jKe>LAQ%1wC2ztj^`MSAMcF!TGcxPg6(5dPVNS722(3syhX@cpe~fIy4+E zn88xSpseXX4CUQ86tb0z=@H%&G)oqPMb@+ux+Ousxnsi-!^5srZP?dO@r381epv_m z0q}=9$*&DF^8TE$gxu%myD}7c7BBdZtXVU z0ZOcT=v-r+p`M0*-XO$DYYehr_hnMAH;|bPT03cfhQZ1WoFGB)Dv54URa_Y&LA_{w z-vSr*6@RL8K-3fn3Kjv%ppXNky=D#&qwtEi8uzeN3DMZ@B!K1rdQE4T18G_$CnZDLQ&5GNQfxkLea+^W`p za5}g{b%p>aTwC_khXjZenBkP>N`zE#>Y^fCMK%UKub}nd+wVu<`%B%ohsj4A9J!rQB4dj!h-pD2%F)A$p?h}G zOu|7vz0L)$bG%*drv$pg$Rk!TQx9s&)Y?09&nYBgJxb@ zdTW!A$4~9N3rSajKf0Z?G?1cOVs3r*B_L|-YaF=JyYI`topTrRZvfn0kAtZY3VNkX zP$zdU3^PH=JsN2lTFg*tKl&?wr#octV%WnoFKq3gFA?;+tOqkWPEZ=quTlo2^-LGd zpk3){3hePZd%{{%%lzH?V$-Xt?E9M3sGTdbV__vAUu&M?AS_lHNhW^e42}FLUH~!G zc9*##V9l@rCm-5hujN%;VS`U;gEeZCkCs>yi0W%T>zNbTs9QKBqN|I45V966(CXp9 zcH?4Rs3G%i%T%$gH%1mA8=sC_XxRDY8snJ-ZAkoh?_VUVLl~oSq2M3NkfXp)+8DVk z>p?wX@1BP+H}EBt)2{W^La20uTHK;WqX{{rfw~e9On$PyL?`k7 zB{e6UZoz|6h;2L+;raG|jN_iq@Wfs>ceE=+M;W;twEdH(jk&fQh~J*ZYAXII~G~eaV6nB(xY43JYXNa6e7ni~scej(f!wyG21N zkcw6+18v^z9|!}02?O0BCJl6~N+W_62ksiY`_bCW26VD|wXv4SLS8rIuP0YKm!MsL zMPl#Ttlr^PGGtqS&m~!TOK~vVU`HX@O0*5h0kV;n+q**%&L>xwjqvL10JG94q8$$C zj+u*a*E%RPCW&m<0^Ht>BJ|v53_74=f&}Mc5&nDk=?C%z*a6=%@ar zjI178ki2xvu$CQ)u2|6#V)|+~5a-(7kOFm5( z7Ag|+3|jVofiUa!foF&yKA`N-?~+49Fc$|u4SsVNy0Pgvu5HKYpxyfL!L7N{aKyko zo)IYW&!CIeHlO%~JFR=Dl1i!_SATk@K=lMTh2~S*+b_AVR(3mUcaecaW^x(Ft%} zwCwEf*vkseed<(|Dlm`Kty)Q2wM+I~MwW)=>Qb{#nVGu)FF?@0fMiOCLSGQ|vKeW( zvj>);OLW{te{^yj>B;s+-)u2%ZowhD-LqzU6F{RL0<-OuK+hvZt92s^%uBK$#YAx@ zfeAg3m1kW$x@m=hl^e2UG{4f@gEFV*r9a3BP~OUL4Q0(YxGtHpN^cH$EUnN$eGFqp`*MwU{YlU~vZ)5V*rrmmdu20iet9rB(r+dZdx&|s-v5hTIq(q*3 zyras4g=~*5UY0Z{SjfB^>f&-_xSQ{JH!mj4^(Jl&pgaIKZd!JN+S4kOGYzQL-*9K; zUX#1Ye;DwrA%|i_pm4Sr;E6^jmkX330c(q9mCJ3rG7S@x+$N^8q)vcG)I(3SY9CG6 zj*hA0h9Er+ML-3?wFOY}C{5pk>>8-&9o9|mJkL<6?ycUEHjwX;U`Gy31sObw(OCLc zBPiodQ;fR-asi#<3O(IUgnJ{8Td@YoQ0?j?e{@@HKq~d_Jrs#XC2@HYMTx<`VJkpB z^D9&aLnF=0ozx(&b~iEs5ok}3?!;`LA6bILDX1%x{yLwa30_)ap<}TQ3C?J?2R7Ox zJ%J`1Xkm5|G!oH{gmATHf=@ue*9?#icFjCtgj&>;22AP3K|4IE?<;?PDCZj4-_xpn zf1GFNYjwW0mH7Z+n|qIOP}?-=RFwvRO6d*_?KkhLy{)>Wa0XjKTq}a!;{*(1heHo; zpifeF4sZttFX2Qxv%oo|*+bSti6_i=-*}5rwy^WPRN;Uq8qn8K3eRMnBn2o*ZzL z74B|{&kIroAoK<86~Y~qUSlID6ed#(E9&rYSy-|fG#T9XxS(wh#t{VqUkAw7`6}rq zXkB|3hnk^wvy?*mP^3HHC@^dve^Lm73FO(?9LqL?5Ecac64vVF?aVoMUG=0(mjmOA zJnaC(1zNBscAYTc6cq)~+JYIOw0o}SF!t$%7?JHmg)+?qk;2fHf_7Hb^QK`r0y4YR z+4N4(ypU^;S1QJX9zMN0j-GV79K(ssS?JwiS|;==!i9!ti}ub4!0WmAejMjH>ZR7S)3f!(qrR?>e{O#yy;bDb1E?sY?rKR_NT3unD0b z*PAHE^aHhDYT$e~pp1LGu#B;0D!^ys3xs%}sD{py3t_+(8p9u?8d{|UhlD)&%FfkC z8M@fZQNTuLZRu(He*&^^QJFcQ3frzjloWEp$;D^|C9Qi3)b%vC1Hu11LUbx#T{3+E zdWWv5*TcM*vmDa~1vxT1bwaQDYk^m7y(j0TJ7i z4VLmI-9t&7&-XJ8B3Yp9ws9K|`gvOC{*dDpXtAnES6;`l1R_`j0%8Vpibevo=3V&S zTJ{>SB@N2Se{u2%J4Xq4Kx6NZLoxG6-B`POz3cV#LYzv`y*_gkSHV5I$II~)gDh1! z9a!HxcuNwjh~8h;dsl0zW!FFOa6YeW>O3c?y1T8UUB4TkAqMI|Uw8>O)&+j&;uWhn|ig@4>|cjPj_~&f3axMZ z&}lfJy8!&Dw8LtS%w;*pP%j}KyHdwMsqfZ{q-!wd#gLN@KY_XfTNV1;(M`o(r?x{E zx`yJ7#jI|inPBw!LzAa~1MOY1#F>E3vE&F`e~KZ#A#$m9xK3hI*FvSaO$*!aZ9{bx<1;bS@8oN+zfJhGY>)K$z$#bZRk)1E+UWPS~ng3-roAg!Vx* ztEPp3r}DQb;)06lLS1)CAW19y+yc`ja%pEZ28bIqUIqXg$8{;!jQEi#<7z(6f33cs zwo}RYIOcXqe-yFqu9~&J(sv1t+L!zYDOcDw!71WcT_&N+n;Uhul|U1w3v{B8Ans`jx}d25CTRfA4{q)vfQWUeW!?GjSmstLx$sNxl9 z0??-;&}HoS$d)tEL;X#^YM|D}&msIOp!LZbA)(zk^mHAXhzgU(>cRN;e;#_a*MPkM z*nuC>6Eo~^A%(8qSarxj(_mvC5r9--4ouzVAQ>V%+T-=H|LRZP~H8AHAD$ zp=6`yA163Z`UZ33~Q1ko(+%@c$M1#hj;>e+U#E zff)Fu=&fT`%gt4pvtuX5ry~L~$7%^0zn6ng>$IbECNyosF0%q!K$32sC<0uR4JcX>97w%#RcV`_j&ydh_g(~@9WAd-9z!fUkqBw6e;iqLICj799@5B) z>;{skAT__|oER{u1XkRkIyz@Xr&tr>8NS&AUPOl_=3CaNv(0V8-a!M7=&KV-VA!M^ z;CIEX6a#r7hy1&6yqT8KpsZ8{r}<)lAdEWH?rOxTxGMl@93sBQ??y5&9zQ2LV51y6 z;;Ik+43x38-;fHle~NE4Q%FvKOd;k^OHYPS(P|2i`8dPlp$lYhq+FFMCFJObK9%;1MBk%n0$-$?i@L*lJlkJDINcUO<$eOt1&97jrN1=f zfoPD3if$9@=9VdoXmQbsAX5@(a3;jl*csG4+FaDaFw7dXaEvoha$F4uu|p5lrh5nE z#eIV4FftUhfApGIgy^th0a3jCc=20&365C@z6}&M)w*t6v49~?qvCpd6dR9Mzaz1e z4FY%9KuLC>bZk)v+z+51)(N$Dz}X-XcR(neIRQ;M05x*Dzx&V;5`1F?6l^D58L3Q* z6nhulodTt@F|)PcR#quKYf(TZx)CnixgMT9SfVFSe;Na^Y>Vyj;yW4_!0DqNp&2bA0$rIa^m_H2bX_*!n-oP~F}Bi=2b z*-0I)*lQ_UO77|&aH#Qs3sLe-JAzub4kG5&7QCAm99V;rN|i2vMY9)?eOdzB56Nuc ziUn#8gby6r1D`h8`Gs@5~oTi?ZJg&2xyxF6yO zTxS$ijvZaIK_hLuhCW>o9~{KHzr5hj3N++~I69_M2zZxvd!m>yv76QX#6qoz4h}J) zesiM`Q)GZs?U-Qz(_lFyT^epyZ}^B88{8Ke}&is zL$6H?r>LAps@dy@0}0Rqhyhc=^|GMm>a=Xj15h7F9Fo}bY8xMiAa_Mo9Bxn#2f4w1 zSWQU*>R$5EzfiQ*%1Dw?Q28s^>bAU#-PqF(G$=d;?NNU?Sa7Z=1=RmF@bLth;8|j; zJ!9o4S*OsyM;xOKG*c<3&R@1%f7C_Mh1VYJd^vK(^(6PGq2|HvzO|{QN#>ofHO_=p zifoK)V>l-kWf;{4UGB1;P{kEU(emNu&YS6ACSCyffyRVx#W&Dvj>|;TxbCI?c?*5% zy({R=sh8MQ#mDqmVMIQMhsbYsGn~;i2GmW1gZ|DCL*-k*v#O+Y3!tx(e~i*S z=TSn#ND*j^T8hlFaky`-1C&5LbkxK71v)>X))77I?*k3Z0*dRiCbgO8J7kB112n4) zK=j>NEjWSQ8zwlDF|69`c66#h^VHuRv!Wf0{>i5!D95X=kh-sRq3b@q)a`sRKFX-Sy;UIdFg08Csus zts}Z}D!lFSLJHEHV2`bus_Q~7uJzOS5fE0HYi&Za)u!t0uphQi-Xf!{lP^9w>(^ca z|Aitc?-4lC#>*unq)+!FD4pMS0b9d=fXJ82vD0OJ)@qhpu9~^of1qlN_7rPv1PI+8 z0jexZB|~L`0CK*#ewlDbyQH_lsxlcEmeBqCWJeK{W%n7x^eY$goOVN+Ad3xI`hu!B zz$N0NpBcq4t*rG{WlkCRpAeZ1-(|Lu$He2Nv6pO{t5u%^#xVP@W9vk+DQ< zam_43+Ds<~D(;g*e=>QS1R8E?PSm=4_U6XEG6QjDeB6doig9!~SX>;D#05=t)M&wT zrLW>_c_3&tBAaso-QxS|W_UnunRJx`O59XIp}G%V^`bZv4mG0sOv;u^!U*29J+}t! zwL-*3C4`Jrco@(Du)J8=)#WOO?j$t`i1U=YF^M{|!U=Q^e@C}DJSd_*lTb~QnP_!X znks4J*lSmg0R1Ivpdig-yd~@i_fE*JU!iBWf<>rwkIhAsAcI&gq&HzbIX={#?RR&m z_?7`~RiNS!5*Q35-eVrKfFsCTQ+QlVr?ufjXbf^ZF5YTQZARzSr2)E* z<2N{ghc|?t%A*_V74P?T5DW2zYbG|C=83Xue-LU5BrtKgj z;e!w*e<;f-I5hR!LBVb*kaBDtvg7PiSLiqnO}iZl`a;wDGRF5=H8OM^hFp&4)T5{% zMRW#6kg4~Q%>&vl63+c-QcUT!uwSV*@K3DC0rQEmhj`!Ji&J!1Nq)Uq zX)^Se-L7^SmR)72F}ed#jR?oP9dv=#T)oS&yd&!=0G$C%gKpVv?v5^$VBa|;+n~b{ ze=47js3{B>QXEA;;YO|N0DWjJ+A`4f*ubF_ zGPuOx^iiiYVbKX%(^(*{PVl23fg~&~e;|-Nm`VZqa71U$%+WBCv!|TIc@G3|E0#}# zgeUmiWIlM&5r+bY^SR*)8QMooTVNF55k`*9lHT6gqY6D=<%|NE$LnfH;DEOr zK`VObW7|dN;c}1loGp&2MObs{(HBpQ(9;%QHP%X#a^nI;uwz!ql^$5*wiw;me@rq^ zES(Iigo1rv&Uxd+ZBqmXGP`*5ZOV8LVB||%m6a@P7 z3N#fU`YE7Zf?S|nz)W{QX~Ys2f18fve6phZ90%J~4FwnYsge32xpI_8Ag4x|rN{n8 z?dfm?c~N6ZH)$H$R)Tw&N~e*5Fb~=+-|C3e;7%bg0?XU z=rdxFOIMYg729hC*-3O_N$Un~=v{57)46a!m%LU$i6x{in9Xh}z!_7giU>cs7z9VBMfZ*lUWDxH7V+9hvC1rCo3Eivw^+YD9GhAW{ z^}7f3g~`t6HBTE5e{<~I%C1*%qzWWcfPBAHSVpzOfJUdxv&AS77(jihCTLSblP9oj z1AT?YJt`A(`PN-sRINl7SV}Hs65iH%4=v|7OsUG=-Q#tJfI5qY z-r*#Bc20t@-U7y-D8x((Fxv8L{=!67EC8D_-U_m>K3b2$e=KHwZtNZ6-aF6@C=nI+ zdy8=+{7e>ra;=7Au+dNM>d35CxN&%RkxYcU8#i_Ae4cP@xx2+h>?AM*GWuN4I%BCN z(5NIjDf>2KalD$r4MF4)g^t^rh9 z-Nrn}#<^6wYgvWR**V-gF(~LlmE6rRu+19n>DDbCpgI8hGzW(2e5BCym^>pOu?rnt z)-J|C-rZ%6q~XuLLV#CTkxCA8klTs8>V%V7%;LQb3!s6PV&;xj%! z=6%FGM$?g&8i9=-Lem+-D5APMM9fewfLxVh#^Q4g2QECoRaBugOomxpr-ZWJR?-#P z3E7-Gl^S1BF2t8%vuHLqkl;LE|9|%0Y}ZwEf6daqAf%tZJ9G=i7_h;BIRgW>>HF^L zYs|>1lT;n0N~)}15z4Ktj2&ymnseIt``&kq=c#yl=}O#{N(H-Wv_tlvzuCj@_i2vv zs?D75jwDeFZ=q;80>9E1u?HDn13OgP{Y3R5w1PWi`3`uMYi$*rR?KjKVZjtjpH_o` ze=DdI5iT5pcm1`6f#T1wN%|Kv#F2A{?!y7)Nj!uB1Ug1)&g!pwFtuAs*-`;$e?esckrck33@nV3_=E5LKYG+RC|vNzt0jF` z;HmBCxO4nX*BEWwEP;4dU<99Voj!ou{KE>)vl^J)wcox(z2O%ihg(<# zreZ5zkQf5}_5R`<=K~dJXI!3B{uYyaD>~m?>_qrq6-=Lqr}(A%2=C)B2_LWNe=Qy* zrZi5$vaCP4(T?&P`$U5$)N3@%kI*uYX+4Q$5RKvLd2d0Xc3|JS*xzCaF4l7B@hFm?!5eu=nBw$ZKZuTY4KGm_6p?A9(?xTJ%SN4S5jIHn zlW6SYw+Mu@r~M?x+-E|%$RPKne@PL$uT_8wb~*iXA2?^nm%hVidBY-L!M{=Go@7|( z+Xcx?sw2;_|0(1j{bW2(e*eP4kr4HQQAgdfyyfL8P=oLpXz%Bn8I_O{jV5(&L2bot z_Eyt;op9G|Nvnj!oOaKrEC&_*E1}!7BVV_(S3VB++Q1zZ1r+YZ6Hl!#f5P7g?oR>* znAcXJfZHDl*VBa0k0PeLy*Ki1nYxVOg#;KVRGyru(u%D}+g8akTPiJR#BVU0fu2$9l)FG>8|GwN+Fc}T`wNq@v2&hb!uqv zBLp|CmI!{)P79n4|2^4Ge>Nl?+YhC6Vc1k-RIh6_9Ixh~ZcABsOG&+}90< zO~HK$;^uvt8Cc-fu+2=MT4Z>I-z&oLLYPYlBnpL?r@-%|H9p z*+~zWWF3s(1AV`YK7U`QhTC6%#TWOI?pHN@<*|P5OR4$FCl5Zw1!rq*zy5VH*B`Na zSAH71bR~4l8$=E6e?2`P6JK9UGdQ#FZ}}Imn#4-DN_;t@f!YCXC+oJC?mDUJ)Vmm= zRzD$(Nz;}Mzs+d=UVz{m@8ZV17>vj^W2o_AqOfP}aXLRG#I)}V=FDed#vZP==L<$Q zE^}-eaLnSp({lKG@e&sALkG-PhCTi@cQ!)cbK=k!_}ad3e*kk-J zjm4@+4`H!~91x5LTwYNW zorOizNTH!Ge=|!GQ@81Dv4ZsErH`OYpZg+>$*kWa))7ayGR<#J#O)Uq zh0>qiw>hRyP*6GahkP=}g*|CLe;6{YUD^!gHhR*hVwHt zZLqqeG;Ox$tG}r!o(AyQKc?34WH}rj0LrixKRmpQc*25k4lCa`Oaw{t@<*s|IOK~7 zvh~4(Sv5fPGR$bK1U)=U8Iw|n=jtG5Y1|XZe={Ep*I-QI%tg4Us$Iish zOJCLg-II8QyQ4@nArK!5;e20C>>u5rkM%|#nA4lZ$YhI-WBJJZ5095xhTC;8D1X-G zhX!u_%`Z)c8sl*%y1sHy*C{&kru+q+&Y=8&mvI|lIYkWW>Y7~eAFhy6QQ5xM3NhzQ ze_u<!x6UP%OBvg-G&hHQFko@MX6GAHk9f0*yx z4YNdV%hrnlszpqM86pwc)dvP{E0M6eveV?o#R$V`sk^sAxk}7Qh}tE2?MVAWP}ke` zw(+*K?$!&~(fYbOk>Jm9Qzil#Qre}8vv-JTHeBhs|Jw4--1Fd~Y+$DJT1Rw$?m z^v?I`vPr1aZ|Um(#hn7;sT8l(f1A^uLHy$t$n&;kJHz(BF86jV4tbfE(Y$5CXfNpq zF-l9`d~=lq{ENgB>-;_Iv6ve^aVpxo4rgPq#`N^IKCOl7n@`W8X?GIvOpqK8g5Ss& zM*f4Xz9H49?rWS1@g<9~n)gfFDJ?fEAQ9*`HEDHlFyr9D_ewrqJLq9a&EZ$rG4)|inTW$*Bdn>fa@AZ+@$4}n*);0Kb>{v zh~jkJ{&s_Ha1K8ywp(UA%TsvV`RyT)$CA5PDf4DlZR{dcjZq@<->IC7H!tpP+9$ev z>T@UDShOIe8G7Q7W{BVxe`maNuEp2Hz6QLb0MiQXV%~yt?`@)v2eH@MK zWkTvbY!B(apzWvhR` zA-vIai3WR5thD%>o!Q7UhxO-M;06JQk2ezCFXcL-QALKH3m8Gsojgwdl2%gndcFZ6 zM+Y3Y9xfFj&}Eoo;xc6PVp>8v+e}k>uvC869-{>FE?e|7%BXaw$7ofpsZFik%;i)Q%J7hWgQ5qzn(C4 zaB8U@Zu747A77`vw5^-cC)rot9;2^G4aUhlmiRdiB-W_ZxKluDIL$Bq{0E=Pz(WXG z0@*J8rKGUXVnyVveehMSGYXikpwkPk!WAfeyPIpwz;lH-pW zPW5GnBUoAQ6zs?@P%@ML1rzA#m@JR%lrH=SfkN%N+?9~s8^~`)w}FwUK`5ai-b&-0 zNT&azlqZI57qBz5Z+!kZy}Q;}IL|(*%iH9xUI z?*XvT@vzB*S+%X&>+kE{_sEfslOY78AiSD!IwYra9CaKW@K?;UGXAeGN9EgYE5#R< zXY2!Qe~#Pu++aAw3GSAZ7@6SLPHlGZeaG5+aq&$L*BrjZL)9IALuoD{nR#c@KB~pd zrWSVl>7BieqRo)ox1CfoYtWIiU-#?zb_k2IqfdBe62BPn3dI!7@9l{bm$-HFanGlE z61&sWU4PF|Fw4d=PKf+n{?0E@5OD1GViZz^f7G|!FUs~r9-hHfYiT!ZhSmUPF%DpJ zjO_d~;cp29!TF2ydp1+~x32QuE+(xGv?@vMXnmq|LtsXLTKQokzm>W+IVU%(KWPgpy(7~uxI_<2g|Ytk`iTKbT~Fe{@AdW_VA~S8B^7=b-G% z?*RdM5=kjTkVQkSbk@QAC7-g_cVO<<{cCS-{r7JK^7o);uXR_kq7U+3TNRO%@b(+3 zEHA9k9mM;63EnrU2$1~*o5q~G*{8~pe~}p1e47q*wJ=#?$Ss@CpnnVPhNCSQ(f(cw zA`E3u(($*?mqifr7wae8R=Qgv;68Zw@p=56_SPU>B(weJb2v=*%k}Ub0iip@^f1Rf zYCa5e%XN(e|EY4#;x>fkM%9-tm6`0XeDj-(_OV#E-w-#8*)TY z37dNpf|8o=uO*<=`0fQKeM~?Typy|!57xtlJudey#Ur=f3bs{6fl)b?c}mqDDJ_$R zO`cS{DK^CIE#Y{?Sm|%c)?7{`6vbZFO_FJMe3SL|P-StOe!QVl~^y369JD6N}>2 zcZrLCQN70Uh~*DMlcqtqe;I`)dgT)tCQ;NPMQEmKkC-VoxREGHL-a^23sb}$wKwjz zRorOJK(vDneBqOFk|(_H>S{B%G+Yyg4aDn*#nU(*jDM$dHwX8~@!cyx{4dp<(Y5{rHql zC-q^K<|SQY4tqy0=t(EDP6M0cp5+u|U<~|)m7zMQsaFTe`4DQKkTUrJU%(StnWV1H z-<%72K@sL?t@fa}f1{@gP-j_xrS0nMQwNrMFO6-2J;M~PvZtwrOfel;m3KA#2W6z9 zxYLBlGD5eRtI$&V?>tp#p{{~MsKDi~JV|t0rMgS}zL>XYSU+SLMi#zrCb>G%oD>}j zSE9BB?lLTbD4{dO0%m}4+iE%;X|mx+Y}K+iq^}bnEcs`IfAQL1msgg3%YD5hIgIij zR=9by-3l1)Lu@P;Q7q|Ud-e`dTkoSdUd&WcS%%_?%$KXp2yP!zMA3@Iw=RsHjMAb5 zRSwlqJ;^D)Q7dW#Sy3KnFH#5Q=K4|JhAjwUO^eqm6eE@IP-^!RQC5#w236XRjHNnm)j`r|g=&(O|yA2sqO`#{$OFyu^} zMfoIr_`z?sYicJXGQ>kjHl%wNkMTCCw^S1P=*{11VK_unfMFYRNPb~(D5_mfW$uH? zRPy{{UnpmP$@LX=-#Ei?Ybho#uOK(IU#{V`p`StgZuzw?3S$_1oA8H8E2L+)!@1ZB7v2?6w*t!llh&tFcgUe;^Zx_?=^^E%HnjD5Wz z6Qnh@q0gs2KsMLW0LUs31p%MN0EXA!LEi(PfB1!m0yU{^?1XfUy0Y{;pFB;!$-cgu ztD*Dh%8MYTDovZCWX}@=2BpfV5pc`ScUvRgS4nbyumNId_PbuME-+tq5)J_d(L3rS ziz4*h!EZ0KuLse8e=1(hPe{G*-`DKxwEMC%ryLD6j+4AT0C;#?bW+A0?}j*WshO42 zf5>>0>9Jc*d-2o-dy>|yMaYOBz^fHH1U+lcjn$lg4tx@r+&)0_+Yu~3Zq8-H>Rm18 zw8PBh5aE&>p0~*1wjZGsk4ZoODpxvWDA5?ASqK#|yO*o%8fh9X*RBu;z!phKJZx%Q z-urQd(%bCIH>XKt3jk;?`l7H_$Mwx#e^FJZ0k`cqWPkR}_BVTl+PM~zC}1Y0jl6d4 z@c9|Xx1cKtU8Y~d{1K(w)5fQXLR=hvdYlUNGhq#6U@=lcQBnN9A@mVW_rY_#3|BOb z+4pAuv&-NvMTycVez1#>T1FoN^Vf{t}xKbNA{JI$CdY(huK9amPjnML59Gsz2lB^}edlhmE#QxFp`9I`XH9BS86H zSK0oOPr@Va4TI0&?>6tTl-sTymDSHMzP(Osa-qt&?{!eX&dG&O)({t3_7=Psp}c%P z-HALr6)SyUo(+4rNg8g@OpQ*Qf6{ud{*?Uv=o!@iD%%ktykK5jZlKUtnJbYFZF!-k zZQ5ntwI&U`YhpUg2JR?yE(#PJkI#ysD(G+bjYR*H4F2xrMMkD8Ci%9l2H67n;*a+W z1qSqW#98IS;G`2%Cxq=ky+2@y8@KP@Ta51qKK=Vy;)8l~e{Hz<5lxvG z>W3#g)u%R!!yTdmM3W{boKf|Ni_wK!r`~q< z-ZQ{3ba_Z|){e&-A)FIN2^bT!n*3*5Xpr1DWv0v0j^O51Sk8^Oq`U8HikZa5~wes^tSme{-Z}N`dUsf36+lKWHsGSAXdZcM&ha&iY)?8Avt~n`k`D zmH0YhkxEfom9YC7TZ{M=q9VbvB`=ufZ-fa(G@Cm1LPn>Hr#-97!GDo3pk7QY_{1RdQQF@bx&ccdNFe~wm5&tF}xvafuR*sICv`Bs0h?b7Rba~{J{pI*-L$Cpg zQ;+@X@3y|wKgKiU1UH{}Fp-QzZn3LY?uMy+f;|$$g}tZReYPD1DeOns1>JYYibOkB zWW1fKQe>4kZOeHOaQJn1AXW-}&)Vd)HeTW$+SI%m=q70HnTqsS;j8 zYx05692=!0e~v`6=jsq~F<2CCk@L1$L3Xa;4`P?%ZL5F#_tO!(i}a1m#=HLekL-kO zzMNtpSWWjvlBs=h#O6g9mB1s@-;WvInbUw{7fAfu>V-&&yE44cex@DQ>!&}&e;LaV?+Nqn4mO>9h_iRZMBz+QCi}w*^!JFqe>{QXrKb-zA1DO!?jbNN z&o7DW*l8vWCI*h$`Z2hL>ad9ibU)E-rSac547zhc$bM0t6UoSF=ek5Hog=eY5Nw3X z=q?Speu~ z^wpR_rujjFp2KfHVcU;M+Dg!T-=h07N6!3jSM<6n?kJW2?02G4nmP8Fk%A^!?u(5E zIqNb1!D|d#_1BFigKLBBYsjKhdNN%+K^U-C?arK@Y_y29|E(Tkv1RX?G}k7?8mk#M ze*;t~jM!CX%f_;!(ujHL)p!XeX1H7jFk$NVH?Q-@2n5M1VT$w?i2;tCNV!^lK%^$@ z_1#_YUWwBqo^th0&RH<_)?Iwn=Uoa3GVmNM3=b^}5kZB_B`P{-d^Ee;<0am1Z-Mtz z73b~k;gNP0e+e3zi*2F@Wdi?$37sQOe^Ve;?O!}1Vj>->qBX3Ub=%PJ!7EQyt}?Nb zcD**AL)JrWdQ{R}@Qus}Q~;uZA8XnadD>J3QXyl>@$(X$HoPGAM6*KuswjCroE z|B|wbF4-a6uIm#+>)=sS5m=FZa-)ZC>lyzkCDCL}=o+wt#C6p&iYlOKB|4*uX@nl$ zn8a|&DY}>**Hlh)wzED`!)k&%f8sNiewoHkj?+K`CoNg-haC(cUo^$h`r6Hh(G_o! z#1csdVB3+C&0PP*oCDb0{M)FddEIyA(JL7b)^Ne|G#ODt%tt`8K}eRlPq*ZxouPUD zkDSizM!V+rG61z>C-TvmWb?a=_R;5ecr6dDAutJ{KWI=xE`WQS2uep6e=>0`e?49s z8T#pyYV7BZ>02a@m(LE-jEUkC(2NVgY+j8uF3PKa{|2wC_Sx+#XTmn+>eEpL3NTJp z*d=QQg?;n_$FJH_AjM9iwZ9?*yWr@Q7G|uP>EZYSvSG07Ff4o|--1(4d7AaNtN7=< zrk^zC8i}EkyvVWLTi8a8e_|?CRe68taMp{yoL-?8^Qdq7l1{2+CTib!Egixu<5Av^ z!t&4k1W0pxU^yt~L{wlJ|19B9!7{ z^f>BSa%Jz)ekG*G_?aI@Dnr^!lV7OHe-Mshp|j?&DpYUPr1{mNDZ? zy>j6U6H9gLairQC@v2&ppntgZRrM@fOK;~4nMWI`Ae*Z?w%sgF`JWun#1gvn#ccx{~ub#{V&o;mnnc>5^6 z>ETPHv5t-GbYg!aWi+Cy-3T%2dfeTaXS?-(#ftdbeTD)qu=lWk{P)WQ{x8pa0JPpG4Vgdy%iAG6eDs2H_<4M4f-6CWVkbImr;@Gx; zX1PyB8X8K_f3Wh$Pw;}j@LwPNg#Zcu`uFes`#t#gb@1LFn7*Q59NIUS zQ(d!)-`yO#wi)qz2k`*eoFC*t)OP+toNb54f^pbWf7FTyLow6c$0G9dBo&hC69z~q zm@X;XFQ-#^B##n(^x44mbQ+lk(X*e~W{~-4)rN+ZFs$+j`XOV5uIKrqoqv~V=QArn zW(}FoQ9W-iN^pM(*>mK}QG4HYDBa;;`m?ik#w3{;SZzstJ$FpHve=~}8n)E=nglGu{Y4(X31W2dg+e+Xn ztHQpXOY-8DE&(=NP*>S7i-37 zDd^>nl~CGebfLwI+4<5js`PuQVca`S@w z#Ll~!E{~uVgHOu@Jj})!|2)zMs{oh>#V6yi&4#0wn$2dY4+;H}O|M7J^ZAJn8rk?D zm++@@sjdEGJD25@{}^XcptXDLtU_YneEfl|6@GaP~xqq{rK2pO` z$v{b>w@Lx8Ta)jo{U{KGQS4lyTgGF z>XtMU0(Q;k%jA&O#ZdNaZMRQry>u~;ZIcL)3K&VZKffz!^e{g$JwB?lvSDDXf3!E_ zwM$hi7i8MMuU7+&Vv!8aS)BR0#2c<$3)br72WxGvIb!_!xTDispw+MT@a$v zM!rToKO!XQQ1@cidO;emLwRRce;Y2yvdt^`1&GayLSwb>gai^nI3u$oKJ!zPURk9I zZ%z4yEL|@s^6u2>`xJff!$;2kE)qt%Z}0o+K~LJ+*v_qRu9cJ)?fIrm7T)w}4iVP$ zIkUREtbqVf_?(U3)B8knS2yaFpdL8LgZ zwrGTMKk_==Lc~}B+n-tg!ktGub1(Z!yxrM6V7ir)#>d0k>{z2(pg`Mz|BOXdIphMU z3_|L&XhU^1lDod581in(f80A+zO1ym8^|k{=z;Lt1q}Il z*W-?*>r4~vNZEk&xQCa*^BmSdmV3+t@a$VGG`2z8O=WtPI5`64f2K0q$!ByhXdv#} z*^-JnO21vMQhfMD)2!h^@{J9sx*iY9rHGz7floXT*|Tb#5Cqr4nGkVs=*owj#p;-8 zh13bV6tSY3yFw>QJNQwl;Dj)fln!BXIXsOgY5H{iVJEu_>TW(8D|%faaD95dj~Cy*WY%xPqKLb^CZ%lk-%ucW*^I68%z4ee*u30!>QGfDEh+`w~Wb2W? zNv!I*Tc}vZWCbk$@@Q!|-jyMy>2u5s!78&=XvMwC2dL`%qTiqh0O|1YY=xo8KLwlT z0;MfVqvP=!z8vQBIv%F`31J=x$^EORiLh?WEn<2fMQ+~A=JR%`I8q&L+}`Qf^Wb(C zS=iQUy{-2lZa8z&b1j~chL1q##Z5Q>N_Rhg zpZA;j3PW$>9@izDZE|4FMgrUC_(?bTn10T~K?Lrc*KBv#0t1gh;GU*tM;v-3#lFMe=T2;R|r# z!F|aF)Gn~_zA1)p?`xAY4!ze~dXDEaHEdi?)&A$TPeNZsFAn9aciL&OvE}&CN;!l4 z1)4qY9O7!f7JsBWs*o_V!;aO4!K93gER4Rs=&?n(D9B#HYN%|8b4sMSXp^7td{|dk zAIGN~o(lPXA+M2q&EAk=TtmbK&lh%Ma`M_4IXT$oZf}>vL8tuR*N2_@V7+0=HKHgCle}5{d{beQV9OIzID+G`EbPSxR zzz_i?KwdR2WR723N_M9#qejCFkt$+dMZL%4Ui)R8Q zM&pI`>5J;_I8N?8X0$k`lVR+f4>MjV7*V{eXsB_(A*51 zV&@D3aeqWGe$ODd9{3-X?Hhhnm(ScZSAJV_(%6nE-GwAQfvrR{3{V6l{{1GFP$2)MHcNIT$RuGW%<2=P?koLT2im`0fn@x z5ba@kOBm$lBSb+==E~qSxrz^WCYAMRc9&hT%dVm`>zX{?=;rPV?R0A%!Bxw-1Aln_ zHZ6v~t1IS39K4kGkOrsVJzY62ZSLF9;|&o%%f|371(c+B;@SJ2wj-Q+8EX6d5Q6*S zFbXdo(-vns?t7!$ck+divp_@a=%9gco)2bXdr}7Wu|7VN_(Iy3ZZ-EE&8^03!0YE% zoYB;9aNj9KKFHr!X3(UM;`hfnnt$OORxgVNgnnGh@7uIa_%^)my6`l;7rMUt#~TNJ ze2aFqc(a9f{tc;vmzHnXRY;r8WmaWN#$E>N-CkA0I(5lB;7s0q*;@N@yM!XWQW!h} z;x(L`>8<613?*P-eNR6i7OF|K%5b1Q1sGfC7)9K;94wR_)!&I~;X&U;On<^6l7?r~ z^>NyvcF=9bA^PAHf}-3j>+ei~%{a(VcU)T;3bAbv1HBaeXXpm1!Eal(84;#HRqiVt zkY)~&TVp3YAP45AuN}CzI{uV&37I2T_UpkMcSEU@I?ASN!bPSFvRXaTKZ^uj(QRVR zJ;%rK72VkNYcj1q5D?86OlJ4Z1j8gc~YRbd?*vLYN4PF!~9Nb z6d{Y8kuT%el(_rCKyph^41L<9N~c7Z1Dbz_lKtlu*E8|$s3$k;GJj*AcThwg$_Vwt z9-bPBBAyA$3|A3JzDRCw51;^c(I`eY?wKC?5+$1BCqt9{ejO_UmkfE!v_C$@{-vSB zbo(4}Q0s4%O`7?cYXjX$hy43g?ILAsu}h{_tdjuxvRFDfxb2@Zt5~eM+UFxaHk|#} z!sh>?pd`Z|ZU-XHAAh!TF?R`iZ%nF3H54*ga|KYC?Z0!h)Rq#>E_Iv^BR2Q?0ZfGo z9FNbk#k=#nC)A;Q19q#Hk1IsZ_L$~I=)Sn&ss$clUx}y?lVjOluFK6{&fSqwl)_NA z@pXR}R=ni>juou_y&tY5z|lAd|GM)ocb}{xqWpb`&zZ)DJ%2<0rX3UBuWzLocz^EL zE)Pu_X{rTvPU+*c@zgITM0e6WsLs%1q8U9fKeqod6;xA|y^=1C*v!j6G_CjZUr(Hi zp!){6tpAdzt@g(#m(sYRiM*@LV#H@^I8tf)HEU+<7*3`u??phXYwWig++TTjr+;XXz@czx9EXvfCb*U}AB9Io z_VrwfeougVD13!zIqpdMOLRPfkccOM`>_xm*s#K0xoOK+7wa}+ijg$G?4FN1uye(B zcXLmqa$c|Z*XCx2rl2ULw4>y0Z&u&%Y1oTz6R>7;yo>Ca%50=hr6;a>Awo!VW=9{t zy;zC*JAX2o2o5e;Mh3;vV~QAHPKLO|8ZJ{^C1u=}@34)(?76GTk^Z_x+2_8{b+n7i zmT#tPE)?0F*HtAN2KVfYD%rt!?0tEg(vR{px&}cE>wis)rWynFiZ@K8lxVB(@HswO^#6)~ zW-bi>T<#&VXe&o5nHFS10hJ=>+fgBa$^QC2+iPg10&e0YGwsgj2FdaqH+R5W6(zcx z+_+08(cd4~Axbs!n#T+)bo3?8zl*@j{94W6NBOVx_wdxF}CmXD8>NRjTHdb%9b&2xR5%v?TjfBfRe?~;3C4a~C zr)SOjK8^{*D~Xbvd2t{iIW*E=trz{|)MEvXZkWhh-KUfO2lNvPlI3;*1wz>&vfkO) zAAjSDH#Sqcf;c{oL&4IgnNM$enRog{kIXS;KHlN8JMd zZfEQ~KAq;8il-k7joztt`T|0|cYoG7I9A%T;}D#CBNn1`VxA3;&Cog~C7QcprZCpL z<7suxqAmta$w1CMt*>SE%p0MJSL5B3F7h_sc6@@|_MPROHJnNDa=HlzvFhE#1LqCK zl@Iyx%TWSI4(AuPP;Cn{<(z+V+8I5d`wf=fkGm3Q<>ownTeW1Am%2342Y=&;n$Yv= z1AcffTsj}4;4vQF{(O0Zu;GV1=`l%HE5k;|s;vx!7_>)=IgaQ;tUjOcISdNpw{cY! z1*=v7{8{v=py=YdbmUcy8(D2a(%*PVpebpBFd_+SQ7pMyw60U$t-UAvR7?(>& zl;XOTW6U@o`h(>|o#&~-xqs8-QT1gXUpedGUAIRcPLJiAbv>|MAY`(br56dqNU1R& zy8+`_@YMNBt06S7Yo_gN3MavUTh=0c{RS3<4KraG&3Lvl;1I`RiSz%2u$O7@fA zE8(nLs@Y`wiRl8J6l>!T^-#)e9HN+Za65Y~Zi({~9?eqw5&k5%b6ms>X;Jt@vILt+ zp+2UDb2staO2{nB$bYJdgIp=jFj$O$s;5=7B~D93V)wR;!QfH8#|V3DD(fhZdFa?< zH;E7uR!3({2!3P4p6;cfdUJ-3S+U+(u?+D{WQH`6PB!zaVi=%uzH*xgMTD19;H}{z z`Zw`>#7`)@=)=kkQEYGy#!#+S+lf4Am85&~m-2 zshMH4$ELPtr{)LF81|=pb`jq(aNQAQbbV?;C42;=f!77p#`BFff5_)Y;`g>p_Rd=p z9P8JZEm;jDTATN$pwFbjT}HVtFqYm>Uou?TJb6xXWf^R}D>Cu+D(ubu>T`&PLMnTo=b?e&xpkqiPR zI?TeXy|8G?9{zDXj5uE8T&MuxH6}`0GmRHO{Z)Dkbbn~&gU8G>9*dJSPclFt&09JN zuTk(7_KGvON{SVT#?NY-%ZG|#YWS+os%=BM?a0ALt!cF0hgWx;Bq&)p{aG?}@GZMOq%MS){2?I`>~CO zNQpKBUhD>Vcf7UXqd6lyddO z5xctp+Epmzcg|xnDw#gy5%vU6e{aRVfunZZw11g@@mB>Rl;G3>+9Gzl^G37g!8heB z_44>0X9KI1PtwEO{=GC+2v!Yl1xZu1-fQ2fFDZw}vw1vadr`I7TOTjaVg!A-Eq2A) z2QfbskM^0g#t1$Mv|1K=sDp!)dNvHa_jzv`;E=Tcr-d||`XjuM3 ziGNn#xsa!0GsznE3J~9OKq&y43CH6Yq47&|{EfX1C|iJr4l|d3)FdX>c(P^%bDdNQ zT&#ds6ShP5X-DXxl~joq-th>(?d?4fdZZARJ;lACdC5v9{K$dCx>aXVgX0|sHMkYt zX32h&;{$6niaBdVvLQBX>3~iLE~am6L4V<4iTe$#G#p+Id*?5inhaL&PZ#dQUueC( zO-4ud&v;K2J_5orstRA1zk;NhI8gHpA@Da+bvS{ISe)AH0S``tDkjSM{(uCJefm86 zUFJd%h-xgwnvW z-&;Fd<7^Aiz!}|mLeoc}Hb|$KXitv8QBz&ihY-sp1td;f2!cQ3{M6a@B4i}V!aGYOBbvC{Wofpl5DqW!kkZ~>}mfl z|7Noe$z(ru@0VcxQiEONnYlhr-G7I7o+%xg+Z*%kCoLD5zSc+K!aJz_jU7LoP3d@u zo%S>bXNFx)p?a|HRS5okvBTW-{%+}u>jc$S!%P=`-c=^lby)#>>@J#y57;P6W^R$1 z>Js1MJ12L{WqLPW zD{tBf9zIKVXYxQkEv6@F@fHlEt*9e1|ZEX)UD=5YAIU{@`Fw}*cz4vtWu zc^V4OPF)OrA+dI$4rq9Fn6Xf#m3%cBg4|1Bxy)xq7iSxO4?nys6MqjTUE2{PudI&f zT2zvxBi(xS5%Ugb-R!Kmy)L*`ItJ4-qT*bNH_L5))20CH8(x=x-D}ecm4JKql`jeg zN0FFFZXhNIJZ+6@@DLTKWA>K0V$y~gPjWx;xtVVI?a}QV1mpw9ygKCcyW8XLBo^&5 z(%i57GTgg?OIJ59uYWVQ*1y+G9xs@u0m$I$F2x=#O8%{4y^D8b3#4)6J(mN{apZo! zroWcv*F$kQ%{%Kijw1EvD8TVed;Yre(xSmdT@MScKYh2^HA%CfoV=b7l$K!@xldAO z7hdZXOsI*>hnDrJb2|e3PPlzX`8@37BfXO=A2`1$qD|x-T7TSGPChxp3(crk4Yc^S z!XOdZNpD_``Qz|OOh`W)V(GkBazL^{=@8ATyzJDug{(g|p(0LpZLJD0=XLuwX zAReuaN0=7Tzn#BbT4v96cTVA*a{I_;o2VaDezP+J@K9nM=@3{2ab~(d?hDScl$GO73b`XXbhVlDAs*1dHJb<|^XOkrKvU zA4uK3^nXVBhf5pdAo5n5NTSk5E!P*+B>kU~j77N04m;2|r0Kl@E2TW4xP#B7AAJ+q z-zNKMWUykF9!G;EI}y}0Q5q|p4GFJ1ka3j4qTVxKa_l3K^z~FaE*@zGZY>iM0l@x5 zQl2yb@;3A&Fb99dUaM+eB|Yr%Fc2}#W~a&#ntzdq@M~B6wrDr2#3y{QOjF%h6X*Cc z&nHGyf9Fs__Qwk!U$Fk3e>})kua9jc4}P}c$({w zX;0Gc1Z6ru{27z;6ZvqS$L}=?lr8SRtg<&1a0gH0@H<_g3%>0h&b%DmF!=q%kN%Pm zm>-_}jw=`?2#2F6S~s>>EBgAgJDKmy66&+VH@B**54?#YXdB?_+TO3v0|azJAb&4t z+y5ZLe(guo^hb%QA7%1L(kZ_jo#-LNR=R4iMg=2y@;vw;?#zeUZhq`$zLs$^cIes0 zt>!d5LQ;x9k49-ycir!UGj(k~lbO9cXcOlU_2ic{B6a`p}+jPsMEZ6%!q0eGusxx9`j!US$#Jr!GFQVv*B*^ zS&K@Iw^lO1_w2Mg_fZzB)4AYk=J{di*YWbMUyv>bVIwJl9$!RL4OIH`_3yo;Ka!yE z*!L$Fm?zJ=qW1MG^+w$2kyqT!(8?RW;6$~a#I*sUMt-m`y$;DP@=Revfa z_49$x-TcAq9J$usmOi=1J%6;GRhNvwdzrpC8MNmOHYhd-gNL5vvII5I#UWR;TR=B>QyjOr@v?DVNR-U3EFVyu-1x9CFUc z?FZ{5gy;tScjRSdbBHfGil?cxs~RO8zoT;%s5q^*ekJ+5PeY!KSS?^ansQxf%)UjU z0<4d%zMtg$Rbh!#4v0?f#?$P**9fQTgaS@zu#f3&m^=VxZkeKAj}_LvUM;|s74y;- z$&!tBpE?dYwtrOGqWuilX0KH^s379}u;BMT@9n4spnT1R|9Kh-Q*I1vE7RR0m)nNZ z8k+4&UzF2AX!{@mJUC2Nz{v#l9Q^PE8ViR#s4ND@F~5*Niof=|*Ii3oA)F6Ebv@7L z?6Ms18yI@!6xjQdBxALGsrW}Yy@Y@=-rnSjKkVdds((mW$k*)2!#e9o-W<7Jq_*Ke z2?#Qw(?ttzuRo zM>>J_ES66(K~_pn>S-b`9P7QQG`US6f|acJlKz>`gJGv0EwsaJh#a-ejV7k@R`O}f zamEz`CC=)6Js&U{yfS9tPMJ^oJePG>_+ehAA# zkWcXbAUhgSyQZ`F9y+AA)h180S+PoQ36srJPYtRK-A(fmUBz9muS1gDk)2!2(T#To z&~L_?a?e!iMB(7(6&%Re5X!2JM;a^$(nGWG~ z+3oCC^u&ADP2Ws6pLC&rHuB-6;9j^cbZ~B&O5gt zk~*Wf-H^?VHOb&Q1n@5OR}l&y#H*vnzv_w2%7nTHhK!6jUh7tUczm`yCb7@dZhy}W zKJ`=S<`l(Mzm&t@68v$~>uum<{ao)^o54JJdGvSR8$Fo9)61`BK3DA9W`Cfm;CS!O z+&V6m{O{nk$!cz*_{->2+KZX-otke`wcgi?5mhe&c^yK7SqL^z-J4 z-GTUQgvg(`jB&y^5coa+d0LTR9DT|6{_*yTks1QL$GF8&O}X}S33wo-DQGXYTUds z_m{RFeq#a8`0*z*biX$vAR}zwI&R{7QrQXc$Y~zkbcYDXqZW6ny=g8|hU4?TfA^!d z!!VTptzXR97rM75oteT*tnxN*yPt6tboY3)40i)XIQF&h2&1(khJOnzaIWPPQOL-J z>2BGTf(r*m*J(t<;ag?{Z}pedM|RK9}Z%yk!xM<<^*rfz%@p zLmmu?t__T^T}2@RO)~S&hxLjr&z;0AB1l)oVN^to?0p^hqQl z!sq#9&cwR(=O^Am#eb8__>pbyZqhi3@>CSBISoEHe5MqZpK`(g<(0feOmvw$epD@P1MIv@(kNJQ8-caMbhEW6kXb-lKg-hpE{>_(I zz*8>OO5iFPz1!wxclpH2BdG@Ga;xnkzx4g)3ZSu0mmzE?H-AkTZOWxx8A&U3Mf8I> zzY(GF-&o>I*n95jRg7QD?sh>sL>OF-tu`GQ&vh*7qmdR^PAS1@fC1i*xTz5(yvGKJ zt1xDy>tt_XzN=h-w{>WvKza&n z&Ct^n!tx9iu{=XRlwC~x9s|lN$G0Wl+F`(I2-=Z5Eq@977f7)Cu$;ouGQmeQO5V3= z?ZDpLIR*S%#u9^7?`~;qYo*5w9SG0MaSOz*gIBKR=i@yAR!zed!(rL0q4F$J2-(@$ zpY|UZ&8IOxO^U4QJo(Zua>X27My**|n}<)zF9IUlj7+dpSzGTThu;cw76gyvvs76M zc*hXF+<$&vlx^2>x{Y~D%n|>7bSAXmvZZ)~h<~$NJ(#(D_B=vI{ zx~n+(4NIpFD+zhA*@h%$(k!A>q-V_J!yKDS5`WmF(}WbIf6!G?H=16pZEE*+eqf^1 z_+jCp=HHrA_15Di_We}lCy}C|2O@oMN@0>e5f`?*&|ZqPEfr3FRkVeUIM7j-XJ;iJ zDneSzwl0+i3`WIJtC4!1iOLnN_yvE#KpPpT>>LMe)?fxl$SR$!FXbb8&O2Ae!86)M z8Gpt4N(U7$GWR2PAvVWfHq3|hCKWng0p^UMrKY`r8#TFt9eJ^mH0*JbA8j1%ERAK$@q2pi9u{pQQJ5EaR_){cnUWw zdtA6m)m!ImtuOfJmP9!GWx$@@InKJNtG=!eQAij~3at5A&+n|J7h8<2dFwCVv_2?-*XS`!V<1?GJF3IPST>h-hSTw2(8UpD{5fXn^tE53&|3en)lo-Ot${FH zRD3no$BL`5@j1(5A+F|t+KNwW+Uot2jR!Cddouh<{S;_`n5L(tJr>iw>3_?@DS7^f z;u96vIJ=viz==Yp4>^y=qq~jP?{*7K%0}2}U66ItwPp>Ku8%Z&uLyVY;!jVWz)}Vo zYL-v!5^)qLA--u$`T+%|CjZInA2Z**W{*j7;vB)xw0JI#mM3P^2<$Pl=BIuH1C4>X4bOcM<+mL&%w)nfU32SpevOmto0#J z+=2TQA1$JwBI4#xmedl#u657m7coSqKiP_5ilFVD z+4*Y4U66ueDOS4M`6kw}HJ<-bivasZ@S;Y>1M3EzVI%`dGg1Ah&JIKFuE8fRKR{+1 zIqD%h5`N@uFE>Y?g$XOQ6Hew`vfZ zSd`WAa3B&4!x(sYv@-)1=P`efW&8*;2i&1RaSgH8KOk4WxRY^E5Bn4!wtvIxB8wCL?-0O?c$J7xm>+vp5e2_8pReUmQ^wjbz(k7YM?bsIBh7 zgy+I%8piUM_J8VM7XfjMqtBUM7U3Dj!9UsS-UiZyHg1e1Am5A}wUbDI2;sjyOl$96l$R z4#a!HUvw*MC@aK>mEa$#?qSnmQKO z7`JxuD{8@&rl3TozbrmcUnGm;CC2e($ejn8%#uwV>FX6#=2QvNB zYlXM}CVz~Ir?jF1nF=*b{CPQijy&RYRqE|L*#Yr;aFu)B-qz`GejMi8Hw~VS!TAC; z;|p{dh;41g+Q;1)0W7nkP(>K-6|uXpVQYRVt{$6gxJIn%Q?N8&=lQZfIlI3eTW^{7 z$fdl3{`7zJu#}q^t)l1)Af0Y@M-;Hf!m%~=}aj0{IC!lEki$XNJKPYOxwJueR^JSE0u-#!5^Rz z{)8vZIux0Zi+0bi!iRv!?{sA84Rzv#_9Ui?O}&fy{pWtY5W8ENUWr{mW*!o|I&$)|UgAiK4dos(nv1R_j|)ZE z-t#321<}`^cSJDq*izxsm5LQEJCvK0Juek$)kf zk-lrRDx-D1JSFpS`}L=OFTOeY_2e3F+p|f8%I<|;1cvqX8gAV=<1XG2@1rL?w89HL z7xG+0sHgpsK5yAv7g*q;#gN&$h?viSDu3lp_ftv)6A*e`)hIUZedB)Yr?kli(M0lj z&+!>o`1dR~6F2K@2g@Ts;=fYz#eZOZadx`mA1ot#NX--B?3@DSZFrehE?&vi$WHcm zKdV`qdl4B?62kxYcYT-gnaqBBV{tkz48U(j?0dp{D|;T4*~Q#{Ka?4~Ur+h*b4)th zVoG|wPS)OnO=wrV>+_qA=Uvy3KMpPZ>@77S&BI7=iLxCa1J}>vW$|q!uz%r!$WJEp zgs<|Xwu%V%-wi#$4~PEHlQ4LzeLUU$ZI2WVm|=)4!hVpVB)ckiI;*Sc{kCm52^mjK(0n?};}Pq2!GCzxTIhQI zv2PyUYf3KI0}th%>^9YO)_=SAWZ7*EnL_-Y&&z#5aWr^F!18%K>LrXX#(1`Tm^n1unGsLwS*Lj7HlEj(eRB!1iH)r}(&Z-UzPmcfp!n z0_-1(m+e2;nx%dU>|$8?Lrc@+J~S4~iQZnPD_%eMu2QSt&4F80A%Cj(bW?T?sxc4~ zD<9G|>5rIq%E@mN{(Y;}86nU8bPf#WK@1$xR~^?lb>= z1r|zaXkzok0SOvhuz#+ib{@He&etoiqbT;fYl1u|uLP1r_DJ)$@9v0p-~G3ql&|+i z#3BMue(e&`5SRAAxJM=ZAom-liO&icILflL*hLMbrV5={DPrz)7Va({jmTZVAk;M2 z2|jjm1X}5Zw5~-amp>j%+Rq9H)GefCpL}chgsC+_DYOlGJAdcSe$yS#_v3Aszn6F% zIL7UTTeZ7%c(%H?PW`eF%9ioTLWLnYa`qH}b6~%TXLJrNT5*A1z5NJ#cTv;=2}mNu z641$W*>Dg)Q0$36 zj_KvGU$x@GN`Gz(wU9r_{pE&2_76L*dVRQ?$qJ>HT_{9Ur{btJ$Br6mN?>n_`uVOa z?w@y;6P~sh{jcs17H5WSPd}6~s~4}?2JwQ+gH2mrY1!Jc!1t|;^+~sTJQw`tQNB)R zv@ik#f0i<~IP$i0_Q}o1)ow2Gn`E9g zjZc89ynnL^Ojobp6oct*CUpWDozFr1c@tr&Dbk!`^jw&oPmlf`vkvPN6hpmBh%F>N zn_`5^bVuhnZHuISHBXWL9S?N1o4Pxz{W>_kw5&=lkg~gt^==+0WOzu?ym-;A$*Tp@ zJwki*Q5erivY*=lrMeEYV2VV2P>Wu>>yyfGp?@uqx97tvdEEAU?({}z%_M({=FP@7 z+|!pI?U!R8uM?Vno%N$tho;isaD|X|H$(xvM{sx2ZfuMZJYo;&oLx7UJ_t_<6O`7h zvs7j3(?>;)(YCJ_V|SbAeV%MqY$Dx*ZmK3#_Wq25|6YQ5k8~T?N0p(706p+QIVPzh zntu^BeBXM^kXwj$@FIQoYu!;3_yWl7R)M@_7?R-UsIY|vzo10bGE9@pd@Ntx z6%g4w`x&Bo58}wvsP_ezwmNJ*Zfg@4!zKM0v~682@1c?(mfz}par56$Bu9wNJ`B+t z=Z24dm+`D2K6uV5`^neQQD#_)xV7A2cYnK2=j2R0nz0zp@6VtVdGDQ16E)HLF=^CC zXyEGcJKvsU7vqwXRCvQK*9(hkTqZ*q;)MnlaFD;?tM|CK5Faw6US6w7o@sT_BFYt8 zO%EQwaAFlE5Fex~r-2>kKQKld!_HLZ^erB5hWV(#-Cw?^Jsh*Upe1nH)G3Tf7k?5t zakj|5m0|+P8*%5BSGuhD6z%uAB8b1yHSMZeU`mT5H%m^8zjH0v zdgCztI%$HYLbkbQ8a)5Q)4V>;hJQ*rSUrfhR{APoN|zUONC(e-wG#q&fk};6jGjXR z{v|9ujAYGG6*^cUH@&YRKD6(5Ze=h*ztj0Sf!du2qw?m;))L)f7^czTOA?tf20=Jk zSQn=ArG8G#GnpPxHB8|QyT)S!IvZBKuddG8U$4GchV!W-@rj~0xqNzEe}BS!wOj=j za^S%cwv1MYp-+oWRHmSMb{ElC9?kpTsinWg#oA5Hoz^}Te1kv+$Jb`Ejzpiz06MqG zo8RuA@Z+9da9~HBD}85?Z3bA=zq^C?J6wA4*j&f$mLU3xISlLo>fvxa{K0_^=!C^2 z?>g7!9VvhFD9gy-@AQ{^7Juf{ETUqfMKYb6iEk`%zsXihOCGSZFe=I>@YGii8EN`+ zB!Ll*!S!YIWZOCckvy1%m={?Kmr`_f;XthHWL*b0*59<_enI&O=kgLB)v!`kXwnB* z%L5^Cm--n}?XPZUj4SCmEO6GVoPS5QdUzNBo zK^b8k$R}9K9FCvp1KVv&tB#MEv zB`0j~lVF&;e~C<-A7Gx($@l|zX?ZjQr9@@`%lmW}W_5tZF z^hJ2dz->2u4T;W-!gRy`Bg)3YJ=UFuo!8-L1XWzx7sY4vPcWtn)5~zlNvHzDL``mv<>Kk>O{C`>h zpa1rMm9&4uAMFSPCc*vvA@@qWcb?$4{*_wD<$nwQ4E{QA&pbZtu1Knz`QJa4Jx|N? z@r-9jJz%eVB*b$WIa5av2vNLB1{X?_B)8jkW0DU#pzAH$&9@_gT7H5t_-Y^k)m^DU zw<+^{FB8OC*~^IV>Wa3wM5r7ac4}if$WtWEryRPFFS)|LWf$RBx0hD`Wr&<)r{yLc znSbv3_ciSH@mVvU^M1z;yW;xzJdUkzcwU$^Qp=;dW7i+z z((#lRgnai4Y1dzNvLTJhkc6E=ZG+Ie4}VL_+AHi}=4%zi)^@#AJ3k$gcO1_4*< zx!UTZvNxuk1DmEghN(dNGt?Q=M!@e z=2!Cv{Kh-saf;0^@vGV2Nthw@daNgvO3u`8Cq8!Xi}*2a`)Y>}+U`)@*?&8yhFT`0 z=Ju4f

vX^HcM`oq+$%z8vw(|9&6*^A8|sF2^=Sx$f*@WQ~2L1id)jG%_h3!8rmm zv%wPl?5<{;_HVj`tZt6cTuS9rBTS27k%LpD>J5~N$~{843cWcg5oS8zHu$bc^L%hx z|NGYV%?#oU%=hGjrQ?JZ5PzDNZ>N`=pmTdBtohfV#q-LUSnV9fxh5SUSyB}0IOD|=ru)U4WRvd5zl!s~ zf;l47TAp&O6DI657MRDaEK6Ja1c?!QPB0M?aL02>S#PM#$S~}d0Dtv#OxeQk5p+`+ z{l!>?$`gLihd;RPOeN4SE3M961!h2`$9(h)hH)dW;X0{BYQS-emmZ`=`8i_N*H3IN z!pVsHDn~o~V*H4U6gf6xH-7pK)OW(Pxv3W>ho1p<|0Jmhk+zmJwePZ{5azj4lVDK3 zpLX>;yi#ChS}T~tP=EBD;g=%>B^eI+yKHntNfj0xrn9AbCCRH)4J(nfBI;r0`F8%m z^6CfV@7i32HFD6O5D+{&t<2o%9P)^_Wi(}Ni>KnZ5ba!pMRqs~{dhgmoceRyq?+W= z@*(*wMHz(dT=PlG z_>hKp=-H243kGax_~u1?KkUGJrg}tVM_H|+)H6@=U`EvAW@dY%Y9;%&asF`* zpVwaa%GVBC$bae0^3PSb`PnVvMwbsRB+d>)x1{=X4Y~vn~(1DYoxpo$yht2UVm<+p$Z+uYq>A2^x%4hkAZqDG9 z?Zh_AW7*DrYqoNvgv_BoK9aXy@BiSlvXi7Ca+ZKC_IYt@HKPu_I{7fo6!uNH16je+ zzaK)e9)Bi-p3zrR0z4Z|4^vVfeYgsnAu)3jZT@7q2kW>O9!{3iSf7DnA(6lK!n&xe zU7@Rg=ojuu`J~EKUVb%gUz?EJ3nb!A{e)m@CkbO3;0j`zlUx1v8k6!Xd_y{J1oRq- zzDV$+21*02QYobgTRnXFHR;Jc{|pzeMW}X7)_<}iI^}vGn(ze!9RmLZ(&gQoedsIv ze8Gyt_MRJ!Wh1v+WsP*d_Mw&V{mq50@0{7m-A9d5a5%Q!1vi9K~l_s>mJ z+r@0;=j`Jxy;RH!CA=h!aG_z>k9 z3hbfPjO0tCx;nJ3+8bmdSJYXJ7ugdI4WIIS!~+&k_XvuW|)2}&3VcnMBNGs{>#wcloY=mv7R^J{5)b#ZpX&D!NX`n@JGX2aE zo=z=(LAh+jT*NC|aG~%Igo*P@u+{#+8$d52eY_`E^#u1fMZtKD*z~Ky((RNdfEKZg zP8R)G3c@bMlQEw2ezu~xebogi=6~g#-C`~uzYgbtm)?JAM(ZbIo5EumdusGsO#+F{ z)4+2AO;07((NYW=W|zLEQ=&g4wo-X&%ztvGKVqcEe?O05GT|dr;;XsQUy(V#W11)+ zv9AC^K)t`Ny^-+O13n&W-r?n4d_))yixQJvC6KTWk-$&ENus~@_qD9+dQh}f>(qZf z=o6u0zs7^mkCRFqms}2i{Hh7Fi0u_#Q!pPWB06sr+xOx1MW)ICp6UnQhCy^yt}DM^ zaGFp_13b=ahe~U8byNn%l*X|BXwDt&q@f(FsX-6umqZZ}sMe7xWL56OP2;MT2I7qo z8a%<ht_y&)WTlRq8R%wrLI*S`-><^cN9yH#z!~|O{9uRN zrAD9pu*JbTE$-GT&izjO++M=h03<<4lT^Oyb;`4L!@>mG*cXL3*|2|Kgh?!8)PE^V zDdc`W)B$?;3vBGqAIWex3LIOl?SvJO%mgn55vd6&um!>H587V+(S$CBt(|rO>FFA>C zF-Yy|SoTj}w85fPuf6~($9WLXWXEsZMr2m`>BPxswUN6i$>Fv#%D|jRo{OMwd0Kn?rdWZ244K+ zEiD+wn>g|-GSiQYIFsp9*?3(W@r&6tl%Aw`jbL8^5Jj5q!`_pbd-_eE<$4B&iPzYv zblvn}MV@0QnGYCAIRSX_uKMPBiF7~dH|o1By#I60uc~CGWZ2GtoaQC7IAk&1rW#=^ zO+TvK#C~MVBYb~L@l-bLM3m?VRgSd7VEaDJP=e{$L&CXSnb0-3KeWLbFFc*{hALkB z!)bSYbw%rvlbjOHWwVi6%H|^)5HWBQgE-*A%e~h(@m^7Z8ubn=5NnHXf=XO?#OAxN z?O)=@{>j7t(NHCkm zKi^7w&L1)>J#|4u_K2dgU)9PBRc{@Q*#Z2__nYyIq&-F^SMuO*)^xDO%h%e!asl6o`95o>nV_tV z6Ug^;%Az?;rIaNO`DX3-FCimI$=Z5#JJTo=es(Yy^Jcgmm#6=zfWc^Eex_KonaI#) zqUMtP7Smb*?g~*y4plee?*`XP0;E0G{BmXN=udw){;G{@+ty*OYRkd4vFLD)=DB?;=M1Osa>`3wS+dp z9tRd@#{qm46Nn{UP(^!*?E%|cP^{6&qRh!Tb#M_7kqGV2zCE9; zr1$%byu=rE`vJc*9wb=gSKM5FC!${XiHv`avC@dKY)x0Y=06?&aNGWzje)Ew53xHn zB$v0!z*lS#;+|&b+Y3-XOO?9&?TwDnC@X=eUW9OarZ?itf`jb5=#x0yoNX*0jA-a# zvm)55++FfZVUe7PgfHC3-A6^2<7*v55X*2s>~|K;oyAy{xFgTo7LsFE_Co}6#D9Ol zCNV!Rjx}T=XP(wuk6v91f3gpNH~0-~2um}pzxr>z4Ro#FzSPkquKSz00foa;thB#e z2?*lL_VsF8&*l)^ifd)sz~gi|nwnmjDc>m0f+$Pey`=rPx`HWH*u`tOJq{|lR@dQq z1*!8u?DRR(t!dA;99`e!ukW?nu^WH8hhkm>XXn(>&&*l+x_$zQo6GXNoHRoD?!|)A z6N9K|36A2;w4{AJjIt+T7aajlY&yF>DyE8lr?=#Ite<+{XIpkg($G8VpF^)mIJ)mE zS#1vQIw-_hb2lk~N9T55u%%|1Q+aU6LDrM6eWU4!IFu;{pAi*DF}LNm@0ow&9<}hF zArNzzz^8Fq$Aw7q&ueRMY;Qd;V`Y}J09y&A24R{1gv-4A>MVL&LH@1H$^XR3N&gM3 zXYUO1^ZlL&^7iS4GWDC}al8?!2cT_8Y)Yz*#%*cp8ZYjq$pnSn5$s!}#7h;n_vb>( zrPl6c+Ye2iNOHuFByURfoJn1kHi zvqVTI+3!}6zS_2B%1TWEv^`{fP=-$i1G8SE{B3Xk@T*xG}AlZtQ}^Zhp+esVzP?*bF_Us zz+*uT+A%mglyrnMOvMUOeQa!-l+~|Vx_$4S6BOU0)hRE&$f?KMd`XT|36#he&E}w0 z;wN`8V9lZ!lh3ruxY&Q^v+VXSLG7B(iNU>ok?ow4@9*skhG0_(BAxI~1=~{eS9Oyx z*rH$|QiRZPDJaYMoN!n`g4I^&kGK&Mjq<&KoLQ^pk|4lBBQ4@LDZjCYh2nGvNqx?f zxGW{Pqd(+uSyk&~Cgg=(l7h(=>u}6_s*j%07x1?2_S3l-w%rr>Qly!lF7bE<9J#w2 zKR=e$;e&U*5UZTzF*N@f)MsWs4zDKI_SS)8*+=^VY=!?a)9+O5pm5U8kWMWXkiVq= zo%MbrNx;ht%PfC(1mL3&6X~7R6OCugLr5;fX5!q)xo&jHN94)6Q)Ci(1HRAeuuz~l zuIJk_%dUGrzR#5nGf1u%b~XI%bK- zzq9B8dzBwJr$k?Adg_{jYnNdzdsE|$!t8cWeLR16J2SK)PPlm$f}?R$LgYf8Uz-`7 zg?G!nmdEQn1LivDWg6iLeuzKnqjC>1$xhAI9I}r=OuS%!FCsjBBSjQXgB^Zm>w+Ft zn!Lc*m&fOp{ABMXjIV8sTwx*nIhl9>)a$GAe)VZlKTu{0Qb{Aj@|oI}hSp`w$1cz8&KH zP#(B5i3<9##q&hUW@>?Sp2;%BA;wI89|43d!cHcL9a&0#2XGS96wE^qi6g4|6?G3o zQh|LDXoL|!MNZ(8Yis~5e}eP|mqt3n6#OXO83*jiJUkrD52*2=d@D~iDa&>awMc(c z;@hT?0qhcHtsB~6kRwHV_j5$_^%v92=3v&~_nvgN{+)SOz8@XW$sDwtZ1j7CT1d%{ znWNqBG~di7`*c0viK1m6>TablJm))V%a_!yE6EQ_p3NhSi$PtYL;h?`IB}87 z?vqTf&yC*$d|6fr<4b$_isLW<*6n}SqWZT%?Y?*>;tIkI#T)3WXI7PI;CI0xDhy|z zI%5ja8rww26Y{*773<>71wsb3?b2-@@(-p+5jzJ~`Vvtr{%*N7jsRHDz+44Ki0>q8 zSMpu3=dLo}l<$$6335sAk}Ukpc^1?A#>qAi#n6d#$s3~@3N8Fhka6WhE3SX~nH-)r zrv;VsGRE*@_u}3r)SGo~7MnEDv6ZnY|3K}3{|jHnDz{V2QP#N6 zrIb>))FO_2X41{T?%PA^Uu%CXjAE8Ya@1*EteTa(6~fI>J(y%iI!8)v)mN2_EwezC zXOeP^5V`1d!SNVtoA-97pR8CAvsgNYS&e69_M^sIJ%>^hzv|>U2_o7}`<<%hykC;A zd=u%;rj;j=`ncrg(rhJkhO5IJ-QA$-f4wO zlZN|hwtu`%r`oXgJ@HnnBlQA;saD1{AI&V&R=3A=#M+b#jHGXDd5`qeR84xjR*l?B zqI@W>ymtKD?MAH$&#h_8p`vHPq~JK*GiN6|B7cC#>J>*NHw%XmroOhklGM0KEuqoL zIVp5Bfyr_eBUNoW6~uqCqMe6L>XW^rBoQ3}sdS=HRhIX#vm6_?)^~*nL?x@NTJ=u& z#C~&(82BU1b{&%&Rz-*>t7OsRK3dL6F5X;v-1FzhvAestb>Azx|9rXlQn)_u3bqNm z#p5!4tP2&IEPbn9kBS|pW-_KUmdw&Y9YdH5JQqGZ773zoI>&!nK-krGtPTCRJW7D| zr*4j}Lf5Dp)Pmr?J>rcPQO&X{MiGpJ5UApE=YQZ54i7tZ53;bD0(pF0*{6(m5r-`v zf3tx05XrgOY{zL;cUmkub1v`wAEnU{%~~W=LtcEdMT4l%{5dl2&)$0m;~Pd zb+(Xr>+M4bg#mx)1EK=OfsZ*u5Nm}P`&tP&AOEwD%{#%KPYN`g2>L#DiS&9rew=wG z@uk=-^W65uu5`NHOHtlrHQYep&XV2bny6MA3>zy9tf{z(TyEEBiRO&R!ZiKiSfkYo zrnAS&TDKHOJzOq0thi_86tO1?Xb;^i95aPBfS|vi_X~f?(Y!g#@p%T|W8nKE|rX2S1WTB+>sFV9{?pcsUyR89p`fQ#<2G^!qOt!;>Lu`RW5q276Di zpfFJB-&u_Qy@R2skb z%d4bY$2uBv>SSA@uC4FyBVOj&2Tp{3jDb_$c0PYbU6A!c<5ovqd#lsgqB_K7yePUw z&$#-Mdq7hO+7VMtdHU2P8BE#Flr1br~+kla}g9~sKr~?o4fpjs?OiiP)2RtT0#%CMb|U5sUtHSIP8E=`p2XktHyQIuC*x3R2XI$_wV2)d zau|OPOt@O)&Cp2wT6FCuoRe}lUbM1}7p8hH@80>fNBc=e+(xh9vsBsK`TgaCJb>AW zi!QuFyHofOF5mo0vspSX5m`hd9GvW>sbgC>YNwRr@?&vCU-E-EeJr(d*M^tl<7puP zf3Y8Tz4=g*F`s1+pqBO(58HuC$hVMoSFnGSq-9>Ut-|ZvOO(kdxOqCHkE!AJs?9(0 z-IYxV=GGktI2Gb^u~6?ZP=o2c6GHqv&F$0Olht(B0%UL=m3d3mj=x38UKfAKA{cgn zVq(jyI1B^XCEA<_&CzgizY==6N-%k$R9P90tUk}&RXEBm@ywQ29*n8=xHu~0L~MVj z);~30Yd+5+COBT;Yf2qD?Zf&l9Qt$*!%nP^nswR>Zz)Yh*kHS3GoxLv0ju4C7JZ2f z@jhmgWbkR)(OE{%PbC~@wforL$hyDq2fJGx&J<2m5MRy;m=g{m2jVGzg?|R)>yGT- zS9*OpnX1|2b2dtn&uo>(Tz9@xg@k|F4e~e7_xb{eAPkl4CI@lc^SGv)cqYN~m5k{< zdZY7L=+C{hjF-7AK(7+UT*%L;3?P5Q<9H5K z45EB|_*o$({Foo6`}byoSbc@?nf7nx3K7t*Lt2dH?zbWK^PoAK}QXCnyiv zo-`#Z+RjnNWIWc4^4!{^e7O7`#FI$3-(NdWg(jpmZutYQD^_EuM`Ovp^Q}xc+X8|} z4tPsiC*#S93dAlm^BaG*JK?tjF2=HrY7tn`?efwT?^$5rtre{d(mdPxO)F&9Ct-j+ zxHPhv=#LFW+2x&omz`vv596okG@C?@D)&y_0!e!@jWQf0op= zB$ZrKH`$hKkp+cnFwd8#$Nm)$1BZ7%YuB%X=jAU;yrTL^gjj!>p{BC@VhwM;Ab&_H zKf-yeK(Fb9mR3J*vZwfuWvstAyur<&KQAdyXB}3NRk(A;Jk55*C836aM}di@wxpE5 zcjusfYZy+YU*)?nmrKQ)Ne#PJnJf1Isyw`KXiq|#RoBc3HzSkwiDtLJW}C(eJYHgBi>-uQthkkY^u7I9O-+e+%y8nwIE5gyk*}s3%NBQIi%HbX+A?pQM+A!U1U}!nsO}bb09{HKUAa3w9Gn(#$R%--ZN4ZX#_kxbw zXTOMyWE-G{M|yX62KYQx(E$63I^eK(;O}+0^a>H!0XUE#q34|xA5lm=z zL2Ga)0{xV}FURpy(m_yvgS%t5&Ds9Aa@vzpT+M%ev|62pMNf2M_NT#lA<3FPpRdQ> zIY)X8MujZ7#y1kK)K48AiJF98DbK8#IecH`y$((%Qdq~8=lRK7=h-#ONcUL?$UJG%!f`Z^rr9zK= z|Mq|0^gdnBvRIzBUM13?%FZ#m>U8ip$Z%O+&qV(i`gn+syR%z;3?ira=%|ancspOC zBXbXaJ0<+l4_WTEqL&vH^pI<8Hsy{74`j zuwZcOO}L`;@9Ws~cy;^zzI$iqE&u-g{zQLgY*TD~IPUwDN5>8VEo*z;0l!8NETtY` zy=cFan?meZ#IgD2q)&5gL9vgCXJsrgn%S7J`#g0@v75{r=FxY0kfUF2imo(U19&kh zlPc$doA1)oX=MhL+p7L%L>-7Ne8jWhzJ#G%XPC6b58l}2h!~kY=^8EL-fB-x;%tBG zslGr~JK`hnX{yvYrxVRFNa4a+IdR_w#sn!y{ag~R*fko>G0P<2m)_r&OnakV&E*bH z@g0~n$`oGR=X-rwhw&RoyiMLQK&9X+>aTa$A+EBzQ#C#j&ieao0+VUchimZ@_2>oOd12PopIVun}Jdeivm&S6Hs5^hETE3}bDyozb2GoC*lg?0r zVY5pClZVcscby?-JP>=iAx9qNTKm_=4}XPNkfyV2N={oh#Jd0hpAFWkqgkj~{P+aI zJSwW~)~8ouUKTpSOoqeZH9~wEbPtc89p-MAn#W=9RMn9q9-hIg$4-_3(sC_8Pc=?4O7 zeFHQ`d-%&@tL{U>xJO*LJlg=KCA0P2o%$bN4`I>1+b^*a@-_Q1@xeU(cUXHvzJH%zs9y9hyzrS5w zTbEGS@pp-R@7`642nYFL7NI_dkdN(=VskGdje#Zm%o3bs5ulX=E<9P1&w${DB%`3DRw#678I8Qv`CA--PrmH2dS}x z%OMJ@BRn2ye)5Dsw=~@|1M!Hg*pxDIXMS*7Pp=}IvzWVHjfrY+Y4e~@-tjbiKIYI# z=rtI1oh^)|S0^`mJ}*K4Ve2p12|~5iE{e}}_K8710R#d}wW^qN_}G3Ji*E=76Z-`Nt@t;Zw`=Q8cdI1? z85T-Ad=}}4I4OVlG&R`4Gc<7bd*vJ5n9`@hrHe`=t}r83ETn0%ma3rW)T*0h>Q0XK zc6C3$7BPO|0d(RL`2-k&mR!AJw<$Pjb;KB4-aGB9YJL|-;p-Lb3iZ6=H`hqsW^(uP z2e9I~YsB3TTC_VBjycmP&)Zel++5>Xg>dgZ0dG-z>2-gFn}PfD>uyaSeS4)pPeHCC z9A-co751aPHLF5o(TjaPN1+1fGnB!Oz6nd@6askV_PdScX}OWb^wOg@!qiZKQty}Y z9B8@S>hq3f6OZ4Mwa{%j5CM!J_3Ta+<+rss^qhfNW!IAlW6{kA0OZSWA64EuSJL_y zG$w8TOn`qeQDZJ93{|8axPHCQr{Vn)Iei}Jz-H~{uAXiB((jF|QjOC$$E2yhy;?3K z`O6p_ZAZg?OFU$B;KMZB5hbJqv~!ieW8^;X&Kno({j)s>dl$Y|5TfVe>OBt!kn-0{ z%`5{Z@b@K_&+VDK8Xo|yf1)2AkkBSJ3Q|(fUnPHxBd+QuW0D!ccbcF4`xi~<^8A|x zAZ;#dTwiK)&>^72?M)*XEj7yB8#%VI{2Kd%m*P?RJ@5{jHO3dj+Pk=MyM3;G6KssQ z@7^qP=&dwdz9Yl2liV2Pb1#`fcsw!E+1SfgdI+EOgk2zDeBbTpl>YMBSa{wmb>a-% zk@kN>6A?$M%`9Fxr@w9R#AHdH$L<&%*C5~A=OeFw_(<$RGX0K(jF80_4r zm05C!%glFqz75ZbHQH$R{27sno$t9Ykzs-zzKj^#eS7?V?`utbJak#sPTatIDa2E^ zZ^v!p`wHa!@u7}gvmai@2`48@61uqa*A0LF6pMYr#WRx%7lU(tmQE0|Xij*F3HDdC zJJ})Tt~1nO=O{6B1qUGKFVOOp-VPc}CoqC?O4tLV4kGuJ*9uPSuUZ}Oz@^PM^~+-x^h+otUP&KbBKr_` zrR48^!w%1ZJFnHMsqK1kSJPtjzTJOKr9`hqEj(p^oy8v!Ugj@LWojQ~-4rnifZGS_ z%kH5_XDRn^$DhFhEPM#~3pEurr*}qm6Vba*h7bndXGJBslAzgVu+zN0=QI(iGI$=^ zYhWC~^47HM2Z;d`1v=p63gR8j3!|&_{yjfFGAWUie8;zSBZC5c8P@S@nC5?yFyLqW z<=C`z==J?Tf7HjtE4Ng4fx|X<-Mq4dMb^uYdT7E$sW^oD(P}Ehmq~562>|lD&L3q` zzQY|_UWr@!JZ6s_{}zSv!JmNh`qVx5eRc_S*)i5$FSXTMI^EgtlEV3h%Ob0ePihpv zb>oZ|FDzy-y*2Mw-Fj~xj+}pr8F|5x4-LC{CF{%D0};&rz6GI6@rsUln8=AwRFXLv z6PHGOM?41!czhx&;T``R#)ex(u%{`DOc+E#4U<6trSv~>s*m^$gSZ+^ zioNk7cIxgypOKhgdi=v}=8}~GqO&DUO_#n4=|2c!~_e8UP{!F_)MmuHtboedB#JyZFT>eEiIoRFT3@l+VLu++&FZc4O|bm_&{ z`=d`T=b`=7J9;`ep;+Q`6o`Z79v_qjM6|GP%anK@R+l2MHhyKm`yR~UsIvC6neO_R zJ}Rdm!lbM^%KUzoCrdai5wH>E1a+NR``*d)qkd{mQfbg}8+?C}3@3Qsv>)Q(3O1-o;1`#-_Q~*y0m}H?8~3MLXXP`nqGdjR z!S#j*uj?!P*~|al!sZSO?@cSgcEb8WaMIncCL2qajv_UkUv>7LdgBJC`o^ska}13q zia7~xAqqpFn~Z;#FSVZ%L}$eDsF6KKqS^Yz?lxg)1!v(0z%&32bco1iSAV8c%0t8mk@m%dONIYDnuEpI6Y@N7E{ z3az=HGD*R+;*|E2=H|UxF1_~bcI0s*DND}ofq&i+r1E(Q3u##T#~Y@+v7&v%^6ht8 zvJhgKE|-5ApUXq%a@9ozC^W2jZ2%JY^(!Q7ZO>BH?jmH??#YRxxUnXm=WemXAAK0j9!%L#W4@3^4ZrKQj?XZQ%M|v-d=3jX7{DKSjKZ zI83En@R{GGP?vBU9DM|%Wqf04yW;v;ctvp7f&G6Jm~A~Mfe*9e=oNAel$J4bWFLM4Pn})eA zW0KSC0zm5$&>vpZ)z>cLUt*Ta59Fk?dkRXwe)xH{YOm z1z3M^l@IG}{?#@(`S*SHs$1i}(~U6;+IKJIC0>`APLykETEdGxC{W-5xB2|pxv#4;wRmv`!f;!*WR=HQ;obx>?GA$@Lm`lZi5@uzZ?YBpL&UX zZ#{e=rDJ2I28lKPBZXhD;dV-DQj#ETxHNxNP{FfLS*b&iea6qjr#OF> z%%?BX;oW-^4@K<)$bZk8=1?=;OY@FxP94t!-;3VBPCSd=NFa{Vrn=|b{(!BmLY}Yp zH5|qLQ}p?&R+2m|e>m=(*tR4>tlD0=+(_PZd|)Rp!Q_x0KnyP7))?e!-kcRSmQ++P~VWu;ah5@8Ous8uD(Dyb( zc4)~VU0|kzXsZu$-W`tId+dLN)%Tt0knAw`|2}596W6^6Px(3EXFxq`oHp`u2QBn^ z-Fd7*!EayOHu@Nyq3czx6V!j4bvtqR1f_+CY)`vW5G!Cl5Q&s}TvoB=D4nuhWH8eZ zT8xdLGLKbRne_?|IbmG!9f7+2qX^zPu@!B*$j@=)5luar8&-u_4pV>h8~LrgWF16! zg{$F76gMGnFl;s=k6U#9-nLJun9<>CH;-W3MMVhQDQfH>PGdodq^xtPWUVZy~MY|VScm}B5`=v6pKr((! z%ME><=V)FFaNC3DV~T%{8ZIv8(V-uwhjH4Y_hD*)JX$zYGP}vOt{0fU$treD*K?nh zyiIavugPG3G(AsABoDrS}pO%~6q$r>}NRI^9 z1=IP=Gs|luQ&(i|)V)LLX`%?_&eBhxNRSZ}3hv9JiSJdB(vW{WYpyXK2-~?Cj6+A$ zhg3h~wNITCeSEY5{fZ0Pig>SmY4}IM>#fQ^7MCG+^;497tNk{FfUWS4%`|m9jvRcj zBHubd@bPb*?@v_rKC)9KBU8~~_qXDVLw!Uakp^q1&#L$8qui9)XPoTuYXrR$L}C=WxQ&Ky8p}r|M0MJ z6VrVKumN6?`?+m!*A;4vcy_o(C`ivg_qt|NC>UP2#Ze+Ma31`nOBZEs>H98@5L!RV z_W*}9iATWsK9Nr10_+`9in?N^>xM8BZ=jD}gY19cJtKl}Yhyg<9aY73r+8N7)8VkR_FemYCCg3_L$@A z-3RKgH_K`C6(=j;3XXx)A{xGsT^Pf<%nmaXTWlM|P5(VS-|W!h|CG6LemnVneHwQI z?a+VERpE*`;jcBq_R`(5+J&x96i$n0u;UZ?GTzn4SSzeOuq{;dznN)@qb1j)#}Z_e zyeGjr z-pN^BSs%p^JgXmZ|CN-)#W)Fi>G(#Qm=b?_x(bW;I{;YorWt$E<4`Ksl2IXb^M@E_ z>|!6|nbPnv+WcZ1CG`}|Ie5V$j+YlAqYnE>#$si>Bwdj0>gTWQ_UO$*ex^*wgyL!! z9JYq1F;~fEy*5XuURhV?D0PoJcb-pg$lLGNBqY9JZ)%*Bor}Ht<98{7OUmc52*`iU zsVB$LuHx?S;rCf7hN6H2L!6g778}gNczQq5?+$M_PJSHV45-w}n3;Bb9xhO9J-AGR z)rm&?mRiZ@Cs(0bya`}^3)l4+U$18n0z@*msl8r7!t!)a6J>xi=!c+o25UBe){JcALz`OLPY5aMbLW`dO& z!l$uh=NiAh2b`rFUHCSmk9G6y@g_V*ETArxb?~#9Cc|0Q6^}ZxM4-6p=#L7!Z}#^@ zJlU-es_7f~EaCtH{4H6T**HDb?S9{vOf zEKml(_LzB$w{Z3nB5G}^Ec;C;zaj6aje|y54{qi{)C(DG*x!%6e0zl5{_v}k)<&;_ z#dX$&j8UGA_>5b5T1ki0?udXZ-oNIWzGHg}e*JsaIu-Di!=7ZG3rV5Fb)5RcGBEeo z0Si@{$rO;_J5C}M<~Dua-eP|+UxcjEC#N9^%CI-rEmSz*&bVF@38Q_yZzvUB#7%sM>{*=??{X!%N=K0(&2 zj^%zkD{b^H_b1nU{=G9}gvH(CUHly%wIxxX9MPs47~1I*oFe()e}8`vOHQbtQs}LJ zH#K7dYkc6yJ@#Wu#X1LzH-F;Xi51-6d`!c*{jnhRgZ9PeQaYhc{-155rnsN#wnt?b}CsV(z{`kksR`((C){ z*j?*w|4WeN{(22KEH8h4zO{N0#HC-biS(Pvgzc&C!)J!eP3c`5bbN%DEhgogST4KCx9zm>WtbgdAZ35PWY)oLfcX(W0()Rj zB`>x!eN28;;ZB3BQx(w8MKPWC6#XgK$ql|4q*CJ=_L3M@q+qXeRjcdyp_8xWX8(RA zg(;`_2q>L6SqW2()r`qu0+{K5Wi16*)qmj+_g`%h38ip%&Tdyr)9Z;RNIq<1Zxt^Gca(+4?kne3#Qq<YE8Lc2i;L7kkN$8xRIQxHrZkOcrxAczhKH`mhquo3H zVz6mifx7QSZ>w-X0pZ>VxI-Ma|9rpLmRV_l>tL#>Ndt31?ge&xvRD=qao)(XZ}r3k z?7#k>3m8G8aM8@Smf|7T9J1!%fotCFYGGFj?^bwgAdLUd|BYSA`jcT)ol%m>St?W4 zhmnz@w2gmgaHb>HzubPp9@d4(g8cwTcZF|G%7ntay-sJUvEy2PTJ(pYUEh-@^p^LO z0jt+j_a-H^k6FKe`Nx{;O?F2!%bei(vy00^1={*)Z1QH~4>f9-RJ0=8e!ir9D^{W=HIH#PqoyC!UBp zQ}G%`+>w~ovg2jy!XdAI@q&{XRuJ<+86Nf#XpVX7uKOC~`iUNVMS~pafQmV#dKSGu z^3Q9%;|aQ&I1VK9oqtN(1uyEtx8w8l$bz#vYUdB}ssJ_+0mreXpSjnk1go7duGfD; zk@s`+B-cBz>?J}IsW(dQR~M)8u!&atzO`k5neH)`>#EX$VrhG(DW8@<_h>VylM|k^ znshS*&-N?)>cPu}us>pUp|SLvvGU$&1HRUI(}#hTrhuIYbiAu zD8guzjcBLe)@!F7OU>?FAIZp5#Ma1TCdfY%a|V*V>ROyT))M05ua)tf2O@m)vJ4uv z{!oa?Mz6y=4>!HqqcHWJT%%U;;rab4#C?`lAphnz+2f{(XMce}N}h`^Sb3eVHZKGZ z*Kotjq4_+$j(UNWj&lM&o)e6EpChZz^Ns|YuKZ4IX8+zj`?`X1AY6}H)Jy&6ygN}& zxJ8d?^UmJWAHCBzmf&fV4;WAeadOAi&uh;8`BrtvWP1$Lfy{t$q5A`{sT(W?TDJP= z6@@BR`s) z_eo~N{2=jfKYm}{F?%Z7hvz)(`|al>doix1;{u@6p}2oB@?34`fWT_{T1EGf z>b(~>oG+Dq|ICIKAN12`Pzz*DFGD~MKePD0tRh z!Azq`b7epUO&^Tjx$p#Kk3lRmLpyGU7#6end4gr#&>HWjHCqYt4w~`2<3-3C;30|v4gZ8E4GTgN zL7|Cu#Jzu3UtllANRcVq# zW;4$Gr+vx;cpZ0?S$+`Wnz`;bZji3OyLnS=EGmDM{bNrY?i+npmWJ)r&{>e-NUug3m$*b-64!g8V|ar2C(Tt88oeCM%p}?e!@aL zCG!v;xL02V@rp3sA0)9E8dsBI`UKY5yu(8H;$g?8*$4qf#slN9?`_Bh?}vhq*#~)> zJ;l=nw7&zKqRl!nmz?g6?E@s+*TuI3u#>I6`|&BO5g7jUM%V{$44heQWfFXH5JG=Q zK4T9e<96qJ7vKhsNot+)ROGsSorcDxALFuq;n?8@7s#qKVshH$@SV6d2|Ot&gcGoa zbQoMqhW`TVvCxOo`!QEX8@7viJzGP`Sz@Q>=jcXAd;KNs3;)_64YsziGvV&IeBKJX z(u|T_nh^U1HUj-7xnCAMXz6GfEC)B?zi!{IPCkC<^m3F zzg5j?G)c$)Ub^LF8EheuKA5Ow2l)UF7LJp_jzj2*@Z=1O3r4F1#vR6)mwSI}Qrb~- zyH3bwx{MMDN1)-Q$b%3P1z{&1r4IWmcS~Gv)1`{BzUf0Pxrm&^@pMx)mStT<0#wb+ zl1)NYk5Wm~SS{>DyVvMRV2$yj{oR!VIU|cJ@zOqv*lIhwJ(UOCZ>eu(EgY~VzRG`4 zHHYY(_BA@)ky2ay;_;`Ag(|#l$ZWEwFga>zQ}r4q}$E>JGLj9U0T1A&T$pbt5=P zZF%N?oY}KiC8)(u6W!zx<)y?nA`)>YuuRhKmYtOJjGRv~dpv|?>sEBs#d|!uzdDCL zEl%f9+KIYs1NP-z@tS`;`ib(q`8<*@Y@dYlC1U}1N`B0(5ex3?=IrI!$&ashPWi_{ zHLml+&XGd9czX8T0c0J_?7GW2ujIrlCnXC(0)aR$W#cASMn03U)x5u({OspCJv-&5 z$f0Zi{Po=Be5LbjQhH`D0Y}0al1Ac)H|C@b&T&fO213wyUovNSPp?Ij!ti?I;1pi%rbOYn|57( zFNy1;PmL~^Ih?~q`QW-ImfVw2=iujrA1$1yq0=f|K0i}_Rr_&|0n#CXtSc7Ah4e z9P!P?N5&$AC0n9k?0a>tcVyHtvWoqP_$07&9m`6f^}$1CHLUO{SI zG$oJZeSl&!{gtoRbNLQfFGra#r`wo3Ds%6C40wXRmr#FXL|LMnW&vi(utSG_zaD;V~EpFc?xUn}oZ~Z_mb`LT6>{~ehqR_W?JfWTbW z-319dVYrqbzlt|(^uAMLR^Z*|3N^Cm_8l4Wg@2A1?q&`Fc!otRRh%mM+d3jiM zYG9Pt9d)#>(Ig5RJ>Z&$v<;b!*&KJ&;nhO%dZ&LDF^HVAS5?*J8DVt`$h?RJvvLjU zVnp=WJ8%F=aI?vJ{m+n7kGR_kgpRR`P?;1>ro?}rX{h6BQe)^CY!CV)R~CQ9gTqxJj??iSECz z){vcz$C2Q+y^v*8JeX6J^o1r6pQihE5O!+std)F!f*`NS3MzJCF2seOG1}F*fW+UA z^y|ejx98=6kOA^Zyhxfq3hTvtPq$=ATUr+7m`yaz7fX~yY)-u+^V7X4lvw$q_@dHD z6`-=?bR2i%PLpEN$88j8Kl`jLt*;^6cf0w13OX+ot5?+mpQ#D{bv+@1CCY)xav)e&e)f!$pjf*l=#Hg$Adj z|FQ(HJ##xx;^NFN_z}Wb(h&9KCH$Nz?ZZ~q0^xSOmMf5r*MkaNl_X_5r0&-M49FhE zoj^D*tROV%W&WAE1z3uOPrQH1%|)bH{%{0;>~=s;!g>&h_ui!JBPTlmjT|syRq_ki z!Gk+YjFN=ucmsPMt&eM!%;@Tw53&!(0}_Q+3}nHLaK1prQbqTgRIzAQS;>$w+36mt zY3taLO;#ll(X7V)=lW^rt2K%@tH)^qq=yI7L&>%0kf>Ab=2t@i9i$=3=&sNeI(r&_ z4QJn%`tN(RFf3dJTU)lq$~IJdqbVBnAtzHj?4Mk+tND!Yt#pR zJ{-6Zm9Efp$}>OgvEv&D?B(v_cxTaVDCr&6f)_6S{Pm{yks-|ebS<2(o_#|-`sn6F^N#^R@^s8 z6@0N1MA%IV?wetq{~8YVFThBDPA%&`VjiF(rG(5|h9MWIhu6MzZi|VssV|Gx<~&Us zcLIdL>bl?uJEGMf$?y>8WC9Av2DM@6Ove58A4bAUxH!qwXFe0*=TS4}8At(q%w=5$ z|Ik(WJB|7>ME}vR7CdYf6Jo~{8aGO9ofk3PJMQesZ~oOM!;VQ1Gsh(!>3z&O*OqJG z1blYJ0bM(=1R?(`ub^|PJ9tvV276J#Y>@V^)){?)<00*Tu6PE0{jB+($e1K# z0Yt?|Q7Z>$iQ3%?8g)O!LmBvT3yA3PNqkYPC!bUiqI^*&z=fY*jp#KX20uW`};0_Kc*9s9#!#r zMg>xQ*C|%->DeSz>hVa@9*J^o%3qOwIwHlB)PYUg=miPAcnK-qcwKI+&wHJHnfi$=d^tB3}LjK@y_>e1{;+Q3WS|C~!>*D9rj_w(6_#?N> zW($fX_>QFXig3BXZ|@CL*^x#?8EvE{6@wj$lCb2V_fsfBjifxE^#W$(vMc>uP#4!f1}S@m7^X{n=|`&%BQ! zO83ZyfR@URlHUP-5&7>*Zw$Zm#hv;ig+9&9@&uvy@F~F}xwHccmaZ#H6L?0uNk=2| zq&|FqNlp@coL<|P>BYKKd>;)pXg82xnR+7J@dj|8^U}<$hsC|qjd?WOApDBkmy0Ua^?ASu>EA03`7CMKn zS8cSTTll~fxzA6kVQ|2djoP)&*n4m=0QKX4@C{r)S3%3??9JkiuO*1=) z+cFNdRA6EPe-Bs6m#<2G!UOA7?ez@^_d5K#`_)kM{nPkm5OvUyq`yw`Dg5>9&3vWN z4)_&>0aX}MR-4|h((LeoKn=GfVfF#A^9-0bk|FEv@Glo6;YD z5}qlHW{|F-Ayg z?o&q5tgSy;V#4=d}ZY(6n~#Sdb9EEJVAkBnTrx zU*u=tZElp1y;pyyc=Q-kM#$xh*}u^|P_nJ9NO5{TL6C25eJMA~^ntA-Ymv!T0n((< z+uh$)vQc6NO>O0FW5uejUzY2jA~>116Ua`JxfU$xsN+wb=G#*)wdVzzbJu2nb{X2~ z_t^XK@~Lf^RafJ{0O0?oqU$EyY2`cr?)7iWYTLl_hNh>a`5cx;e%J!GHot>h3tL`^ zojUqRYw?fBC0ck*L7u@Bl6dQ_xoF%lr~?0G<_9rTJ$CF5obQkqZ97J+^c~{Zr=KUF zN^rX1bQ5>kt;{pQLj~R8L}^uj4}gnW;%S$JiB@Aa5^5-`Nh-QkNEA%qb#&vXOs@T+83B#Youy^WaB5B(~VP2qvnF| zi#KD7j9gBPCL(XSR+F2jxd+6&92}+z7rram_*Llf}NpRji zC1@QsKXGe7pN!d3yi1IKZGl9+2a{uubQ!z&#e;d(abr|24DW(Mo$!bSP*x*;Etka^ccGMS-I&zxyeW>0SA|k!6 zo`(0?zX@y9)7Y+K9d8e9CxDCW-EmW-cEDfZ%W*#uaru^a<|(Il;?%F$IDK&|?)LGG zh~7>6H>jC8>j+K)j$U{*@Ff`ZN;p($9t}IRwkfN@A<>zCqVMk%UZnZ?DTmG)f64*C zYVtbCpKOGJfFMG8Y%bFNobiriM{Hae+7>4LzR61Z3*+5&TOYT{zUW%eGkFP8aRX9< z7GJH2i|Un@qIW_K^@~*mXX+AeB`2I8?W52k zAB)XSR3#r+vzYgO@OHY-QJ+LC`qrF-vpG=5yK*Rw1vm&0zyFix}dV z$ee&$awLbCSQ8pN;ArW0qUxMf?K0!~y2=Bf6kK_xE;{S{`$VM@#gVx_-OZLaM*;Vog~X5kEmq18djt{ zZu|0pQHFilU-&>dxmg#=CqaG2e&`}g^1PooZ$}>*e*lx7Nm!l4bw81_iI2Tc?rXL6 zV%N1p_uke>s@{W7wQp@WN z4~0klaIg0YELtDpd6Y{J?3^-&ojrm0@?64wnyGi~yv{*m_5hulJhAod+`oMfS+1*u z{;Aqp+F{_4P3=zKK992_1tODi{V`8mUXBrB+4kC91H^DL4CVZB!z=Njqsv`=ZnI#2 zolqoqUE%Pl=+|&6&zBFI$S(Simm4K#7&*Y?@$p_mX9Sx3z?zdL?YG*?XC8thSt~yH zZmtR%k(Ep{^-d zrhCBOWIuczFRw7b?(H3R@ieFR(FdjOwkS8joZb?p<*~b2iE4SsWI9F_7C9QeR4j&lv&3n9RN^yP=Z z-Z>o-Ip5c*C8-7?p^nDpX4?QNZRzvF^LNfSUxT+c$jM=z@_Sd`80xn&8fgh+a1A?Z z#ukVGP>us)SK21p_isB7l|6zQ)A@SF z18-l4N+7v}30q$}8&c_?V!dA_rL>Hn!X^%8K97wEy;{A6s5@#?|5{7%3u%E&jjpTTg@tu z&A~(VY_H(+;QYe{@~TsR3sapgHcF_wEmFG3PoGI64thKQuk>2U%-hpMt}`Y^j?*$a z8iuzOLGVCz_ykG%P-;D)vSMEYDKFQt3ik_1pSjDEcJ&LO1pzgHmMr>+&0xCpp^!cl z+F!i;dg8b71nHgODomf*&vd6x(^)?jw_rISy|P%v8IlOQM@}ezsnX55XU~<8n~E1! zu2nEz@Ww5>u>y)M@$Izl8II5Yv}nODe4dpZ=HiFLc5dDNygh=f^E8R&yEOm21(O76 z`gS>b5qrm%W0o*l&Z|7VZ}yNs_T|2u7mop1D^DLF!HPu!*X`bv|AB0o*9)LrFFikY zonraB;6yQx@!~swv=re<{Yd~xmo46N3`O`96uL+KhnON+!h;z5usFzwk8?5hY;!1s zFA!p9_wp_#Iv-2FK*%SI;BZPdBlm zmc8>Dt)4@&;H}+Hxn62tDKju!rukH}P*fKpS>WcBYJQl=h}e^Si$Q^iC5tuv2whFD znTDh)dB5$R7urNPa2LEIU4M+TCxP8*c>%ioJv%i^HS)*DPC%s%ho>b$=>3nZa*MW= zabI%~xGMF30a*ySs{wbN#dN;reUPB%lzDPGH6QD01%7Vl=!KHBEsu`gb23iR$oeRP z$+vgTq(i6Gn@70n61qFQy$|8j0uwkuH^ zm%_wwI`ErnI6k@_ZT#oUVZq++3GGJeXw49=6MW zw3p~&JHOv`og}|Oam%EqF;Yf(e;zGXb@D|N(}@@@vuV$0EnC0UauT^niEfP)B7Fj+ za$g?7t+kDx_I+Gr4WD@@C)vopdfPMtu@~!lumR}wIvO5ok>rbH@6XEZBe&#lZ*6zn z@?bma+&eKUuI8z`jX>3h1}TBXz){G5V4W=^*1R4`{;OEe7k)POLf=d5k8i@=K7sCk z*04^Q?^OuM#3P4~VO-dwIls7{j_>d5JNBIH8M99@+uQ+&%-gjyNO?ORsW~B5=Zk$2 zioM?Lo;QXuejBQEhBC(@K|5Ovya#)Lp!+)8J&>sEBnz9s)V#_zG%$0rI2i_itXPHn z8Cri29_rE8{>P$Bmu5VDw^f&s2`qI`XUuo2>d`v0yic2eP*$jME4R%C9Tj@Jx3?5D zw4l)6NpiB2m^w4mlgtFsu5v_Q689mxi@Hs7&(_In-7W_kD8^kazI;8>Zn*`d^sFhy ztp@)SDBooT)G@RCoDY00mwjJ<6*A{~hvi71_bvHVG(%?ba3~LWy2bb7)F9FU_24DN zkytMeI`*Y(d!VXIfE(Xv^gJ0nZsO(`dKp6N^_@TKwV|8-a@YgE{95D$GCgiMAd8ja z4mqy)7P;H(Bi&Q$$_v5TKA0I=W1yC~eR>1y9ZllI{4K--0Ic>aTEt9$!ptZl{AuH# zC!l<$#3@0oQ-$03j6r(!jBk{4!ZnNAJs!*T=V-f&ioO3d#dG=U$h~xU{AT`V(8c^C zui;fvg!MsCOph>q;=gw95B1Sc#lu~VCYY{iB$CH7wRe->b{bLs7g*(I)D8(BC?e1L z8Dm7;uWB!~0mXz?fcXA@w z^@Uqge7|=GepRT7fj-HY&!0xF)sEsHZ|9Uf872zA@3QKt*CxO&K;%~5&gHm&E=2T- zO~qVS#Ja@c-4ri|WFd0iYu_CJ*Bukt-Xe}Kf<9I|0d;-zdt20hnCB~HK`b?!ATIbw zRVG>e-khE1z@_u>a+2`lA&5Z!>h~AyR9mT}xBq?j`#{RSZ_~vt5~V{KgKt`@J?6#! z)LYXX139PnpjG=6`FNfH*q9DQpyu1N2;YoUd@kaxFQWA3o~mE8_4!fD+Sor22?wxIq8(8H+Jx9Cad zw}}S8(NmQCer)0x#F?s^zW0pZ6Ceh6_ze|ll(w7@nQd1<>?{_+lORiD0vY^zOJ0wc z@%#9ze%&cn{bIyW0qd_vED)Q4pYiCNeUr#^0P!p*c^cP$fgZKt{;6IE_YONX1y7u{ z{(`Rc;ZS1OwsFJ$#`R@zJXPnZ7WO13aPD!__8+0RVMN3pc8Cf>pd-6qwJoHZLQc}& z;lH0nf1`Si@a`!4^=;L=dxs)I@(h)iUtsJ;9cffjR&e3cOy_SQ+1yQ+%S_^~(tUo; zLeX^|?COPol7zYS+UMT!oL#%>RDA*8XO0w0#plhc$VG#Iu>LIU;4N5h@F|f})S1gd zcA?bLs6(C#j>&_sj_0a*w2H-b)oXtznwFF1_k6$-HYJCywP2`MCpE8ge3ysWKsalW zDIod#{EK`Y;OaSS`Dc^;X~p?kEI(LiW6Bn6T#nOkSeWVX| zE`@A=GuSdmzg=98`L4f9195dp>G?2Zl)%4R=8Dzu0H`Mq?D!VOl&8aA938NV{^q(X z-gddi722z)B3YfX7sp7O+7KBpT_m#SHEvLtSzpS@K+`@XEm1~^kPLs9{M@aNolw#6#inaM5 zWc0}?srP|ZvqI-B{bnE}mRi|PrL*?42oVWf_2fz+6%Ma`RIbJ&dqXoPbkBpd9%Xdz zUk_GhZb@bABvJ^yUJkuMX2PPf^C{VYF%H@Ed$+RN>2--J9j}uf<*JKwi-IeEJA(m> z-Ivct^#Iw_^PI2|evgTs&#ofm2h2&ekQ7WSR@g0Ws87-BH3YpM-wRr_Bm$m9B%(#4 za~LVyON#lEcU0$}4m?!t;fozD2p%#%Y^2Anzp>{#`iM+>omNED-;P{n{4NwVi1193 zm5y3Es~W`X&Qk|zg#GHjdC>EJP()#XDcr<2F)Wb%#6tK+BC&3|C-{=5hEFoncgfv1 zc)ZqGJu$&|+V0oMsowkUNP@nj6$2`Hb%(jt-XZdwl1LKq6~OH>2>n2u%kH6c%ba}Z z)g?s!O|GhOK3*l%Jp4+`3p~q|d|$BVZ51cX3ic_^i5KCZmIL!Vk$8}Q(NQy1^SO3x zf_noOWw7SKQmVgW^-E_TR%NW@CUxWIIC~- zk%?J?-vpK>=gY^BHrW88d2T(|sb=zGv7+?aMCyyUao@EsVQnSliFg`P#PPh5vW>n}t2 zD@e-YRXoU9D7*(quo(%~dYticed42Zrn7SG{O(Se?(*ScEI~?;9C3ymb<@ybhLf)S*zr1KhY$}%d zPUojEuTMmOrNnOM;q{NxbVWVEwcAga481G{3Nz0L<>Qrq6+z^C%ieNok2P?|kMCon ztf*}TowEC`xZep*4T8(@O|=g!54#gax+eI8F<4IR1JKAH9+_=Yc!#_mhyae8d>u8A zkX(nye1~>_W80r_CC#5{3#Z{nAl3n)!+n4ITT!50q@+dSE;bOT?eqbs3ZG@5l==@D z_4)Ds^6LP9njYRz^(PR*=*uP2h-9YMq7$GPn5UdsLqFgv+`nI0l%2wwdBP0K3P!QL zTRjkzTHy(zr~qa5KW;Du`-6^vasdqFtwuuSfma6TnBedjUp%`mL<7r^yoDma6K{_( z&c8bQeJokASLNu6uzd&1mEImOH{WXuajBEPcT{P-A$ld2L z#NOGBd$3r_lEI?|-=k~q{n}w~*@ePalIXJc$XOEW)+(34ap)o*V@WTVk|;NV!KZYS z5wE#fr+9wn#gRF^JNXd%Ec&UMUcbt(bDAH3H@c5_SbjADY|3z2Sg^uKHldPBh;bH zw9KP^qBm~Ic6pCe1J{r?V4Sy&8#izA%=Fz)H^i5x;zRbMu{hI>ekR@8g{CPjHzosc z^}&5iPnuz_M*#w?qxO8UX)4nAHEOsQ0OoXmmm-73XCD75Y`p1r=OpMSnlg5;QI5TV zKM;~08+%%Nu)^DQyr1c_=Y4;8y{i)(xkDAwH{i@-=~^^1q!nQdILzc-#ttuZh3cn! zG(61ia{@~lz7;J6b)3SP>FAio)>JvQay1k|xGC?oOW(n5N6??D=pWF|3&=L%MXeZr zz;bId72`ozJ{B)t=mec!MHzm#-x0h`tzwR%VuhE^0U-v zJWjUlUhF~)Ma3~P6B%!GZ-;M+>RP#t7YOmWNTCM0br@UZ9Iw9>!4RCqd3HBO8|Et7 z*ib5YRfRZYmmK;qUMSJoWnkO`jBgu%Pvq-_pT-|F=G8z4-twE(KcXU7m2uVv)@x=8VU0qIO<9s5PF(3-#L;{jz5HV?!G2mwXN+EGXCz+SXSX4 z(KQRuDW`yDc++P49{Q{!!k9mQ$5Hu1P_XkL506boM`yMy?Od}sgWmfZjzsh8v(Eyi z2}jtr$J=7RtAqT&I&wNdSA?&#_Q86TQ+~U?9U;1l4HY{S6=l0Ygs}#|XTsl6#Nz?= zcUl~%3r(L7A@kXDXpR@-Zv9}~qDfIaE*@c8)>nMd#3@M&j z!Z5q>Ugc$sG?T79smye$y`Y zubA_r=93F-e?Hf42pJLdPwW8nc7$(JW&7Y{^pKfB7U=DOy4c6p<^WWN7giwTk^$4f3rYd7(xlp{Ky(D(Yu$qNL>%Hz8GCs56Z&&2^V!Y~FJ%?)% znV52Rr7cf86xT=ZoAVx0tkJRWiGn=5@m)e`G zilsc?|Gv`yKmM`*NHTFE9KsTRBzmpz$l{Ftv%qD4u;jN?QJ&UM`|Jl6`FPwvcJW<( zDO7t^K;V(H9Xg4{+?hZb?lGWyRv(c>IQc<;ZsZ=Y!Y|%1MMylzobV@R_c26|JfJ}s zRdVO@-@pMiErTla;H)xuyA`EMAiH_8vV0&I%V^W( zcu`3YhB7bQNHo&u+j_&gB0F)G&xQ+9UaAwafUH-$K!iaG*lyD9PBc>7Fw%)TL~n#L zS{*7rwX2Bn2!tz?+Hu@D1<&I6>lRQFdm2KBx8-^U0@|tDr`suo!ahl@gBDxEI zXLoFO`SIk=)igpip1AMq^hkhs`^enYk$7n1G&VR&8=O^~>|t z3!vMlC!dc6&e5>P>*CTLrZMFeDJ(;Og0QVzTBm1GCBQW%5?&Q)(;l{w$=oJW<41kO zhU@*TdTgvyiKhtSN^`YOzK3IcRO0PTUNBZOL}6lG_e*a8u8G26Q##jkty!enUMxd6 zcEFpo1luE;QcXxlV)%%76Blqb%ujL9J?bP`32E28Js6GtKEw>PoMRFb$gX~ zJFfSE;On&i^qE8Evy6l%^x^G1S?elTO(p-3%(?@V{R@JFBkpGOzkjH*j7sA+klJt>x`EFSvE;U@IL zpDtjbp!{rz6%(7a?<`m-(8dEtU>%ms@mLJgqEcJrD@FtC7V$HqEb{M1x+7KfL}#s< zkW?`aP*I2mp#<#lNRcEukTX;e4!i845&xXUTST&q1i!f>?k-FV)d<*s?6$(cKG_Y7 zkB;-e%Ngr!&T;-2(@laF%|Le?ICVmbCG;OsJ_*SV(;_(Nvb0=nGCbYA3r#xb5k7lr zWJ*RLKL&C? zZHl?}V_VQ6j2ov6e)b4|8$z)n|s*4GI)5*Yc?SrE>)NekNpQW9Fl&(wf)RgiX zbVlBOZ3r?w*RI}Dkt5iW?6#8lou03pYEXCGy;2+gugf-Cc;3c;?F{|N2@a!rTj_Z? zu}lEVcH6naZsN(?;6e<^QBkiB(`U4gjh4KN`XE#Z`_XP?On&xibX7GCO_koB$__G)^i@ms!eL*@YKmuHEiH=LY@T`GCVHxfoET|fsH2~8okdSXaqF|sZ zq))0u?*E&=l5={07nv71j}SL5wp-HJ@9FC+c`RaTHk{LWD%Mz&1!wXq#~9gU#b#f zc61Od^yQvrkNqj3r-8vF(*jY67gCS8Cy!Om7J-3K5q>GDXk&h;CpXOfGQ;C=ScuKa z4B{CsIFzCZ5U!VGp~IP3IPXYYxh~f8Ru-jUxAI&#Ro}$XeHbZ8?@Sus0>F<#9N2R0VIcAIxwC2>+Y^tn zS5E0B{UhV|k_%v-Gq){p(3sy6PclvD=2rIl6dIz8m=W*xWO!2n>;@z9AOImj zc>R!SBlGA5X^r#*E?q*x-DHeU{7S~HKx{7xKS28A2mkZ0h%AEpt52 zCld^NLViQ}e&f7s#lVF-A_2#2X+pDSXy_-5kG;O^AEz|{kQQUq`95Q~ zOv~?X$sK%e(2MLr%xuNo6c57{0r?ERx8Wj%4wys89_$4-^z;ijA-WfPHE)VnHc4O| z87df7O zi$cXvH(>b|$Jr$hk}8z@QML3Rzv;W461g#dMu<}S6*+3F+!*lQ6pgf9evXIDm;%C- z2{p57yRzdLkwU*Kb+vpKsR#@4)cT2PqPS3_x)8oM)gZpliU+o*) zlzhikSDDemC0@s*Jk`3F3Il4gH^N8(43%}^+;JOV2FOXG`}#E)?#!!4Y9Uw`pC_n) zkR{WVDCU`9cl`hxT)E?ZR|ZrpgeYfa727M}hz&UbW( zhRMm`1Tlxj;271G1Dr*l=_2#VQc5-e<%_KFGZ*XZ{G}$D+;9fc`BNXnD2{!|)4_t_ z?~s+FHas{C(le{0K>!V5xW(Nq?A&92sK)7&6*~@i=oDt9MvZ?F$qdWKLSfci;;G(F zFb6WKdu*`+nYe8%GZml&NBTuD(c7E%SGC|i zDB%17r4}I56Vqfse`Tlwu^i{ZxkPpTO6AFNb>emYdD*OtJGA7a;uj%F))@VN5QZq2 za0>%HSJdC;^E=_y?^2FoEtlgYf9pS2@=Bm13yl(ECd#vss&{+H)yGx(Ef=Ypr2znl zJotQq$8F#1UEA=r6zYjw6UryhTWWp+!C&-w)9ZO{Zmts@e)@Z(<{8};k8JNPRfUd=NMIh6r}w1tN+ zbmqguJvntaaOnIsQ~a8L%0%1O#S?cW(P-N_89vi@YcQwLZ^!R~TyXp{CTB8ot zZnL-D?$evs7JX4#+|yhT?jjC{ufQfk8wV&Z;^OV=>Cg;ex=Jkoq!Rc@)k91Hf_qJZ z_{?DF+@iNGvnmUo5vU%)G@KY&x}um=+!&eUYT}Lx=N;DC)fA zRw5w!2(B^)+NhsK--pYKB9Fn}@pXPFgOwM#?TGiMp* zitBPGTqoTRQP;m2>3)=W?i78=8tv#zTLC3%>!14RC_j=YVG@aFTbMDPIk^knDphan zw{qFo8qRB4nAuA?!KC0(&+G8|*xAXd`pj&tiMTh$6ffjgq`OVn<~L9bKZ#(?zD|u_ znix-%4$J9(GBL@OF3f(TURkjh=ks$*`=RxIe;W`4T?*{mK2c0=H6eL3RPE8E;$<$S zAmhg|-fr}JWug|5sq3Z(V~GZfW?^vmixeMZeQyvx+^Vlda)oW6wd5F`l=7Fj+B~R+ zE@ZzAMwG)?Xhd@I(s=`|^8TvC-e@v?i^71CUZFXES7yN8<;oPq_eCfh{#IVlH4$)f zd9sDbK`B9FMi5D_9$r+(j^{83BMxaV;iDs~nMmiuTw>k54t31+$D-l{L3l2C+*SAY zM1L_bq`bt#L)~h~uAu&q7C4$Xuf?L!2JzdQ!maomDH;E4>DPzFdqCPO)L|$E5@9n!qZZd-eaC!yi z28HW;egvN9Z)SBaC_vBlQ?s5-dZ-iJwMKuq|85&4>ms#zf6bI%k!)-)GB<&gPlB$6;DS0aK2pXCs@nw zC(PXyEK!U;>gE~2D*5JmHu(tJspzcIYC^i701cpW2rPn!h<|IdYs=$H0DE*ti}Nm? zmwnGwH+Oe9iKfc#W8eK^gNn~;|2`o)>>t-BQ?elX$QBfGQmc86(iq{Tn_d*K8V=`w ze$ImV+@F3-xV!E!wWkn-MAQDnl>AcYBMjZD{8u1U8M{`HFpITzN>>Q7OgEh2lLu0L zeA!dlaoT%9o3K+ZT)@GAbBSj;EEw(xY?iYO6C!&E?v2|(WKQ=rxH7&S{rY)&W7mZ- zM-6Mx6ji6LXouC%lz^na19bJhyQh$UwXTI50m`h*$wnl`m#do&0A#&0?~#4+w0|Jd zs+Ens^Gpi1t{wM%TxkqQ%}RL(eUG}y{OFESGj8gTXohep8uJK|mCXD8lCtQPWF7kd zcux&y?)8#$Pu6}LbyfX~r+t^hso~f9sh$@x46BoTYhY|WB@B!u&lkhxN4hV6K`Z%O ziJm&%+j+Gk|l)b^4C1nm1)qJJ~-oUdn17wjtxH{in~(>q*h zKm+dHYfEo?NmY-lcO=gcM=at`He@+Kfu;L4Ejj_(jiD8wIP?{cI2wwHEal3b_a?6$ zk|-LO?OS>{@Gv@c1ygB?aEjD_m=WP+RN`jNKDVS#3;fCaC7aK<>?c(74%+QDs$cf~ zz04j?qzSy4n&ff6e9F@xEFylF>nP76t1v<;r2khSP%n*brVgM)FWa zNXJp;`Uc4ig|V=`5Oa{RTxsW{;g{^KhPS@`y*~78cs@9I8RV2ko-3k%`o_q6p<(yN zeb87DdWuWrH}l_b+T7Q7Wiy+w`{$g;^SzZ0htM2=ul5m{Oe?C6U?k)~w4Bx!( z4ikVFI_;-mgt1`EvUV6l`7%K} zyI<8Q_~r+N?Fk`tEG$d&R4?ZF!<>-W*XX%f0_zTwV?#~*1dPppt3S2(vsRzuC)nHQ zueM=qK?#Om%_o@c&vfkUYp`;FCM(H1Z(G~X6zrxS32aNt?`7aOY_fdGnuG^nNBne5 z-iQABSXh`)?346?F~C66`0(JRNk}dW$WuC3d~|^@FY~qes%v`U2*jfHPa&K1)Lk=_ z)TU3-iwb$YjX>Dt?CG)v_$IvJ*06sCQFAn> z18z-AcjYyYO!fWeL-8ex*E+e=2`tbk^C&IeE@bc>*L-y|Fe3H$B*Kcp8|XKA&fhjo zs-e71w#b+Vdv6Q5(Uk!Zu})B`9Inerz1(o&)!CI>`(M9*ze`7=RiCeV$}n`Tf;>@5 z<3YpW^I5&}?r4vxJkt>6@Q0rzMJnW8;&VzL#QR4m?~fdpdu0Ezd~OMMY|g*?O}y|Y zN3)>djMkmvp0Sdg7Bq^y}t5o850iv+p>xdswR@ zz~F7F(5uRS2Y#&OR#W7){}G07C13PK$by^qyD>WNi{H;YaHp@Zt$KvMA7gd6Sa9ne zSC=;cn3oeo#Ma}4*?UnxV$*R0`W^3i$G(yh(=Lu&0ome%U2QMPOTHh7uW^CcD0`fM zQB>s}iMqkTb1vCmx+&J6MZcTZt-u`2I8l+zo$%{_1)WBNBl~&NkIIbFEap`_{Ls&A ze-Z7lg(+r+L<;JdadQ#Xyn3=({bb%OuDvT3->UyntIa^7_g+QxO|s&0dTX7W2JMUq ztjJs2chxiu(U;{o%kGTmMXXduhqpx8Ia@FdmIp=(3YrMT;B!5?#m&X6ZScwiLhAzseD=qB~@M z{D{~$b?she6o7i8p08eoW{8ErCpRG%S^Cue5sr zsg2N8zI6VVA^43Q;U0hL=^-3V56r*=SQ;XK^FtHOpelTByT{jV?CjggM@X^J^2k>h z�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 V{-!-C;ps;GSy0r3;&dpu_8*{Ou$=$^ delta 134759 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≷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 From 9b6223e425b3347cda3eda6bc9a193a72ac3ad10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 11:30:15 +0800 Subject: [PATCH 060/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=9F=A5=E8=AF=A2=E3=80=81=E5=88=9B=E5=BB=BA=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E6=94=B9=E3=80=81=E5=88=A0=E9=99=A4=E3=80=81=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 65 +++++++++++++++++-- .../devops/api/vo/DevopsHelmConfigVO.java | 17 +++++ .../app/service/DevopsHelmConfigService.java | 43 ++++++++++++ .../impl/DevopsHelmConfigServiceImpl.java | 64 ++++++++++++++++++ .../infra/mapper/DevopsHelmConfigMapper.java | 5 ++ .../mapper/DevopsHelmConfigMapper.xml | 18 +++++ .../messages/messages_en_US.properties | 2 + .../messages/messages_zh_CN.properties | 4 +- 8 files changed, 211 insertions(+), 7 deletions(-) create mode 100644 src/main/resources/mapper/DevopsHelmConfigMapper.xml diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index e699241228..127777b36d 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -5,15 +5,15 @@ import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import org.hzero.core.util.Results; +import org.hzero.starter.keyencrypt.core.Encrypt; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.DevopsHelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; +import io.choerodon.swagger.annotation.Permission; @RestController("DevopsHelmConfigController.v1") @RequestMapping("/v1/projects/{project_id}/helm_config") @@ -21,12 +21,65 @@ public class DevopsHelmConfigController { @Autowired private DevopsHelmConfigService helmConfigService; - - @ApiOperation("查询helm仓库") + @ApiOperation("查询helm仓库列表") + @Permission(level = ResourceLevel.ORGANIZATION) @GetMapping("/list") public ResponseEntity> listHelmConfig( @ApiParam("项目id") @PathVariable("project_id") Long projectId) { return Results.success(helmConfigService.listHelmConfig(projectId)); } + + @ApiOperation("查询helm仓库") + @Permission(level = ResourceLevel.ORGANIZATION) + @GetMapping("/{helm_config_id}") + public ResponseEntity queryHelmConfig( + @ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("仓库id") + @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { + return Results.success(helmConfigService.queryHelmConfig(projectId, helmConfigId)); + } + + + @ApiOperation("添加helm仓库") + @PostMapping + @Permission(level = ResourceLevel.ORGANIZATION) + public ResponseEntity createDevopsHelmConfig( + @ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) { + return Results.success(helmConfigService.createDevopsHelmConfig(projectId, devopsHelmConfigVO)); + } + + @ApiOperation("更新helm仓库") + @PutMapping + public ResponseEntity updateDevopsHelmConfig( + @ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) { + return Results.success(helmConfigService.updateDevopsHelmConfig(projectId, devopsHelmConfigVO)); + } + + @ApiOperation("删除helm仓库") + @DeleteMapping("/{helm_config_id}") + @Permission(level = ResourceLevel.ORGANIZATION) + public ResponseEntity deleteHelmConfig(@ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("仓库id") + @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { + helmConfigService.deleteHelmConfig(projectId, helmConfigId); + return Results.success(); + } + + @ApiOperation("将指定仓库设为默认仓库") + @DeleteMapping("/{helm_config_id}/set_default") + @Permission(level = ResourceLevel.ORGANIZATION) + public ResponseEntity setDefaultHelmConfig(@ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("仓库id") + @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { + helmConfigService.setDefaultHelmConfig(projectId, helmConfigId); + return Results.success(); + } } diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java index 469f57a5cd..2ed6d7bbfd 100644 --- a/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java @@ -1,16 +1,22 @@ package io.choerodon.devops.api.vo; import java.util.Date; +import javax.validation.constraints.NotNull; import io.swagger.annotations.ApiModelProperty; +import org.hibernate.validator.constraints.Length; +import org.hzero.starter.keyencrypt.core.Encrypt; public class DevopsHelmConfigVO { + @Encrypt private Long id; @ApiModelProperty("仓库名称") + @Length(max = 60, min = 1) private String name; @ApiModelProperty("helm仓库地址 平台层或组织层为仓库地址前缀部分 项目层是完整的仓库地址") + @NotNull private String url; @ApiModelProperty("仓库账号") @@ -43,6 +49,9 @@ public class DevopsHelmConfigVO { @ApiModelProperty("创建者真实名称") private String creatorRealName; + @ApiModelProperty("版本控制号") + private Long objectVersionNumber; + public Long getId() { return id; } @@ -146,4 +155,12 @@ public String getCreatorRealName() { public void setCreatorRealName(String creatorRealName) { this.creatorRealName = creatorRealName; } + + public Long getObjectVersionNumber() { + return objectVersionNumber; + } + + public void setObjectVersionNumber(Long objectVersionNumber) { + this.objectVersionNumber = objectVersionNumber; + } } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index ed06bb43a8..2c480fb747 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -5,5 +5,48 @@ import io.choerodon.devops.api.vo.DevopsHelmConfigVO; public interface DevopsHelmConfigService { + /** + * 查询helm仓库列表 + * @param projectId + * @return + */ List listHelmConfig(Long projectId); + + /** + * 创建helm仓库 + * @param projectId + * @param devopsHelmConfigVO + * @return + */ + DevopsHelmConfigVO createDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); + + /** + * 更新helm仓库 + * @param projectId + * @param devopsHelmConfigVO + * @return + */ + DevopsHelmConfigVO updateDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); + + /** + * 删除helm仓库 + * @param projectId + * @param helmConfigId + */ + void deleteHelmConfig(Long projectId, Long helmConfigId); + + /** + * 查询helm仓库信息 + * @param projectId + * @param helmConfigId + * @return + */ + DevopsHelmConfigVO queryHelmConfig(Long projectId, Long helmConfigId); + + /** + * 设置默认仓库 + * @param projectId + * @param helmConfigId + */ + void setDefaultHelmConfig(Long projectId, Long helmConfigId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 5b4600222b..5bf4b97f3a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -7,6 +7,7 @@ import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.DevopsHelmConfigVO; @@ -16,6 +17,7 @@ import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.DevopsHelmConfigMapper; import io.choerodon.devops.infra.util.ConvertUtils; +import io.choerodon.devops.infra.util.MapperUtil; @Service public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { @@ -84,6 +86,68 @@ public List listHelmConfig(Long projectId) { DevopsHelmConfigDTO devopsHelmConfigDTOListOnSite = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnSite); devopsHelmConfigDTOS.add(devopsHelmConfigDTOListOnSite); } + + // TODO 默认排第一,然后平台、组织、项目层按照创建时间排序 + return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); } + + @Override + @Transactional(rollbackFor = Exception.class) + public DevopsHelmConfigVO createDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { + DevopsHelmConfigDTO devopsHelmConfigDTO = ConvertUtils.convertObject(devopsHelmConfigVO, DevopsHelmConfigDTO.class); + devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); + devopsHelmConfigDTO.setResourceId(projectId); + + DevopsHelmConfigDTO result = MapperUtil.resultJudgedInsertSelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.insert"); + return ConvertUtils.convertObject(result, DevopsHelmConfigVO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public DevopsHelmConfigVO updateDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { + DevopsHelmConfigDTO devopsHelmConfigDTO = ConvertUtils.convertObject(devopsHelmConfigVO, DevopsHelmConfigDTO.class); + devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); + devopsHelmConfigDTO.setResourceId(projectId); + + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.update"); + + return ConvertUtils.convertObject(devopsHelmConfigDTO, DevopsHelmConfigVO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteHelmConfig(Long projectId, Long helmConfigId) { + DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); + devopsHelmConfigDTO.setResourceId(projectId); + devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); + devopsHelmConfigDTO.setId(helmConfigId); + devopsHelmConfigMapper.delete(devopsHelmConfigDTO); + } + + @Override + public DevopsHelmConfigVO queryHelmConfig(Long projectId, Long helmConfigId) { + DevopsHelmConfigDTO devopsHelmConfigSearchDTO = new DevopsHelmConfigDTO(); + devopsHelmConfigSearchDTO.setResourceType(ResourceLevel.PROJECT.value()); + devopsHelmConfigSearchDTO.setResourceId(projectId); + devopsHelmConfigSearchDTO.setId(helmConfigId); + + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectOne(devopsHelmConfigSearchDTO); + + return ConvertUtils.convertObject(devopsHelmConfigDTO, DevopsHelmConfigVO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void setDefaultHelmConfig(Long projectId, Long helmConfigId) { + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectByPrimaryKey(helmConfigId); + + // 先将项目层的所有仓库是否为默认置为false + devopsHelmConfigMapper.updateAllHelmConfigRepoDefaultToFalse(projectId); + + // 如果helm默认仓库仍是项目层,那么将指定的仓库设置为默认仓库 + if (!ResourceLevel.SITE.value().equals(devopsHelmConfigDTO.getResourceType()) && !ResourceLevel.ORGANIZATION.value().equals(devopsHelmConfigDTO.getResourceType())) { + devopsHelmConfigMapper.updateHelmConfigRepoDefaultToTrue(projectId, helmConfigId); + } + } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java index 6bb31e60f8..326f589140 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -1,7 +1,12 @@ package io.choerodon.devops.infra.mapper; +import org.apache.ibatis.annotations.Param; + import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; import io.choerodon.mybatis.common.BaseMapper; public interface DevopsHelmConfigMapper extends BaseMapper { + void updateAllHelmConfigRepoDefaultToFalse(@Param("projectId") Long projectId); + + void updateHelmConfigRepoDefaultToTrue(@Param("projectId") Long projectId, @Param("helmConfigId") Long helmConfigId); } diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml new file mode 100644 index 0000000000..68703df4d4 --- /dev/null +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -0,0 +1,18 @@ + + + + + UPDATE devops_helm_config + SET repo_default=0 + WHERE resource_id = #{projectId} + AND resource_type = 'project' + + + + UPDATE devops_helm_config + SET repo_default=1 + WHERE id = #{helmConfigId} + AND resource_id = #{projectId} + AND resource_type = 'project' + + \ No newline at end of file diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 9c4376dfa5..17b7838be0 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -924,3 +924,5 @@ error.load.host.upgrade.sh=Failed to read the host upgrade command template. error.host.app.name.length=The application name length should be in 0 to 128 error.host.app.code.length=The application code length should be in 0 to 128 error.middleware.code.exists=code exists +error.helm.config.update=Failed to update helm config +error.helm.config.insert=Failed to insert helm config diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 40978cec8c..329ead46c9 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -920,4 +920,6 @@ error.load.host.upgrade.sh=读取主机升级命令模版失败 error.host.app.name.length=应用名称长度应该在0~128 error.host.app.code.length=应用code长度应该在0~64 error.middleware.code.exists=编码已存在 -error.key-encrypt.decrypt.abnormal_content=页面失效,请重新访问首页进入 \ No newline at end of file +error.key-encrypt.decrypt.abnormal_content=页面失效,请重新访问首页进入 +error.helm.config.update=更新helm仓库配置失败 +error.helm.config.insert=插入helm仓库配置失败 \ No newline at end of file From aa225442d842f8a1c694e2d167b94677e36bdaed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 11:38:21 +0800 Subject: [PATCH 061/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/AppServiceVersionController.java | 13 ++- .../devops/api/vo/AppServiceVersionVO.java | 34 ++++++ .../appversion/AppServiceHelmVersionVO.java | 102 ++++++++++++++++++ .../appversion/AppServiceImageVersionVO.java | 62 +++++++++++ .../appversion/AppServiceMavenVersionVO.java | 102 ++++++++++++++++++ .../service/AppServiceHelmVersionService.java | 6 ++ .../AppServiceImageVersionService.java | 6 ++ .../AppServiceMavenVersionService.java | 5 + .../AppServiceHelmVersionServiceImpl.java | 13 ++- .../AppServiceImageVersionServiceImpl.java | 9 ++ .../AppServiceMavenVersionServiceImpl.java | 9 ++ .../impl/AppServiceVersionServiceImpl.java | 53 ++++++++- .../mapper/AppServiceHelmVersionMapper.java | 10 +- .../mapper/AppServiceImageVersionMapper.java | 7 ++ .../mapper/AppServiceMavenVersionMapper.java | 7 ++ .../mapper/AppServiceHelmVersionMapper.xml | 8 ++ .../mapper/AppServiceImageVersionMapper.xml | 9 ++ .../mapper/AppServiceMavenVersionMapper.xml | 9 ++ 18 files changed, 455 insertions(+), 9 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java create mode 100644 src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java create mode 100644 src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java index fcd71814d0..03bbb89a13 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceVersionController.java @@ -61,10 +61,15 @@ public ResponseEntity> pageByOptions( @RequestBody(required = false) String params, @ApiParam(value = "指定版本") @RequestParam(required = false) String version) { - return Optional.ofNullable(appServiceVersionService.pageByOptions( - projectId, appServiceId, appServiceVersionId, deployOnly, doPage, params, pageable, version)) - .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) - .orElseThrow(() -> new CommonException(VERSION_QUERY_ERROR)); + return ResponseEntity.ok(appServiceVersionService.pageByOptions( + projectId, + appServiceId, + appServiceVersionId, + deployOnly, + doPage, + params, + pageable, + version)); } diff --git a/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java index 4037d5e5a3..c292285efd 100644 --- a/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/AppServiceVersionVO.java @@ -5,6 +5,10 @@ import io.swagger.annotations.ApiModelProperty; import org.hzero.starter.keyencrypt.core.Encrypt; +import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; +import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO; +import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO; + /** * Created by younger on 2018/4/14. */ @@ -27,6 +31,36 @@ public class AppServiceVersionVO { @ApiModelProperty("docker镜像版本") private String image; + @ApiModelProperty(value = "关联的helm版本信息") + private AppServiceHelmVersionVO appServiceHelmVersionVO; + @ApiModelProperty(value = "关联的maven版本信息") + private AppServiceMavenVersionVO appServiceMavenVersionVO; + @ApiModelProperty(value = "关联的镜像版本信息") + private AppServiceImageVersionVO appServiceImageVersionVO; + + public AppServiceHelmVersionVO getAppServiceHelmVersionVO() { + return appServiceHelmVersionVO; + } + + public void setAppServiceHelmVersionVO(AppServiceHelmVersionVO appServiceHelmVersionVO) { + this.appServiceHelmVersionVO = appServiceHelmVersionVO; + } + + public AppServiceMavenVersionVO getAppServiceMavenVersionVO() { + return appServiceMavenVersionVO; + } + + public void setAppServiceMavenVersionVO(AppServiceMavenVersionVO appServiceMavenVersionVO) { + this.appServiceMavenVersionVO = appServiceMavenVersionVO; + } + + public AppServiceImageVersionVO getAppServiceImageVersionVO() { + return appServiceImageVersionVO; + } + + public void setAppServiceImageVersionVO(AppServiceImageVersionVO appServiceImageVersionVO) { + this.appServiceImageVersionVO = appServiceImageVersionVO; + } public Date getLastUpdateDate() { return lastUpdateDate; diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java new file mode 100644 index 0000000000..04e107a21d --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java @@ -0,0 +1,102 @@ +package io.choerodon.devops.api.vo.appversion; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @author hao.wang@zknow.com + * @since 2022-07-14 10:41:40 + */ +public class AppServiceHelmVersionVO { + + + private Long id; + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + private Long appServiceVersionId; + @ApiModelProperty(value = "配置Id", required = true) + private Long helmConfigId; + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + private String harborRepoType; + @ApiModelProperty(value = "配置Id", required = true) + private Long harborConfigId; + @ApiModelProperty(value = "参数 ID", required = true) + private Long valueId; + @ApiModelProperty(value = "readme value id", required = true) + private Long readmeValueId; + @ApiModelProperty(value = "镜像名", required = true) + private String image; + @ApiModelProperty(value = "仓库地址", required = true) + private String repository; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public Long getHelmConfigId() { + return helmConfigId; + } + + public void setHelmConfigId(Long helmConfigId) { + this.helmConfigId = helmConfigId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public Long getValueId() { + return valueId; + } + + public void setValueId(Long valueId) { + this.valueId = valueId; + } + + public Long getReadmeValueId() { + return readmeValueId; + } + + public void setReadmeValueId(Long readmeValueId) { + this.readmeValueId = readmeValueId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } + + public String getRepository() { + return repository; + } + + public void setRepository(String repository) { + this.repository = repository; + } +} diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java new file mode 100644 index 0000000000..2d80aec3dc --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java @@ -0,0 +1,62 @@ +package io.choerodon.devops.api.vo.appversion; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @author hao.wang@zknow.com + * @since 2022-07-14 10:42:13 + */ +public class AppServiceImageVersionVO { + + + private Long id; + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + private Long appServiceVersionId; + @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) + private String harborRepoType; + @ApiModelProperty(value = "配置Id", required = true) + private Long harborConfigId; + @ApiModelProperty(value = "镜像名", required = true) + private String image; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getHarborRepoType() { + return harborRepoType; + } + + public void setHarborRepoType(String harborRepoType) { + this.harborRepoType = harborRepoType; + } + + public Long getHarborConfigId() { + return harborConfigId; + } + + public void setHarborConfigId(Long harborConfigId) { + this.harborConfigId = harborConfigId; + } + + public String getImage() { + return image; + } + + public void setImage(String image) { + this.image = image; + } +} diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java new file mode 100644 index 0000000000..06089af8d9 --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java @@ -0,0 +1,102 @@ +package io.choerodon.devops.api.vo.appversion; + +import io.swagger.annotations.ApiModelProperty; + +/** + * @author hao.wang@zknow.com + * @since 2022-07-14 10:42:26 + */ +public class AppServiceMavenVersionVO { + + + private Long id; + @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + private Long appServiceVersionId; + @ApiModelProperty(value = "groupId", required = true) + private String groupId; + @ApiModelProperty(value = "artifactId", required = true) + private String artifactId; + @ApiModelProperty(value = "版本", required = true) + private String version; + @ApiModelProperty(value = "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + private Long nexusRepoId; + + private String mavenRepoUrl; + + private String username; + + private String password; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + + public String getGroupId() { + return groupId; + } + + public void setGroupId(String groupId) { + this.groupId = groupId; + } + + public String getArtifactId() { + return artifactId; + } + + public void setArtifactId(String artifactId) { + this.artifactId = artifactId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Long getNexusRepoId() { + return nexusRepoId; + } + + public void setNexusRepoId(Long nexusRepoId) { + this.nexusRepoId = nexusRepoId; + } + + public String getMavenRepoUrl() { + return mavenRepoUrl; + } + + public void setMavenRepoUrl(String mavenRepoUrl) { + this.mavenRepoUrl = mavenRepoUrl; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java index 31c3cc3e59..717b5b2c5f 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java @@ -1,5 +1,10 @@ package io.choerodon.devops.app.service; +import java.util.List; +import java.util.Set; + +import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; + /** * 应用版本表(AppServiceHelmVersion)应用服务 * @@ -8,5 +13,6 @@ */ public interface AppServiceHelmVersionService { + List listByAppVersionIds(Set versionIds); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java index 9aabd1e0d6..fd00ba7fcb 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -1,5 +1,9 @@ package io.choerodon.devops.app.service; +import java.util.List; +import java.util.Set; + +import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO; import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; /** @@ -13,5 +17,7 @@ public interface AppServiceImageVersionService { void create(AppServiceImageVersionDTO appServiceImageVersionDTO); AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); + + List listByAppVersionIds(Set versionIds); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java index 0c0bf46206..a5ac5038a2 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -1,5 +1,9 @@ package io.choerodon.devops.app.service; +import java.util.List; +import java.util.Set; + +import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO; import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; /** @@ -14,5 +18,6 @@ public interface AppServiceMavenVersionService { void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO); + List listByAppVersionIds(Set versionIds); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java index 385d168fe5..4f5d5bc4e3 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java @@ -1,11 +1,13 @@ package io.choerodon.devops.app.service.impl; -import org.springframework.beans.factory.annotation.Autowired; - -import io.choerodon.devops.app.service.AppServiceHelmVersionService; +import java.util.List; +import java.util.Set; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; +import io.choerodon.devops.app.service.AppServiceHelmVersionService; import io.choerodon.devops.infra.mapper.AppServiceHelmVersionMapper; /** @@ -18,5 +20,10 @@ public class AppServiceHelmVersionServiceImpl implements AppServiceHelmVersionService { @Autowired private AppServiceHelmVersionMapper appServiceHelmVersionMapper; + + @Override + public List listByAppVersionIds(Set versionIds) { + return appServiceHelmVersionMapper.listByAppVersionIds(versionIds); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java index f317065faa..cae9454994 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -1,7 +1,11 @@ package io.choerodon.devops.app.service.impl; +import java.util.List; +import java.util.Set; + import org.springframework.beans.factory.annotation.Autowired; +import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO; import io.choerodon.devops.app.service.AppServiceImageVersionService; import org.springframework.stereotype.Service; @@ -37,5 +41,10 @@ public AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersi return appServiceImageVersionMapper.selectOne(appServiceImageVersionDTO); } + + @Override + public List listByAppVersionIds(Set versionIds) { + return appServiceImageVersionMapper.listByAppVersionIds(versionIds); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java index 2836361a94..fd44a5b73d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -1,7 +1,11 @@ package io.choerodon.devops.app.service.impl; +import java.util.List; +import java.util.Set; + import org.springframework.beans.factory.annotation.Autowired; +import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO; import io.choerodon.devops.app.service.AppServiceMavenVersionService; import org.springframework.stereotype.Service; @@ -39,5 +43,10 @@ public AppServiceMavenVersionDTO queryByAppServiceVersionId(Long appServiceVersi public void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO) { MapperUtil.resultJudgedInsertSelective(appServiceMavenVersionMapper, appServiceMavenVersionDTO, "error.save.maven.version"); } + + @Override + public List listByAppVersionIds(Set versionIds) { + return appServiceMavenVersionMapper.listByAppVersionIds(versionIds); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 144e2f4865..70159fbb70 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -9,6 +9,7 @@ import java.io.FileInputStream; import java.io.IOException; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import javax.annotation.Nullable; @@ -33,6 +34,9 @@ import io.choerodon.core.exception.FeignException; import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.*; +import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; +import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO; +import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO; import io.choerodon.devops.api.vo.chart.ChartTagVO; import io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants; import io.choerodon.devops.app.service.*; @@ -339,14 +343,61 @@ public Page pageByOptions(Long projectId, Long appServiceId } } Page appServiceVersionVOS = ConvertUtils.convertPage(applicationVersionDTOPageInfo, AppServiceVersionVO.class); - // 计算应用服务版本是否可以被删除 + if (!CollectionUtils.isEmpty(appServiceVersionVOS.getContent())) { + // 计算应用服务版本是否可以被删除 caculateDelteFlag(appServiceId, appServiceVersionVOS.getContent()); + // 添加版本关联的helm、image、jar版本信息 + addVersionInfo(appServiceVersionVOS.getContent()); } return appServiceVersionVOS; } + /** + * 添加版本关联的helm、image、jar版本信息 + * @param appServiceVersionVOList + */ + private void addVersionInfo(List appServiceVersionVOList) { + Set versionIds = appServiceVersionVOList.stream().map(AppServiceVersionVO::getId).collect(Collectors.toSet()); + + // 批量查询各版本信息 + Map helmVersionMap = new HashMap<>(); + List appServiceHelmVersionVOS = appServiceHelmVersionService.listByAppVersionIds(versionIds); + if (!CollectionUtils.isEmpty(appServiceHelmVersionVOS)) { + helmVersionMap = appServiceHelmVersionVOS.stream().collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity())); + } + Map imageVersionMap = new HashMap<>(); + List appServiceImageVersionVOS = appServiceImageVersionService.listByAppVersionIds(versionIds); + if (!CollectionUtils.isEmpty(appServiceImageVersionVOS)) { + imageVersionMap = appServiceImageVersionVOS.stream().collect(Collectors.toMap(AppServiceImageVersionVO::getAppServiceVersionId, Function.identity())); + } + + Map mavenVersionMap = new HashMap<>(); + List appServiceMavenVersionVOS = appServiceMavenVersionService.listByAppVersionIds(versionIds); + if (!CollectionUtils.isEmpty(appServiceMavenVersionVOS)) { + mavenVersionMap = appServiceMavenVersionVOS.stream().collect(Collectors.toMap(AppServiceMavenVersionVO::getAppServiceVersionId, Function.identity())); + } + + // 填充版本信息 + Map finalHelmVersionMap = helmVersionMap; + Map finalImageVersionMap = imageVersionMap; + Map finalMavenVersionMap = mavenVersionMap; + appServiceVersionVOList.forEach(appServiceVersionVO -> { + Long appServiceVersionId = appServiceVersionVO.getId(); + + AppServiceHelmVersionVO appServiceHelmVersionVO = finalHelmVersionMap.get(appServiceVersionId); + AppServiceImageVersionVO appServiceImageVersionVO = finalImageVersionMap.get(appServiceVersionId); + AppServiceMavenVersionVO appServiceMavenVersionVO = finalMavenVersionMap.get(appServiceVersionId); + + appServiceVersionVO.setAppServiceHelmVersionVO(appServiceHelmVersionVO); + appServiceVersionVO.setAppServiceImageVersionVO(appServiceImageVersionVO); + appServiceVersionVO.setAppServiceMavenVersionVO(appServiceMavenVersionVO); + }); + + + } + /** * 计算应用服务版本是否可以被删除 * 1. 有实例的版本不能删除 diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java index cd16f9578d..c6d4cd4f71 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmVersionMapper.java @@ -1,7 +1,13 @@ package io.choerodon.devops.infra.mapper; -import io.choerodon.mybatis.common.BaseMapper; +import java.util.List; +import java.util.Set; + +import org.apache.ibatis.annotations.Param; + +import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO; +import io.choerodon.mybatis.common.BaseMapper; /** * 应用版本表(AppServiceHelmVersion)应用服务 @@ -10,5 +16,7 @@ * @since 2022-07-13 16:47:41 */ public interface AppServiceHelmVersionMapper extends BaseMapper { + + List listByAppVersionIds(@Param("versionIds") Set versionIds); } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java index f9aaa324f4..5d8781bea1 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java @@ -1,5 +1,11 @@ package io.choerodon.devops.infra.mapper; +import java.util.List; +import java.util.Set; + +import org.apache.ibatis.annotations.Param; + +import io.choerodon.devops.api.vo.appversion.AppServiceImageVersionVO; import io.choerodon.mybatis.common.BaseMapper; import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; @@ -10,5 +16,6 @@ * @since 2022-07-13 16:47:42 */ public interface AppServiceImageVersionMapper extends BaseMapper { + List listByAppVersionIds(@Param("versionIds") Set versionIds); } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java index 53823584e8..86907b9d8a 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceMavenVersionMapper.java @@ -1,5 +1,11 @@ package io.choerodon.devops.infra.mapper; +import java.util.List; +import java.util.Set; + +import org.apache.ibatis.annotations.Param; + +import io.choerodon.devops.api.vo.appversion.AppServiceMavenVersionVO; import io.choerodon.mybatis.common.BaseMapper; import io.choerodon.devops.infra.dto.AppServiceMavenVersionDTO; @@ -10,5 +16,6 @@ * @since 2022-07-13 16:47:43 */ public interface AppServiceMavenVersionMapper extends BaseMapper { + List listByAppVersionIds(@Param("versionIds") Set versionIds); } diff --git a/src/main/resources/mapper/AppServiceHelmVersionMapper.xml b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml index 2976e73b65..888c07edad 100644 --- a/src/main/resources/mapper/AppServiceHelmVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceHelmVersionMapper.xml @@ -2,5 +2,13 @@ + diff --git a/src/main/resources/mapper/AppServiceImageVersionMapper.xml b/src/main/resources/mapper/AppServiceImageVersionMapper.xml index 1f5bc7f627..92d60f8cfc 100644 --- a/src/main/resources/mapper/AppServiceImageVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceImageVersionMapper.xml @@ -2,5 +2,14 @@ + diff --git a/src/main/resources/mapper/AppServiceMavenVersionMapper.xml b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml index b7b6c5becd..d736befdaa 100644 --- a/src/main/resources/mapper/AppServiceMavenVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceMavenVersionMapper.xml @@ -2,5 +2,14 @@ + From 66cd597c0056981efaae58c245098b29e3e44d65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 15:18:10 +0800 Subject: [PATCH 062/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9chart?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/AppServiceHelmVersionService.java | 5 + .../app/service/AppServiceVersionService.java | 4 +- .../AppServiceHelmVersionServiceImpl.java | 21 +++ .../impl/AppServiceVersionServiceImpl.java | 163 ++++++++++++++---- 4 files changed, 154 insertions(+), 39 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java index 717b5b2c5f..463ed1c93f 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java @@ -4,6 +4,7 @@ import java.util.Set; import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; +import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO; /** * 应用版本表(AppServiceHelmVersion)应用服务 @@ -14,5 +15,9 @@ public interface AppServiceHelmVersionService { List listByAppVersionIds(Set versionIds); + + AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); + + void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index 9d97fd6f7a..a22bd59ea2 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -236,7 +236,9 @@ void create(String image, * @param gitlabPipelineId * @param jobName */ - void publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName); + AppServiceVersionDTO publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName); + + AppServiceVersionDTO saveAppVersion(String version, String commit, String ref, Long gitlabPipelineId, Long appServiceId); /** * 保存应用服务版本 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java index 4f5d5bc4e3..8122b9de79 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java @@ -5,10 +5,15 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; import io.choerodon.devops.api.vo.appversion.AppServiceHelmVersionVO; import io.choerodon.devops.app.service.AppServiceHelmVersionService; +import io.choerodon.devops.infra.constant.ResourceCheckConstant; +import io.choerodon.devops.infra.dto.AppServiceHelmVersionDTO; import io.choerodon.devops.infra.mapper.AppServiceHelmVersionMapper; +import io.choerodon.devops.infra.util.MapperUtil; /** * 应用版本表(AppServiceHelmVersion)应用服务 @@ -25,5 +30,21 @@ public class AppServiceHelmVersionServiceImpl implements AppServiceHelmVersionSe public List listByAppVersionIds(Set versionIds) { return appServiceHelmVersionMapper.listByAppVersionIds(versionIds); } + + @Override + public AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceHelmVersionDTO appServiceHelmVersionDTO = new AppServiceHelmVersionDTO(); + appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionId); + + return appServiceHelmVersionMapper.selectOne(appServiceHelmVersionDTO); + } + + @Override + @Transactional + public void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO) { + MapperUtil.resultJudgedInsertSelective(appServiceHelmVersionMapper, appServiceHelmVersionDTO, "error.save.helm.version"); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 70159fbb70..81b3629b79 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -150,14 +150,60 @@ public void create(String image, Long gitlabPipelineId, String jobName) { try { - AppServiceVersionDTO appServiceVersionDTO = doCreate(image, - TypeUtil.objToLong(harborConfigId), - repoType, - token, - version, - commit, - files, - ref); + + AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); + + AppServiceVersionDTO appServiceVersionDTO = saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceDTO.getId()); + + ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); + Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); + + // 查询helm仓库配置id +// DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL); +// ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); +// String helmUrl = helmConfig.getUrl(); +// newVersion.setHelmConfigId(devopsConfigDTO.getId()); +// newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); + + // 取commit的一部分作为文件路径 + String commitPart = commit == null ? "" : commit.substring(0, 8); + String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); + String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); + String path = FileUtil.multipartFileToFile(storeFilePath, files); + + // 上传chart包到 chart museum +// chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); + + // 解析chart包中的values文件 + String values = getValues(storeFilePath, destFilePath, path); + + AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceHelmVersionDTO == null) { + AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO(); + appServiceVersionValueDTO.setValue(values); + appServiceVersionValueService.baseCreate(appServiceVersionValueDTO); + + AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO(); + appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath)); + appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO); + + appServiceHelmVersionDTO = new AppServiceHelmVersionDTO(); + appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId()); + appServiceHelmVersionDTO.setValueId(appServiceVersionValueDTO.getId()); + appServiceHelmVersionDTO.setReadmeValueId(appServiceVersionReadmeDTO.getId()); + appServiceHelmVersionDTO.setHarborRepoType(repoType); + appServiceHelmVersionDTO.setHarborConfigId(TypeUtil.objToLong(harborConfigId)); + appServiceHelmVersionDTO.setHelmConfigId(appServiceVersionReadmeDTO.getId()); + + appServiceHelmVersionService.create(appServiceHelmVersionDTO); + } else { + updateValues(appServiceHelmVersionDTO.getValueId(), values); + } + + FileUtil.deleteDirectories(destFilePath, storeFilePath); + //生成版本成功后发送webhook json + sendNotificationService.sendWhenAppServiceVersion(appServiceVersionDTO, appServiceDTO, projectDTO); + // 保存流水线chart版本信息 if (gitlabPipelineId != null && StringUtils.isNotBlank(jobName)) { Long appServiceId = appServiceVersionDTO.getAppServiceId(); @@ -181,7 +227,42 @@ public void create(String image, } - private AppServiceVersionDTO doCreate(String image, Long harborConfigId, String repoType, String token, String version, String commit, MultipartFile files, String ref) { + private String getValues(String storeFilePath, String destFilePath, String path) { + FileUtil.unTarGZ(path, destFilePath); + + // 使用深度优先遍历查找文件, 避免查询到子chart的values值 + File valuesFile = FileUtil.queryFileFromFilesBFS(new File(destFilePath), "values.yaml"); + + if (valuesFile == null) { + FileUtil.deleteDirectories(storeFilePath, destFilePath); + throw new CommonException("error.find.values.yaml.in.chart"); + } + + String values; + try (FileInputStream fis = new FileInputStream(valuesFile)) { + values = FileUtil.replaceReturnString(fis, null); + } catch (IOException e) { + FileUtil.deleteDirectories(storeFilePath, destFilePath); + throw new CommonException(e); + } + + try { + FileUtil.checkYamlFormat(values); + } catch (CommonException e) { + FileUtil.deleteDirectories(storeFilePath, destFilePath); + throw new CommonException("The format of the values.yaml in the chart is invalid!", e); + } + return values; + } + + private AppServiceVersionDTO doCreate(String image, + Long harborConfigId, + String repoType, + String token, + String version, + String commit, + MultipartFile files, + String ref) { AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO(); @@ -951,39 +1032,13 @@ public AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long project } @Override - @Transactional - public void publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName) { + @Transactional(rollbackFor = Exception.class) + public AppServiceVersionDTO publishAppVersion(String token, String version, String commit, String ref, Long gitlabPipelineId, String jobName) { try { // 1. 创建应用服务版本 AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); Long appServiceId = appServiceDTO.getId(); - AppServiceVersionDTO appServiceVersionDTO = baseQueryByAppServiceIdAndVersion(appServiceId, version); - // 不存在才创建 - if (appServiceVersionDTO == null) { - appServiceVersionDTO = create(appServiceId, version, commit, ref); - } - // 2. 创建helm版本 - - // 3. 创建image版本 - // 3.1 查询流水线中最新的镜像版本 - AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); - if (appServiceImageVersionDTO == null) { - CiPipelineImageDTO ciPipelineImageDTO = ciPipelineImageService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); - if (ciPipelineImageDTO != null) { - appServiceImageVersionDTO = new AppServiceImageVersionDTO(); - appServiceImageVersionService.create(appServiceImageVersionDTO); - } - } - - // 4. 创建jar版本 - AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); - if (appServiceMavenVersionDTO == null) { - CiPipelineMavenDTO ciPipelineMavenDTO = ciPipelineMavenService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); - if (ciPipelineMavenDTO != null) { - appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); - appServiceMavenVersionService.create(appServiceMavenVersionDTO); - } - } + return saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceId); } catch (Exception e) { if (e instanceof CommonException) { throw new DevopsCiInvalidException(((CommonException) e).getCode(), e, ((CommonException) e).getParameters()); @@ -992,6 +1047,38 @@ public void publishAppVersion(String token, String version, String commit, Strin } } + @Transactional(rollbackFor = Exception.class) + public AppServiceVersionDTO saveAppVersion(String version, String commit, String ref, Long gitlabPipelineId, Long appServiceId) { + AppServiceVersionDTO appServiceVersionDTO = baseQueryByAppServiceIdAndVersion(appServiceId, version); + // 不存在才创建 + if (appServiceVersionDTO == null) { + appServiceVersionDTO = create(appServiceId, version, commit, ref); + } + // 2. 创建helm版本 + + // 3. 创建image版本 + // 3.1 查询流水线中最新的镜像版本 + AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceImageVersionDTO == null) { + CiPipelineImageDTO ciPipelineImageDTO = ciPipelineImageService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); + if (ciPipelineImageDTO != null) { + appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionService.create(appServiceImageVersionDTO); + } + } + + // 4. 创建jar版本 + AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceMavenVersionDTO == null) { + CiPipelineMavenDTO ciPipelineMavenDTO = ciPipelineMavenService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); + if (ciPipelineMavenDTO != null) { + appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionService.create(appServiceMavenVersionDTO); + } + } + return appServiceVersionDTO; + } + @Override @Transactional public AppServiceVersionDTO create(Long appServiceId, String version, String commit, String ref) { From af87d513d4b42754e7ba17f794f53d85df07d6d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 16:17:37 +0800 Subject: [PATCH 063/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=B9=B3=E5=8F=B0=E5=88=9D=E5=A7=8B=E5=8C=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E4=BB=A5=E5=8F=8Ahelm=E4=BB=93=E5=BA=93=E5=88=97?= =?UTF-8?q?=E8=A1=A8=E6=8E=92=E5=BA=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 10 +- .../devops/api/vo/DevopsHelmConfigVO.java | 12 +++ .../app/service/DevopsHelmConfigService.java | 36 ++++++- .../impl/DevopsHelmConfigServiceImpl.java | 96 +++++++++++++++---- .../devops/app/task/DevopsCommandRunner.java | 54 +++++------ .../messages/messages_en_US.properties | 1 + .../messages/messages_zh_CN.properties | 3 +- 7 files changed, 155 insertions(+), 57 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index 127777b36d..82471b659b 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -38,7 +38,7 @@ public ResponseEntity queryHelmConfig( @PathVariable("project_id") Long projectId, @ApiParam("仓库id") @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { - return Results.success(helmConfigService.queryHelmConfig(projectId, helmConfigId)); + return Results.success(helmConfigService.queryDevopsHelmConfig(projectId, helmConfigId)); } @@ -49,7 +49,7 @@ public ResponseEntity createDevopsHelmConfig( @ApiParam("项目id") @PathVariable("project_id") Long projectId, @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) { - return Results.success(helmConfigService.createDevopsHelmConfig(projectId, devopsHelmConfigVO)); + return Results.success(helmConfigService.createDevopsHelmConfigOnProjectLevel(projectId, devopsHelmConfigVO)); } @ApiOperation("更新helm仓库") @@ -58,7 +58,7 @@ public ResponseEntity updateDevopsHelmConfig( @ApiParam("项目id") @PathVariable("project_id") Long projectId, @RequestBody DevopsHelmConfigVO devopsHelmConfigVO) { - return Results.success(helmConfigService.updateDevopsHelmConfig(projectId, devopsHelmConfigVO)); + return Results.success(helmConfigService.updateDevopsHelmConfigOnProjectLevel(projectId, devopsHelmConfigVO)); } @ApiOperation("删除helm仓库") @@ -68,7 +68,7 @@ public ResponseEntity deleteHelmConfig(@ApiParam("项目id") @PathVariable("project_id") Long projectId, @ApiParam("仓库id") @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { - helmConfigService.deleteHelmConfig(projectId, helmConfigId); + helmConfigService.deleteDevopsHelmConfig(projectId, helmConfigId); return Results.success(); } @@ -79,7 +79,7 @@ public ResponseEntity setDefaultHelmConfig(@ApiParam("项目id") @PathVariable("project_id") Long projectId, @ApiParam("仓库id") @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { - helmConfigService.setDefaultHelmConfig(projectId, helmConfigId); + helmConfigService.setDefaultDevopsHelmConfig(projectId, helmConfigId); return Results.success(); } } diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java index 2ed6d7bbfd..baf669230e 100644 --- a/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/DevopsHelmConfigVO.java @@ -52,6 +52,10 @@ public class DevopsHelmConfigVO { @ApiModelProperty("版本控制号") private Long objectVersionNumber; + @ApiModelProperty("创建者") + @Encrypt + private Long createdBy; + public Long getId() { return id; } @@ -163,4 +167,12 @@ public Long getObjectVersionNumber() { public void setObjectVersionNumber(Long objectVersionNumber) { this.objectVersionNumber = objectVersionNumber; } + + public Long getCreatedBy() { + return createdBy; + } + + public void setCreatedBy(Long createdBy) { + this.createdBy = createdBy; + } } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 2c480fb747..c6605af7c4 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -2,11 +2,15 @@ import java.util.List; +import org.springframework.transaction.annotation.Transactional; + import io.choerodon.devops.api.vo.DevopsHelmConfigVO; +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; public interface DevopsHelmConfigService { /** * 查询helm仓库列表 + * * @param projectId * @return */ @@ -14,39 +18,61 @@ public interface DevopsHelmConfigService { /** * 创建helm仓库 + * * @param projectId * @param devopsHelmConfigVO * @return */ - DevopsHelmConfigVO createDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); + DevopsHelmConfigVO createDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); /** * 更新helm仓库 + * * @param projectId * @param devopsHelmConfigVO * @return */ - DevopsHelmConfigVO updateDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); + DevopsHelmConfigVO updateDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO); /** * 删除helm仓库 + * * @param projectId * @param helmConfigId */ - void deleteHelmConfig(Long projectId, Long helmConfigId); + void deleteDevopsHelmConfig(Long projectId, Long helmConfigId); /** * 查询helm仓库信息 + * * @param projectId * @param helmConfigId * @return */ - DevopsHelmConfigVO queryHelmConfig(Long projectId, Long helmConfigId); + DevopsHelmConfigVO queryDevopsHelmConfig(Long projectId, Long helmConfigId); /** * 设置默认仓库 + * * @param projectId * @param helmConfigId */ - void setDefaultHelmConfig(Long projectId, Long helmConfigId); + void setDefaultDevopsHelmConfig(Long projectId, Long helmConfigId); + + /** + * 查询指定层级的默认仓库 + * + * @return + */ + DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType); + + /** + * 创建创建指定层级的仓库 + * + * @param devopsHelmConfigDTO + */ + void createDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO); + + @Transactional(rollbackFor = Exception.class) + void updateDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 5bf4b97f3a..eae1ca1cb3 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -1,18 +1,19 @@ package io.choerodon.devops.app.service.impl; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; -import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import io.choerodon.core.exception.CommonException; import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.DevopsHelmConfigVO; import io.choerodon.devops.app.service.DevopsHelmConfigService; import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; +import io.choerodon.devops.infra.dto.iam.IamUserDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.DevopsHelmConfigMapper; @@ -69,32 +70,69 @@ public List listHelmConfig(Long projectId) { helmConfigSearchDTOOnProject.setResourceType(ResourceLevel.PROJECT.value()); List devopsHelmConfigDTOListOnProject = devopsHelmConfigMapper.select(helmConfigSearchDTOOnProject); devopsHelmConfigDTOS.addAll(devopsHelmConfigDTOListOnProject); + DevopsHelmConfigDTO defaultDevopsHelmConfigDTOOnProject = null; + if (devopsHelmConfigDTOS.size() != 0) { + for (DevopsHelmConfigDTO devopsHelmConfigDTO : devopsHelmConfigDTOS) { + if (Boolean.TRUE.equals(devopsHelmConfigDTO.getRepoDefault())) { + defaultDevopsHelmConfigDTOOnProject = devopsHelmConfigDTO; + } + } + } + devopsHelmConfigDTOS.remove(defaultDevopsHelmConfigDTOOnProject); + devopsHelmConfigDTOS = devopsHelmConfigDTOS.stream().sorted(Comparator.comparing(DevopsHelmConfigDTO::getCreationDate, (i, j) -> { + if (i.before(j)) { + return -1; + } else if (i.equals(j)) { + return 0; + } + return 1; + }).reversed()).collect(Collectors.toList()); // 查询组织层helm仓库 ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(projectId, false, false, false); DevopsHelmConfigDTO helmConfigSearchDTOOnOrganization = new DevopsHelmConfigDTO(); helmConfigSearchDTOOnOrganization.setResourceId(projectDTO.getOrganizationId()); helmConfigSearchDTOOnOrganization.setResourceType(ResourceLevel.ORGANIZATION.value()); - List devopsHelmConfigDTOListOnOrganization = devopsHelmConfigMapper.select(helmConfigSearchDTOOnOrganization); - devopsHelmConfigDTOS.addAll(devopsHelmConfigDTOListOnOrganization); - - // 如果组织层的仓库为空,查询平台默认 - if (CollectionUtils.isEmpty(devopsHelmConfigDTOListOnOrganization)) { + helmConfigSearchDTOOnOrganization.setRepoDefault(true); + DevopsHelmConfigDTO devopsHelmConfigDTOtOnOrganization = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnOrganization); + if (devopsHelmConfigDTOtOnOrganization != null) { + devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOtOnOrganization); + } else { + // 如果组织层的仓库为空,查询平台默认 DevopsHelmConfigDTO helmConfigSearchDTOOnSite = new DevopsHelmConfigDTO(); - helmConfigSearchDTOOnSite.setResourceId(projectDTO.getOrganizationId()); - helmConfigSearchDTOOnSite.setResourceType(ResourceLevel.ORGANIZATION.value()); + helmConfigSearchDTOOnSite.setResourceType(ResourceLevel.SITE.value()); + helmConfigSearchDTOOnSite.setRepoDefault(true); DevopsHelmConfigDTO devopsHelmConfigDTOListOnSite = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnSite); - devopsHelmConfigDTOS.add(devopsHelmConfigDTOListOnSite); + if (devopsHelmConfigDTOListOnSite == null) { + throw new CommonException("error.helm.config.site.exist"); + } + devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOListOnSite); } - // TODO 默认排第一,然后平台、组织、项目层按照创建时间排序 + if (defaultDevopsHelmConfigDTOOnProject != null) { + devopsHelmConfigDTOS.add(0, defaultDevopsHelmConfigDTOOnProject); + } - return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); + List devopsHelmConfigVOS = ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); + + Set creatorIds = devopsHelmConfigDTOS.stream().map(DevopsHelmConfigDTO::getCreatedBy).collect(Collectors.toSet()); + List iamUserDTOList = baseServiceClientOperator.listUsersByIds(new ArrayList<>(creatorIds)); + Map iamUserDTOMap = iamUserDTOList.stream().collect(Collectors.toMap(IamUserDTO::getId, Function.identity())); + + devopsHelmConfigVOS.forEach(c -> { + IamUserDTO creator = iamUserDTOMap.get(c.getCreatedBy()); + if (creator != null) { + c.setCreatorImageUrl(creator.getImageUrl()); + c.setCreatorLoginName(creator.getLoginName()); + c.setCreatorRealName(creator.getRealName()); + } + }); + return devopsHelmConfigVOS; } @Override @Transactional(rollbackFor = Exception.class) - public DevopsHelmConfigVO createDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { + public DevopsHelmConfigVO createDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { DevopsHelmConfigDTO devopsHelmConfigDTO = ConvertUtils.convertObject(devopsHelmConfigVO, DevopsHelmConfigDTO.class); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTO.setResourceId(projectId); @@ -105,7 +143,7 @@ public DevopsHelmConfigVO createDevopsHelmConfig(Long projectId, DevopsHelmConfi @Override @Transactional(rollbackFor = Exception.class) - public DevopsHelmConfigVO updateDevopsHelmConfig(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { + public DevopsHelmConfigVO updateDevopsHelmConfigOnProjectLevel(Long projectId, DevopsHelmConfigVO devopsHelmConfigVO) { DevopsHelmConfigDTO devopsHelmConfigDTO = ConvertUtils.convertObject(devopsHelmConfigVO, DevopsHelmConfigDTO.class); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTO.setResourceId(projectId); @@ -117,7 +155,7 @@ public DevopsHelmConfigVO updateDevopsHelmConfig(Long projectId, DevopsHelmConfi @Override @Transactional(rollbackFor = Exception.class) - public void deleteHelmConfig(Long projectId, Long helmConfigId) { + public void deleteDevopsHelmConfig(Long projectId, Long helmConfigId) { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setResourceId(projectId); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); @@ -126,7 +164,7 @@ public void deleteHelmConfig(Long projectId, Long helmConfigId) { } @Override - public DevopsHelmConfigVO queryHelmConfig(Long projectId, Long helmConfigId) { + public DevopsHelmConfigVO queryDevopsHelmConfig(Long projectId, Long helmConfigId) { DevopsHelmConfigDTO devopsHelmConfigSearchDTO = new DevopsHelmConfigDTO(); devopsHelmConfigSearchDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigSearchDTO.setResourceId(projectId); @@ -139,7 +177,7 @@ public DevopsHelmConfigVO queryHelmConfig(Long projectId, Long helmConfigId) { @Override @Transactional(rollbackFor = Exception.class) - public void setDefaultHelmConfig(Long projectId, Long helmConfigId) { + public void setDefaultDevopsHelmConfig(Long projectId, Long helmConfigId) { DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectByPrimaryKey(helmConfigId); // 先将项目层的所有仓库是否为默认置为false @@ -150,4 +188,24 @@ public void setDefaultHelmConfig(Long projectId, Long helmConfigId) { devopsHelmConfigMapper.updateHelmConfigRepoDefaultToTrue(projectId, helmConfigId); } } + + @Override + public DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType) { + DevopsHelmConfigDTO devopsHelmConfigSearchDTO = new DevopsHelmConfigDTO(); + devopsHelmConfigSearchDTO.setRepoDefault(true); + devopsHelmConfigSearchDTO.setResourceType(resourceType); + return devopsHelmConfigMapper.selectOne(devopsHelmConfigSearchDTO); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void createDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { + MapperUtil.resultJudgedInsertSelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.insert"); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper,devopsHelmConfigDTO,"error.helm.config.update"); + } } diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index 69c708061e..b511d18fd7 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -19,12 +19,14 @@ import retrofit2.Call; import io.choerodon.core.exception.CommonException; -import io.choerodon.devops.api.vo.ConfigVO; +import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.vo.sonar.UserToken; import io.choerodon.devops.api.vo.sonar.UserTokens; import io.choerodon.devops.app.service.AppServiceVersionService; import io.choerodon.devops.app.service.DevopsConfigService; +import io.choerodon.devops.app.service.DevopsHelmConfigService; import io.choerodon.devops.infra.dto.DevopsConfigDTO; +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; import io.choerodon.devops.infra.enums.ProjectConfigType; import io.choerodon.devops.infra.feign.SonarClient; import io.choerodon.devops.infra.handler.RetrofitHandler; @@ -50,6 +52,8 @@ public class DevopsCommandRunner implements CommandLineRunner { private AppServiceVersionService appServiceVersionService; @Autowired private DevopsConfigMapper devopsConfigMapper; + @Autowired + private DevopsHelmConfigService devopsHelmConfigService; @Value("${services.helm.url}") private String servicesHelmUrl; @@ -66,45 +70,41 @@ public class DevopsCommandRunner implements CommandLineRunner { @Override public void run(String... strings) { - /* try { - ConfigVO chartConfig = new ConfigVO(); - chartConfig.setUrl(servicesHelmUrl); + try { + DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); + devopsHelmConfigDTO.setUrl(servicesHelmUrl); + devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); // 只有helm的用户名密码都设置了, 才设置到数据库中 if (StringUtils.hasText(servicesHelmUserName) && StringUtils.hasText(servicesHelmPassword)) { - chartConfig.setUserName(servicesHelmUserName); - chartConfig.setPassword(servicesHelmPassword); - chartConfig.setIsPrivate(Boolean.TRUE); + devopsHelmConfigDTO.setUsername(servicesHelmUserName); + devopsHelmConfigDTO.setPassword(servicesHelmPassword); + devopsHelmConfigDTO.setRepoPrivate(Boolean.TRUE); } - initConfig(chartConfig, DEFAULT_CHART_NAME, ProjectConfigType.CHART.getType()); + initHelmConfig(devopsHelmConfigDTO); if (sonarqubeUrl != null && !sonarqubeUrl.isEmpty()) { createSonarToken(); } } catch (Exception e) { throw new CommonException("error.init.project.config", e); - }*/ + } } - private void initConfig(ConfigVO configDTO, String configName, String configType) { - DevopsConfigDTO newConfigDTO = new DevopsConfigDTO(); - newConfigDTO.setConfig(gson.toJson(configDTO)); - newConfigDTO.setName(configName); - newConfigDTO.setType(configType); - DevopsConfigDTO oldConfigDTO = devopsConfigService.baseQueryByName(null, configName); + private void initHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { + DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.SITE.value()); if (oldConfigDTO == null) { - devopsConfigService.baseCreate(newConfigDTO); - } else if (!gson.toJson(configDTO).equals(oldConfigDTO.getConfig())) { - // 存在判断是否已经生成服务版本,无服务版本,直接覆盖更新;有服务版本,将原config对应的resourceId设置为null,新建config - if (appServiceVersionService.isVersionUseConfig(oldConfigDTO.getId(), oldConfigDTO.getType())) { - // 将原有配置的name, app_service, project_id, organization_id 字段置为null - devopsConfigMapper.updateConfigFieldsNull(oldConfigDTO.getId()); - newConfigDTO.setId(null); - devopsConfigService.baseCreate(newConfigDTO); - } else { - newConfigDTO.setId(oldConfigDTO.getId()); - newConfigDTO.setObjectVersionNumber(oldConfigDTO.getObjectVersionNumber()); - devopsConfigService.baseUpdate(newConfigDTO); + devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); + } else if (oldConfigDTO.getUrl().equals(devopsHelmConfigDTO.getUrl())) { + if (!oldConfigDTO.getUsername().equals(devopsHelmConfigDTO.getUsername()) + || !oldConfigDTO.getPassword().equals(devopsHelmConfigDTO.getPassword())) { + devopsHelmConfigDTO.setId(oldConfigDTO.getId()); + devopsHelmConfigDTO.setObjectVersionNumber(oldConfigDTO.getObjectVersionNumber()); + devopsHelmConfigService.updateDevopsHelmConfig(devopsHelmConfigDTO); } + } else { + oldConfigDTO.setRepoDefault(false); + devopsHelmConfigService.updateDevopsHelmConfig(oldConfigDTO); + devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); } } diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 17b7838be0..2678d8269f 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -926,3 +926,4 @@ error.host.app.code.length=The application code length should be in 0 to 128 error.middleware.code.exists=code exists error.helm.config.update=Failed to update helm config error.helm.config.insert=Failed to insert helm config +error.helm.config.site.exist=The helm repo on site does not exist diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 329ead46c9..deddac2446 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -922,4 +922,5 @@ error.host.app.code.length=应用code长度应该在0~64 error.middleware.code.exists=编码已存在 error.key-encrypt.decrypt.abnormal_content=页面失效,请重新访问首页进入 error.helm.config.update=更新helm仓库配置失败 -error.helm.config.insert=插入helm仓库配置失败 \ No newline at end of file +error.helm.config.insert=插入helm仓库配置失败 +error.helm.config.site.exist=平台层helm仓库配置不存在 \ No newline at end of file From ee35ed0271caee2a09b1ece6855b63e6c16162ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 16:36:23 +0800 Subject: [PATCH 064/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=B1=82helm=E4=BB=93=E5=BA=93=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/io/choerodon/devops/app/task/DevopsCommandRunner.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index b511d18fd7..c8eb946af2 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -91,6 +91,8 @@ public void run(String... strings) { } private void initHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { + devopsHelmConfigDTO.setResourceType(ResourceLevel.SITE.value()); + devopsHelmConfigDTO.setRepoDefault(true); DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.SITE.value()); if (oldConfigDTO == null) { devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); From e4ba38efa49980eda2e01da84b21516d8a21222f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 16:44:00 +0800 Subject: [PATCH 065/228] =?UTF-8?q?[IMP]=20helm=E4=BB=93=E5=BA=93=E7=A7=81?= =?UTF-8?q?=E6=9C=89=E4=BB=93=E5=BA=93=E5=AD=97=E6=AE=B5=E5=92=8C=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E4=BB=93=E5=BA=93=E5=AD=97=E6=AE=B5=E7=9A=84=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC=E4=B8=BA0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../script/db/groovy/devops_service/devops_helm_config.groovy | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 90077c868d..5aa20b2aca 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -17,8 +17,8 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { column(name: 'password', type: 'VARCHAR(128)', remarks: '密码') column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/site') column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') - column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是') - column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库') + column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是',defaultValue: 0) + column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库',defaultValue: 0) column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") From 79e32856cca38d84e61e0c430bd0348a57828a1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 17:03:22 +0800 Subject: [PATCH 066/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=B1=82=E9=85=8D=E7=BD=AEhelm=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DevopsConfigServiceImpl.java | 89 +++++++++++++------ 1 file changed, 60 insertions(+), 29 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index f983037133..1700ecc532 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service.impl; +import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_CHART_NAME; + import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -19,13 +21,11 @@ import io.choerodon.devops.api.vo.DefaultConfigVO; import io.choerodon.devops.api.vo.DevopsConfigRepVO; import io.choerodon.devops.api.vo.DevopsConfigVO; -import io.choerodon.devops.app.service.AppServiceService; -import io.choerodon.devops.app.service.AppServiceVersionService; -import io.choerodon.devops.app.service.DevopsConfigService; -import io.choerodon.devops.app.service.DevopsProjectService; +import io.choerodon.devops.app.service.*; import io.choerodon.devops.infra.constant.MiscConstants; import io.choerodon.devops.infra.dto.AppServiceDTO; import io.choerodon.devops.infra.dto.DevopsConfigDTO; +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; import io.choerodon.devops.infra.dto.DevopsProjectDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.dto.iam.Tenant; @@ -58,39 +58,70 @@ public class DevopsConfigServiceImpl implements DevopsConfigService { private AppServiceService appServiceService; @Autowired private AppServiceVersionService appServiceVersionService; + @Autowired + private DevopsHelmConfigService devopsHelmConfigService; @Override public void operate(Long resourceId, String resourceType, List devopsConfigVOS) { devopsConfigVOS.forEach(devopsConfigVO -> { - //根据每个配置的默认还是自定义执行不同逻辑 - DevopsConfigDTO devopsConfigDTO = baseQueryByResourceAndType(resourceId, resourceType, devopsConfigVO.getType()); - if (devopsConfigVO.getCustom()) { - //根据配置所在的资源层级,查询出数据库中是否存在 - DevopsConfigDTO newDevopsConfigDTO = voToDto(devopsConfigVO); - if (devopsConfigDTO != null) { - // 存在判断是否已经生成服务版本,无服务版本,直接覆盖更新;有服务版本,将原config对应的resourceId设置为null,新建config - if (appServiceVersionService.isVersionUseConfig(devopsConfigDTO.getId(), devopsConfigVO.getType())) { - updateResourceId(devopsConfigDTO.getId()); - setResourceId(resourceId, resourceType, newDevopsConfigDTO); - newDevopsConfigDTO.setId(null); - baseCreate(newDevopsConfigDTO); - } else { - newDevopsConfigDTO.setId(devopsConfigDTO.getId()); - setResourceId(resourceId, resourceType, newDevopsConfigDTO); - baseUpdate(newDevopsConfigDTO); + if (devopsConfigVO.getType().equals(CHART)) { + DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); + devopsHelmConfigDTO.setUrl(devopsConfigVO.getConfig().getUrl()); + devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); + devopsHelmConfigDTO.setUsername(devopsConfigVO.getConfig().getUserName()); + devopsHelmConfigDTO.setPassword(devopsConfigVO.getConfig().getPassword()); + if (!ObjectUtils.isEmpty(devopsHelmConfigDTO.getUsername()) && !ObjectUtils.isEmpty(devopsHelmConfigDTO.getPassword())) { + devopsHelmConfigDTO.setRepoPrivate(true); + } + + devopsHelmConfigDTO.setResourceType(ResourceLevel.ORGANIZATION.value()); + devopsHelmConfigDTO.setRepoDefault(true); + DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.ORGANIZATION.value()); + if (oldConfigDTO == null) { + devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); + } else if (oldConfigDTO.getUrl().equals(devopsHelmConfigDTO.getUrl())) { + if (!oldConfigDTO.getUsername().equals(devopsHelmConfigDTO.getUsername()) + || !oldConfigDTO.getPassword().equals(devopsHelmConfigDTO.getPassword())) { + devopsHelmConfigDTO.setId(oldConfigDTO.getId()); + devopsHelmConfigDTO.setObjectVersionNumber(oldConfigDTO.getObjectVersionNumber()); + devopsHelmConfigService.updateDevopsHelmConfig(devopsHelmConfigDTO); } } else { - setResourceId(resourceId, resourceType, newDevopsConfigDTO); - newDevopsConfigDTO.setId(null); - baseCreate(newDevopsConfigDTO); + oldConfigDTO.setRepoDefault(false); + devopsHelmConfigService.updateDevopsHelmConfig(oldConfigDTO); + devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); } } else { - //根据配置所在的资源层级,查询出数据库中是否存在,存在则删除 - if (devopsConfigDTO != null) { - if (appServiceVersionService.isVersionUseConfig(devopsConfigDTO.getId(), devopsConfigVO.getType())) { - updateResourceId(devopsConfigDTO.getId()); + //根据每个配置的默认还是自定义执行不同逻辑 + DevopsConfigDTO devopsConfigDTO = baseQueryByResourceAndType(resourceId, resourceType, devopsConfigVO.getType()); + if (devopsConfigVO.getCustom()) { + //根据配置所在的资源层级,查询出数据库中是否存在 + DevopsConfigDTO newDevopsConfigDTO = voToDto(devopsConfigVO); + if (devopsConfigDTO != null) { + // 存在判断是否已经生成服务版本,无服务版本,直接覆盖更新;有服务版本,将原config对应的resourceId设置为null,新建config + if (appServiceVersionService.isVersionUseConfig(devopsConfigDTO.getId(), devopsConfigVO.getType())) { + updateResourceId(devopsConfigDTO.getId()); + setResourceId(resourceId, resourceType, newDevopsConfigDTO); + newDevopsConfigDTO.setId(null); + baseCreate(newDevopsConfigDTO); + } else { + newDevopsConfigDTO.setId(devopsConfigDTO.getId()); + setResourceId(resourceId, resourceType, newDevopsConfigDTO); + baseUpdate(newDevopsConfigDTO); + } } else { - baseDelete(devopsConfigDTO.getId()); + setResourceId(resourceId, resourceType, newDevopsConfigDTO); + newDevopsConfigDTO.setId(null); + baseCreate(newDevopsConfigDTO); + } + } else { + //根据配置所在的资源层级,查询出数据库中是否存在,存在则删除 + if (devopsConfigDTO != null) { + if (appServiceVersionService.isVersionUseConfig(devopsConfigDTO.getId(), devopsConfigVO.getType())) { + updateResourceId(devopsConfigDTO.getId()); + } else { + baseDelete(devopsConfigDTO.getId()); + } } } } @@ -252,7 +283,7 @@ private DevopsConfigDTO baseQueryDefaultConfig(String type) { if (type.equals(HARBOR)) { devopsConfigDTO.setName(MiscConstants.DEFAULT_HARBOR_NAME); } else { - devopsConfigDTO.setName(MiscConstants.DEFAULT_CHART_NAME); + devopsConfigDTO.setName(DEFAULT_CHART_NAME); } return devopsConfigMapper.selectOne(devopsConfigDTO); } From 1591badbe14ff59ef90409457676da45bd653218 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 17:13:25 +0800 Subject: [PATCH 067/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=B1=82=E9=85=8D=E7=BD=AEhelm=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/DevopsHelmConfigService.java | 2 ++ .../devops/app/service/impl/DevopsConfigServiceImpl.java | 5 +++-- .../app/service/impl/DevopsHelmConfigServiceImpl.java | 7 ++++++- .../devops/infra/mapper/DevopsHelmConfigMapper.java | 2 ++ src/main/resources/mapper/DevopsHelmConfigMapper.xml | 7 +++++++ 5 files changed, 20 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index c6605af7c4..c07128e0d5 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -75,4 +75,6 @@ public interface DevopsHelmConfigService { @Transactional(rollbackFor = Exception.class) void updateDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO); + + void updateDevopsHelmConfigToNonDefaultRepoOnOrganization(Long resourceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index 1700ecc532..53c3f515d8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -75,6 +75,7 @@ public void operate(Long resourceId, String resourceType, List d } devopsHelmConfigDTO.setResourceType(ResourceLevel.ORGANIZATION.value()); + devopsHelmConfigDTO.setResourceId(resourceId); devopsHelmConfigDTO.setRepoDefault(true); DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.ORGANIZATION.value()); if (oldConfigDTO == null) { @@ -348,8 +349,8 @@ public void operateConfig(Long resourceId, String resourceType, DevopsConfigRepV List configVOS = new ArrayList<>(); DevopsConfigVO chart; if (ObjectUtils.isEmpty(devopsConfigRepVO.getChart())) { - chart = new DevopsConfigVO(); - chart.setCustom(false); + if (ResourceLevel.ORGANIZATION.value().equals(resourceType)) + devopsHelmConfigService.updateDevopsHelmConfigToNonDefaultRepoOnOrganization(resourceId); } else { chart = devopsConfigRepVO.getChart(); chart.setCustom(Boolean.TRUE); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index eae1ca1cb3..06acabd8a9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -206,6 +206,11 @@ public void createDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { @Override @Transactional(rollbackFor = Exception.class) public void updateDevopsHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { - MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper,devopsHelmConfigDTO,"error.helm.config.update"); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.update"); + } + + @Override + public void updateDevopsHelmConfigToNonDefaultRepoOnOrganization(Long resourceId) { + devopsHelmConfigMapper.updateDevopsHelmConfigToNonDefaultRepoOnOrganization(resourceId); } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java index 326f589140..6dd312ede8 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -9,4 +9,6 @@ public interface DevopsHelmConfigMapper extends BaseMapper void updateAllHelmConfigRepoDefaultToFalse(@Param("projectId") Long projectId); void updateHelmConfigRepoDefaultToTrue(@Param("projectId") Long projectId, @Param("helmConfigId") Long helmConfigId); + + void updateDevopsHelmConfigToNonDefaultRepoOnOrganization(@Param("resourceId") Long resourceId); } diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index 68703df4d4..eb8ce13354 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -15,4 +15,11 @@ AND resource_id = #{projectId} AND resource_type = 'project' + + + UPDATE devops_helm_config + SET repo_default=0 + WHERE resource_id=#{resourceId} + AND resource_type='organization' + \ No newline at end of file From b8cb259bbe7bda6318bd3124eb30e64cb6d68dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 14 Jul 2022 17:23:59 +0800 Subject: [PATCH 068/228] =?UTF-8?q?[IMP]=20=E8=A7=A3=E5=86=B3=E7=BC=96?= =?UTF-8?q?=E8=AF=91=E4=B8=8D=E9=80=9A=E8=BF=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsConfigServiceImpl.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index 53c3f515d8..24e921e74e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -347,10 +347,12 @@ public DevopsConfigRepVO queryConfig(Long resourceId, String resourceType) { @Override public void operateConfig(Long resourceId, String resourceType, DevopsConfigRepVO devopsConfigRepVO) { List configVOS = new ArrayList<>(); - DevopsConfigVO chart; + DevopsConfigVO chart = null; if (ObjectUtils.isEmpty(devopsConfigRepVO.getChart())) { - if (ResourceLevel.ORGANIZATION.value().equals(resourceType)) - devopsHelmConfigService.updateDevopsHelmConfigToNonDefaultRepoOnOrganization(resourceId); + if (ResourceLevel.ORGANIZATION.value().equals(resourceType)) { + devopsHelmConfigService.updateDevopsHelmConfigToNonDefaultRepoOnOrganization(resourceId); + return; + } } else { chart = devopsConfigRepVO.getChart(); chart.setCustom(Boolean.TRUE); @@ -369,6 +371,9 @@ public void operateConfig(Long resourceId, String resourceType, DevopsConfigRepV // 用户名和密码要么都为空, 要么都有值 CommonExAssertUtil.assertTrue(((usernameEmpty && passwordEmpty) || (!usernameEmpty && !passwordEmpty)), "error.chart.auth.invalid"); } + if (chart == null) { + return; + } chart.setType(CHART); configVOS.add(chart); operate(resourceId, resourceType, configVOS); From 20a2833ff8b25223474f1a6c4b468c514f711110 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 17:37:10 +0800 Subject: [PATCH 069/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CiPipelineAppVersionService.java | 19 +++ .../impl/AppServiceVersionServiceImpl.java | 35 +++++- .../impl/CiPipelineAppVersionServiceImpl.java | 43 +++++++ .../infra/dto/CiPipelineAppVersionDTO.java | 110 ++++++++++++++++++ .../mapper/CiPipelineAppVersionMapper.java | 15 +++ .../mapper/CiPipelineAppVersionMapper.xml | 6 + .../devops_ci_pipeline_app_version.groovy | 31 +++++ 7 files changed, 256 insertions(+), 3 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java create mode 100644 src/main/java/io/choerodon/devops/infra/dto/CiPipelineAppVersionDTO.java create mode 100644 src/main/java/io/choerodon/devops/infra/mapper/CiPipelineAppVersionMapper.java create mode 100644 src/main/resources/mapper/CiPipelineAppVersionMapper.xml create mode 100644 src/main/resources/script/db/groovy/devops_service/devops_ci_pipeline_app_version.groovy diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java new file mode 100644 index 0000000000..523a47c268 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java @@ -0,0 +1,19 @@ +package io.choerodon.devops.app.service; + +import io.choerodon.devops.infra.dto.CiPipelineAppVersionDTO; + +/** + * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-14 16:01:30 + */ +public interface CiPipelineAppVersionService { + + CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId, + Long gitlabPipelineId, + String jobName); + + void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO); +} + diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 81b3629b79..46d3252e26 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -127,6 +127,8 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService { private AppServiceMavenVersionService appServiceMavenVersionService; @Autowired private CiPipelineMavenService ciPipelineMavenService; + @Autowired + private CiPipelineAppVersionService ciPipelineAppVersionService; @Autowired @@ -1038,7 +1040,21 @@ public AppServiceVersionDTO publishAppVersion(String token, String version, Stri // 1. 创建应用服务版本 AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); Long appServiceId = appServiceDTO.getId(); - return saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceId); + AppServiceVersionDTO appServiceVersionDTO = saveAppVersion(version, commit, ref, gitlabPipelineId, appServiceId); + + // 2. 保存流水线任务记录信息 + if (gitlabPipelineId != null && StringUtils.isNotBlank(jobName)) { + CiPipelineAppVersionDTO ciPipelineAppVersionDTO = ciPipelineAppVersionService.queryByPipelineIdAndJobName(appServiceId, + gitlabPipelineId, + jobName); + if (ciPipelineAppVersionDTO == null) { + ciPipelineAppVersionService.baseCreate(new CiPipelineAppVersionDTO(appServiceId, + gitlabPipelineId, + jobName, + appServiceVersionDTO.getId())); + } + } + return appServiceVersionDTO; } catch (Exception e) { if (e instanceof CommonException) { throw new DevopsCiInvalidException(((CommonException) e).getCode(), e, ((CommonException) e).getParameters()); @@ -1054,25 +1070,38 @@ public AppServiceVersionDTO saveAppVersion(String version, String commit, String if (appServiceVersionDTO == null) { appServiceVersionDTO = create(appServiceId, version, commit, ref); } + Long appServiceVersionId = appServiceVersionDTO.getId(); // 2. 创建helm版本 // 3. 创建image版本 // 3.1 查询流水线中最新的镜像版本 - AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionId); if (appServiceImageVersionDTO == null) { CiPipelineImageDTO ciPipelineImageDTO = ciPipelineImageService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); if (ciPipelineImageDTO != null) { appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId); + appServiceImageVersionDTO.setImage(ciPipelineImageDTO.getImageTag()); + appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageDTO.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageDTO.getHarborRepoId()); appServiceImageVersionService.create(appServiceImageVersionDTO); } } // 4. 创建jar版本 - AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionId); if (appServiceMavenVersionDTO == null) { CiPipelineMavenDTO ciPipelineMavenDTO = ciPipelineMavenService.queryPipelineLatestImage(appServiceId, gitlabPipelineId); if (ciPipelineMavenDTO != null) { appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId); + appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId()); + appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId()); + appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion()); + appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl()); + appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername()); + appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword()); + appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId()); appServiceMavenVersionService.create(appServiceMavenVersionDTO); } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java new file mode 100644 index 0000000000..5b43033af5 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java @@ -0,0 +1,43 @@ +package io.choerodon.devops.app.service.impl; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import io.choerodon.devops.app.service.CiPipelineAppVersionService; +import io.choerodon.devops.infra.constant.ResourceCheckConstant; +import io.choerodon.devops.infra.dto.CiPipelineAppVersionDTO; +import io.choerodon.devops.infra.mapper.CiPipelineAppVersionMapper; +import io.choerodon.devops.infra.util.MapperUtil; + +/** + * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-14 16:01:30 + */ +@Service +public class CiPipelineAppVersionServiceImpl implements CiPipelineAppVersionService { + @Autowired + private CiPipelineAppVersionMapper ciPipelineAppVersionMapper; + + @Override + public CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId, Long gitlabPipelineId, String jobName) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + Assert.notNull(gitlabPipelineId, ResourceCheckConstant.ERROR_GITLAB_PIPELINE_ID_IS_NULL); + Assert.notNull(jobName, ResourceCheckConstant.ERROR_JOB_NAME_ID_IS_NULL); + + CiPipelineAppVersionDTO ciPipelineAppVersionDTO = new CiPipelineAppVersionDTO(); + ciPipelineAppVersionDTO.setAppServiceId(appServiceId); + ciPipelineAppVersionDTO.setGitlabPipelineId(gitlabPipelineId); + ciPipelineAppVersionDTO.setJobName(jobName); + + return ciPipelineAppVersionMapper.selectOne(ciPipelineAppVersionDTO); + } + + @Override + public void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO) { + MapperUtil.resultJudgedInsertSelective(ciPipelineAppVersionMapper, ciPipelineAppVersionDTO, "error.save.app.version"); + } +} + diff --git a/src/main/java/io/choerodon/devops/infra/dto/CiPipelineAppVersionDTO.java b/src/main/java/io/choerodon/devops/infra/dto/CiPipelineAppVersionDTO.java new file mode 100644 index 0000000000..eaa2673799 --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/dto/CiPipelineAppVersionDTO.java @@ -0,0 +1,110 @@ +package io.choerodon.devops.infra.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import io.choerodon.mybatis.annotation.ModifyAudit; +import io.choerodon.mybatis.annotation.VersionAudit; +import io.choerodon.mybatis.domain.AuditDomain; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import javax.persistence.Table; +import javax.validation.constraints.NotBlank; +import javax.validation.constraints.NotNull; + +/** + * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)实体类 + * + * @author hao.wang@zknow.com + * @since 2022-07-14 16:01:29 + */ + +@ApiModel("发布应用服务版本步骤生成的流水线记录信息") +@VersionAudit +@ModifyAudit +@JsonInclude(value = JsonInclude.Include.NON_NULL) +@Table(name = "devops_ci_pipeline_app_version") +public class CiPipelineAppVersionDTO extends AuditDomain { + private static final long serialVersionUID = -24864468876350576L; + + public static final String FIELD_ID = "id"; + public static final String FIELD_APP_SERVICE_ID = "appServiceId"; + public static final String FIELD_GITLAB_PIPELINE_ID = "gitlabPipelineId"; + public static final String FIELD_JOB_NAME = "jobName"; + public static final String FIELD_APP_SERVICE_VERSION_ID = "appServiceVersionId"; + + @Id + @GeneratedValue + private Long id; + + @ApiModelProperty(value = "应用服务id", required = true) + @NotNull + private Long appServiceId; + + @ApiModelProperty(value = "gitlabPipelineId", required = true) + @NotNull + private Long gitlabPipelineId; + + @ApiModelProperty(value = "任务名称", required = true) + @NotBlank + private String jobName; + + @ApiModelProperty(value = "关联应用服务版本id,devops_app_service_version.id", required = true) + @NotNull + private Long appServiceVersionId; + + public CiPipelineAppVersionDTO() { + } + + public CiPipelineAppVersionDTO(@NotNull Long appServiceId, @NotNull Long gitlabPipelineId, @NotBlank String jobName, @NotNull Long appServiceVersionId) { + this.appServiceId = appServiceId; + this.gitlabPipelineId = gitlabPipelineId; + this.jobName = jobName; + this.appServiceVersionId = appServiceVersionId; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getAppServiceId() { + return appServiceId; + } + + public void setAppServiceId(Long appServiceId) { + this.appServiceId = appServiceId; + } + + public Long getGitlabPipelineId() { + return gitlabPipelineId; + } + + public void setGitlabPipelineId(Long gitlabPipelineId) { + this.gitlabPipelineId = gitlabPipelineId; + } + + public String getJobName() { + return jobName; + } + + public void setJobName(String jobName) { + this.jobName = jobName; + } + + public Long getAppServiceVersionId() { + return appServiceVersionId; + } + + public void setAppServiceVersionId(Long appServiceVersionId) { + this.appServiceVersionId = appServiceVersionId; + } + +} + diff --git a/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineAppVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineAppVersionMapper.java new file mode 100644 index 0000000000..bb6072c52c --- /dev/null +++ b/src/main/java/io/choerodon/devops/infra/mapper/CiPipelineAppVersionMapper.java @@ -0,0 +1,15 @@ +package io.choerodon.devops.infra.mapper; + +import io.choerodon.devops.infra.dto.CiPipelineAppVersionDTO; +import io.choerodon.mybatis.common.BaseMapper; + +/** + * 发布应用服务版本步骤生成的流水线记录信息(CiPipelineAppVersion)应用服务 + * + * @author hao.wang@zknow.com + * @since 2022-07-14 16:01:30 + */ +public interface CiPipelineAppVersionMapper extends BaseMapper { + +} + diff --git a/src/main/resources/mapper/CiPipelineAppVersionMapper.xml b/src/main/resources/mapper/CiPipelineAppVersionMapper.xml new file mode 100644 index 0000000000..af346e250d --- /dev/null +++ b/src/main/resources/mapper/CiPipelineAppVersionMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/main/resources/script/db/groovy/devops_service/devops_ci_pipeline_app_version.groovy b/src/main/resources/script/db/groovy/devops_service/devops_ci_pipeline_app_version.groovy new file mode 100644 index 0000000000..d44e90b226 --- /dev/null +++ b/src/main/resources/script/db/groovy/devops_service/devops_ci_pipeline_app_version.groovy @@ -0,0 +1,31 @@ +package script.db.groovy.devops_service + +databaseChangeLog(logicalFilePath: 'dba/devops_ci_pipeline_app_version.groovy') { + changeSet(author: 'wanghao', id: '2022-07-15-create-table') { + createTable(tableName: "devops_ci_pipeline_app_version", remarks: '发布应用服务版本步骤生成的流水线记录信息') { + column(name: 'id', type: 'BIGINT UNSIGNED', remarks: '主键,ID', autoIncrement: true) { + constraints(primaryKey: true) + } + column(name: 'app_service_id', type: 'BIGINT UNSIGNED', remarks: '应用服务id') { + constraints(nullable: false) + } + column(name: 'gitlab_pipeline_id', type: 'BIGINT UNSIGNED', remarks: 'gitlabPipelineId') { + constraints(nullable: false) + } + column(name: "job_name", type: "VARCHAR(255)", remarks: "任务名称") { + constraints(nullable: false) + } + column(name: "app_service_version_id", type: "BIGINT UNSIGNED", remarks: "关联应用服务版本id,devops_app_service_version.id") { + constraints(nullable: false) + } + + column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") + column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "creation_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + column(name: "last_updated_by", type: "BIGINT UNSIGNED", defaultValue: "0") + column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") + } + addUniqueConstraint(tableName: 'devops_ci_pipeline_app_version', + constraintName: 'devops_ci_pipeline_app_version_u1', columnNames: 'app_service_id,gitlab_pipeline_id,job_name') + } +} From 5aa2a75354a792cfe15f1583a6af656afa13a867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=82=96=E8=8C=82?= Date: Thu, 14 Jul 2022 19:53:31 +0800 Subject: [PATCH 070/228] =?UTF-8?q?[ADD]=E5=A2=9E=E5=8A=A0=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=AE=A1=E7=90=86=E5=90=8C=E6=AD=A5=E5=88=86=E6=94=AF?= =?UTF-8?q?=E6=9D=83=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-menu-user-role-label.xlsx | Bin 116508 -> 117213 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx index c755f16216a08bca967e02f380368dbe8c07e6ed..ca60b3d1d48e1d30a869ab4027ccab14dbee54fe 100644 GIT binary patch delta 107020 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 H>&^H->>eFt delta 106473 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 HCd~f>4Tr|k From 6764cb79625a18af75d9d32a4b0a4629cdb70be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Thu, 14 Jul 2022 18:01:43 +0800 Subject: [PATCH 071/228] =?UTF-8?q?[IMP]=20=E8=B0=83=E6=95=B4=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/AppServiceInstanceController.java | 32 +-- .../service/AppServiceInstanceService.java | 14 +- .../app/service/AppServiceVersionService.java | 9 - .../impl/AppServiceInstanceServiceImpl.java | 51 ++-- .../impl/AppServiceVersionServiceImpl.java | 262 +++++++----------- .../mapper/AppServiceVersionMapper.xml | 11 +- 6 files changed, 164 insertions(+), 215 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java index fb336aa316..46d48b0cd5 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceInstanceController.java @@ -860,22 +860,22 @@ public ResponseEntity> pageDeployTimeTable( .orElseThrow(() -> new CommonException("error.deploy.time.get")); } - /** - * 部署自动化测试服务 - * - * @param projectId 项目id - * @param appServiceDeployVO 部署信息 - */ - @ApiOperation(value = "部署自动化测试服务") - @Permission(level = ResourceLevel.ORGANIZATION) - @PostMapping("/deploy_test_app") - public void deployTestApp( - @ApiParam(value = "项目ID", required = true) - @PathVariable(value = "project_id") Long projectId, - @ApiParam(value = "部署信息", required = true) - @RequestBody AppServiceDeployVO appServiceDeployVO) { - appServiceInstanceService.deployTestApp(projectId, appServiceDeployVO); - } +// /** +// * 部署自动化测试服务 +// * +// * @param projectId 项目id +// * @param appServiceDeployVO 部署信息 +// */ +// @ApiOperation(value = "部署自动化测试服务") +// @Permission(level = ResourceLevel.ORGANIZATION) +// @PostMapping("/deploy_test_app") +// public void deployTestApp( +// @ApiParam(value = "项目ID", required = true) +// @PathVariable(value = "project_id") Long projectId, +// @ApiParam(value = "部署信息", required = true) +// @RequestBody AppServiceDeployVO appServiceDeployVO) { +// appServiceInstanceService.deployTestApp(projectId, appServiceDeployVO); +// } /** * 操作pod的数量 diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java index 4add6ca526..52b7a325bc 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceInstanceService.java @@ -285,13 +285,13 @@ Page pageByOptions(Long projectId, PageRequest pagea */ Page pageDeployTimeTable(Long projectId, PageRequest pageable, Long[] appServiceIds, Long envId, Date startTime, Date endTime); - /** - * 部署自动化测试应用 - * - * @param projectId 项目id - * @param appServiceDeployVO 部署信息 - */ - void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO); +// /** +// * 部署自动化测试应用 +// * +// * @param projectId 项目id +// * @param appServiceDeployVO 部署信息 +// */ +// void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO); /** * 根据实例id获取更多资源详情(json格式) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index a22bd59ea2..51bdd17101 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -76,15 +76,6 @@ void create(String image, */ List listUpgradeableAppVersion(Long projectId, Long appServiceServiceId); - /** - * 项目下查询应用最新的版本和各环境下部署的版本 - * - * @param appServiceId 应用ID - * @return DeployVersionVO - */ - DeployVersionVO queryDeployedVersions(Long appServiceId); - - String queryVersionValue(Long appServiceServiceId); AppServiceVersionRespVO queryById(Long appServiceServiceId); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index 507fe056a9..82cad58850 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -225,6 +225,10 @@ public class AppServiceInstanceServiceImpl implements AppServiceInstanceService private DevopsPrometheusMapper devopsPrometheusMapper; @Autowired private DevopsProjectMapper devopsProjectMapper; + @Autowired + private AppServiceImageVersionService appServiceImageVersionService; + @Autowired + private AppServiceHelmVersionService appServiceHelmVersionService; /** * 前端传入的排序字段和Mapper文件中的字段名的映射 */ @@ -579,26 +583,26 @@ public Page pageDeployTimeTable(Long projectId, PageRequest } - @Override - public void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO) { - // 这里的environmentId就是集群id - CommonExAssertUtil.assertTrue(permissionHelper.projectPermittedToCluster(appServiceDeployVO.getEnvironmentId(), projectId), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT); - - String versionValue = appServiceVersionService.baseQueryValue(appServiceDeployVO.getAppServiceVersionId()); - AppServiceDTO appServiceDTO = applicationService.baseQuery(appServiceDeployVO.getAppServiceId()); - - DevopsEnvironmentDTO devopsEnvironmentDTO = new DevopsEnvironmentDTO(); - devopsEnvironmentDTO.setClusterId(appServiceDeployVO.getEnvironmentId()); - devopsEnvironmentDTO.setCode(CHOERODON); - // 测试应用没有环境id - String secretCode = getSecret(appServiceDTO, appServiceDeployVO.getAppServiceVersionId(), devopsEnvironmentDTO); - - AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceDeployVO.getAppServiceVersionId()); - FileUtil.checkYamlFormat(appServiceDeployVO.getValues()); - String deployValue = getReplaceResult(versionValue, - appServiceDeployVO.getValues()).getDeltaYaml().trim(); - agentCommandService.deployTestApp(appServiceDTO, appServiceVersionDTO, appServiceDeployVO.getInstanceName(), secretCode, appServiceDeployVO.getEnvironmentId(), deployValue); - } +// @Override +// public void deployTestApp(Long projectId, AppServiceDeployVO appServiceDeployVO) { +// // 这里的environmentId就是集群id +// CommonExAssertUtil.assertTrue(permissionHelper.projectPermittedToCluster(appServiceDeployVO.getEnvironmentId(), projectId), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT); +// +// String versionValue = appServiceVersionService.baseQueryValue(appServiceDeployVO.getAppServiceVersionId()); +// AppServiceDTO appServiceDTO = applicationService.baseQuery(appServiceDeployVO.getAppServiceId()); +// +// DevopsEnvironmentDTO devopsEnvironmentDTO = new DevopsEnvironmentDTO(); +// devopsEnvironmentDTO.setClusterId(appServiceDeployVO.getEnvironmentId()); +// devopsEnvironmentDTO.setCode(CHOERODON); +// // 测试应用没有环境id +// String secretCode = getSecret(appServiceDTO, appServiceDeployVO.getAppServiceVersionId(), devopsEnvironmentDTO); +// +// AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceDeployVO.getAppServiceVersionId()); +// FileUtil.checkYamlFormat(appServiceDeployVO.getValues()); +// String deployValue = getReplaceResult(versionValue, +// appServiceDeployVO.getValues()).getDeltaYaml().trim(); +// agentCommandService.deployTestApp(appServiceDTO, appServiceVersionDTO, appServiceDeployVO.getInstanceName(), secretCode, appServiceDeployVO.getEnvironmentId(), deployValue); +// } @Override @@ -2651,12 +2655,12 @@ private String getSecret(AppServiceDTO appServiceDTO, Long appServiceVersionId, String secretCode = null; //如果应用绑定了私有镜像库,则处理secret AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQuery(appServiceVersionId); - // 先处理chart的认证信息 sendChartMuseumAuthentication(devopsEnvironmentDTO.getClusterId(), appServiceDTO, appServiceVersionDTO); DevopsConfigDTO devopsConfigDTO; - if (appServiceVersionDTO.getHarborConfigId() != null) { + AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionId); + if (appServiceImageVersionDTO.getHarborConfigId() != null) { devopsConfigDTO = harborService.queryRepoConfigByIdToDevopsConfig(appServiceDTO.getId(), appServiceDTO.getProjectId(), appServiceVersionDTO.getHarborConfigId(), appServiceVersionDTO.getRepoType(), AUTHTYPE); } else { @@ -2802,7 +2806,8 @@ private String parseMarketChartRepo(String chartRepo) { */ private void sendChartMuseumAuthentication(Long clusterId, AppServiceDTO appServiceDTO, AppServiceVersionDTO appServiceVersionDTO) { - if (appServiceVersionDTO.getHelmConfigId() != null) { + AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceHelmVersionDTO.getHelmConfigId() != null) { // 查询chart配置 DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, "chart", null); ConfigVO helmConfig = gson.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 46d3252e26..2a41d02d89 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -87,13 +87,6 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService { @Autowired private AppServiceVersionValueService appServiceVersionValueService; @Autowired - @Lazy - private AppServiceInstanceService appServiceInstanceService; - @Autowired - private DevopsEnvironmentService devopsEnvironmentService; - @Autowired - private DevopsEnvCommandService devopsEnvCommandService; - @Autowired private DevopsGitlabCommitService devopsGitlabCommitService; @Autowired private ChartUtil chartUtil; @@ -257,110 +250,110 @@ private String getValues(String storeFilePath, String destFilePath, String path) return values; } - private AppServiceVersionDTO doCreate(String image, - Long harborConfigId, - String repoType, - String token, - String version, - String commit, - MultipartFile files, - String ref) { - AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); - - AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO(); - AppServiceVersionDTO newVersion = new AppServiceVersionDTO(); - ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); - Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); - AppServiceVersionDTO oldVersionInDb = baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version); - newVersion.setAppServiceId(appServiceDTO.getId()); - newVersion.setImage(image); - newVersion.setCommit(commit); - newVersion.setRef(ref); - newVersion.setVersion(version); - //根据配置id 查询仓库是自定义还是默认 -// HarborRepoDTO harborRepoDTO = rdupmClient.queryHarborRepoConfig(appServiceDTO.getProjectId(), appServiceDTO.getId()).getBody(); -// if (Objects.isNull(harborRepoDTO) -// || Objects.isNull(harborRepoDTO.getHarborRepoConfig()) -// || harborRepoDTO.getHarborRepoConfig().getRepoId().longValue() != harborConfigId) { -// throw new DevopsCiInvalidException("error.harbor.configuration.expiration"); +// private AppServiceVersionDTO doCreate(String image, +// Long harborConfigId, +// String repoType, +// String token, +// String version, +// String commit, +// MultipartFile files, +// String ref) { +// AppServiceDTO appServiceDTO = appServiceMapper.queryByToken(token); +// +// AppServiceVersionValueDTO appServiceVersionValueDTO = new AppServiceVersionValueDTO(); +// AppServiceVersionDTO newVersion = new AppServiceVersionDTO(); +// ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); +// Tenant organization = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); +// AppServiceVersionDTO oldVersionInDb = baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version); +// newVersion.setAppServiceId(appServiceDTO.getId()); +// newVersion.setImage(image); +// newVersion.setCommit(commit); +// newVersion.setRef(ref); +// newVersion.setVersion(version); +// //根据配置id 查询仓库是自定义还是默认 +//// HarborRepoDTO harborRepoDTO = rdupmClient.queryHarborRepoConfig(appServiceDTO.getProjectId(), appServiceDTO.getId()).getBody(); +//// if (Objects.isNull(harborRepoDTO) +//// || Objects.isNull(harborRepoDTO.getHarborRepoConfig()) +//// || harborRepoDTO.getHarborRepoConfig().getRepoId().longValue() != harborConfigId) { +//// throw new DevopsCiInvalidException("error.harbor.configuration.expiration"); +//// } +// newVersion.setHarborConfigId(harborConfigId); +// newVersion.setRepoType(repoType); +// +// // 查询helm仓库配置id +// DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL); +// ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); +// String helmUrl = helmConfig.getUrl(); +// newVersion.setHelmConfigId(devopsConfigDTO.getId()); +// +// newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); +// +// // 取commit的一部分作为文件路径 +// String commitPart = commit == null ? "" : commit.substring(0, 8); +// +// String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); +// String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); +// +// String path = FileUtil.multipartFileToFile(storeFilePath, files); +// +// // 上传chart包到 chart museum +// chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); +// +// FileUtil.unTarGZ(path, destFilePath); +// +// // 使用深度优先遍历查找文件, 避免查询到子chart的values值 +// File valuesFile = FileUtil.queryFileFromFilesBFS(new File(destFilePath), "values.yaml"); +// +// if (valuesFile == null) { +// FileUtil.deleteDirectories(storeFilePath, destFilePath); +// throw new CommonException("error.find.values.yaml.in.chart"); // } - newVersion.setHarborConfigId(harborConfigId); - newVersion.setRepoType(repoType); - - // 查询helm仓库配置id - DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL); - ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); - String helmUrl = helmConfig.getUrl(); - newVersion.setHelmConfigId(devopsConfigDTO.getId()); - - newVersion.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); - - // 取commit的一部分作为文件路径 - String commitPart = commit == null ? "" : commit.substring(0, 8); - - String storeFilePath = String.format(STORE_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); - String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); - - String path = FileUtil.multipartFileToFile(storeFilePath, files); - - // 上传chart包到 chart museum - chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); - - FileUtil.unTarGZ(path, destFilePath); - - // 使用深度优先遍历查找文件, 避免查询到子chart的values值 - File valuesFile = FileUtil.queryFileFromFilesBFS(new File(destFilePath), "values.yaml"); - - if (valuesFile == null) { - FileUtil.deleteDirectories(storeFilePath, destFilePath); - throw new CommonException("error.find.values.yaml.in.chart"); - } - - String values; - try (FileInputStream fis = new FileInputStream(valuesFile)) { - values = FileUtil.replaceReturnString(fis, null); - } catch (IOException e) { - FileUtil.deleteDirectories(storeFilePath, destFilePath); - throw new CommonException(e); - } - - try { - FileUtil.checkYamlFormat(values); - } catch (CommonException e) { - FileUtil.deleteDirectories(storeFilePath, destFilePath); - throw new CommonException("The format of the values.yaml in the chart is invalid!", e); - } - - // 更新版本纪录和values纪录 - if (oldVersionInDb != null) { - // 重新上传chart包后更新values - updateValues(oldVersionInDb.getValueId(), values); - updateVersion(oldVersionInDb, newVersion); - } else { - // 新建版本时的操作 - appServiceVersionValueDTO.setValue(values); - try { - newVersion.setValueId(appServiceVersionValueService - .baseCreate(appServiceVersionValueDTO).getId()); - } catch (Exception e) { - FileUtil.deleteDirectories(storeFilePath, destFilePath); - throw new CommonException(ERROR_VERSION_INSERT, e); - } - - AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO(); - appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath)); - appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO); - - newVersion.setReadmeValueId(appServiceVersionReadmeDTO.getId()); - newVersion = baseCreate(newVersion); - } - - - FileUtil.deleteDirectories(destFilePath, storeFilePath); - //生成版本成功后发送webhook json - sendNotificationService.sendWhenAppServiceVersion(newVersion, appServiceDTO, projectDTO); - return newVersion; - } +// +// String values; +// try (FileInputStream fis = new FileInputStream(valuesFile)) { +// values = FileUtil.replaceReturnString(fis, null); +// } catch (IOException e) { +// FileUtil.deleteDirectories(storeFilePath, destFilePath); +// throw new CommonException(e); +// } +// +// try { +// FileUtil.checkYamlFormat(values); +// } catch (CommonException e) { +// FileUtil.deleteDirectories(storeFilePath, destFilePath); +// throw new CommonException("The format of the values.yaml in the chart is invalid!", e); +// } +// +// // 更新版本纪录和values纪录 +// if (oldVersionInDb != null) { +// // 重新上传chart包后更新values +// updateValues(oldVersionInDb.getValueId(), values); +// updateVersion(oldVersionInDb, newVersion); +// } else { +// // 新建版本时的操作 +// appServiceVersionValueDTO.setValue(values); +// try { +// newVersion.setValueId(appServiceVersionValueService +// .baseCreate(appServiceVersionValueDTO).getId()); +// } catch (Exception e) { +// FileUtil.deleteDirectories(storeFilePath, destFilePath); +// throw new CommonException(ERROR_VERSION_INSERT, e); +// } +// +// AppServiceVersionReadmeDTO appServiceVersionReadmeDTO = new AppServiceVersionReadmeDTO(); +// appServiceVersionReadmeDTO.setReadme(FileUtil.getReadme(destFilePath)); +// appServiceVersionReadmeMapper.insert(appServiceVersionReadmeDTO); +// +// newVersion.setReadmeValueId(appServiceVersionReadmeDTO.getId()); +// newVersion = baseCreate(newVersion); +// } +// +// +// FileUtil.deleteDirectories(destFilePath, storeFilePath); +// //生成版本成功后发送webhook json +// sendNotificationService.sendWhenAppServiceVersion(newVersion, appServiceDTO, projectDTO); +// return newVersion; +// } private void updateVersion(AppServiceVersionDTO oldVersionInDb, AppServiceVersionDTO newVersion) { newVersion.setId(oldVersionInDb.getId()); @@ -532,56 +525,11 @@ public List listUpgradeableAppVersion(Long projectId, L baseListUpgradeVersion(appServiceServiceId), AppServiceVersionRespVO.class); } - @Override - public DeployVersionVO queryDeployedVersions(Long appServiceId) { - AppServiceVersionDTO appServiceVersionDTO = baseQueryNewestVersion(appServiceId); - DeployVersionVO deployVersionVO = new DeployVersionVO(); - List deployEnvVersionVOS = new ArrayList<>(); - if (appServiceVersionDTO != null) { - Map> envInstances = appServiceInstanceService.baseListByAppId(appServiceId) - .stream() - .filter(applicationInstanceDTO -> applicationInstanceDTO.getCommandId() != null) - .collect(Collectors.groupingBy(AppServiceInstanceDTO::getEnvId)); - - if (!envInstances.isEmpty()) { - envInstances.forEach((key, value) -> { - DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(key); - DeployEnvVersionVO deployEnvVersionVO = new DeployEnvVersionVO(); - deployEnvVersionVO.setEnvName(devopsEnvironmentDTO.getName()); - List deployInstanceVersionVOS = new ArrayList<>(); - Map> versionInstances = value.stream().collect(Collectors.groupingBy(t -> { - DevopsEnvCommandDTO devopsEnvCommandDTO = devopsEnvCommandService.baseQuery(t.getCommandId()); - return devopsEnvCommandDTO.getObjectVersionId(); - })); - - if (!versionInstances.isEmpty()) { - versionInstances.forEach((newKey, newValue) -> { - AppServiceVersionDTO newAppServiceVersionDTO = baseQuery(newKey); - DeployInstanceVersionVO deployInstanceVersionVO = new DeployInstanceVersionVO(); - deployInstanceVersionVO.setDeployVersion(newAppServiceVersionDTO.getVersion()); - deployInstanceVersionVO.setInstanceCount(newValue.size()); - if (newAppServiceVersionDTO.getId() < appServiceVersionDTO.getId()) { - deployInstanceVersionVO.setUpdate(true); - } - deployInstanceVersionVOS.add(deployInstanceVersionVO); - }); - } - - deployEnvVersionVO.setDeployIntanceVersionDTO(deployInstanceVersionVOS); - deployEnvVersionVOS.add(deployEnvVersionVO); - }); - - deployVersionVO.setLatestVersion(appServiceVersionDTO.getVersion()); - deployVersionVO.setDeployEnvVersionVO(deployEnvVersionVOS); - } - } - return deployVersionVO; - } - @Override public String queryVersionValue(Long appServiceServiceId) { AppServiceVersionDTO appServiceVersionDTO = baseQuery(appServiceServiceId); - return appServiceVersionValueService.baseQuery(appServiceVersionDTO.getValueId()).getValue(); + AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + return appServiceVersionValueService.baseQuery(appServiceHelmVersionDTO.getValueId()).getValue(); } @Override diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index 49dd380692..ea1662e2d5 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -28,11 +28,16 @@ + SELECT COUNT(*) > 0 + FROM devops_helm_config + WHERE resource_type = 'project' + AND name = #{name} + + AND resource_id = #{helmConfigId} + + \ No newline at end of file diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 2678d8269f..1b157073f7 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -927,3 +927,4 @@ error.middleware.code.exists=code exists error.helm.config.update=Failed to update helm config error.helm.config.insert=Failed to insert helm config error.helm.config.site.exist=The helm repo on site does not exist +error.helm.config.name.exists=The name of helm repo already exists. diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index deddac2446..2f3084febd 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -923,4 +923,5 @@ error.middleware.code.exists=编码已存在 error.key-encrypt.decrypt.abnormal_content=页面失效,请重新访问首页进入 error.helm.config.update=更新helm仓库配置失败 error.helm.config.insert=插入helm仓库配置失败 -error.helm.config.site.exist=平台层helm仓库配置不存在 \ No newline at end of file +error.helm.config.site.exist=平台层helm仓库配置不存在 +error.helm.config.name.exists=helm仓库名称已存在 \ No newline at end of file From 8141f357b17bf22abe4d9e8d1e25c6a3d307b6af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 15 Jul 2022 17:18:54 +0800 Subject: [PATCH 085/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E9=BB=98=E8=AE=A4helm=E4=BB=93=E5=BA=93=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/controller/v1/DevopsHelmConfigController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index 2da51d0216..3de6027486 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -85,7 +85,7 @@ public ResponseEntity deleteHelmConfig(@ApiParam("项目id") } @ApiOperation("将指定仓库设为默认仓库") - @DeleteMapping("/{helm_config_id}/set_default") + @PostMapping("/{helm_config_id}/set_default") @Permission(level = ResourceLevel.ORGANIZATION) public ResponseEntity setDefaultHelmConfig(@ApiParam("项目id") @PathVariable("project_id") Long projectId, From 52acb280ca259f1b0a797c8214d597e18eb43ef8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 15 Jul 2022 17:21:26 +0800 Subject: [PATCH 086/228] =?UTF-8?q?[IMP]=20=E5=8E=BB=E6=8E=89demo=E6=95=B0?= =?UTF-8?q?=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsHelmConfigServiceImpl.java | 31 ------------------- 1 file changed, 31 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 580a59faef..1ac18f3ed7 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -38,37 +38,6 @@ public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { @Override public List listHelmConfig(Long projectId) { - - List devopsHelmConfigVOList = new ArrayList<>(); - - DevopsHelmConfigVO devopsHelmConfigVO1 = new DevopsHelmConfigVO(); - devopsHelmConfigVO1.setUrl("http://www.example.com/org/projects/"); - devopsHelmConfigVO1.setUsername("username"); - devopsHelmConfigVO1.setPassword("password"); - devopsHelmConfigVO1.setName("测试仓库1"); - devopsHelmConfigVO1.setRepoPrivate(true); - devopsHelmConfigVO1.setRepoDefault(true); - devopsHelmConfigVO1.setResourceType("organization"); - devopsHelmConfigVO1.setCreationDate(new Date()); - devopsHelmConfigVO1.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); - devopsHelmConfigVO1.setCreatorLoginName("25147"); - devopsHelmConfigVO1.setCreatorRealName("周扒皮"); - - DevopsHelmConfigVO devopsHelmConfigVO2 = new DevopsHelmConfigVO(); - devopsHelmConfigVO2.setUrl("http://www.example.com/org/projects/"); - devopsHelmConfigVO2.setUsername("username"); - devopsHelmConfigVO2.setPassword("password"); - devopsHelmConfigVO2.setName("测试仓库1"); - devopsHelmConfigVO2.setRepoPrivate(false); - devopsHelmConfigVO2.setRepoDefault(false); - devopsHelmConfigVO2.setResourceType("project"); - devopsHelmConfigVO2.setCreationDate(new Date()); - devopsHelmConfigVO2.setCreatorImageUrl("http://minio.c7n.devops.hand-china.com/iam-service/0/CHOERODON-MINIO/54d21810ba514c87966d28579e65a9ec@src=http___5b0988e595225.cdn.sohucs.com_images_20200424_7c24b1d510b14d0599d69f6c4052867d.jpeg&refer=http___5b0988e595225.cdn.sohucs.jfif"); - devopsHelmConfigVO2.setCreatorLoginName("25147"); - devopsHelmConfigVO2.setCreatorRealName("周扒皮"); - - devopsHelmConfigVOList.add(devopsHelmConfigVO1); - devopsHelmConfigVOList.add(devopsHelmConfigVO2); List devopsHelmConfigDTOS = new ArrayList<>(); // 查询项目层设置helm仓库 From 4855b0066308b4e3b3dba9f71dddf2b9dee6d0c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Mon, 18 Jul 2022 09:39:09 +0800 Subject: [PATCH 087/228] =?UTF-8?q?[IMP]=20=E9=A1=B9=E7=9B=AE=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E6=B7=BB=E5=8A=A0=E5=A4=9A=E8=AF=AD=E8=A8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero_platform/devops-menu-label.xlsx | Bin 18282 -> 18320 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/devops-menu-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/devops-menu-label.xlsx index 84ca916917946466b1f8f88695ef408322c2c74a..b0c2e3e0216880efefe104a9311d08afb25bfcfa 100644 GIT binary patch delta 13739 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 delta 13729 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 From ef94cc0490ee23ae239edb0c03d07e892d7a905f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 18 Jul 2022 10:02:28 +0800 Subject: [PATCH 088/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9devops=5Fhost?= =?UTF-8?q?=5Fcommand=E8=A1=A8=E7=9A=84error=E5=AD=97=E6=AE=B5=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../db/groovy/devops_service/devops_host_command.groovy | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8bd1da553d..d0d6b69c07 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.2.RELEASE + 2.1.3-SNAPSHOT jar https://github.com/open-hand/devops-service diff --git a/src/main/resources/script/db/groovy/devops_service/devops_host_command.groovy b/src/main/resources/script/db/groovy/devops_service/devops_host_command.groovy index 6c95b048e8..f70ee86c85 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_host_command.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_host_command.groovy @@ -33,5 +33,10 @@ databaseChangeLog(logicalFilePath: 'dba/devops_host_command.groovy') { } } + changeSet(author: 'lihao', id: '2022-07-18-change-column') { + modifyDataType(tableName: 'devops_host_command', columnName: 'error', newDataType: 'TEXT') + } + + } \ No newline at end of file From da13eb8cf8b514a5ab07a2475e01fbafc460eabe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 10:05:21 +0800 Subject: [PATCH 089/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84chart?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/AppServiceVersionService.java | 6 +- .../impl/AppServiceVersionServiceImpl.java | 55 +++++++++++-------- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index ec6a7a18a7..ebe6ceaa3c 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -6,8 +6,10 @@ import org.springframework.web.multipart.MultipartFile; import io.choerodon.core.domain.Page; -import io.choerodon.devops.api.vo.*; -import io.choerodon.devops.infra.dto.AppServiceLatestVersionDTO; +import io.choerodon.devops.api.vo.AppServiceVersionAndCommitVO; +import io.choerodon.devops.api.vo.AppServiceVersionRespVO; +import io.choerodon.devops.api.vo.AppServiceVersionVO; +import io.choerodon.devops.api.vo.AppServiceVersionWithHelmConfigVO; import io.choerodon.devops.infra.dto.AppServiceVersionDTO; import io.choerodon.mybatis.pagehelper.domain.PageRequest; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 9c61184042..3e8a639926 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -1,6 +1,7 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.*; +import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.CUSTOM_REPO; +import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.DEFAULT_REPO; import static java.util.Comparator.comparing; import static java.util.stream.Collectors.collectingAndThen; import static java.util.stream.Collectors.toCollection; @@ -21,15 +22,14 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.Lazy; -import org.springframework.http.HttpEntity; -import org.springframework.http.HttpHeaders; -import org.springframework.http.MediaType; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; @@ -55,7 +55,6 @@ import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.enums.ProjectConfigType; import io.choerodon.devops.infra.exception.DevopsCiInvalidException; -import io.choerodon.devops.infra.feign.RdupmClient; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.*; import io.choerodon.devops.infra.util.*; @@ -167,8 +166,6 @@ public void create(String image, // 查询helm仓库配置id DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryAppConfig(appServiceDTO.getId(), projectDTO.getId(), organization.getTenantId()); -// DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, CHART, AUTH_TYPE_PULL); -// ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); String repository; if (ResourceLevel.PROJECT.value().equals(devopsHelmConfigDTO.getResourceType())) { repository = devopsHelmConfigDTO.getUrl(); @@ -181,20 +178,7 @@ public void create(String image, String destFilePath = String.format(DESTINATION_PATH_TEMPLATE, appServiceDTO.getId(), version, commitPart); String path = FileUtil.multipartFileToFile(storeFilePath, files); - MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("file", files); - HttpHeaders headers = new HttpHeaders(); - headers.setContentType(MediaType.MULTIPART_FORM_DATA); - if (devopsHelmConfigDTO.getRepoPrivate()) { - String credentials = devopsHelmConfigDTO.getUsername() + ":" - + devopsHelmConfigDTO.getPassword(); - headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes())); - } - HttpEntity> requestEntity = new HttpEntity<>(params, headers); - - restTemplate.postForEntity(repository + "/api/chart", requestEntity, String.class); - // 上传chart包到 chart museum -// chartUtil.uploadChart(repository, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), devopsHelmConfigDTO.getUsername(), devopsHelmConfigDTO.getPassword()); + uploadChart(files, devopsHelmConfigDTO, repository); // 解析chart包中的values文件 String values = getValues(storeFilePath, destFilePath, path); @@ -250,6 +234,33 @@ public void create(String image, } + private void uploadChart(MultipartFile files, DevopsHelmConfigDTO devopsHelmConfigDTO, String repository) { + MultiValueMap params = new LinkedMultiValueMap<>(); + params.add("chart", files); + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + if (devopsHelmConfigDTO.getRepoPrivate()) { + String credentials = devopsHelmConfigDTO.getUsername() + ":" + + devopsHelmConfigDTO.getPassword(); + headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes())); + } + HttpEntity> requestEntity = new HttpEntity<>(params, headers); + + ResponseEntity entity = null; + try { + entity = restTemplate.postForEntity(repository + "/api/chart", requestEntity, String.class); + if (!entity.getStatusCode().is2xxSuccessful() && !HttpStatus.CONFLICT.equals(entity.getStatusCode())) { + throw new CommonException("error.upload.chart"); + } + } catch (HttpClientErrorException e) { + if (!HttpStatus.CONFLICT.equals(e.getStatusCode())) { + throw new CommonException("error.upload.chart"); + } + } catch (RestClientException e) { + throw new CommonException(e); + } + } + private String getValues(String storeFilePath, String destFilePath, String path) { FileUtil.unTarGZ(path, destFilePath); From db23d0db64bcd02f9f33d670e41261ce30ccdf26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 18 Jul 2022 10:23:28 +0800 Subject: [PATCH 090/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d0d6b69c07..831e4cad2b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.3-SNAPSHOT + 2.1.3.RELEASE jar https://github.com/open-hand/devops-service From 59eef9375f8e6712f37acb91eb99ad5c9bcf04ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 10:45:17 +0800 Subject: [PATCH 091/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84chart?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AppServiceVersionServiceImpl.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 3e8a639926..81100d44c4 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -22,6 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; +import org.springframework.core.io.ByteArrayResource; import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -236,7 +237,24 @@ public void create(String image, private void uploadChart(MultipartFile files, DevopsHelmConfigDTO devopsHelmConfigDTO, String repository) { MultiValueMap params = new LinkedMultiValueMap<>(); - params.add("chart", files); + ByteArrayResource fileAsResource = null; + try { + byte[] bytes = files.getBytes(); + + fileAsResource = new ByteArrayResource(bytes) { + @Override + public String getFilename() { + return files.getOriginalFilename(); + } + @Override + public long contentLength() { + return files.getSize(); + } + }; + } catch (IOException e) { + e.printStackTrace(); + } + params.add("chart", fileAsResource); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.MULTIPART_FORM_DATA); if (devopsHelmConfigDTO.getRepoPrivate()) { From a7f021434b15035e49defe316b55e5e2f7a878f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 11:09:23 +0800 Subject: [PATCH 092/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84chart?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceVersionServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 81100d44c4..279dddff6c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -266,13 +266,13 @@ public long contentLength() { ResponseEntity entity = null; try { - entity = restTemplate.postForEntity(repository + "/api/chart", requestEntity, String.class); + entity = restTemplate.postForEntity(repository + "/api/charts", requestEntity, String.class); if (!entity.getStatusCode().is2xxSuccessful() && !HttpStatus.CONFLICT.equals(entity.getStatusCode())) { throw new CommonException("error.upload.chart"); } } catch (HttpClientErrorException e) { if (!HttpStatus.CONFLICT.equals(e.getStatusCode())) { - throw new CommonException("error.upload.chart"); + throw new CommonException("error.upload.chart", e); } } catch (RestClientException e) { throw new CommonException(e); From 0108aafdd97f73e34ffcc10391841478f5c74363 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 11:21:39 +0800 Subject: [PATCH 093/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84chart?= =?UTF-8?q?=E5=8F=91=E5=B8=83=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceVersionServiceImpl.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 279dddff6c..bf17e985af 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -202,6 +202,7 @@ public void create(String image, appServiceHelmVersionDTO.setHarborConfigId(TypeUtil.objToLong(harborConfigId)); appServiceHelmVersionDTO.setHelmConfigId(devopsHelmConfigDTO.getId()); appServiceHelmVersionDTO.setRepository(repository); + appServiceHelmVersionDTO.setImage(image); appServiceHelmVersionService.create(appServiceHelmVersionDTO); } else { From d09d1fd1f9f8142bd6ba24fc7b0c0b2f8b0a3074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 12:50:09 +0800 Subject: [PATCH 094/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9ci.sh?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/shell/ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/shell/ci.sh b/src/main/resources/shell/ci.sh index ef10d6c443..8a3231c28a 100644 --- a/src/main/resources/shell/ci.sh +++ b/src/main/resources/shell/ci.sh @@ -251,7 +251,7 @@ function publish_app_version() { -F "ref=${CI_COMMIT_REF_NAME}" \ -F "gitlabPipelineId=${CI_PIPELINE_ID}" \ -F "jobName=${CI_JOB_NAME}" \ - "${CHOERODON_URL}/devops/app_version" \ + "${CHOERODON_URL}/devops/ci/app_version" \ -o "${CI_COMMIT_SHA}-ci.response" \ -w %{http_code}) # 判断本次上传到devops是否出错 From f65fbade2eeb3b60c3c9aa74527e096f8370bad8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 12:58:31 +0800 Subject: [PATCH 095/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/vo/appversion/AppServiceHelmVersionVO.java | 9 +++++++++ .../service/impl/AppServiceVersionServiceImpl.java | 11 ++++++++--- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java index 04e107a21d..1b2ae1102c 100644 --- a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java @@ -26,7 +26,16 @@ public class AppServiceHelmVersionVO { private String image; @ApiModelProperty(value = "仓库地址", required = true) private String repository; + @ApiModelProperty(value = "chart包名", required = true) + private String chartName; + public String getChartName() { + return chartName; + } + + public void setChartName(String chartName) { + this.chartName = chartName; + } public Long getId() { return id; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index bf17e985af..66a527cfdf 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -482,7 +482,7 @@ public Page pageByOptions(Long projectId, Long appServiceId // 计算应用服务版本是否可以被删除 caculateDelteFlag(appServiceId, appServiceVersionVOS.getContent()); // 添加版本关联的helm、image、jar版本信息 - addVersionInfo(appServiceVersionVOS.getContent()); + addVersionInfo(appServiceId, appServiceVersionVOS.getContent()); } return appServiceVersionVOS; @@ -490,16 +490,21 @@ public Page pageByOptions(Long projectId, Long appServiceId /** * 添加版本关联的helm、image、jar版本信息 + * @param appServiceId * @param appServiceVersionVOList */ - private void addVersionInfo(List appServiceVersionVOList) { + private void addVersionInfo(Long appServiceId, List appServiceVersionVOList) { Set versionIds = appServiceVersionVOList.stream().map(AppServiceVersionVO::getId).collect(Collectors.toSet()); + AppServiceDTO appServiceDTO = appServiceMapper.selectByPrimaryKey(appServiceId); + // 批量查询各版本信息 Map helmVersionMap = new HashMap<>(); List appServiceHelmVersionVOS = appServiceHelmVersionService.listByAppVersionIds(versionIds); if (!CollectionUtils.isEmpty(appServiceHelmVersionVOS)) { - helmVersionMap = appServiceHelmVersionVOS.stream().collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity())); + helmVersionMap = appServiceHelmVersionVOS.stream() + .peek(v -> v.setChartName(appServiceDTO.getCode())) + .collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity())); } Map imageVersionMap = new HashMap<>(); List appServiceImageVersionVOS = appServiceImageVersionService.listByAppVersionIds(versionIds); From efb098c4228ab589a301d439f76cbe5fb9e4f921 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 15:45:24 +0800 Subject: [PATCH 096/228] =?UTF-8?q?[IMP]=20=E8=B0=83=E6=95=B4=E5=8F=91?= =?UTF-8?q?=E5=B8=83=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/v1/CiController.java | 4 +- .../devops/api/vo/CiPipelineImageVO.java | 12 ++++++ .../AppServiceImageVersionService.java | 3 ++ .../AppServiceMavenVersionService.java | 3 ++ .../app/service/CiPipelineImageService.java | 2 - .../app/service/CiPipelineMavenService.java | 7 +-- .../AppServiceImageVersionServiceImpl.java | 7 +++ .../AppServiceMavenVersionServiceImpl.java | 6 +++ .../impl/AppServiceVersionServiceImpl.java | 6 +++ .../impl/CiPipelineImageServiceImpl.java | 29 +++++++++++++ .../impl/CiPipelineMavenServiceImpl.java | 43 +++++++++++++++---- src/main/resources/shell/ci.sh | 4 +- 12 files changed, 111 insertions(+), 15 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java index 084790287b..92292ea139 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/CiController.java @@ -173,9 +173,11 @@ public ResponseEntity saveJarMetaData( @RequestParam(value = "job_name") String jobName, @ApiParam(value = "token", required = true) @RequestParam String token, + @ApiParam(value = "版本", required = true) + @RequestParam String version, @ApiParam(value = "pom文件", required = true) @RequestParam MultipartFile file) { - ciPipelineMavenService.createOrUpdate(nexusRepoId, jobId, sequence, gitlabPipelineId, jobName, token, file, mavenRepoUrl, username, password); + ciPipelineMavenService.createOrUpdate(nexusRepoId, jobId, sequence, gitlabPipelineId, jobName, token, file, mavenRepoUrl, username, password, version); return ResponseEntity.ok().build(); } diff --git a/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java b/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java index d4d1164816..0f91f3f975 100644 --- a/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/CiPipelineImageVO.java @@ -2,6 +2,8 @@ import javax.validation.constraints.NotNull; +import io.swagger.annotations.ApiParam; + /** * @author scp * @date 2020/7/21 @@ -20,6 +22,16 @@ public class CiPipelineImageVO { private Long harborRepoId; @NotNull private String repoType; + @ApiParam(value = "版本", required = true) + private String version; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } public String getToken() { return token; diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java index fd00ba7fcb..2f36a38cad 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -19,5 +19,8 @@ public interface AppServiceImageVersionService { AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); List listByAppVersionIds(Set versionIds); + + void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO); + } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java index a5ac5038a2..fc6cbab167 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -19,5 +19,8 @@ public interface AppServiceMavenVersionService { void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO); List listByAppVersionIds(Set versionIds); + + void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO); + } diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java index 9372ef6149..245153a27f 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java @@ -1,7 +1,5 @@ package io.choerodon.devops.app.service; -import org.apache.ibatis.annotations.Param; - import io.choerodon.devops.api.vo.CiPipelineImageVO; import io.choerodon.devops.api.vo.ImageRepoInfoVO; import io.choerodon.devops.infra.dto.CiPipelineImageDTO; diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java index 08e1ca0159..a13a8dc73f 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java @@ -14,8 +14,7 @@ public interface CiPipelineMavenService { /** * 存储jar包元数据 - * - * @param nexusRepoId 制品库id + * @param nexusRepoId 制品库id * @param jobId ci job 的id * @param sequence job的顺序 * @param gitlabPipelineId gitlab流水线id @@ -25,6 +24,7 @@ public interface CiPipelineMavenService { * @param mavenRepoUrl * @param username * @param password + * @param version */ void createOrUpdate(Long nexusRepoId, Long jobId, @@ -35,7 +35,8 @@ void createOrUpdate(Long nexusRepoId, MultipartFile file, String mavenRepoUrl, String username, - String password); + String password, + String version); CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlabPipelineId, String jobName); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java index cae9454994..872a7d16de 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -9,6 +9,7 @@ import io.choerodon.devops.app.service.AppServiceImageVersionService; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import io.choerodon.devops.infra.constant.ResourceCheckConstant; @@ -46,5 +47,11 @@ public AppServiceImageVersionDTO queryByAppServiceVersionId(Long appServiceVersi public List listByAppVersionIds(Set versionIds) { return appServiceImageVersionMapper.listByAppVersionIds(versionIds); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO) { + appServiceImageVersionMapper.updateByPrimaryKeySelective(appServiceImageVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java index fd44a5b73d..c58bbe7fe8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -48,5 +48,11 @@ public void create(AppServiceMavenVersionDTO appServiceMavenVersionDTO) { public List listByAppVersionIds(Set versionIds) { return appServiceMavenVersionMapper.listByAppVersionIds(versionIds); } + + @Override + @Transactional + public void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO) { + appServiceMavenVersionMapper.updateByPrimaryKeySelective(appServiceMavenVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 66a527cfdf..797ef73abc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -236,6 +236,12 @@ public void create(String image, } + /** + * 上传chart包到chartmuserm + * @param files + * @param devopsHelmConfigDTO + * @param repository + */ private void uploadChart(MultipartFile files, DevopsHelmConfigDTO devopsHelmConfigDTO, String repository) { MultiValueMap params = new LinkedMultiValueMap<>(); ByteArrayResource fileAsResource = null; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java index 11abf32c76..6778d7f7e0 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java @@ -9,11 +9,15 @@ import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.CiPipelineImageVO; import io.choerodon.devops.api.vo.ImageRepoInfoVO; +import io.choerodon.devops.app.service.AppServiceImageVersionService; import io.choerodon.devops.app.service.AppServiceService; +import io.choerodon.devops.app.service.AppServiceVersionService; import io.choerodon.devops.app.service.CiPipelineImageService; import io.choerodon.devops.infra.constant.MiscConstants; import io.choerodon.devops.infra.constant.ResourceCheckConstant; import io.choerodon.devops.infra.dto.AppServiceDTO; +import io.choerodon.devops.infra.dto.AppServiceImageVersionDTO; +import io.choerodon.devops.infra.dto.AppServiceVersionDTO; import io.choerodon.devops.infra.dto.CiPipelineImageDTO; import io.choerodon.devops.infra.dto.harbor.HarborRepoDTO; import io.choerodon.devops.infra.enums.DevopsRegistryRepoType; @@ -36,6 +40,10 @@ public class CiPipelineImageServiceImpl implements CiPipelineImageService { @Autowired private AppServiceService appServiceService; @Autowired + private AppServiceImageVersionService appServiceImageVersionService; + @Autowired + private AppServiceVersionService appServiceVersionService; + @Autowired private RdupmClientOperator rdupmClientOperator; @Transactional(rollbackFor = Exception.class) @@ -64,6 +72,27 @@ public void createOrUpdate(CiPipelineImageVO ciPipelineImageVO) { throw new CommonException("error.update.image.record"); } } + + // 如果流水线中还包含发布应用服务版本的步骤,还需要将镜像信息保存到版本记录表中 + AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQueryByAppServiceIdAndVersion(appServiceId, ciPipelineImageVO.getVersion()); + if (appServiceVersionDTO != null) { + AppServiceImageVersionDTO appServiceImageVersionDTO = appServiceImageVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + // 镜像版本不存在则创建,存在则更新 + if (appServiceImageVersionDTO == null) { + appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag()); + appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId()); + appServiceImageVersionDTO.setHarborRepoType(appServiceVersionDTO.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(appServiceVersionDTO.getHarborConfigId()); + appServiceImageVersionService.create(appServiceImageVersionDTO); + } else { + appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag()); + appServiceImageVersionDTO.setHarborRepoType(appServiceVersionDTO.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(appServiceVersionDTO.getHarborConfigId()); + appServiceImageVersionService.baseUpdate(appServiceImageVersionDTO); + } + } + }); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java index 9c29da405a..ea614c3d39 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java @@ -23,14 +23,9 @@ import retrofit2.Response; import io.choerodon.core.exception.CommonException; -import io.choerodon.devops.app.service.AppServiceService; -import io.choerodon.devops.app.service.CiPipelineMavenService; -import io.choerodon.devops.app.service.DevopsCiStepService; +import io.choerodon.devops.app.service.*; import io.choerodon.devops.infra.constant.ResourceCheckConstant; -import io.choerodon.devops.infra.dto.AppServiceDTO; -import io.choerodon.devops.infra.dto.CiPipelineMavenDTO; -import io.choerodon.devops.infra.dto.DevopsCiJobDTO; -import io.choerodon.devops.infra.dto.DevopsCiStepDTO; +import io.choerodon.devops.infra.dto.*; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.dto.maven.Server; import io.choerodon.devops.infra.dto.maven.Settings; @@ -69,6 +64,10 @@ public class CiPipelineMavenServiceImpl implements CiPipelineMavenService { private DevopsCiMavenSettingsMapper devopsCiMavenSettingsMapper; @Autowired private DevopsCiJobMapper devopsCiJobMapper; + @Autowired + private AppServiceMavenVersionService appServiceMavenVersionService; + @Autowired + private AppServiceVersionService appServiceVersionService; @Autowired private RdupmClient rdupmClient; @@ -104,7 +103,8 @@ public void createOrUpdate(Long nexusRepoId, MultipartFile file, String mavenRepoUrl, String username, - String password) { + String password, + String version) { ExceptionUtil.wrapExWithCiEx(() -> { AppServiceDTO appServiceDTO = appServiceService.baseQueryByToken(Objects.requireNonNull(token)); if (appServiceDTO == null) { @@ -182,6 +182,33 @@ public void createOrUpdate(Long nexusRepoId, } } createOrUpdate(ciPipelineMavenDTO); + // 判断流水线中是否包含发布应用服务版本步骤, + AppServiceVersionDTO appServiceVersionDTO = appServiceVersionService.baseQueryByAppServiceIdAndVersion(appServiceDTO.getId(), version); + if (appServiceVersionDTO != null) { + AppServiceMavenVersionDTO appServiceMavenVersionDTO = appServiceMavenVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); + if (appServiceMavenVersionDTO == null) { + appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId()); + appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion()); + appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword()); + appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl()); + appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername()); + appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId()); + appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId()); + appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId()); + appServiceMavenVersionService.create(appServiceMavenVersionDTO); + } else { + appServiceMavenVersionDTO.setVersion(ciPipelineMavenDTO.getVersion()); + appServiceMavenVersionDTO.setPassword(ciPipelineMavenDTO.getPassword()); + appServiceMavenVersionDTO.setMavenRepoUrl(ciPipelineMavenDTO.getMavenRepoUrl()); + appServiceMavenVersionDTO.setUsername(ciPipelineMavenDTO.getUsername()); + appServiceMavenVersionDTO.setNexusRepoId(ciPipelineMavenDTO.getNexusRepoId()); + appServiceMavenVersionDTO.setGroupId(ciPipelineMavenDTO.getGroupId()); + appServiceMavenVersionDTO.setArtifactId(ciPipelineMavenDTO.getArtifactId()); + appServiceMavenVersionService.baseUpdate(appServiceMavenVersionDTO); + } + } + }); } diff --git a/src/main/resources/shell/ci.sh b/src/main/resources/shell/ci.sh index 8a3231c28a..99ac91d82c 100644 --- a/src/main/resources/shell/ci.sh +++ b/src/main/resources/shell/ci.sh @@ -304,7 +304,8 @@ function saveImageMetadata() { \"jobName\": \"${CI_JOB_NAME}\", \"imageTag\": \"${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}\", \"harborRepoId\": ${HARBOR_CONFIG_ID}, - \"repoType\": \"${REPO_TYPE}\" + \"repoType\": \"${REPO_TYPE}\", + \"version\": \"${CI_COMMIT_TAG}\", }" \ -o "${CI_COMMIT_SHA}-ci.response" \ -w %{http_code}) @@ -332,6 +333,7 @@ function saveJarMetadata() { -F "sequence=$3" \ -F "gitlab_pipeline_id=${CI_PIPELINE_ID}" \ -F "job_name=${CI_JOB_NAME}" \ + -F "version=${CI_COMMIT_TAG}" \ -F "file=@pom.xml" \ "${CHOERODON_URL}/devops/ci/save_jar_metadata" \ -o "${CI_COMMIT_SHA}-ci.response" \ From 298a31cc5298627be2d05e5cbca0456b71ec414d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 16:16:37 +0800 Subject: [PATCH 097/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E4=B8=BB?= =?UTF-8?q?=E9=94=AE=E5=8A=A0=E5=AF=86=E6=B3=A8=E8=A7=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/vo/appversion/AppServiceHelmVersionVO.java | 8 +++++++- .../api/vo/appversion/AppServiceImageVersionVO.java | 5 ++++- .../api/vo/appversion/AppServiceMavenVersionVO.java | 5 ++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java index 1b2ae1102c..2edf98c240 100644 --- a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java @@ -1,6 +1,7 @@ package io.choerodon.devops.api.vo.appversion; import io.swagger.annotations.ApiModelProperty; +import org.hzero.starter.keyencrypt.core.Encrypt; /** * @author hao.wang@zknow.com @@ -8,19 +9,24 @@ */ public class AppServiceHelmVersionVO { - + @Encrypt private Long id; @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @Encrypt private Long appServiceVersionId; @ApiModelProperty(value = "配置Id", required = true) + @Encrypt private Long helmConfigId; @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) private String harborRepoType; @ApiModelProperty(value = "配置Id", required = true) + @Encrypt private Long harborConfigId; @ApiModelProperty(value = "参数 ID", required = true) + @Encrypt private Long valueId; @ApiModelProperty(value = "readme value id", required = true) + @Encrypt private Long readmeValueId; @ApiModelProperty(value = "镜像名", required = true) private String image; diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java index 2d80aec3dc..06e03c03a4 100644 --- a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceImageVersionVO.java @@ -1,6 +1,7 @@ package io.choerodon.devops.api.vo.appversion; import io.swagger.annotations.ApiModelProperty; +import org.hzero.starter.keyencrypt.core.Encrypt; /** * @author hao.wang@zknow.com @@ -8,13 +9,15 @@ */ public class AppServiceImageVersionVO { - + @Encrypt private Long id; @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @Encrypt private Long appServiceVersionId; @ApiModelProperty(value = "仓库类型(DEFAULT_REPO、CUSTOM_REPO)", required = true) private String harborRepoType; @ApiModelProperty(value = "配置Id", required = true) + @Encrypt private Long harborConfigId; @ApiModelProperty(value = "镜像名", required = true) private String image; diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java index 06089af8d9..6db97b402c 100644 --- a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceMavenVersionVO.java @@ -1,6 +1,7 @@ package io.choerodon.devops.api.vo.appversion; import io.swagger.annotations.ApiModelProperty; +import org.hzero.starter.keyencrypt.core.Encrypt; /** * @author hao.wang@zknow.com @@ -8,9 +9,10 @@ */ public class AppServiceMavenVersionVO { - + @Encrypt private Long id; @ApiModelProperty(value = "应用服务版本,devops_app_service_version.id", required = true) + @Encrypt private Long appServiceVersionId; @ApiModelProperty(value = "groupId", required = true) private String groupId; @@ -19,6 +21,7 @@ public class AppServiceMavenVersionVO { @ApiModelProperty(value = "版本", required = true) private String version; @ApiModelProperty(value = "nexus仓库id,hrds_prod_repo.rdupm_nexus_repository.repository_id") + @Encrypt private Long nexusRepoId; private String mavenRepoUrl; From 1af4e18cef7eb30ebb8a95b175eecef81c4b5638 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 18 Jul 2022 16:22:17 +0800 Subject: [PATCH 098/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E7=9A=84chart=E4=BF=A1=E6=81=AF=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 10 +++++++ .../app/service/DevopsHelmConfigService.java | 8 +++++ .../impl/DevopsHelmConfigServiceImpl.java | 29 +++++++++++++++++++ .../messages/messages_en_US.properties | 1 + .../messages/messages_zh_CN.properties | 3 +- 5 files changed, 50 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index 3de6027486..052b47a518 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -94,4 +94,14 @@ public ResponseEntity setDefaultHelmConfig(@ApiParam("项目id") helmConfigService.setDefaultDevopsHelmConfig(projectId, helmConfigId); return Results.success(); } + + @ApiOperation("获取chart的index内容并返回给前端") + @GetMapping("/{helm_config_id}/index") + @Permission(level = ResourceLevel.ORGANIZATION) + public ResponseEntity getIndexContent(@ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("仓库id") + @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { + return Results.success(helmConfigService.getIndexContent(projectId, helmConfigId)); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 68f8066018..c310520db2 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -112,4 +112,12 @@ public interface DevopsHelmConfigService { boolean checkNameExists(Long projectId, Long helmConfigId, String name); void checkNameExistsThrowEx(Long projectId, Long helmConfigId, String name); + + /** + * 获取chart仓库的index内容 + * @param projectId + * @param helmConfigId + * @return + */ + String getIndexContent(Long projectId, Long helmConfigId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 1ac18f3ed7..5d9800d26f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -5,9 +5,12 @@ import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.http.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.web.client.RestTemplate; import io.choerodon.core.exception.CommonException; import io.choerodon.core.iam.ResourceLevel; @@ -36,6 +39,10 @@ public class DevopsHelmConfigServiceImpl implements DevopsHelmConfigService { @Autowired private BaseServiceClientOperator baseServiceClientOperator; + @Autowired + @Qualifier(value = "restTemplateForIp") + private RestTemplate restTemplate; + @Override public List listHelmConfig(Long projectId) { List devopsHelmConfigDTOS = new ArrayList<>(); @@ -242,4 +249,26 @@ public void checkNameExistsThrowEx(Long projectId, Long helmConfigId, String nam throw new CommonException("error.helm.config.name.exists"); } } + + @Override + public String getIndexContent(Long projectId, Long helmConfigId) { + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectByPrimaryKey(helmConfigId); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + if (devopsHelmConfigDTO.getRepoPrivate()) { + String credentials = devopsHelmConfigDTO.getUsername() + ":" + + devopsHelmConfigDTO.getPassword(); + headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes())); + } + + HttpEntity requestEntity = new HttpEntity<>(headers); + + ResponseEntity exchange = restTemplate.exchange(devopsHelmConfigDTO.getUrl()+"/api/charts", HttpMethod.GET, requestEntity, String.class); + + if (!HttpStatus.OK.equals(exchange.getStatusCode())) { + throw new CommonException("error.get.helm.chart"); + } + return exchange.getBody(); + } } diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 1b157073f7..651e725160 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -928,3 +928,4 @@ error.helm.config.update=Failed to update helm config error.helm.config.insert=Failed to insert helm config error.helm.config.site.exist=The helm repo on site does not exist error.helm.config.name.exists=The name of helm repo already exists. +error.get.helm.chart=Failed to get chart info of helm repo. diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 2f3084febd..2b0deaba78 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -924,4 +924,5 @@ error.key-encrypt.decrypt.abnormal_content=页面失效,请重新访问首页 error.helm.config.update=更新helm仓库配置失败 error.helm.config.insert=插入helm仓库配置失败 error.helm.config.site.exist=平台层helm仓库配置不存在 -error.helm.config.name.exists=helm仓库名称已存在 \ No newline at end of file +error.helm.config.name.exists=helm仓库名称已存在 +error.get.helm.chart=获取helm仓库chart信息失败 \ No newline at end of file From b20d36a0d99910b1f3c40ced072acb0132fe6267 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 17:38:06 +0800 Subject: [PATCH 099/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9ci=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/shell/ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/shell/ci.sh b/src/main/resources/shell/ci.sh index 99ac91d82c..f0b5cdd256 100644 --- a/src/main/resources/shell/ci.sh +++ b/src/main/resources/shell/ci.sh @@ -305,7 +305,7 @@ function saveImageMetadata() { \"imageTag\": \"${DOCKER_REGISTRY}/${GROUP_NAME}/${PROJECT_NAME}:${CI_COMMIT_TAG}\", \"harborRepoId\": ${HARBOR_CONFIG_ID}, \"repoType\": \"${REPO_TYPE}\", - \"version\": \"${CI_COMMIT_TAG}\", + \"version\": \"${CI_COMMIT_TAG}\" }" \ -o "${CI_COMMIT_SHA}-ci.response" \ -w %{http_code}) From 1ad73548889672f616521bd0e49f34510a9fcf8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 17:48:03 +0800 Subject: [PATCH 100/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/AppServiceVersionMapper.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index 4e7fcf1eb6..e7b1d64fce 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -144,6 +144,7 @@ dav.last_update_date FROM devops_app_service_version dav + left join devops_app_service_helm_version dashv on dav.id = dashv.app_service_version_id JOIN devops_app_service_share_rule dassr ON dassr.app_service_id = dav.app_service_id AND ( @@ -162,7 +163,7 @@ - AND dav.repository IS NOT NULL + AND dashv.repository IS NOT NULL AND dav.`commit` IS NOT NULL From 334e6970bd9d79ef8598e23eda224565102d7bf6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 17:54:45 +0800 Subject: [PATCH 101/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E4=BF=9D?= =?UTF-8?q?=E5=AD=98=E9=95=9C=E5=83=8F=E7=89=88=E6=9C=AC=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/CiPipelineImageServiceImpl.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java index 6778d7f7e0..21af9672fb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java @@ -82,13 +82,13 @@ public void createOrUpdate(CiPipelineImageVO ciPipelineImageVO) { appServiceImageVersionDTO = new AppServiceImageVersionDTO(); appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag()); appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionDTO.getId()); - appServiceImageVersionDTO.setHarborRepoType(appServiceVersionDTO.getRepoType()); - appServiceImageVersionDTO.setHarborConfigId(appServiceVersionDTO.getHarborConfigId()); + appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageVO.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageVO.getHarborRepoId()); appServiceImageVersionService.create(appServiceImageVersionDTO); } else { appServiceImageVersionDTO.setImage(ciPipelineImageVO.getImageTag()); - appServiceImageVersionDTO.setHarborRepoType(appServiceVersionDTO.getRepoType()); - appServiceImageVersionDTO.setHarborConfigId(appServiceVersionDTO.getHarborConfigId()); + appServiceImageVersionDTO.setHarborRepoType(ciPipelineImageVO.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(ciPipelineImageVO.getHarborRepoId()); appServiceImageVersionService.baseUpdate(appServiceImageVersionDTO); } } From 60e38f1f2d6b04d7fa0fab50632d1e7a9f6b46f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 19:31:17 +0800 Subject: [PATCH 102/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/vo/appversion/AppServiceHelmVersionVO.java | 10 ++++++++++ .../app/service/impl/AppServiceVersionServiceImpl.java | 6 +++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java index 2edf98c240..5fbba9bb08 100644 --- a/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/appversion/AppServiceHelmVersionVO.java @@ -34,6 +34,16 @@ public class AppServiceHelmVersionVO { private String repository; @ApiModelProperty(value = "chart包名", required = true) private String chartName; + @ApiModelProperty("版本号") + private String version; + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } public String getChartName() { return chartName; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 797ef73abc..9993ce662d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -508,9 +508,7 @@ private void addVersionInfo(Long appServiceId, List appServ Map helmVersionMap = new HashMap<>(); List appServiceHelmVersionVOS = appServiceHelmVersionService.listByAppVersionIds(versionIds); if (!CollectionUtils.isEmpty(appServiceHelmVersionVOS)) { - helmVersionMap = appServiceHelmVersionVOS.stream() - .peek(v -> v.setChartName(appServiceDTO.getCode())) - .collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity())); + helmVersionMap = appServiceHelmVersionVOS.stream().collect(Collectors.toMap(AppServiceHelmVersionVO::getAppServiceVersionId, Function.identity())); } Map imageVersionMap = new HashMap<>(); List appServiceImageVersionVOS = appServiceImageVersionService.listByAppVersionIds(versionIds); @@ -532,6 +530,8 @@ private void addVersionInfo(Long appServiceId, List appServ Long appServiceVersionId = appServiceVersionVO.getId(); AppServiceHelmVersionVO appServiceHelmVersionVO = finalHelmVersionMap.get(appServiceVersionId); + appServiceHelmVersionVO.setChartName(appServiceDTO.getCode()); + appServiceHelmVersionVO.setVersion(appServiceVersionVO.getVersion()); AppServiceImageVersionVO appServiceImageVersionVO = finalImageVersionMap.get(appServiceVersionId); AppServiceMavenVersionVO appServiceMavenVersionVO = finalMavenVersionMap.get(appServiceVersionId); From 2f519ec70483116a22c51426213798c2c65331fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 19:38:06 +0800 Subject: [PATCH 103/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2values=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/AppServiceVersionMapper.xml | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index e7b1d64fce..f686f36f3d 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -115,14 +115,13 @@ SELECT davv.value - FROM devops_app_service_version dav, - left - join devops_app_service_helm_version dashv on dav.id = dashv.app_service_version_id + FROM devops_app_service_version dav + left join devops_app_service_helm_version dashv on dav.id = dashv.app_service_version_id left join devops_app_service_version_value davv on dashv.value_id = davv.id WHERE dav.value_id = davv.id AND dav.id = #{versionId} From 78f24b61144cd78aa413626234bdeb521ad1930c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 18 Jul 2022 20:41:12 +0800 Subject: [PATCH 106/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2values=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/AppServiceVersionMapper.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index b849e1f219..a5e8a99c83 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -119,8 +119,7 @@ FROM devops_app_service_version dav left join devops_app_service_helm_version dashv on dav.id = dashv.app_service_version_id left join devops_app_service_version_value davv on dashv.value_id = davv.id - WHERE dav.value_id = davv.id - AND dav.id = #{versionId} + WHERE dav.id = #{versionId} + + diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index a5e8a99c83..22a2049386 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -696,4 +696,23 @@ WHERE davall.version LIKE CONCAT(CONCAT('%', #{version}, '%')) + + + + diff --git a/src/main/resources/mapper/DevopsConfigMapper.xml b/src/main/resources/mapper/DevopsConfigMapper.xml index c525771b93..892b000743 100644 --- a/src/main/resources/mapper/DevopsConfigMapper.xml +++ b/src/main/resources/mapper/DevopsConfigMapper.xml @@ -145,4 +145,9 @@ WHERE id = #{configId} + \ No newline at end of file From 62f60f212b60c135af8afda4c00f1c2a5ecba86b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 19 Jul 2022 11:31:00 +0800 Subject: [PATCH 108/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=B1=82=E6=88=96=E7=BB=84=E7=BB=87=E5=B1=82=E7=9A=84?= =?UTF-8?q?helm=E4=BB=93=E5=BA=93=E5=90=8D=E7=A7=B0=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DevopsHelmConfigServiceImpl.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 5d9800d26f..e1953d0428 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -22,6 +22,7 @@ import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; import io.choerodon.devops.infra.dto.iam.IamUserDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; +import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.DevopsHelmConfigMapper; import io.choerodon.devops.infra.util.ConvertUtils; @@ -79,17 +80,21 @@ public List listHelmConfig(Long projectId) { helmConfigSearchDTOOnOrganization.setRepoDefault(true); DevopsHelmConfigDTO devopsHelmConfigDTOtOnOrganization = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnOrganization); if (devopsHelmConfigDTOtOnOrganization != null) { + Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); + devopsHelmConfigDTOtOnOrganization.setName(tenant.getTenantNum() + "-" + projectDTO.getCode()); devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOtOnOrganization); } else { // 如果组织层的仓库为空,查询平台默认 DevopsHelmConfigDTO helmConfigSearchDTOOnSite = new DevopsHelmConfigDTO(); helmConfigSearchDTOOnSite.setResourceType(ResourceLevel.SITE.value()); helmConfigSearchDTOOnSite.setRepoDefault(true); - DevopsHelmConfigDTO devopsHelmConfigDTOListOnSite = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnSite); - if (devopsHelmConfigDTOListOnSite == null) { + DevopsHelmConfigDTO devopsHelmConfigDTOOnSite = devopsHelmConfigMapper.selectOne(helmConfigSearchDTOOnSite); + if (devopsHelmConfigDTOOnSite == null) { throw new CommonException("error.helm.config.site.exist"); } - devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOListOnSite); + Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); + devopsHelmConfigDTOOnSite.setName(tenant.getTenantNum() + "-" + projectDTO.getCode()); + devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOOnSite); } if (defaultDevopsHelmConfigDTOOnProject != null) { @@ -264,7 +269,7 @@ public String getIndexContent(Long projectId, Long helmConfigId) { HttpEntity requestEntity = new HttpEntity<>(headers); - ResponseEntity exchange = restTemplate.exchange(devopsHelmConfigDTO.getUrl()+"/api/charts", HttpMethod.GET, requestEntity, String.class); + ResponseEntity exchange = restTemplate.exchange(devopsHelmConfigDTO.getUrl() + "/api/charts", HttpMethod.GET, requestEntity, String.class); if (!HttpStatus.OK.equals(exchange.getStatusCode())) { throw new CommonException("error.get.helm.chart"); From 923254c893529a3a52aa30b9b85e2bfdb2007215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 19 Jul 2022 11:46:46 +0800 Subject: [PATCH 109/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=B1=82=E6=88=96=E5=BA=94=E7=94=A8=E5=B1=82=E7=BB=91?= =?UTF-8?q?=E5=AE=9A=E7=9A=84=E9=BB=98=E8=AE=A4helm=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsCheckLogServiceImpl.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 036dfd0d94..67577c5954 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.google.common.base.Joiner; +import jdk.nashorn.internal.runtime.regexp.joni.encoding.IntHolder; import org.apache.commons.collections4.ListUtils; import org.hzero.core.base.BaseConstants; import org.hzero.mybatis.BatchInsertHelper; @@ -178,9 +179,6 @@ private void fixHelmConfig() { projectIds.addAll(devopsAppService.listProjectIdsByAppIds(appIds)); - List projectDTOList = baseServiceClientOperator.queryProjectsByIds(projectIds); - Map projectDTOMap = projectDTOList.stream().collect(Collectors.toMap(ProjectDTO::getId, Function.identity())); - List appServiceDTOList = devopsAppService.baseListByIds(new HashSet<>(appIds)); Map appServiceDTOMap = appServiceDTOList.stream().collect(Collectors.toMap(AppServiceDTO::getId, Function.identity())); @@ -221,21 +219,24 @@ private void fixHelmConfig() { devopsHelmConfigDTO.setResourceType(ResourceLevel.ORGANIZATION.value()); devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); }); + IntHolder index = new IntHolder(); + index.value = 1; // 项目层 - projectHelmConfig.forEach(c -> { + for (DevopsConfigDTO devopsConfigDTO : projectHelmConfig) { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); - devopsHelmConfigDTO.setId(c.getId()); - devopsHelmConfigDTO.setName(projectDTOMap.get(c.getProjectId()).getName()); - Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { + devopsHelmConfigDTO.setId(devopsConfigDTO.getId()); + devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); + Map helmConfig = JsonHelper.unmarshalByJackson(devopsConfigDTO.getConfig(), new TypeReference>() { }); devopsHelmConfigDTO.setUrl(helmConfig.get("url")); devopsHelmConfigDTO.setUsername(helmConfig.get("userName")); devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); - devopsHelmConfigDTO.setResourceId(c.getOrganizationId()); + devopsHelmConfigDTO.setResourceId(devopsConfigDTO.getOrganizationId()); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); + index.value++; devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); - }); + } // 应用层 appHelmConfig.forEach(c -> { @@ -243,7 +244,7 @@ private void fixHelmConfig() { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); - devopsHelmConfigDTO.setName(projectDTOMap.get(appServiceDTO.getProjectId()).getName()); + devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { }); devopsHelmConfigDTO.setUrl(helmConfig.get("url")); @@ -258,6 +259,7 @@ private void fixHelmConfig() { appServiceHelmRelDTO.setAppServiceId(appServiceDTO.getId()); appServiceHelmRelDTO.setHelmConfigId(c.getId()); + index.value++; appServiceHelmRelDTOToInsert.add(appServiceHelmRelDTO); }); From da2f4c44b2d506ad6c8667d07f5de5a79ec2bfcf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 19 Jul 2022 13:57:39 +0800 Subject: [PATCH 110/228] =?UTF-8?q?[IMP]=20=E4=B8=8B=E8=BD=BD=E4=B8=BB?= =?UTF-8?q?=E6=9C=BAc7n-agent=E5=91=BD=E4=BB=A4=E6=B7=BB=E5=8A=A0=E9=87=8D?= =?UTF-8?q?=E5=AE=9A=E5=90=91=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../devops/app/service/impl/DevopsHostServiceImpl.java | 2 +- src/main/resources/shell/host.sh | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 831e4cad2b..de5f4e61e2 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.3.RELEASE + 2.1.4-SNAPSHOT jar https://github.com/open-hand/devops-service diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java index 3b8bce1a01..67320a0b8a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostServiceImpl.java @@ -65,7 +65,7 @@ public class DevopsHostServiceImpl implements DevopsHostService { private static final String ERROR_HOST_STATUS_IS_NOT_DISCONNECT = "error.host.status.is.not.disconnect"; private static final String LOGIN_NAME = "loginName"; private static final String REAL_NAME = "realName"; - private static final String HOST_AGENT = "curl -o host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh %s"; + private static final String HOST_AGENT = "curl -L -o host.sh %s/devops/v1/projects/%d/hosts/%d/download_file/%s && sh host.sh %s"; private static final String HOST_UNINSTALL_SHELL = "sudo systemctl stop c7n-agent"; private static final String HOST_ACTIVATE_COMMAND_TEMPLATE; private static final String HOST_UPGRADE_COMMAND_TEMPLATE; diff --git a/src/main/resources/shell/host.sh b/src/main/resources/shell/host.sh index d01db7b205..314b0a4fc4 100644 --- a/src/main/resources/shell/host.sh +++ b/src/main/resources/shell/host.sh @@ -67,7 +67,7 @@ sudo chmod 0777 ${WORK_DIR}/c7n-agent.sh # 4. 下载执行程序 echo "Downloading c7n-agent" -curl -o ${TAR_FILE} "{{ BINARY }}" +curl -L -o ${TAR_FILE} "{{ BINARY }}" rm -rf /var/choerodon/c7n-agent From bb09b6b4dabab8c4123c6aa117b4b07da573286d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 19 Jul 2022 14:16:53 +0800 Subject: [PATCH 111/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E5=A4=8D=E6=A3=80?= =?UTF-8?q?=E6=9F=A5helm=E4=BB=93=E5=BA=93=E9=85=8D=E7=BD=AE=E5=90=8D?= =?UTF-8?q?=E7=A7=B0=E5=94=AF=E4=B8=80=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsCheckLogServiceImpl.java | 10 +++++----- src/main/resources/mapper/DevopsHelmConfigMapper.xml | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 67577c5954..7d871ca9e6 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -222,21 +222,21 @@ private void fixHelmConfig() { IntHolder index = new IntHolder(); index.value = 1; // 项目层 - for (DevopsConfigDTO devopsConfigDTO : projectHelmConfig) { + projectHelmConfig.forEach(c->{ DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); - devopsHelmConfigDTO.setId(devopsConfigDTO.getId()); + devopsHelmConfigDTO.setId(c.getId()); devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); - Map helmConfig = JsonHelper.unmarshalByJackson(devopsConfigDTO.getConfig(), new TypeReference>() { + Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { }); devopsHelmConfigDTO.setUrl(helmConfig.get("url")); devopsHelmConfigDTO.setUsername(helmConfig.get("userName")); devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); - devopsHelmConfigDTO.setResourceId(devopsConfigDTO.getOrganizationId()); + devopsHelmConfigDTO.setResourceId(c.getOrganizationId()); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); index.value++; devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); - } + }); // 应用层 appHelmConfig.forEach(c -> { diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index a339f9ca52..4cfa257f2e 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -29,7 +29,7 @@ WHERE resource_type = 'project' AND name = #{name} - AND resource_id = #{helmConfigId} + AND resource_id != #{helmConfigId} \ No newline at end of file From a6d494d9eedb1bff232f2b40ef960faea3fe863d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 19 Jul 2022 15:29:08 +0800 Subject: [PATCH 112/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC=E4=B8=AD=E9=95=9C?= =?UTF-8?q?=E5=83=8F=E8=BF=81=E7=A7=BB=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/AppServiceVersionService.java | 4 +++ .../impl/AppServiceVersionServiceImpl.java | 10 ++++++ .../impl/DevopsCheckLogServiceImpl.java | 36 +++++++++++++++++++ .../devops/app/task/DevopsFixDataTask.java | 15 ++++++++ .../mapper/AppServiceImageVersionMapper.java | 3 ++ .../infra/mapper/AppServiceVersionMapper.java | 9 +++++ .../mapper/AppServiceImageVersionMapper.xml | 10 ++++++ .../mapper/AppServiceVersionMapper.xml | 10 ++++++ 8 files changed, 97 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index 0c6672cb79..fab3ecf7d5 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -243,5 +243,9 @@ void create(String image, List listAllVersionsWithHelmConfig(); + List listAllVersionsWithHarborConfig(); + Integer queryCountVersionsWithHelmConfig(); + + Integer queryCountVersionsWithHarborConfig(); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 50a013441f..cbcdcb624e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -1148,11 +1148,21 @@ public List listAllVersionsWithHelmConfig() { return appServiceVersionMapper.listAllVersionsWithHelmConfig(); } + @Override + public List listAllVersionsWithHarborConfig() { + return appServiceVersionMapper.listAllVersionsWithHarborConfig(); + } + @Override public Integer queryCountVersionsWithHelmConfig() { return appServiceVersionMapper.queryCountVersionsWithHelmConfig(); } + @Override + public Integer queryCountVersionsWithHarborConfig() { + return appServiceVersionMapper.queryCountVersionsWithHarborConfig(); + } + private Set checkVersion(Long appServiceId, Set versionIds) { Set deleteErrorVersion = new HashSet<>(); AppServiceInstanceDTO appServiceInstanceDTO = new AppServiceInstanceDTO(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 7d871ca9e6..7e81682c1f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -54,6 +54,7 @@ public class DevopsCheckLogServiceImpl implements DevopsCheckLogService { public static final String FIX_APP_CENTER_DATA = "fixAppCenterData"; public static final String FIX_PIPELINE_DATA = "fixPipelineData"; public static final String FIX_HELM_REPO_DATA = "fixHelmRepoData"; + public static final String FIX_IMAGE_VERSION_DATA = "fixImageVersionData"; public static final String FIX_PIPELINE_MAVEN_PUBLISH_DATA = "fixPipelineMavenPublishData"; private static final String PIPELINE_CONTENT_FIX = "pipelineContentFix"; @@ -120,6 +121,9 @@ public class DevopsCheckLogServiceImpl implements DevopsCheckLogService { @Qualifier("appServiceVersionHelmConfigHelper") private BatchInsertHelper appServiceHelmVersionDTOBatchInsertHelper; + @Autowired + private AppServiceImageVersionMapper appServiceImageVersionMapper; + @Override @Transactional(rollbackFor = Exception.class) public void checkLog(String task) { @@ -150,6 +154,9 @@ public void checkLog(String task) { case FIX_HELM_REPO_DATA: fixHelmRepoDate(); break; + case FIX_IMAGE_VERSION_DATA: + fixImageVersionData(); + break; default: LOGGER.info("version not matched"); return; @@ -159,6 +166,35 @@ public void checkLog(String task) { devopsCheckLogMapper.insert(devopsCheckLogDTO); } + private void fixImageVersionData() { + int count = appServiceVersionService.queryCountVersionsWithHarborConfig(); + int pageSize = 500; + int total = (count + pageSize - 1) / pageSize; + int pageNumber = 0; + LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>end fix app version image record >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!"); + do { + LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>app version image record {}/{} >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!", pageNumber, total); + PageRequest pageRequest = new PageRequest(); + pageRequest.setPage(pageNumber); + pageRequest.setSize(pageSize); + List appServiceImageVersionDTOS = new ArrayList<>(); + + Page appServiceVersionDTOPage = PageHelper.doPage(pageRequest, () -> appServiceVersionService.listAllVersionsWithHarborConfig()); + appServiceVersionDTOPage.getContent().forEach(v -> { + AppServiceImageVersionDTO appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionDTO.setAppServiceVersionId(v.getId()); + appServiceImageVersionDTO.setHarborRepoType(v.getRepoType()); + appServiceImageVersionDTO.setHarborConfigId(v.getHarborConfigId()); + appServiceImageVersionDTO.setImage(v.getImage()); + appServiceImageVersionDTOS.add(appServiceImageVersionDTO); + }); + appServiceImageVersionMapper.batchInsert(appServiceImageVersionDTOS); + pageNumber++; + } while (pageNumber <= total); + LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>end fix app version helm config >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!"); + + } + private void fixHelmRepoDate() { fixHelmConfig(); } diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsFixDataTask.java b/src/main/java/io/choerodon/devops/app/task/DevopsFixDataTask.java index 89145668ef..fcd8d05e8e 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsFixDataTask.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsFixDataTask.java @@ -68,4 +68,19 @@ public void fixHelmRepoData(Map map) { } } + /** + * 迁移helm仓库的数据到新的表,以及应用版本与helm仓库的关联关系 + * + * @param map + */ + @JobTask(maxRetryCount = 3, code = FIX_IMAGE_VERSION_DATA, description = "迁移应用服务版本中镜像版本数据") + @TimedTask(name = FIX_IMAGE_VERSION_DATA, description = "迁移应用服务版本中镜像版本数据", repeatInterval = 1, repeatIntervalUnit = QuartzDefinition.SimpleRepeatIntervalUnit.HOURS, params = {}) + public void fixImageVersionData(Map map) { + try { + devopsCheckLogService.checkLog(FIX_IMAGE_VERSION_DATA); + } catch (Exception e) { + logger.error("error.fix.data", e); + } + } + } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java index 5d8781bea1..64990f2d41 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceImageVersionMapper.java @@ -17,5 +17,8 @@ */ public interface AppServiceImageVersionMapper extends BaseMapper { List listByAppVersionIds(@Param("versionIds") Set versionIds); + + void batchInsert(@Param("appServiceImageVersionDTOS") List appServiceImageVersionDTOS); + } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java index 7d63c50ff5..eb3a12ce68 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java @@ -128,4 +128,13 @@ List pageShareVersionByAppServiceIdAndVersion(@Param("appS List listAllVersionsWithHelmConfig(); Integer queryCountVersionsWithHelmConfig(); + + /** + * 临时方法,迁移应用服务版本使用,下一个版本可删除 + * @return + */ + Integer queryCountVersionsWithHarborConfig(); + + List listAllVersionsWithHarborConfig(); + } diff --git a/src/main/resources/mapper/AppServiceImageVersionMapper.xml b/src/main/resources/mapper/AppServiceImageVersionMapper.xml index 92d60f8cfc..d46939afef 100644 --- a/src/main/resources/mapper/AppServiceImageVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceImageVersionMapper.xml @@ -1,6 +1,16 @@ + + insert ignore into devops_app_service_image_version(app_service_version_id, harbor_repo_type, harbor_config_id, image) + values + + (#{version.appServiceVersionId}, + #{version.harborRepoType}, + #{version.harborConfigId}, + #{version.image}) + + + + From 63a15f6683e3b6527e0ef39bf85cde39a39b3a04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 19 Jul 2022 17:45:42 +0800 Subject: [PATCH 113/228] =?UTF-8?q?[IMP]=20=E5=88=A0=E9=99=A4=E6=97=A7?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/AppServiceVersionService.java | 4 - .../impl/AppServiceVersionServiceImpl.java | 126 -------------- .../infra/mapper/AppServiceVersionMapper.java | 37 ---- .../mapper/AppServiceVersionMapper.xml | 158 +----------------- 4 files changed, 8 insertions(+), 317 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java index fab3ecf7d5..3701e3e9ec 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceVersionService.java @@ -155,8 +155,6 @@ void create(String image, List baseQueryByCommitSha(Long appServiceId, String ref, String sha); - AppServiceVersionDTO baseQueryNewestVersion(Long appServiceId); - List baseListByAppServiceVersionIds(List appServiceServiceIds); List baseListByAppServiceIdAndBranch(Long appServiceId, String branch); @@ -203,8 +201,6 @@ void create(String image, void deleteByAppServiceId(Long appServiceId); - void fixHarbor(); - /** * 批量删除应用服务版本 * diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index cbcdcb624e..721a306e66 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -808,11 +808,6 @@ public List baseQueryByCommitSha(Long appServiceId, String return appServiceVersionMapper.queryByCommitSha(appServiceId, ref, sha); } - @Override - public AppServiceVersionDTO baseQueryNewestVersion(Long appServiceId) { - return appServiceVersionMapper.queryNewestVersion(appServiceId); - } - @Override public List baseListByAppServiceVersionIds(List appServiceServiceIds) { return appServiceVersionMapper.listByAppServiceVersionIds(appServiceServiceIds); @@ -914,70 +909,6 @@ public void deleteByAppServiceId(Long appServiceId) { } } - private Long queryDefaultHarborId() { - DevopsConfigDTO devopsConfigDTO = new DevopsConfigDTO(); - devopsConfigDTO.setName(MiscConstants.DEFAULT_HARBOR_NAME); - return devopsConfigMapper.selectOne(devopsConfigDTO).getId(); - } - - @Override - public void fixHarbor() { - //修复appVsersion表,register_secret表 - LOGGER.info("start fix appVsersion table"); - //根据appServiceID 进行分组 - - Long defaultHarborConfigId = queryDefaultHarborId(); - - LOGGER.info("Default harbor config id is {}", defaultHarborConfigId); - - List longList = appServiceVersionMapper.selectAllAppServiceIdWithNullHarborConfig(); - LOGGER.info("Start to fix null harbor config id versions. the app-service id size is {}", longList.size()); - for (Long appServiceId : longList) { - handlerVersion(appServiceId); - } - LOGGER.info("End to fix null harbor config id versions"); - - // 修harbor config id 非null的 - LOGGER.info("Start to fix default harbor config id versions"); - appServiceVersionMapper.updateDefaultHarborRecords(defaultHarborConfigId); - LOGGER.info("Finish to fix default harbor config id versions"); - - LOGGER.info("Start to fix non default harbor config id versions"); - appServiceVersionMapper.updateCustomHarborRecords(defaultHarborConfigId); - LOGGER.info("Finish to fix non default harbor config id versions"); - - LOGGER.info("end fix appVsersion table"); - LOGGER.info("start fix register_secret"); - int count = devopsRegistrySecretMapper.selectCount(null); - int pageSize = 100; - int total = (count + pageSize - 1) / pageSize; - int pageNumber = 0; - do { - PageRequest pageable = new PageRequest(); - pageable.setPage(pageNumber); - pageable.setSize(pageSize); - pageable.setSort(new Sort("id")); - Page doPageAndSort = PageHelper.doPageAndSort(PageRequestUtil.simpleConvertSortForPage(pageable), - () -> devopsRegistrySecretMapper.selectAll()); - if (!CollectionUtils.isEmpty(doPageAndSort.getContent())) { - for (DevopsRegistrySecretDTO devopsRegistrySecretDTO : doPageAndSort) { - DevopsConfigDTO devopsConfigDTO = devopsConfigMapper.selectByPrimaryKey(devopsRegistrySecretDTO.getConfigId()); - if (!Objects.isNull(devopsConfigDTO) && HARBOR_DEFAULT.equals(devopsConfigDTO.getName())) { - devopsRegistrySecretDTO.setConfigId(null); - devopsRegistrySecretDTO.setRepoType(DEFAULT_REPO); - devopsRegistrySecretMapper.updateByPrimaryKey(devopsRegistrySecretDTO); - } else { - devopsRegistrySecretDTO.setRepoType(CUSTOM_REPO); - devopsRegistrySecretMapper.updateByPrimaryKey(devopsRegistrySecretDTO); - } - } - } - pageNumber++; - } while (pageNumber <= total); - - LOGGER.info("end fix register_secret"); - } - @Override @Transactional @Saga(code = SagaTopicCodeConstants.DEVOPS_DELETE_APPLICATION_SERVICE_VERSION, inputSchemaClass = CustomResourceVO.class, description = "批量删除应用服务版本") @@ -1234,61 +1165,4 @@ private HarborImageTagDTO caculateHarborImageTagDTO(Long projectId, String image harborImageTagDTO.setProjectId(projectId); return harborImageTagDTO; } - - @Nullable - private DevopsConfigDTO queryConfigByAppServiceId(Long appServiceId) { - DevopsConfigDTO configDTO = new DevopsConfigDTO(); - configDTO.setAppServiceId(appServiceId); - return devopsConfigMapper.selectOne(configDTO); - } - - @Nullable - private DevopsConfigDTO queryConfigByProjectId(Long projectId) { - DevopsConfigDTO configDTO = new DevopsConfigDTO(); - configDTO.setProjectId(projectId); - return devopsConfigMapper.selectOne(configDTO); - } - - @Nullable - private DevopsConfigDTO queryConfigByOrgId(Long orgId) { - DevopsConfigDTO configDTO = new DevopsConfigDTO(); - configDTO.setOrganizationId(orgId); - return devopsConfigMapper.selectOne(configDTO); - } - - private void handlerVersion(Long appServiceId) { - LOGGER.info("fix app service id is {} data", appServiceId); - DevopsConfigDTO devopsConfigDTO = queryConfigByAppServiceId(appServiceId); - if (!Objects.isNull(devopsConfigDTO)) { - //自定义仓库 ,配置和appService一样 - LOGGER.info("Custom config {} found for app-service with id {} in app service", devopsConfigDTO.getId(), appServiceId); - appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId()); - } else { - // 找项目的 - AppServiceDTO appServiceDTO = appServiceMapper.selectByPrimaryKey(appServiceId); - if (!Objects.isNull(appServiceDTO)) { - devopsConfigDTO = queryConfigByProjectId(appServiceDTO.getProjectId()); - if (!Objects.isNull(devopsConfigDTO)) { - //自定义仓库 ,配置和project一样 - LOGGER.info("Custom config {} found for app-service with id {} in project with id {}", devopsConfigDTO.getId(), appServiceId, appServiceDTO.getProjectId()); - appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId()); - } else { - ProjectDTO projectDTO = baseServiceClientOperator.queryIamProjectById(appServiceDTO.getProjectId()); - if (!Objects.isNull(projectDTO)) { - devopsConfigDTO = queryConfigByOrgId(projectDTO.getOrganizationId()); - if (!Objects.isNull(devopsConfigDTO)) { - //自定义仓库 ,配置和Org一样 - LOGGER.info("Custom config {} found for app-service with id {} in organization with id {}", devopsConfigDTO.getId(), appServiceId, projectDTO.getOrganizationId()); - appServiceVersionMapper.updateNullHarborVersionToCustomType(appServiceId, devopsConfigDTO.getId()); - } else { - //默认仓库 - LOGGER.info("No custom config Found for app-service with id {}, set to default", appServiceId); - appServiceVersionMapper.updateNullHarborVersionToDefaultType(appServiceId); - } - } - } - } - - } - } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java index eb3a12ce68..fc18121eb5 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java @@ -41,33 +41,13 @@ List listByAppServiceIdAndVersion(@Param("appServiceId") L @Param("index") String index, @Param("version") String version); - List listByAppServiceVersionIdForMarket(@Param("appServiceId") Long appServiceId, - @Param("appServiceVersionIds") List appServiceVersionIds, - @Param("searchParam") Map map, - @Param("params") List params, - @Param("index") String index, - @Param("version") String version); - - List listByAppServiceVersionIdForMarketBatch(@Param("appServiceIds") List appServiceIds, - @Param("appServiceVersionIds") List appServiceVersionIds, - @Param("searchParam") Map map, - @Param("params") List params, - @Param("index") String index, - @Param("version") String version); - List listAppServiceDeployedVersion(@Param("projectId") Long projectId, @Param("appServiceId") Long appServiceId); - List listByPublished(@Param("applicationId") Long applicationId); - - List listByAppServiceIdAndVersionIds(@Param("applicationId") Long applicationId); - List listUpgradeVersion(@Param("appServiceServiceId") Long appServiceServiceId); Integer checkByProjectAndVersionId(@Param("projectId") Long projectId, @Param("appServiceServiceId") Long appServiceServiceId); - AppServiceVersionDTO queryNewestVersion(@Param("appServiceId") Long appServiceId); - List listByAppServiceVersionIds(@Param("appServiceServiceIds") List appServiceServiceIds); List listByAppServiceIdAndBranch(@Param("appServiceId") Long appServiceId, @Param("branch") String branch); @@ -76,15 +56,8 @@ List listAppServiceDeployedVersion(@Param("projectId") Lon String queryValueByAppServiceId(@Param("appServiceId") Long appServiceId); - void updateRepository(@Param("helmUrl") String url); - List queryByCommitSha(@Param("appServiceId") Long appServiceId, @Param("ref") String ref, @Param("commit") String commit); - - void updateObjectVersionNumber(@Param("versionId") Long versionId); - - void updatePublishTime(); - List listShareVersionByAppId(@Param("appServiceId") Long appServiceId, @Param("params") List params); @@ -113,16 +86,6 @@ List pageShareVersionByAppServiceIdAndVersion(@Param("appS AppServiceVersionDTO queryByShareVersion(@Param("appServiceId") Long appServiceId, @Param("projectId") Long projectId); - List selectAllAppServiceIdWithNullHarborConfig(); - - void updateNullHarborVersionToDefaultType(@Param("appServiceId") Long appServiceId); - - void updateNullHarborVersionToCustomType(@Param("appServiceId") Long appServiceId, @Param("configId") Long harborConfigId); - - void updateDefaultHarborRecords(@Param("defaultHarborId") Long defaultHarborId); - - void updateCustomHarborRecords(@Param("defaultHarborId") Long defaultHarborId); - AppServiceVersionDTO queryByCommitShaAndRef(@Param("appServiceId") Long appServiceId, @Param("commitSha") String commitSha, @Param("ref") String ref); List listAllVersionsWithHelmConfig(); diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index cd9195db23..b9d05a4f11 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -127,8 +127,9 @@ * FROM ( - (SELECT ver.id, ver.version, ver.creation_date,ver.repo_type,ver.last_update_date + (SELECT ver.id, ver.version, ver.creation_date,dashvt.harbor_repo_type as repo_type,ver.last_update_date FROM devops_app_service_version ver + left join devops_app_service_helm_version dashvt on ver.id = dashvt.app_service_version_id WHERE ver.id = #{appServiceVersionId,jdbcType=BIGINT}) UNION ALL @@ -137,7 +138,7 @@ dav.id, dav.version, dav.creation_date, - dav.repo_type, + dashv.harbor_repo_type as repo_type, dav.last_update_date FROM devops_app_service_version dav @@ -181,68 +182,6 @@ - - - - - - @@ -274,29 +213,6 @@ dav.id DESC - - - - - - - - - - update devops_app_service_version set repository = CONCAT(#{helmUrl},repository); - - - - update devops_app_service_version set object_version_number = 1 where id = #{versionId}; - - - - UPDATE devops_app_service_version dav - SET dav.publish_time = dav.last_update_date - WHERE - dav.is_publish = 1 - - - - - UPDATE - devops_app_service_version - SET harbor_config_id = NULL, - repo_type = 'DEFAULT_REPO' - WHERE harbor_config_id = #{defaultHarborId} - - - - UPDATE - devops_app_service_version - SET repo_type = 'CUSTOM_REPO' - WHERE harbor_config_id IS NOT NULL AND harbor_config_id != #{defaultHarborId} - - - - UPDATE - devops_app_service_version - SET repo_type = 'DEFAULT_REPO' - WHERE app_service_id = #{appServiceId,jdbcType=BIGINT} AND harbor_config_id IS NULL - - - - UPDATE - devops_app_service_version - SET repo_type = 'CUSTOM_REPO', - harbor_config_id = #{configId,jdbcType=BIGINT} - WHERE app_service_id = #{appServiceId,jdbcType=BIGINT} AND harbor_config_id IS NULL - - - - - SELECT DISTINCT ins.env_id, ins.app_service_id - FROM devops_app_service_instance ins - WHERE ins.status != 'deleted' - - - - + + + + \ No newline at end of file From 3c2cac6599c65a5a6583460db6fcbacdd61d827c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 20 Jul 2022 16:07:48 +0800 Subject: [PATCH 119/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/AppServiceVersionMapper.xml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index b9d05a4f11..476a887a6f 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -244,8 +244,9 @@ SELECT * FROM devops_app_service_version dav + left join devops_app_service_helm_version dashv on dashv.app_service_version_id = dav.id where 1=1 - AND dav.repository IS NOT NULL + AND dashv.repository IS NOT NULL AND dav.id in Date: Wed, 20 Jul 2022 16:10:06 +0800 Subject: [PATCH 120/228] =?UTF-8?q?[IMP]=20=E5=88=A0=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/mapper/AppServiceVersionMapper.java | 5 ---- .../mapper/AppServiceVersionMapper.xml | 23 ------------------- 2 files changed, 28 deletions(-) diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java index fc18121eb5..b571962fc3 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java @@ -15,11 +15,6 @@ */ public interface AppServiceVersionMapper extends BaseMapper { - List listByOptions( - @Param("appServiceId") Long appServiceId, - @Param("searchParam") Map searchParam, - @Param("params") List params); - List listAppNewestVersion(@Param("projectId") Long projectId, @Param("projectIds") List projectIds); diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index 476a887a6f..f02ad3c738 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -2,29 +2,6 @@ - - SELECT - * + dav.id, + dav.version, + dav.app_service_id, + dav.commit, + dav.ref, + dav.repository, + dav.object_version_number, + dav.created_by, + dav.creation_date, + dav.last_updated_by, + dav.last_update_date, + dashv.harbor_repo_type as repo_type, + dashv.helm_config_id, + dashv.harbor_config_id, + dashv.value_id, + dashv.readme_value_id, + dashv.image FROM - devops_app_service_version + devops_app_service_version dav + left join devops_app_service_helm_version dashv on dashv.app_service_version_id = dav.id WHERE - app_service_id = #{appServiceId} and commit is not null and version LIKE CONCAT(CONCAT('%', - #{branch, jdbcType=VARCHAR}),'%') - AND devops_app_service_version.repository IS NOT NULL - order by id desc limit - 10 + app_service_id = #{appServiceId} + and commit is not null + and version LIKE CONCAT(CONCAT('%',#{branch, jdbcType=VARCHAR}),'%') + AND dashv.repository IS NOT NULL + order by id desc + limit 10 @@ -263,8 +268,8 @@ davv.value FROM devops_app_service_version dav - LEFT JOIN devops_app_service_version_value davv - ON davv.id = dav.value_id + left join devops_app_service_helm_version dashv on dashv.app_service_version_id = dav.id + LEFT JOIN devops_app_service_version_value davv ON davv.id = dashv.value_id WHERE dav.app_service_id = #{appServiceId} ORDER BY dav.id DESC @@ -390,7 +395,9 @@ From 3b1a2967a5a0642c60b9f6c124dcff1cff241c08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 20 Jul 2022 16:44:31 +0800 Subject: [PATCH 122/228] =?UTF-8?q?[IMP]=20=E6=9F=A5=E8=AF=A2=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E8=AF=A6=E6=83=85=E6=B7=BB=E5=8A=A0=E7=BB=91=E5=AE=9A?= =?UTF-8?q?=E7=9A=84helm=E4=BB=93=E5=BA=93id?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/choerodon/devops/api/vo/AppServiceRepVO.java | 12 ++++++++++++ .../app/service/DevopsAppServiceHelmRelService.java | 5 +++++ .../app/service/impl/AppServiceServiceImpl.java | 10 +++------- .../impl/DevopsAppServiceHelmRelServiceImpl.java | 7 ++++++- .../infra/mapper/DevopsAppServiceHelmRelMapper.java | 2 ++ .../mapper/DevopsAppServiceHelmRelMapper.xml | 9 +++++++++ 6 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 src/main/resources/mapper/DevopsAppServiceHelmRelMapper.xml diff --git a/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java b/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java index 43fbf75222..9f744d6fda 100644 --- a/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/AppServiceRepVO.java @@ -142,6 +142,18 @@ public class AppServiceRepVO { @ApiModelProperty("用户权限等级") private Integer accessLevel; + @ApiModelProperty("helm仓库配置id") + @Encrypt + private Long helmConfigId; + + public Long getHelmConfigId() { + return helmConfigId; + } + + public void setHelmConfigId(Long helmConfigId) { + this.helmConfigId = helmConfigId; + } + public Long getExternalConfigId() { return externalConfigId; } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java b/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java index 9a76535814..8758f0406e 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsAppServiceHelmRelService.java @@ -1,5 +1,8 @@ package io.choerodon.devops.app.service; +import io.choerodon.devops.infra.dto.DevopsAppServiceHelmRelDTO; +import org.apache.ibatis.annotations.Param; + public interface DevopsAppServiceHelmRelService { /** @@ -21,4 +24,6 @@ public interface DevopsAppServiceHelmRelService { * @param helmConfigId */ void createRel(Long appServiceId, Long helmConfigId); + + DevopsAppServiceHelmRelDTO queryByAppServiceId(Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index f82d5aaa1c..09a34f4aab 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -353,13 +353,9 @@ public AppServiceRepVO query(Long projectId, Long appServiceId) { shareAppService = true; } AppServiceRepVO appServiceRepVO = dtoToRepVo(appServiceDTO); - List devopsConfigVOS = devopsConfigService.queryByResourceId(appServiceId, APP_SERVICE); - if (!devopsConfigVOS.isEmpty()) { - devopsConfigVOS.forEach(devopsConfigVO -> { - if (devopsConfigVO.getType().equals(CHART)) { - appServiceRepVO.setChart(devopsConfigVO); - } - }); + DevopsAppServiceHelmRelDTO devopsAppServiceHelmRelDTO = devopsAppServiceHelmRelService.queryByAppServiceId(appServiceId); + if (devopsAppServiceHelmRelDTO != null) { + appServiceRepVO.setHelmConfigId(devopsAppServiceHelmRelDTO.getHelmConfigId()); } //url地址拼接 if (appServiceDTO.getGitlabProjectId() != null && !shareAppService) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsAppServiceHelmRelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsAppServiceHelmRelServiceImpl.java index c749d8cd1b..76bf077877 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsAppServiceHelmRelServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsAppServiceHelmRelServiceImpl.java @@ -17,7 +17,7 @@ public class DevopsAppServiceHelmRelServiceImpl implements DevopsAppServiceHelmR @Override public void handleRel(Long appServiceId, Long helmConfigId) { deleteRelationByServiceId(appServiceId); - if (helmConfigId!=null){ + if (helmConfigId != null) { createRel(appServiceId, helmConfigId); } } @@ -36,4 +36,9 @@ public void createRel(Long appServiceId, Long helmConfigId) { devopsAppServiceHelmRelDTO.setHelmConfigId(helmConfigId); MapperUtil.resultJudgedInsertSelective(devopsAppServiceHelmRelMapper, devopsAppServiceHelmRelDTO, "error.app.service.helm.config.rel.insert"); } + + @Override + public DevopsAppServiceHelmRelDTO queryByAppServiceId(Long appServiceId) { + return devopsAppServiceHelmRelMapper.queryByAppServiceId(appServiceId); + } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsAppServiceHelmRelMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsAppServiceHelmRelMapper.java index 9b1e33bd3c..97b8d512c0 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsAppServiceHelmRelMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsAppServiceHelmRelMapper.java @@ -2,6 +2,8 @@ import io.choerodon.devops.infra.dto.DevopsAppServiceHelmRelDTO; import io.choerodon.mybatis.common.BaseMapper; +import org.apache.ibatis.annotations.Param; public interface DevopsAppServiceHelmRelMapper extends BaseMapper { + DevopsAppServiceHelmRelDTO queryByAppServiceId(@Param("appServiceId") Long appServiceId); } diff --git a/src/main/resources/mapper/DevopsAppServiceHelmRelMapper.xml b/src/main/resources/mapper/DevopsAppServiceHelmRelMapper.xml new file mode 100644 index 0000000000..bcc136aa6b --- /dev/null +++ b/src/main/resources/mapper/DevopsAppServiceHelmRelMapper.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file From fb8f32618589e506c140634e9253d059340405a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 20 Jul 2022 16:52:59 +0800 Subject: [PATCH 123/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=89=B9?= =?UTF-8?q?=E9=87=8F=E5=88=A0=E9=99=A4=E5=BA=94=E7=94=A8=E6=9C=8D=E5=8A=A1?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/AppServiceHelmVersionService.java | 2 ++ .../app/service/AppServiceImageVersionService.java | 1 + .../app/service/AppServiceMavenVersionService.java | 1 + .../service/impl/AppServiceHelmVersionServiceImpl.java | 10 ++++++++++ .../impl/AppServiceImageVersionServiceImpl.java | 10 ++++++++++ .../impl/AppServiceMavenVersionServiceImpl.java | 10 ++++++++++ .../app/service/impl/AppServiceVersionServiceImpl.java | 3 +++ 7 files changed, 37 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java index 463ed1c93f..4e007df3b8 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmVersionService.java @@ -19,5 +19,7 @@ public interface AppServiceHelmVersionService { AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersionId); void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO); + + void deleteByAppServiceVersionId(Long appServiceVersionId); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java index 2f36a38cad..9827982c53 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceImageVersionService.java @@ -22,5 +22,6 @@ public interface AppServiceImageVersionService { void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO); + void deleteByAppServiceVersionId(Long appServiceVersionId); } diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java index fc6cbab167..0e51c7e16f 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceMavenVersionService.java @@ -22,5 +22,6 @@ public interface AppServiceMavenVersionService { void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO); + void deleteByAppServiceVersionId(Long appServiceVersionId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java index 8122b9de79..63244ae2ea 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmVersionServiceImpl.java @@ -46,5 +46,15 @@ public AppServiceHelmVersionDTO queryByAppServiceVersionId(Long appServiceVersio public void create(AppServiceHelmVersionDTO appServiceHelmVersionDTO) { MapperUtil.resultJudgedInsertSelective(appServiceHelmVersionMapper, appServiceHelmVersionDTO, "error.save.helm.version"); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceHelmVersionDTO appServiceHelmVersionDTO = new AppServiceHelmVersionDTO(); + appServiceHelmVersionDTO.setAppServiceVersionId(appServiceVersionId); + appServiceHelmVersionMapper.delete(appServiceHelmVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java index 872a7d16de..6cce3d8dbb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceImageVersionServiceImpl.java @@ -53,5 +53,15 @@ public List listByAppVersionIds(Set versionIds) public void baseUpdate(AppServiceImageVersionDTO appServiceImageVersionDTO) { appServiceImageVersionMapper.updateByPrimaryKeySelective(appServiceImageVersionDTO); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceImageVersionDTO appServiceImageVersionDTO = new AppServiceImageVersionDTO(); + appServiceImageVersionDTO.setAppServiceVersionId(appServiceVersionId); + appServiceImageVersionMapper.delete(appServiceImageVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java index c58bbe7fe8..ac42d33cd4 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceMavenVersionServiceImpl.java @@ -54,5 +54,15 @@ public List listByAppVersionIds(Set versionIds) public void baseUpdate(AppServiceMavenVersionDTO appServiceMavenVersionDTO) { appServiceMavenVersionMapper.updateByPrimaryKeySelective(appServiceMavenVersionDTO); } + + @Override + public void deleteByAppServiceVersionId(Long appServiceVersionId) { + Assert.notNull(appServiceVersionId, ResourceCheckConstant.ERROR_SERVICE_VERSION_ID_IS_NULL); + + AppServiceMavenVersionDTO appServiceMavenVersionDTO = new AppServiceMavenVersionDTO(); + appServiceMavenVersionDTO.setAppServiceVersionId(appServiceVersionId); + appServiceMavenVersionMapper.delete(appServiceMavenVersionDTO); + + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index e7dcfdf53a..69bdabc46a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -935,6 +935,9 @@ public void batchDelete(Long projectId, Long appServiceId, Set versionIds) deleteChartTags.add(chartTagVO); // 删除应用服务版本 + appServiceHelmVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId()); + appServiceImageVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId()); + appServiceMavenVersionService.deleteByAppServiceVersionId(appServiceVersionDTO.getId()); appServiceVersionMapper.deleteByPrimaryKey(appServiceVersionDTO.getId()); }); CustomResourceVO customResourceVO = new CustomResourceVO(); From 743c8dfd8251cf1609d6836d1c7224c81b04ff27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 20 Jul 2022 17:11:21 +0800 Subject: [PATCH 124/228] =?UTF-8?q?[IMP]=20=E4=BC=98=E5=8C=96=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=B1=82=E6=B7=BB=E5=8A=A0=E6=9F=A5=E8=AF=A2helm?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/controller/v1/DevopsHelmConfigController.java | 7 +++++-- .../devops/app/service/DevopsHelmConfigService.java | 5 ++++- .../app/service/impl/DevopsHelmConfigServiceImpl.java | 10 +++++++++- .../devops/infra/mapper/DevopsHelmConfigMapper.java | 2 ++ src/main/resources/mapper/DevopsHelmConfigMapper.xml | 8 ++++++++ 5 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index fddaac5032..d7c975b8b4 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -35,8 +35,11 @@ public ResponseEntity> listHelmConfig( @GetMapping("/app/list") public ResponseEntity> listHelmConfigOnApp( @ApiParam("项目id") - @PathVariable("project_id") Long projectId) { - return Results.success(helmConfigService.listHelmConfigOnApp(projectId)); + @PathVariable("project_id") Long projectId, + @ApiParam("项目id") + @Encrypt + @RequestParam("app_service_id") Long appServiceId) { + return Results.success(helmConfigService.listHelmConfigOnApp(projectId, appServiceId)); } @ApiOperation("查询helm仓库") diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 855a8f7321..8e0cc45bf5 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -115,6 +115,7 @@ public interface DevopsHelmConfigService { /** * 获取chart仓库的index内容 + * * @param projectId * @param helmConfigId * @return @@ -123,8 +124,10 @@ public interface DevopsHelmConfigService { /** * 应用层查询helm仓库配置列表 + * * @param projectId + * @param appServiceId * @return */ - List listHelmConfigOnApp(Long projectId); + List listHelmConfigOnApp(Long projectId, Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index b4224983ec..44a2466040 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -281,7 +281,7 @@ public String getIndexContent(Long projectId, Long helmConfigId) { @Override - public List listHelmConfigOnApp(Long projectId) { + public List listHelmConfigOnApp(Long projectId, Long appServiceId) { List devopsHelmConfigDTOS = new ArrayList<>(); // 查询项目层设置helm仓库 @@ -337,6 +337,14 @@ public List listHelmConfigOnApp(Long projectId) { devopsHelmConfigDTOS.add(0, defaultDevopsHelmConfigDTOOnProject); } + if (appServiceId != null) { + DevopsHelmConfigDTO devopsHelmConfigDTORelatedWithAppService = devopsHelmConfigMapper.selectWithIdAndNameByAppServiceId(appServiceId); + List helmConfigIds = devopsHelmConfigDTOS.stream().map(DevopsHelmConfigDTO::getId).collect(Collectors.toList()); + if (devopsHelmConfigDTORelatedWithAppService != null && !helmConfigIds.contains(devopsHelmConfigDTORelatedWithAppService.getId())) { + devopsHelmConfigDTOS.add(0, devopsHelmConfigDTORelatedWithAppService); + } + } + return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java index f5ab463502..1c68665412 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -19,4 +19,6 @@ public interface DevopsHelmConfigMapper extends BaseMapper List listHelmConfigWithIdAndName(@Param("resourceId") Long resourceId, @Param("resourceType") String resourceType); DevopsHelmConfigDTO selectOneWithIdAndName(@Param("resourceId") Long resourceId, @Param("resourceType") String resourceType, @Param("defaultRepo") Boolean defaultRepo); + + DevopsHelmConfigDTO selectWithIdAndNameByAppServiceId(Long appServiceId); } diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index e26ecc2f19..aefdce004f 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -47,4 +47,12 @@ AND resource_type = #{resourceType} AND repo_default = #{defaultRepo} + + \ No newline at end of file From a6f0e7257f46055836807cef665d0870ea2d699d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Wed, 20 Jul 2022 17:22:30 +0800 Subject: [PATCH 125/228] =?UTF-8?q?[IMP]=20=E5=AE=8C=E5=96=84=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=B5=81=E6=B0=B4=E7=BA=BF=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CiPipelineAppVersionService.java | 2 + .../app/service/CiPipelineImageService.java | 2 + .../app/service/CiPipelineMavenService.java | 2 + .../service/DevopsCiPipelineChartService.java | 1 + .../impl/CiPipelineAppVersionServiceImpl.java | 11 + .../impl/CiPipelineImageServiceImpl.java | 10 + .../impl/CiPipelineMavenServiceImpl.java | 10 + .../service/impl/DevopsCiJobServiceImpl.java | 10 +- .../DevopsCiPipelineChartServiceImpl.java | 11 + .../impl/DevopsCiPipelineServiceImpl.java | 260 +----------------- 10 files changed, 73 insertions(+), 246 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java index 523a47c268..5f1dd53ede 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineAppVersionService.java @@ -15,5 +15,7 @@ CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId, String jobName); void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO); + + void deleteByAppServiceId(Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java index 245153a27f..e1a60b8d24 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineImageService.java @@ -20,4 +20,6 @@ public interface CiPipelineImageService { ImageRepoInfoVO queryImageRepoInfo(String token, Long gitlabPipelineId); CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId); + + void deleteByAppServiceId(Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java index a13a8dc73f..999b3706b5 100644 --- a/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java +++ b/src/main/java/io/choerodon/devops/app/service/CiPipelineMavenService.java @@ -41,4 +41,6 @@ void createOrUpdate(Long nexusRepoId, CiPipelineMavenDTO queryByGitlabPipelineId(Long appServiceId, Long gitlabPipelineId, String jobName); CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitlabPipelineId); + + void deleteByAppServiceId(Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java index eaa46c62eb..b6db3d83ee 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsCiPipelineChartService.java @@ -14,5 +14,6 @@ public interface DevopsCiPipelineChartService { void baseCreate(DevopsCiPipelineChartDTO devopsCiPipelineChartDTO); + void deleteByAppServiceId(Long appServiceId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java index 5b43033af5..b2edbb21bd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineAppVersionServiceImpl.java @@ -2,6 +2,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import io.choerodon.devops.app.service.CiPipelineAppVersionService; @@ -39,5 +40,15 @@ public CiPipelineAppVersionDTO queryByPipelineIdAndJobName(Long appServiceId, Lo public void baseCreate(CiPipelineAppVersionDTO ciPipelineAppVersionDTO) { MapperUtil.resultJudgedInsertSelective(ciPipelineAppVersionMapper, ciPipelineAppVersionDTO, "error.save.app.version"); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceId(Long appServiceId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + + CiPipelineAppVersionDTO ciPipelineAppVersionDTO = new CiPipelineAppVersionDTO(); + ciPipelineAppVersionDTO.setAppServiceVersionId(appServiceId); + ciPipelineAppVersionMapper.delete(ciPipelineAppVersionDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java index 21af9672fb..61f9d7b4c9 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineImageServiceImpl.java @@ -180,6 +180,16 @@ public CiPipelineImageDTO queryPipelineLatestImage(Long appServiceId, Long gitla return ciPipelineImageMapper.queryPipelineLatestImage(appServiceId, gitlabPipelineId); } + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceId(Long appServiceId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + + CiPipelineImageDTO ciPipelineImageDTO = new CiPipelineImageDTO(); + ciPipelineImageDTO.setAppServiceId(appServiceId); + ciPipelineImageMapper.delete(ciPipelineImageDTO); + } + private String trimPrefix(String dockerRegistry) { String dockerUrl = dockerRegistry.replace("http://", "").replace("https://", ""); return dockerUrl.endsWith("/") ? dockerUrl.substring(0, dockerUrl.length() - 1) : dockerUrl; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java index ea614c3d39..67fc6032cc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/CiPipelineMavenServiceImpl.java @@ -315,4 +315,14 @@ public CiPipelineMavenDTO queryPipelineLatestImage(Long appServiceId, Long gitla return ciPipelineMavenMapper.queryPipelineLatestMaven(appServiceId, gitlabPipelineId); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceId(Long appServiceId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + + CiPipelineMavenDTO ciPipelineMavenDTO = new CiPipelineMavenDTO(); + ciPipelineMavenDTO.setAppServiceId(appServiceId); + ciPipelineMavenMapper.delete(ciPipelineMavenDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiJobServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiJobServiceImpl.java index 1f56fb0d71..2746e75fa1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiJobServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiJobServiceImpl.java @@ -264,8 +264,16 @@ public void deleteByPipelineId(Long ciPipelineId) { throw new CommonException(ERROR_PIPELINE_ID_IS_NULL); } + List devopsCiJobDTOS = listByPipelineId(ciPipelineId); + if (CollectionUtils.isEmpty(devopsCiJobDTOS)) { + return; + } + List jobIds = devopsCiJobDTOS.stream().map(DevopsCiJobDTO::getId).collect(Collectors.toList()); // 删除maven settings - deleteMavenSettingsRecordByJobIds(listByPipelineId(ciPipelineId).stream().map(DevopsCiJobDTO::getId).collect(Collectors.toList())); + deleteMavenSettingsRecordByJobIds(jobIds); + + // 删除步骤 + devopsCiStepService.deleteByJobIds(jobIds); DevopsCiJobDTO devopsCiJobDTO = new DevopsCiJobDTO(); devopsCiJobDTO.setCiPipelineId(ciPipelineId); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineChartServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineChartServiceImpl.java index 882f4b3f6c..a130db0251 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineChartServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineChartServiceImpl.java @@ -42,5 +42,16 @@ public DevopsCiPipelineChartDTO queryByPipelineIdAndJobName(Long appServiceId, L public void baseCreate(DevopsCiPipelineChartDTO devopsCiPipelineChartDTO) { MapperUtil.resultJudgedInsertSelective(devopsCiPipelineChartMapper, devopsCiPipelineChartDTO, "error.save.chart.info"); } + + @Override + @Transactional(rollbackFor = Exception.class) + public void deleteByAppServiceId(Long appServiceId) { + Assert.notNull(appServiceId, ResourceCheckConstant.ERROR_APP_SERVICE_ID_IS_NULL); + + DevopsCiPipelineChartDTO devopsCiPipelineChartDTO = new DevopsCiPipelineChartDTO(); + devopsCiPipelineChartDTO.setAppServiceId(appServiceId); + + devopsCiPipelineChartMapper.delete(devopsCiPipelineChartDTO); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java index b1b6a88c15..9e68a0a1f5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCiPipelineServiceImpl.java @@ -114,12 +114,9 @@ public class DevopsCiPipelineServiceImpl implements DevopsCiPipelineService { private final UserAttrService userAttrService; private final AppServiceService appServiceService; private final DevopsCiJobRecordService devopsCiJobRecordService; - private final DevopsCiMavenSettingsMapper devopsCiMavenSettingsMapper; private final DevopsProjectService devopsProjectService; private final BaseServiceClientOperator baseServiceClientOperator; - private final RdupmClientOperator rdupmClientOperator; private final CheckGitlabAccessLevelService checkGitlabAccessLevelService; - private final DevopsConfigService devopsConfigService; private final PermissionHelper permissionHelper; private final AppServiceMapper appServiceMapper; private final CiCdPipelineMapper ciCdPipelineMapper; @@ -181,6 +178,14 @@ public class DevopsCiPipelineServiceImpl implements DevopsCiPipelineService { private CiDockerAuthConfigService ciDockerAuthConfigService; @Autowired private CiPipelineScheduleService ciPipelineScheduleService; + @Autowired + private DevopsCiPipelineChartService devopsCiPipelineChartService; + @Autowired + private CiPipelineMavenService ciPipelineMavenService; + @Autowired + private CiPipelineImageService ciPipelineImageService; + @Autowired + private CiPipelineAppVersionService ciPipelineAppVersionService; public DevopsCiPipelineServiceImpl( @@ -196,11 +201,8 @@ public DevopsCiPipelineServiceImpl( CheckGitlabAccessLevelService checkGitlabAccessLevelService, @Lazy AppServiceService appServiceService, DevopsCiJobRecordService devopsCiJobRecordService, - DevopsCiMavenSettingsMapper devopsCiMavenSettingsMapper, DevopsProjectService devopsProjectService, BaseServiceClientOperator baseServiceClientOperator, - RdupmClientOperator rdupmClientOperator, - DevopsConfigService devopsConfigService, PermissionHelper permissionHelper, AppServiceMapper appServiceMapper, CiCdPipelineMapper ciCdPipelineMapper, @@ -222,11 +224,8 @@ public DevopsCiPipelineServiceImpl( this.userAttrService = userAttrService; this.appServiceService = appServiceService; this.devopsCiJobRecordService = devopsCiJobRecordService; - this.devopsCiMavenSettingsMapper = devopsCiMavenSettingsMapper; this.baseServiceClientOperator = baseServiceClientOperator; this.devopsProjectService = devopsProjectService; - this.rdupmClientOperator = rdupmClientOperator; - this.devopsConfigService = devopsConfigService; this.checkGitlabAccessLevelService = checkGitlabAccessLevelService; this.permissionHelper = permissionHelper; this.appServiceMapper = appServiceMapper; @@ -242,30 +241,6 @@ public DevopsCiPipelineServiceImpl( this.devopsCiJobMapper = devopsCiJobMapper; } - private static String buildSettings(List mavenRepoList) { - List servers = new ArrayList<>(); - List repositories = new ArrayList<>(); - - mavenRepoList.forEach(m -> { - if (m.getType() != null) { - String[] types = m.getType().split(GitOpsConstants.COMMA); - if (types.length > 2) { - throw new CommonException(ERROR_CI_MAVEN_REPOSITORY_TYPE, m.getType()); - } - } - if (Boolean.TRUE.equals(m.getPrivateRepo())) { - servers.add(new Server(Objects.requireNonNull(m.getName()), Objects.requireNonNull(m.getUsername()), Objects.requireNonNull(m.getPassword()))); - } - repositories.add(new Repository( - Objects.requireNonNull(m.getName()), - Objects.requireNonNull(m.getName()), - Objects.requireNonNull(m.getUrl()), - m.getType() == null ? null : new RepositoryPolicy(m.getType().contains(GitOpsConstants.RELEASE)), - m.getType() == null ? null : new RepositoryPolicy(m.getType().contains(GitOpsConstants.SNAPSHOT)))); - }); - return MavenSettingsUtil.generateMavenSettings(servers, repositories); - } - /** * 第一次创建CI流水线时初始化仓库下的.gitlab-ci.yml文件 * @@ -616,14 +591,6 @@ private void saveCiPipeline(Long projectId, CiCdPipelineVO ciCdPipelineVO, CiCdP }); } }); -// AppServiceDTO appServiceDTO = appServiceService.baseQuery(ciCdPipelineDTO.getAppServiceId()); -// String ciFileIncludeUrl = String.format(GitOpsConstants.CI_CONTENT_URL_TEMPLATE, gatewayUrl, projectId, ciCdPipelineDTO.getToken()); -// if (appServiceDTO.getExternalConfigId() != null) { -// AppExternalConfigDTO appExternalConfigDTO = appExternalConfigService.baseQueryWithPassword(appServiceDTO.getExternalConfigId()); -// ciCdPipelineVO.getRelatedBranches().forEach(branch -> initExternalGitlabCiFile(appServiceDTO.getGitlabProjectId(), branch, ciFileIncludeUrl, appExternalConfigDTO)); -// } else { -// ciCdPipelineVO.getRelatedBranches().forEach(branch -> initGitlabCiFile(appServiceDTO.getGitlabProjectId(), branch, ciFileIncludeUrl)); -// } } } @@ -1001,6 +968,7 @@ public void deletePipeline(Long projectId, Long pipelineId) { CommonExAssertUtil.assertTrue(projectId.equals(ciCdPipelineDTO.getProjectId()), MiscConstants.ERROR_OPERATING_RESOURCE_IN_OTHER_PROJECT); checkGitlabAccessLevelService.checkGitlabPermission(projectId, ciCdPipelineDTO.getAppServiceId(), AppServiceEvent.CICD_PIPELINE_DELETE); AppServiceDTO appServiceDTO = appServiceService.baseQuery(ciCdPipelineDTO.getAppServiceId()); + // 删除流水线 if (ciCdPipelineMapper.deleteByPrimaryKey(pipelineId) != 1) { throw new CommonException(DELETE_PIPELINE_FAILED); @@ -1018,6 +986,12 @@ public void deletePipeline(Long projectId, Long pipelineId) { // 删除 ci job记录 devopsCiJobRecordService.deleteByAppServiceId(appServiceDTO.getId()); + // 删除流水线相关产物 + devopsCiPipelineChartService.deleteByAppServiceId(appServiceDTO.getId()); + ciPipelineImageService.deleteByAppServiceId(appServiceDTO.getId()); + ciPipelineMavenService.deleteByAppServiceId(appServiceDTO.getId()); + ciPipelineAppVersionService.deleteByAppServiceId(appServiceDTO.getId()); + // 删除pipeline记录 devopsCiPipelineRecordService.deleteByPipelineId(pipelineId); @@ -1721,46 +1695,6 @@ private void updateCiPipeline(Long projectId, CiCdPipelineVO ciCdPipelineVO, CiC } } -// private void processCiJobVO(DevopsCiJobVO devopsCiJobVO) { -// // 不让数据库存加密的值 -// if (JobTypeEnum.BUILD.value().equals(devopsCiJobVO.getType())) { -// // 将构建类型的stage中的job的每个step进行解析和转化 -// CiConfigVO ciConfigVO = JSONObject.parseObject(devopsCiJobVO.getMetadata(), CiConfigVO.class); -// if (!CollectionUtils.isEmpty(ciConfigVO.getConfig())) { -// ciConfigVO.getConfig().forEach(c -> { -// if (!org.springframework.util.ObjectUtils.isEmpty(c.getScript())) { -// c.setScript(Base64Util.getBase64DecodedString(c.getScript())); -// } -// }); -// } -// devopsCiJobVO.setConfigVO(ciConfigVO); -// devopsCiJobVO.setMetadata(JSONObject.toJSONString(ciConfigVO)); -// } -// } - -// private void saveCiContent(final Long projectId, final Long organizationId, Long pipelineId, CiCdPipelineVO ciCdPipelineVO) { -// GitlabCi gitlabCi = buildGitLabCiObject(projectId, organizationId, ciCdPipelineVO); -// StringBuilder gitlabCiYaml = new StringBuilder(GitlabCiUtil.gitlabCi2yaml(gitlabCi)); -// -// // 拼接自定义job -// if (!CollectionUtils.isEmpty(ciCdPipelineVO.getDevopsCiStageVOS())) { -// List ciJobVOS = ciCdPipelineVO.getDevopsCiStageVOS().stream() -// .flatMap(v -> v.getJobList().stream()).filter(job -> JobTypeEnum.CUSTOM.value().equalsIgnoreCase(job.getType())) -// .collect(Collectors.toList()); -// if (!CollectionUtils.isEmpty(ciJobVOS)) { -// for (DevopsCiJobVO job : ciJobVOS) { -// gitlabCiYaml.append(GitOpsConstants.NEW_LINE).append(job.getMetadata()); -// } -// } -// -// } -// -// //保存gitlab-ci配置文件 -// DevopsCiContentDTO devopsCiContentDTO = new DevopsCiContentDTO(); -// devopsCiContentDTO.setCiPipelineId(pipelineId); -// devopsCiContentDTO.setCiContentFile(gitlabCiYaml.toString()); -// devopsCiContentService.create(devopsCiContentDTO); -// } /** * 构建gitlab-ci对象,用于转换为gitlab-ci.yaml @@ -1858,92 +1792,6 @@ private GitlabCi buildGitLabCiObject(CiCdPipelineDTO ciCdPipelineDTO) { return gitlabCi; } -// /** -// * 构建gitlab-ci对象,用于转换为gitlab-ci.yaml -// * -// * @param projectId 项目id -// * @param ciCdPipelineVO 流水线数据 -// * @return 构建完的CI文件对象 -// */ -// private GitlabCi buildGitLabCiObject(final Long projectId, final Long organizationId, CiCdPipelineVO ciCdPipelineVO) { -// // 对阶段排序 -// List stages = ciCdPipelineVO.getDevopsCiStageVOS().stream() -// .sorted(Comparator.comparing(DevopsCiStageVO::getSequence)) -// .map(DevopsCiStageVO::getName) -// .collect(Collectors.toList()); -// -// GitlabCi gitlabCi = new GitlabCi(); -// -// // 如果用户指定了就使用用户指定的,如果没有指定就使用默认的猪齿鱼提供的镜像 -// gitlabCi.setImage(ObjectUtils.isEmpty(ciCdPipelineVO.getImage()) ? defaultCiImage : ciCdPipelineVO.getImage()); -// -// gitlabCi.setStages(stages); -// ciCdPipelineVO.getDevopsCiStageVOS().forEach(stageVO -> { -// if (!CollectionUtils.isEmpty(stageVO.getJobList())) { -// stageVO.getJobList().forEach(job -> { -// if (CiJobTypeEnum.CUSTOM.value().equals(job.getType())) { -// return; -// } -// CiJob ciJob = new CiJob(); -// if (StringUtils.isNoneBlank(job.getImage())) { -// ciJob.setImage(job.getImage()); -// } -// ciJob.setStage(stageVO.getName()); -// ciJob.setParallel(job.getParallel()); -// //增加afterScript -//// ciJob.setAfterScript(buildAfterScript(job)); -// //增加services -// CiJobServices ciJobServices = buildServices(job); -// ciJob.setServices(Objects.isNull(ciJobServices) ? null : ArrayUtil.singleAsList(ciJobServices)); -// ciJob.setScript(buildScript(Objects.requireNonNull(organizationId), projectId, job)); -// ciJob.setCache(buildJobCache(job)); -// processOnlyAndExcept(job, ciJob); -// gitlabCi.addJob(job.getName(), ciJob); -// }); -// } -// }); -// buildBeforeScript(gitlabCi, ciCdPipelineVO.getVersionName()); -// return gitlabCi; -// } - -// private List buildAfterScript(DevopsCiJobVO jobVO) { -// List afterScript = new ArrayList<>(); -// if (isContainDokcerBuild(jobVO)) { -// afterScript.add("rm -rf /${CI_PROJECT_NAMESPACE}-${CI_PROJECT_NAME}-${CI_COMMIT_SHA}/${PROJECT_NAME}.tar"); -// return afterScript; -// } else { -// return null; -// } -// } - - -// private CiJobServices buildServices(DevopsCiJobVO jobVO) { -// CiJobServices ciJobServices = new CiJobServices(); -// if (isContainDokcerBuild(jobVO)) { -// ciJobServices.setName(defaultCiImage); -// ciJobServices.setAlias("kaniko"); -// return ciJobServices; -// } else { -// return null; -// } -// } - -// private boolean isContainDokcerBuild(DevopsCiJobVO jobVO) { -// if (Objects.isNull(jobVO)) { -// return false; -// } -// if (JobTypeEnum.BUILD.value().equals(jobVO.getType())) { -// CiConfigVO ciConfigVO = jobVO.getConfigVO(); -// if (ciConfigVO == null || CollectionUtils.isEmpty(ciConfigVO.getConfig())) { -// return false; -// } -// if (!CollectionUtils.isEmpty(ciConfigVO.getConfig().stream().filter(ciConfigTemplateVO -> StringUtils.equalsIgnoreCase(ciConfigTemplateVO.getType().trim(), CiJobScriptTypeEnum.DOCKER.getType())).collect(Collectors.toList()))) { -// return true; -// } -// } -// return false; -// } - /** * 处理job的触发方式 * @@ -1974,52 +1822,6 @@ private void processOnlyAndExcept(DevopsCiJobDTO devopsCiJobDTO, CiJob ciJob) { } } - /** - * 处理job的触发方式 - * - * @param metadata job元数据 - * @param ciJob ci文件的job对象 - */ - private void processOnlyAndExcept(DevopsCiJobVO metadata, CiJob ciJob) { - if (StringUtils.isNotBlank(metadata.getTriggerType()) - && StringUtils.isNotBlank(metadata.getTriggerValue())) { - CiTriggerType ciTriggerType = CiTriggerType.forValue(metadata.getTriggerType()); - if (ciTriggerType != null) { - String triggerValue = metadata.getTriggerValue(); - switch (ciTriggerType) { - case REFS: - GitlabCiUtil.processTriggerRefs(ciJob, triggerValue); - break; - case EXACT_MATCH: - GitlabCiUtil.processExactMatch(ciJob, triggerValue); - break; - case REGEX_MATCH: - GitlabCiUtil.processRegexMatch(ciJob, triggerValue); - break; - case EXACT_EXCLUDE: - GitlabCiUtil.processExactExclude(ciJob, triggerValue); - break; - } - } - } - } - - private static MavenRepoVO convertRepo(NexusMavenRepoDTO nexusMavenRepoDTO) { - MavenRepoVO mavenRepoVO = new MavenRepoVO(); - mavenRepoVO.setName(nexusMavenRepoDTO.getName()); - mavenRepoVO.setPrivateRepo(Boolean.TRUE); - if ("MIXED".equals(nexusMavenRepoDTO.getVersionPolicy())) { - mavenRepoVO.setType(GitOpsConstants.SNAPSHOT + "," + GitOpsConstants.RELEASE); - } else { - // group 类型的仓库没有版本类型 - mavenRepoVO.setType(nexusMavenRepoDTO.getVersionPolicy() == null ? null : nexusMavenRepoDTO.getVersionPolicy().toLowerCase()); - } - mavenRepoVO.setUrl(nexusMavenRepoDTO.getUrl()); - mavenRepoVO.setUsername(nexusMavenRepoDTO.getNeUserId()); - mavenRepoVO.setPassword(nexusMavenRepoDTO.getNeUserPassword()); - return mavenRepoVO; - } - /** * 把配置转换为gitlab-ci配置(maven,sonarqube) * @@ -2200,26 +2002,6 @@ private void createCdJob(DevopsCdJobVO t, Long projectId, Long stageId, Long pip } - /** - * 主机部署 关联ci任务 - * 对于创建或更新根据任务名称获取id - * - * @param pipelineId - * @param ciJobName - * @return - */ - @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_UNCOMMITTED) - public Long getCiJobId(Long pipelineId, String ciJobName) { - DevopsCiJobDTO devopsCiJobDTO = new DevopsCiJobDTO(); - devopsCiJobDTO.setCiPipelineId(pipelineId); - devopsCiJobDTO.setName(ciJobName); - List ciJobDTOList = devopsCiJobMapper.select(devopsCiJobDTO); - if (CollectionUtils.isEmpty(ciJobDTOList)) { - throw new CommonException("error.get.ci.job.id"); - } - return ciJobDTOList.get(0).getId(); - } - public void checkCdHostJobName(Long ciPipelineId, CdHostDeployConfigVO deployConfigVO, String cdHostName, DevopsCdJobDTO devopsCdJobDTO) { DevopsCiJobDTO devopsCiJobDTO = new DevopsCiJobDTO(); devopsCiJobDTO.setCiPipelineId(ciPipelineId); @@ -2241,16 +2023,4 @@ public void checkCdHostJobName(Long ciPipelineId, CdHostDeployConfigVO deployCon } } } - -// /** -// * 将job中的metadata字段解密 -// * -// * @param devopsCiJobVO job数据 -// */ -// private void decryptCiBuildMetadata(DevopsCiJobVO devopsCiJobVO) { -// if (JobTypeEnum.BUILD.value().equals(devopsCiJobVO.getType())) { -// // 解密json字符串中的加密的主键 -// devopsCiJobVO.setMetadata(JsonHelper.marshalByJackson(KeyDecryptHelper.decryptJson(devopsCiJobVO.getMetadata(), CiConfigVO.class))); -// } -// } } From 2eaca3c56339380280146bcffb7f6984d1b34f98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 20 Jul 2022 17:47:32 +0800 Subject: [PATCH 126/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E5=A4=8Dsql=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/AppServiceVersionMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index 6c542e5f92..c4ff624422 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -416,7 +416,7 @@ das. CODE AS appServiceCode, das.`name` AS appServiceName, das.type AS appServiceType, - das.project_id AS projectId, + das.project_id AS projectId FROM devops_app_service_version dasv left join devops_app_service_helm_version dashv on dashv.app_service_version_id = dasv.id From d73d0462fdbf9b5963ce54645904d14288f804b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Wed, 20 Jul 2022 18:32:49 +0800 Subject: [PATCH 127/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E5=A4=8D=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=B8=82=E5=9C=BA=E6=9F=A5=E8=AF=A2helm=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E7=9A=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AppServiceVersionServiceImpl.java | 7 ++--- .../infra/mapper/AppServiceVersionMapper.java | 3 +++ .../mapper/AppServiceVersionMapper.xml | 27 +++++++++++++++++-- 3 files changed, 30 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 69bdabc46a..cc0b14e326 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -1,6 +1,5 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.CUSTOM_REPO; import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.DEFAULT_REPO; import static java.util.Comparator.comparing; import static java.util.stream.Collectors.collectingAndThen; @@ -12,7 +11,6 @@ import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; -import javax.annotation.Nullable; import com.google.gson.Gson; import org.apache.commons.lang3.StringUtils; @@ -61,7 +59,6 @@ import io.choerodon.devops.infra.util.*; import io.choerodon.mybatis.pagehelper.PageHelper; import io.choerodon.mybatis.pagehelper.domain.PageRequest; -import io.choerodon.mybatis.pagehelper.domain.Sort; @Service public class AppServiceVersionServiceImpl implements AppServiceVersionService { @@ -966,7 +963,7 @@ public AppServiceVersionDTO queryByCommitShaAndRef(Long appServiceId, String com @Override public AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long projectId, Long appServiceVersionId) { - AppServiceVersionWithHelmConfigVO appServiceVersionWithHelmConfigVO = io.choerodon.core.utils.ConvertUtils.convertObject(appServiceVersionMapper.selectByPrimaryKey(appServiceVersionId), AppServiceVersionWithHelmConfigVO.class); + AppServiceVersionWithHelmConfigVO appServiceVersionWithHelmConfigVO = io.choerodon.core.utils.ConvertUtils.convertObject(appServiceVersionMapper.selectByAppServiceVersionId(appServiceVersionId), AppServiceVersionWithHelmConfigVO.class); AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionId); if (appServiceHelmVersionDTO != null) { Long helmConfigId = appServiceHelmVersionDTO.getHelmConfigId(); @@ -978,7 +975,7 @@ public AppServiceVersionWithHelmConfigVO queryVersionWithHelmConfig(Long project throw new FeignException("error.helm.config.not.exist"); } appServiceVersionWithHelmConfigVO.setHelmConfig(new ConfigVO(devopsHelmConfigDTO.getUrl(), - devopsHelmConfigDTO.getName(), + devopsHelmConfigDTO.getUsername(), devopsHelmConfigDTO.getPassword(), devopsHelmConfigDTO.getRepoPrivate())); } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java index 1828fc43fc..33ac939c97 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceVersionMapper.java @@ -41,6 +41,8 @@ List listAppServiceDeployedVersion(@Param("projectId") Lon List listByAppServiceVersionIds(@Param("appServiceServiceIds") List appServiceServiceIds); + AppServiceVersionDTO selectByAppServiceVersionId(@Param("appServiceVersionId") Long appServiceVersionId); + List listByAppServiceIdAndBranch(@Param("appServiceId") Long appServiceId, @Param("branch") String branch); String queryByPipelineId(@Param("pipelineId") Long pipelineId, @Param("branch") String branch, @Param("appServiceId") Long appServiceId); @@ -85,6 +87,7 @@ List pageShareVersionByAppServiceIdAndVersion(@Param("appS /** * 临时方法,迁移应用服务版本使用,下一个版本可删除 + * * @return */ Integer queryCountVersionsWithHarborConfig(); diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index c4ff624422..5bd6204db8 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -195,7 +195,6 @@ dav.app_service_id, dav.commit, dav.ref, - dav.repository, dav.object_version_number, dav.created_by, dav.creation_date, @@ -206,7 +205,8 @@ dashv.harbor_config_id, dashv.value_id, dashv.readme_value_id, - dashv.image + dashv.image, + dashv.repository FROM devops_app_service_version dav left join devops_app_service_helm_version dashv on dashv.app_service_version_id = dav.id @@ -220,6 +220,29 @@ + + + + + select * diff --git a/src/main/resources/mapper/AppServiceVersionMapper.xml b/src/main/resources/mapper/AppServiceVersionMapper.xml index 5bd6204db8..bbe9f1fc75 100644 --- a/src/main/resources/mapper/AppServiceVersionMapper.xml +++ b/src/main/resources/mapper/AppServiceVersionMapper.xml @@ -591,21 +591,30 @@ repository FROM devops_app_service_version WHERE helm_config_id IS NOT NULL - AND harbor_config_id IS NOT NULL + AND harbor_config_id IS NOT NULL + and repo_type is not null diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index 5aa20b2aca..e9392fef3e 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -15,10 +15,14 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { column(name: 'username', type: 'VARCHAR(64)', remarks: '用户名') column(name: 'password', type: 'VARCHAR(128)', remarks: '密码') - column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/site') - column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') - column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是',defaultValue: 0) - column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库',defaultValue: 0) + column(name: 'resource_type', type: 'VARCHAR(16)', remarks: '关联该仓库配置的层级 project/organization/site') { + constraints(nullable: false) + } + column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') { + constraints(nullable: false) + } + column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是', defaultValue: 0) + column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库', defaultValue: 0) column(name: "object_version_number", type: "BIGINT UNSIGNED", defaultValue: "1") column(name: "created_by", type: "BIGINT UNSIGNED", defaultValue: "0") From d84c2b5b9284a5a1432de128c38bd0de4bfab453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 21 Jul 2022 17:22:27 +0800 Subject: [PATCH 140/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E5=90=8D=E7=A7=B0=E5=94=AF=E4=B8=80?= =?UTF-8?q?=E7=B4=A2=E5=BC=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../script/db/groovy/devops_service/devops_helm_config.groovy | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index e9392fef3e..dcf4027290 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -31,6 +31,8 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { column(name: "last_update_date", type: "DATETIME", defaultValueComputed: "CURRENT_TIMESTAMP") } + addUniqueConstraint(tableName: 'devops_helm_config', constraintName: 'devops_helm_config_n1', columnNames: 'resource_type,resource_id,name') + createIndex(indexName: "devops_helm_config_n1", tableName: "devops_helm_config") { column(name: "resource_id") column(name: "resource_type") From 7fa0da8585f0686480a7359bf1655562f6616b85 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 11:03:28 +0800 Subject: [PATCH 141/228] =?UTF-8?q?[ADD]=20=E6=B7=BB=E5=8A=A0chart?= =?UTF-8?q?=E5=8C=85=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../v1/DevopsHelmConfigController.java | 22 +++++++++++-- .../app/service/DevopsHelmConfigService.java | 8 +++++ .../impl/DevopsHelmConfigServiceImpl.java | 32 +++++++++++++++++-- .../messages/messages_en_US.properties | 1 + .../messages/messages_zh_CN.properties | 3 +- 5 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index a1912869ab..bc2d57acc6 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -7,6 +7,8 @@ import org.hzero.core.util.Results; import org.hzero.starter.keyencrypt.core.Encrypt; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; @@ -61,7 +63,7 @@ public ResponseEntity checkNameExist(@ApiParam("项目id") @ApiParam("仓库名称") @RequestParam("name") String name, @ApiParam("仓库id") - @Encrypt @RequestParam(value = "helm_config_id",required = false) Long helmConfigId) { + @Encrypt @RequestParam(value = "helm_config_id", required = false) Long helmConfigId) { return Results.success(helmConfigService.checkNameExists(projectId, helmConfigId, name)); } @@ -116,4 +118,20 @@ public ResponseEntity getIndexContent(@ApiParam("项目id") @Encrypt @PathVariable("helm_config_id") Long helmConfigId) { return Results.success(helmConfigService.getIndexContent(projectId, helmConfigId)); } -} + + @ApiOperation("下载chart包") + @GetMapping("/{helm_config_id}/charts/download") + @Permission(level = ResourceLevel.ORGANIZATION) + public ResponseEntity downloadCharts( + @ApiParam("项目id") + @PathVariable("project_id") Long projectId, + @ApiParam("仓库id") + @Encrypt @PathVariable("helm_config_id") Long helmConfigId, + @RequestParam("chart_url") String chartUrl) { + String[] chartInfos = chartUrl.split("/"); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Content-Disposition", String.format("attchement;filename=%s", chartInfos[2])); + httpHeaders.add("content-type", "application/x-tar"); + return new ResponseEntity<>(helmConfigService.downloadChart(helmConfigId, chartUrl), httpHeaders, HttpStatus.OK); + } +} \ No newline at end of file diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 8e0cc45bf5..dbfc7c8c43 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -130,4 +130,12 @@ public interface DevopsHelmConfigService { * @return */ List listHelmConfigOnApp(Long projectId, Long appServiceId); + + /** + * 下载chart包 + * @param helmConfigId + * @param chartUrl + * @return + */ + byte[] downloadChart(Long helmConfigId, String chartUrl); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 0340b34e45..40bcf7a7f1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -268,8 +268,9 @@ public String getIndexContent(Long projectId, Long helmConfigId) { } HttpEntity requestEntity = new HttpEntity<>(headers); - - ResponseEntity exchange = restTemplate.exchange(devopsHelmConfigDTO.getUrl() + "/index.yaml", HttpMethod.GET, requestEntity, String.class); + String helmRepoUrl = devopsHelmConfigDTO.getUrl(); + helmRepoUrl = helmRepoUrl.endsWith("/") ? helmRepoUrl.substring(0, devopsHelmConfigDTO.getUrl().length() - 1) : helmRepoUrl; + ResponseEntity exchange = restTemplate.exchange(helmRepoUrl + "/index.yaml", HttpMethod.GET, requestEntity, String.class); if (!HttpStatus.OK.equals(exchange.getStatusCode())) { throw new CommonException("error.get.helm.chart"); @@ -345,4 +346,31 @@ public List listHelmConfigOnApp(Long projectId, Long appServ return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); } + + @Override + public byte[] downloadChart(Long helmConfigId, String chartUrl) { + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectByPrimaryKey(helmConfigId); + + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.MULTIPART_FORM_DATA); + if (devopsHelmConfigDTO.getRepoPrivate()) { + String credentials = devopsHelmConfigDTO.getUsername() + ":" + + devopsHelmConfigDTO.getPassword(); + headers.add("Authorization", "Basic " + Base64.getEncoder().encodeToString(credentials.getBytes())); + } + + HttpEntity requestEntity = new HttpEntity<>(headers); + + String helmRepoUrl = devopsHelmConfigDTO.getUrl(); + helmRepoUrl = helmRepoUrl.endsWith("/") ? helmRepoUrl.substring(0, devopsHelmConfigDTO.getUrl().length() - 1) : helmRepoUrl; + + ResponseEntity exchange; + try { + exchange = restTemplate.exchange(helmRepoUrl + chartUrl, HttpMethod.GET, requestEntity, byte[].class); + } catch (Exception e) { + throw new CommonException("error.helm.chart.download", e.getMessage()); + } + + return exchange.getBody(); + } } diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 3786060268..03a610bb26 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -931,3 +931,4 @@ error.helm.config.name.exists=The name of helm repo already exists. error.get.helm.chart=Failed to get chart info of helm repo. error.chart.address.invalid=Invalid chart warehouse address error.chart.address.unreachable=Chart warehouse is unreachable +error.helm.chart.download=Failed to download chart {0} diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 27acee24a7..10e5168424 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -927,4 +927,5 @@ error.helm.config.site.exist=平台层helm仓库配置不存在 error.helm.config.name.exists=helm仓库名称已存在 error.get.helm.chart=获取helm仓库chart信息失败 error.chart.address.invalid=无效的chart仓库地址 -error.chart.address.unreachable=chart仓库不可达 \ No newline at end of file +error.chart.address.unreachable=chart仓库不可达 +error.helm.chart.download=下载chart包失败 {0} \ No newline at end of file From 2cb081d4cab4378d3f45f02893b6f8053686fd12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 11:31:11 +0800 Subject: [PATCH 142/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=B1=82=E5=92=8C=E7=BB=84=E7=BB=87=E5=B1=82helm?= =?UTF-8?q?=E4=BB=93=E5=BA=93=E7=9A=84=E9=BB=98=E8=AE=A4=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsCheckLogServiceImpl.java | 2 +- .../app/service/impl/DevopsConfigServiceImpl.java | 7 ++----- .../choerodon/devops/app/task/DevopsCommandRunner.java | 10 +++------- 3 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index eda702c709..65c879ac3d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -307,7 +307,7 @@ private void fixHelmConfig() { IntHolder index = new IntHolder(); index.value = 1; // 项目层 - projectHelmConfig.forEach(c->{ + projectHelmConfig.forEach(c -> { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index 050ae7d5b6..775f8f55d8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -2,10 +2,7 @@ import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_CHART_NAME; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import com.google.gson.Gson; import org.springframework.beans.BeanUtils; @@ -67,7 +64,7 @@ public void operate(Long resourceId, String resourceType, List d if (devopsConfigVO.getType().equals(CHART)) { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setUrl(devopsConfigVO.getConfig().getUrl()); - devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); + devopsHelmConfigDTO.setName(UUID.randomUUID().toString()); devopsHelmConfigDTO.setUsername(devopsConfigVO.getConfig().getUserName()); devopsHelmConfigDTO.setPassword(devopsConfigVO.getConfig().getPassword()); if (!ObjectUtils.isEmpty(devopsHelmConfigDTO.getUsername()) && !ObjectUtils.isEmpty(devopsHelmConfigDTO.getPassword())) { diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index 665ef025d0..2754ad2a86 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -1,12 +1,8 @@ package io.choerodon.devops.app.task; -import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_CHART_NAME; import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_SONAR_NAME; -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; +import java.util.*; import com.google.gson.Gson; import okhttp3.ResponseBody; @@ -74,7 +70,7 @@ public void run(String... strings) { try { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setUrl(servicesHelmUrl); - devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); + devopsHelmConfigDTO.setName(UUID.randomUUID().toString()); // 只有helm的用户名密码都设置了, 才设置到数据库中 if (StringUtils.hasText(servicesHelmUserName) && StringUtils.hasText(servicesHelmPassword)) { devopsHelmConfigDTO.setUsername(servicesHelmUserName); @@ -100,7 +96,7 @@ private void initHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); } else if (Objects.equals(oldConfigDTO.getUrl(), devopsHelmConfigDTO.getUrl())) { if (!Objects.equals(oldConfigDTO.getUsername(), devopsHelmConfigDTO.getUsername()) - || !Objects.equals(oldConfigDTO.getPassword(),devopsHelmConfigDTO.getPassword())) { + || !Objects.equals(oldConfigDTO.getPassword(), devopsHelmConfigDTO.getPassword())) { devopsHelmConfigDTO.setId(oldConfigDTO.getId()); devopsHelmConfigDTO.setObjectVersionNumber(oldConfigDTO.getObjectVersionNumber()); devopsHelmConfigService.updateDevopsHelmConfig(devopsHelmConfigDTO); From 62bd712b67d7776a316fe668f386438146714cf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 12:24:26 +0800 Subject: [PATCH 143/228] =?UTF-8?q?[IMP]=20=E4=BC=98=E5=8C=96helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/AppServiceHelmRelService.java | 8 ++++++ .../app/service/DevopsHelmConfigService.java | 6 +++++ .../impl/AppServiceHelmRelServiceImpl.java | 11 +++++--- .../impl/DevopsCheckLogServiceImpl.java | 6 +++-- .../impl/DevopsHelmConfigServiceImpl.java | 5 ++++ .../infra/mapper/AppServiceHelmRelMapper.java | 9 +++++++ .../infra/mapper/DevopsHelmConfigMapper.java | 4 ++- .../mapper/AppServiceHelmRelMapper.xml | 11 ++++++++ .../mapper/DevopsHelmConfigMapper.xml | 26 +++++++++++++++++++ 9 files changed, 80 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java index b4fd99011f..190cbbfec5 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceHelmRelService.java @@ -1,5 +1,7 @@ package io.choerodon.devops.app.service; +import java.util.List; + import io.choerodon.devops.infra.dto.AppServiceHelmRelDTO; /** @@ -11,5 +13,11 @@ public interface AppServiceHelmRelService { AppServiceHelmRelDTO queryByAppServiceId(Long appServiceId); + + /** + * 批量插入 + * @param appServiceHelmRelDTOToInsert + */ + void batchInsertInNewTrans(List appServiceHelmRelDTOToInsert); } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index dbfc7c8c43..73619d051c 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -131,8 +131,14 @@ public interface DevopsHelmConfigService { */ List listHelmConfigOnApp(Long projectId, Long appServiceId); + /** + * 批量插入 + */ + void batchInsertInNewTrans(List devopsHelmConfigDTOS); + /** * 下载chart包 + * * @param helmConfigId * @param chartUrl * @return diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java index 50d82a31de..f98dd77d65 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceHelmRelServiceImpl.java @@ -1,12 +1,12 @@ package io.choerodon.devops.app.service.impl; -import org.springframework.beans.factory.annotation.Autowired; - -import io.choerodon.devops.app.service.AppServiceHelmRelService; +import java.util.List; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.Assert; +import io.choerodon.devops.app.service.AppServiceHelmRelService; import io.choerodon.devops.infra.constant.ResourceCheckConstant; import io.choerodon.devops.infra.dto.AppServiceHelmRelDTO; import io.choerodon.devops.infra.mapper.AppServiceHelmRelMapper; @@ -30,5 +30,10 @@ public AppServiceHelmRelDTO queryByAppServiceId(Long appServiceId) { appServiceHelmRelDTO.setAppServiceId(appServiceId); return appServiceHelmRelMapper.selectOne(appServiceHelmRelDTO); } + + @Override + public void batchInsertInNewTrans(List appServiceHelmRelDTOToInsert) { + appServiceHelmRelMapper.batchInsert(appServiceHelmRelDTOToInsert); + } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 65c879ac3d..07f034089b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -122,6 +122,8 @@ public class DevopsCheckLogServiceImpl implements DevopsCheckLogService { private AppServiceImageVersionService appServiceImageVersionService; @Autowired private AppServiceHelmVersionService appServiceHelmVersionService; + @Autowired + private AppServiceHelmRelService appServiceHelmRelService; @Override @Transactional(rollbackFor = Exception.class) @@ -348,8 +350,8 @@ private void fixHelmConfig() { appServiceHelmRelDTOToInsert.add(appServiceHelmRelDTO); }); - devopsHelmConfigDTOBatchInsertHelper.batchInsert(devopsHelmConfigDTOToInsert); - appServiceHelmRelDTOBatchInsertHelper.batchInsert(appServiceHelmRelDTOToInsert); + devopsHelmConfigService.batchInsertInNewTrans(devopsHelmConfigDTOToInsert); + appServiceHelmRelService.batchInsertInNewTrans(appServiceHelmRelDTOToInsert); LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>end fix helm config >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!"); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 40bcf7a7f1..bb53e532ad 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -347,6 +347,11 @@ public List listHelmConfigOnApp(Long projectId, Long appServ return ConvertUtils.convertList(devopsHelmConfigDTOS, DevopsHelmConfigVO.class); } + @Override + public void batchInsertInNewTrans(List devopsHelmConfigDTOS) { + devopsHelmConfigMapper.batchInsert(devopsHelmConfigDTOS); + } + @Override public byte[] downloadChart(Long helmConfigId, String chartUrl) { DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectByPrimaryKey(helmConfigId); diff --git a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmRelMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmRelMapper.java index 3f9eff4695..88fb7ff270 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmRelMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/AppServiceHelmRelMapper.java @@ -1,5 +1,9 @@ package io.choerodon.devops.infra.mapper; +import java.util.List; + +import org.apache.ibatis.annotations.Param; + import io.choerodon.mybatis.common.BaseMapper; import io.choerodon.devops.infra.dto.AppServiceHelmRelDTO; @@ -10,5 +14,10 @@ * @since 2022-07-15 10:55:52 */ public interface AppServiceHelmRelMapper extends BaseMapper { + /** + * 批量插入 + * @param appServiceHelmRelDTOToInsert + */ + void batchInsert(@Param("appServiceHelmRelDTOToInsert") List appServiceHelmRelDTOToInsert); } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java index 1c68665412..99d9c6f011 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -20,5 +20,7 @@ public interface DevopsHelmConfigMapper extends BaseMapper DevopsHelmConfigDTO selectOneWithIdAndName(@Param("resourceId") Long resourceId, @Param("resourceType") String resourceType, @Param("defaultRepo") Boolean defaultRepo); - DevopsHelmConfigDTO selectWithIdAndNameByAppServiceId(Long appServiceId); + DevopsHelmConfigDTO selectWithIdAndNameByAppServiceId(@Param("appServiceId") Long appServiceId); + + void batchInsert(@Param("devopsHelmConfigDTOS") List devopsHelmConfigDTOS); } diff --git a/src/main/resources/mapper/AppServiceHelmRelMapper.xml b/src/main/resources/mapper/AppServiceHelmRelMapper.xml index d80a7c07c4..737b3a9ec7 100644 --- a/src/main/resources/mapper/AppServiceHelmRelMapper.xml +++ b/src/main/resources/mapper/AppServiceHelmRelMapper.xml @@ -2,5 +2,16 @@ + + insert ignore into devops_app_service_helm_rel( + app_service_id, + helm_config_id) + values + + (#{appServiceHelmRelDTO.appServiceId}, + #{appServiceHelmRelDTO.helmConfigId} + ) + + diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index aefdce004f..f12f8645c9 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -55,4 +55,30 @@ JOIN devops_app_service_helm_rel dashr ON dashr.helm_config_id = dhc.id WHERE dashr.app_service_id = #{appServiceId} + + + insert ignore into devops_helm_config( + id, + name, + resource_type, + resource_id, + url, + username, + password, + repo_private, + repo_default) + values + + (#{devopsHelmConfigDTO.id}, + #{devopsHelmConfigDTO.name}, + #{devopsHelmConfigDTO.resourceType}, + #{devopsHelmConfigDTO.resourceId}, + #{devopsHelmConfigDTO.url}, + #{devopsHelmConfigDTO.username}, + #{devopsHelmConfigDTO.password} + #{devopsHelmConfigDTO.repoPrivate}, + #{devopsHelmConfigDTO.repoDefault} + ) + + \ No newline at end of file From 2b02f79461c951e3641b9fd3c74b42abdd2b73d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 12:27:07 +0800 Subject: [PATCH 144/228] =?UTF-8?q?[IMP]=20=E4=BC=98=E5=8C=96helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93chart=E5=8C=85=E4=B8=8B=E8=BD=BD=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsHelmConfigServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index bb53e532ad..556e12d392 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -371,7 +371,7 @@ public byte[] downloadChart(Long helmConfigId, String chartUrl) { ResponseEntity exchange; try { - exchange = restTemplate.exchange(helmRepoUrl + chartUrl, HttpMethod.GET, requestEntity, byte[].class); + exchange = restTemplate.exchange(helmRepoUrl + "/" + chartUrl, HttpMethod.GET, requestEntity, byte[].class); } catch (Exception e) { throw new CommonException("error.helm.chart.download", e.getMessage()); } From bab3baf5ea4a625837814187f0956758e0895e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 14:13:23 +0800 Subject: [PATCH 145/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93chart=E5=8C=85=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/controller/v1/DevopsHelmConfigController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index bc2d57acc6..d9c8e52a7a 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -130,7 +130,7 @@ public ResponseEntity downloadCharts( @RequestParam("chart_url") String chartUrl) { String[] chartInfos = chartUrl.split("/"); HttpHeaders httpHeaders = new HttpHeaders(); - httpHeaders.add("Content-Disposition", String.format("attchement;filename=%s", chartInfos[2])); + httpHeaders.add("Content-Disposition", String.format("attchement;filename=%s", chartInfos[1])); httpHeaders.add("content-type", "application/x-tar"); return new ResponseEntity<>(helmConfigService.downloadChart(helmConfigId, chartUrl), httpHeaders, HttpStatus.OK); } From 19b93df7bd853dabaadbc8bd68d22a32e00ab186 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 14:39:39 +0800 Subject: [PATCH 146/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E5=B1=82=E6=9F=A5=E8=AF=A2helm=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/AppServiceController.java | 2 +- .../v1/DevopsProjectConfigController.java | 2 +- .../io/choerodon/devops/api/vo/ConfigVO.java | 10 ++++++++++ .../app/service/DevopsHelmConfigService.java | 7 ------- .../service/impl/DevopsConfigServiceImpl.java | 19 ++++++++++++++++--- .../impl/DevopsHelmConfigServiceImpl.java | 8 -------- .../devops/app/task/DevopsCommandRunner.java | 2 +- 7 files changed, 29 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java index 1ee69eb15f..39bfd25ee4 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java @@ -582,7 +582,7 @@ public void checkChart( @PathVariable(value = "project_id") Long projectId, @ApiParam(value = "chartMuseum信息", required = true) @RequestBody ConfigVO configVO) { - applicationServiceService.checkChart(projectId,configVO.getUrl(), configVO.getUserName(), configVO.getPassword()); + applicationServiceService.checkChart(projectId,configVO.getUrl(), configVO.getUsername(), configVO.getPassword()); } /** diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java index f65fe8a7b8..2f7299dbe6 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java @@ -104,7 +104,7 @@ public ResponseEntity checkChart( @ApiParam(value = "chartMuseum信息", required = true) @RequestBody ConfigVO configVO) { return Optional.ofNullable( - appServiceService.checkChart(projectId, configVO.getUrl(), configVO.getUserName(), configVO.getPassword())) + appServiceService.checkChart(projectId, configVO.getUrl(), configVO.getUsername(), configVO.getPassword())) .map(target -> new ResponseEntity<>(target, HttpStatus.OK)) .orElseThrow(() -> new CommonException("error.connection.failed")); } diff --git a/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java b/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java index 9fffc0d8dc..99b26c9a01 100644 --- a/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/ConfigVO.java @@ -15,6 +15,8 @@ public class ConfigVO implements Serializable { private String userName; + private String username; + private String password; private String project; @@ -81,6 +83,14 @@ public void setIsPrivate(Boolean aPrivate) { isPrivate = aPrivate; } + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + @Override public boolean equals(Object o) { if (this == o) return true; diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java index 73619d051c..4250983939 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsHelmConfigService.java @@ -67,13 +67,6 @@ public interface DevopsHelmConfigService { */ void setDefaultDevopsHelmConfig(Long projectId, Long helmConfigId); - /** - * 查询指定层级的默认仓库 - * - * @return - */ - DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType); - /** * 查询指定层级的默认仓库 * diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java index 775f8f55d8..045c68dc3c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigServiceImpl.java @@ -76,7 +76,7 @@ public void operate(Long resourceId, String resourceType, List d devopsHelmConfigDTO.setResourceType(ResourceLevel.ORGANIZATION.value()); devopsHelmConfigDTO.setResourceId(resourceId); devopsHelmConfigDTO.setRepoDefault(true); - DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.ORGANIZATION.value()); + DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.ORGANIZATION.value(), resourceId); if (oldConfigDTO == null) { devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); } else if (oldConfigDTO.getUrl().equals(devopsHelmConfigDTO.getUrl())) { @@ -316,8 +316,6 @@ private void configVOInToRepVO(DevopsConfigRepVO devopsConfigRepVO, DevopsConfig if (devopsConfigVO.getType().equals(HARBOR)) { devopsConfigRepVO.setHarbor(devopsConfigVO); devopsConfigRepVO.setHarborPrivate(devopsConfigVO.getHarborPrivate()); - } else if (devopsConfigVO.getType().equals(CHART)) { - devopsConfigRepVO.setChart(devopsConfigVO); } } @@ -330,6 +328,21 @@ public DevopsConfigRepVO queryConfig(Long resourceId, String resourceType) { DevopsProjectDTO devopsProjectDTO = devopsProjectService.baseQueryByProjectId(resourceId); devopsConfigRepVO.setHarborPrivate(devopsProjectDTO.getHarborProjectIsPrivate()); } + // 设置chart仓库 + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(resourceType, resourceId); + if (devopsHelmConfigDTO != null) { + ConfigVO configVO = new ConfigVO(); + configVO.setUrl(devopsHelmConfigDTO.getUrl()); + configVO.setUserName(devopsHelmConfigDTO.getUsername()); + configVO.setPassword(devopsHelmConfigDTO.getPassword()); + configVO.setIsPrivate(devopsHelmConfigDTO.getRepoPrivate()); + + DevopsConfigVO chart = new DevopsConfigVO(); + chart.setType(CHART); + chart.setCustom(true); + chart.setConfig(configVO); + devopsConfigRepVO.setChart(chart); + } return devopsConfigRepVO; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 556e12d392..acbe017fe5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -184,14 +184,6 @@ public void setDefaultDevopsHelmConfig(Long projectId, Long helmConfigId) { } } - @Override - public DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType) { - DevopsHelmConfigDTO devopsHelmConfigSearchDTO = new DevopsHelmConfigDTO(); - devopsHelmConfigSearchDTO.setRepoDefault(true); - devopsHelmConfigSearchDTO.setResourceType(resourceType); - return devopsHelmConfigMapper.selectOne(devopsHelmConfigSearchDTO); - } - @Override public DevopsHelmConfigDTO queryDefaultDevopsHelmConfigByLevel(String resourceType, Long resourceId) { Assert.notNull(resourceType, ResourceCheckConstant.ERROR_RESOURCE_TYPE_IS_NULL); diff --git a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java index 2754ad2a86..e0cd16266e 100644 --- a/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java +++ b/src/main/java/io/choerodon/devops/app/task/DevopsCommandRunner.java @@ -91,7 +91,7 @@ private void initHelmConfig(DevopsHelmConfigDTO devopsHelmConfigDTO) { devopsHelmConfigDTO.setResourceId(0L); devopsHelmConfigDTO.setResourceType(ResourceLevel.SITE.value()); devopsHelmConfigDTO.setRepoDefault(true); - DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.SITE.value()); + DevopsHelmConfigDTO oldConfigDTO = devopsHelmConfigService.queryDefaultDevopsHelmConfigByLevel(ResourceLevel.SITE.value(),0L); if (oldConfigDTO == null) { devopsHelmConfigService.createDevopsHelmConfig(devopsHelmConfigDTO); } else if (Objects.equals(oldConfigDTO.getUrl(), devopsHelmConfigDTO.getUrl())) { From d443f5dcaa42468ff443869e9a46074f68b3de37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Fri, 22 Jul 2022 14:59:58 +0800 Subject: [PATCH 147/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E4=BB=93=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/vo/chart/ChartTagVO.java | 18 ++++++++++++++++++ .../impl/AppServiceInstanceServiceImpl.java | 7 +++++-- .../service/impl/AppServiceServiceImpl.java | 8 ++++---- .../impl/AppServiceVersionServiceImpl.java | 2 ++ .../impl/DevopsDemoEnvInitServiceImpl.java | 11 +++++++---- .../choerodon/devops/infra/util/ChartUtil.java | 16 ++++++++-------- 6 files changed, 44 insertions(+), 18 deletions(-) diff --git a/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java b/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java index 5909ff47e6..03ea50de31 100644 --- a/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/chart/ChartTagVO.java @@ -14,6 +14,24 @@ public class ChartTagVO { private String chartName; private String chartVersion; private Long appServiceId; + private Long tenantId; + private Long projectId; + + public Long getTenantId() { + return tenantId; + } + + public void setTenantId(Long tenantId) { + this.tenantId = tenantId; + } + + public Long getProjectId() { + return projectId; + } + + public void setProjectId(Long projectId) { + this.projectId = projectId; + } public String getOrgCode() { return orgCode; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index ed7275bcf5..e9e94a6d8c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -229,6 +229,8 @@ public class AppServiceInstanceServiceImpl implements AppServiceInstanceService private AppServiceImageVersionService appServiceImageVersionService; @Autowired private AppServiceHelmVersionService appServiceHelmVersionService; + @Autowired + private DevopsHelmConfigService devopsHelmConfigService; /** * 前端传入的排序字段和Mapper文件中的字段名的映射 */ @@ -2809,8 +2811,9 @@ private void sendChartMuseumAuthentication(Long clusterId, AppServiceDTO appServ AppServiceHelmVersionDTO appServiceHelmVersionDTO = appServiceHelmVersionService.queryByAppServiceVersionId(appServiceVersionDTO.getId()); if (appServiceHelmVersionDTO.getHelmConfigId() != null) { // 查询chart配置 - DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), APP_SERVICE, "chart", null); - ConfigVO helmConfig = gson.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryById(appServiceHelmVersionDTO.getHelmConfigId()); + ConfigVO helmConfig = ConvertUtils.convertObject(devopsHelmConfigDTO, ConfigVO.class); + helmConfig.setIsPrivate(devopsHelmConfigDTO.getRepoPrivate()); // 如果是私有的, 发送认证信息给agent if (Boolean.TRUE.equals(helmConfig.getIsPrivate())) { agentCommandService.sendChartMuseumAuthentication(clusterId, helmConfig); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 8f3aa665e1..884bbaeb8a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -562,10 +562,10 @@ public Boolean update(Long projectId, AppServiceUpdateDTO appServiceUpdateDTO) { rdupmClient.saveRelationByService(projectId, appServiceDTO.getId(), appServiceUpdateDTO.getHarborRepoConfigDTO().getRepoId()); } } - if (appServiceUpdateDTO.getChart() != null) { - DevopsConfigDTO chartConfig = devopsConfigService.queryRealConfig(appServiceId, APP_SERVICE, CHART, AUTHTYPE_PULL); - appServiceDTO.setChartConfigId(chartConfig.getId()); - } +// if (appServiceUpdateDTO.getChart() != null) { +// DevopsConfigDTO chartConfig = devopsConfigService.queryRealConfig(appServiceId, APP_SERVICE, CHART, AUTHTYPE_PULL); +// appServiceDTO.setChartConfigId(chartConfig.getId()); +// } if (!oldAppServiceDTO.getName().equals(appServiceUpdateDTO.getName())) { checkName(oldAppServiceDTO.getProjectId(), appServiceDTO.getName()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index 19f1f2a0c3..67da1c4f32 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -931,6 +931,8 @@ public void batchDelete(Long projectId, Long appServiceId, Set versionIds) } // 计算删除chart列表 ChartTagVO chartTagVO = caculateChartTag(tenant.getTenantNum(), projectDTO.getDevopsComponentCode(), appServiceDTO.getCode(), appServiceVersionDTO); + chartTagVO.setTenantId(tenant.getTenantId()); + chartTagVO.setProjectId(projectDTO.getId()); deleteChartTags.add(chartTagVO); // 删除应用服务版本 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java index 5ee448f897..fcffcc574a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java @@ -36,7 +36,6 @@ import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.enums.AccessLevel; import io.choerodon.devops.infra.enums.CommandStatus; -import io.choerodon.devops.infra.enums.ProjectConfigType; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.feign.operator.GitlabServiceClientOperator; import io.choerodon.devops.infra.mapper.AppServiceMapper; @@ -95,6 +94,8 @@ public class DevopsDemoEnvInitServiceImpl implements DevopsDemoEnvInitService { private AppServiceVersionReadmeMapper appServiceVersionReadmeMapper; @Autowired private SendNotificationService sendNotificationService; + @Autowired + private DevopsHelmConfigService devopsHelmConfigService; private final Gson gson = new Gson(); @@ -342,10 +343,12 @@ private void doCreate(String image, String token, String version, String commit, appServiceVersionDTO.setRef(GitOpsConstants.MASTER); // 查询helm仓库配置id - DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(appServiceDTO.getId(), MiscConstants.APP_SERVICE, ProjectConfigType.CHART.getType(), null); - ConfigVO helmConfig = gson.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryAppConfig(appServiceDTO.getId(), projectDTO.getId(), organization.getTenantId()); + + ConfigVO helmConfig = ConvertUtils.convertObject(devopsHelmConfigDTO, ConfigVO.class); + helmConfig.setIsPrivate(devopsHelmConfigDTO.getRepoPrivate()); String helmUrl = helmConfig.getUrl(); - appServiceVersionDTO.setHelmConfigId(devopsConfigDTO.getId()); + appServiceVersionDTO.setHelmConfigId(devopsHelmConfigDTO.getId()); appServiceVersionDTO.setRepository(helmUrl.endsWith("/") ? helmUrl + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/" : helmUrl + "/" + organization.getTenantNum() + "/" + projectDTO.getDevopsComponentCode() + "/"); String storeFilePath = STORE_PATH + version; diff --git a/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java b/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java index 39c4117004..d6a9698943 100644 --- a/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/ChartUtil.java @@ -1,7 +1,5 @@ package io.choerodon.devops.infra.util; -import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.AUTH_TYPE_PULL; - import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -23,14 +21,14 @@ import retrofit2.Retrofit; import io.choerodon.core.exception.CommonException; -import io.choerodon.devops.api.vo.ConfigVO; import io.choerodon.devops.api.vo.chart.ChartDeleteResponseVO; import io.choerodon.devops.api.vo.chart.ChartTagVO; import io.choerodon.devops.app.service.DevopsConfigService; +import io.choerodon.devops.app.service.DevopsHelmConfigService; import io.choerodon.devops.infra.config.ConfigurationProperties; import io.choerodon.devops.infra.dto.AppServiceDTO; import io.choerodon.devops.infra.dto.AppServiceVersionDTO; -import io.choerodon.devops.infra.dto.DevopsConfigDTO; +import io.choerodon.devops.infra.dto.DevopsHelmConfigDTO; import io.choerodon.devops.infra.dto.iam.ProjectDTO; import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.feign.ChartClient; @@ -52,6 +50,8 @@ public class ChartUtil { @Autowired DevopsConfigService devopsConfigService; + @Autowired + DevopsHelmConfigService devopsHelmConfigService; public static void uploadChart(String repository, String organizationCode, String projectCode, File file, @Nullable String username, @Nullable String password) { ConfigurationProperties configurationProperties = new ConfigurationProperties(); @@ -109,13 +109,13 @@ private static String readErrorMessage(Response response, String repository, } public void deleteChart(ChartTagVO chartTagVO) { - DevopsConfigDTO devopsConfigDTO = devopsConfigService.queryRealConfig(chartTagVO.getAppServiceId(), APP_SERVICE, CHART, AUTH_TYPE_PULL); - ConfigVO helmConfig = GSON.fromJson(devopsConfigDTO.getConfig(), ConfigVO.class); + + DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigService.queryAppConfig(chartTagVO.getAppServiceId(), chartTagVO.getProjectId(), chartTagVO.getTenantId()); ConfigurationProperties configurationProperties = new ConfigurationProperties(); configurationProperties.setType(CHART); - configurationProperties.setUsername(helmConfig.getUserName()); - configurationProperties.setPassword(helmConfig.getPassword()); + configurationProperties.setUsername(devopsHelmConfigDTO.getUsername()); + configurationProperties.setPassword(devopsHelmConfigDTO.getPassword()); configurationProperties.setBaseUrl(chartTagVO.getRepository().split(chartTagVO.getOrgCode() + "/" + chartTagVO.getProjectCode())[0]); Retrofit retrofit = RetrofitHandler.initRetrofit(configurationProperties); ChartClient chartClient = retrofit.create(ChartClient.class); From 586d257cb706359a83bc8dbaad527da73f9118cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 15:22:22 +0800 Subject: [PATCH 148/228] =?UTF-8?q?[IMP]=20=E9=9A=90=E8=97=8Fhelm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=AF=86=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsHelmConfigServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index acbe017fe5..3020a1a74e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -108,6 +108,7 @@ public List listHelmConfig(Long projectId) { Map iamUserDTOMap = iamUserDTOList.stream().collect(Collectors.toMap(IamUserDTO::getId, Function.identity())); devopsHelmConfigVOS.forEach(c -> { + c.setPassword(null); IamUserDTO creator = iamUserDTOMap.get(c.getCreatedBy()); if (creator != null) { c.setCreatorImageUrl(creator.getImageUrl()); @@ -161,6 +162,7 @@ public DevopsHelmConfigVO queryDevopsHelmConfig(Long projectId, Long helmConfigI devopsHelmConfigSearchDTO.setId(helmConfigId); DevopsHelmConfigDTO devopsHelmConfigDTO = devopsHelmConfigMapper.selectOne(devopsHelmConfigSearchDTO); + devopsHelmConfigDTO.setPassword(null); return ConvertUtils.convertObject(devopsHelmConfigDTO, DevopsHelmConfigVO.class); } From 1ffb4e442243c04ef075f41888659d9ffcbe8de1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 15:55:38 +0800 Subject: [PATCH 149/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=89=B9=E9=87=8F=E6=8F=92=E5=85=A5sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/DevopsHelmConfigMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index f12f8645c9..b9986f4f54 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -75,7 +75,7 @@ #{devopsHelmConfigDTO.resourceId}, #{devopsHelmConfigDTO.url}, #{devopsHelmConfigDTO.username}, - #{devopsHelmConfigDTO.password} + #{devopsHelmConfigDTO.password}, #{devopsHelmConfigDTO.repoPrivate}, #{devopsHelmConfigDTO.repoDefault} ) From 49cd2ff79825a57ec726a4ad03c8fa71e315ad90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Fri, 22 Jul 2022 16:55:18 +0800 Subject: [PATCH 150/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=94=A8=E6=88=B7=E5=BA=8F=E5=88=97=E5=8C=96=E6=96=B9?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/choerodon/devops/app/eventhandler/SagaHandler.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java index de84af8841..c45abed12f 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/SagaHandler.java @@ -9,6 +9,7 @@ import java.util.List; import com.alibaba.fastjson.JSONObject; +import com.fasterxml.jackson.core.type.TypeReference; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import org.slf4j.Logger; @@ -36,6 +37,7 @@ import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.UserAttrMapper; import io.choerodon.devops.infra.util.ArrayUtil; +import io.choerodon.devops.infra.util.JsonHelper; import io.choerodon.devops.infra.util.LogUtil; import io.choerodon.devops.infra.util.TypeUtil; @@ -188,9 +190,8 @@ public List handleDeleteMemberRoleEvent(String payload) { sagaCode = SagaTopicCodeConstants.IAM_CREATE_USER, maxRetryCount = 5, seq = 1) public List handleCreateUserEvent(String payload) { - List gitlabUserDTO = gson.fromJson(payload, new TypeToken>() { - }.getType()); - + List gitlabUserDTO = JsonHelper.unmarshalByJackson(payload, new TypeReference>() { + }); loggerInfo(gitlabUserDTO); StringBuilder failedUsers = new StringBuilder(); List exs = new ArrayList<>(); From e74db6335be4e78acc0c9da61fc04d0690124ba7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 17:15:58 +0800 Subject: [PATCH 151/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=95=B0=E6=8D=AE=E8=BF=81=E7=A7=BB=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsCheckLogServiceImpl.java | 85 ++++++++++++++++--- 1 file changed, 75 insertions(+), 10 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java index 07f034089b..4c0930f2cc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCheckLogServiceImpl.java @@ -2,6 +2,7 @@ import static io.choerodon.devops.infra.constant.MiscConstants.DEFAULT_CHART_NAME; +import java.net.URL; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -25,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; import io.choerodon.core.domain.Page; import io.choerodon.core.iam.ResourceLevel; @@ -34,6 +36,7 @@ import io.choerodon.devops.app.service.*; import io.choerodon.devops.infra.dto.*; import io.choerodon.devops.infra.dto.iam.ProjectDTO; +import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.enums.*; import io.choerodon.devops.infra.enums.deploy.DeployTypeEnum; import io.choerodon.devops.infra.enums.deploy.RdupmTypeEnum; @@ -269,6 +272,14 @@ private void fixHelmConfig() { List appServiceDTOList = devopsAppService.baseListByIds(new HashSet<>(appIds)); Map appServiceDTOMap = appServiceDTOList.stream().collect(Collectors.toMap(AppServiceDTO::getId, Function.identity())); + List projectDTOS = baseServiceClientOperator.queryProjectsByIds(projectIds); + Map projectDTOMap = projectDTOS.stream().collect(Collectors.toMap(ProjectDTO::getId, Function.identity())); + + + Set organizationIds = projectDTOS.stream().map(ProjectDTO::getOrganizationId).collect(Collectors.toSet()); + List tenants = baseServiceClientOperator.listOrganizationByIds(organizationIds); + Map tenantMap = tenants.stream().collect(Collectors.toMap(Tenant::getTenantId, Function.identity())); + List devopsHelmConfigDTOToInsert = new ArrayList<>(); List appServiceHelmRelDTOToInsert = new ArrayList<>(); @@ -277,7 +288,7 @@ private void fixHelmConfig() { platformHelmConfig.forEach(c -> { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); - devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); + devopsHelmConfigDTO.setName(UUID.randomUUID().toString()); if (DEFAULT_CHART_NAME.equals(c.getName())) { devopsHelmConfigDTO.setRepoDefault(true); } @@ -287,6 +298,7 @@ private void fixHelmConfig() { devopsHelmConfigDTO.setUsername(helmConfig.get("userName")); devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); + devopsHelmConfigDTO.setRepoDefault(false); devopsHelmConfigDTO.setResourceId(0L); devopsHelmConfigDTO.setResourceType(ResourceLevel.SITE.value()); devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); @@ -295,7 +307,7 @@ private void fixHelmConfig() { organizationHelmConfig.forEach(c -> { DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); - devopsHelmConfigDTO.setName(DEFAULT_CHART_NAME); + devopsHelmConfigDTO.setName(UUID.randomUUID().toString()); Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { }); devopsHelmConfigDTO.setUrl(helmConfig.get("url")); @@ -303,23 +315,48 @@ private void fixHelmConfig() { devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); devopsHelmConfigDTO.setResourceId(c.getOrganizationId()); + devopsHelmConfigDTO.setRepoDefault(false); devopsHelmConfigDTO.setResourceType(ResourceLevel.ORGANIZATION.value()); devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); }); - IntHolder index = new IntHolder(); - index.value = 1; + // 项目id为key + Map indexMap = new HashMap<>(); // 项目层 projectHelmConfig.forEach(c -> { + ProjectDTO projectDTO = projectDTOMap.get(c.getProjectId()); + if (projectDTO == null) { + LOGGER.info("skip current config.id:{}", c.getId()); + return; + } + Tenant tenant = tenantMap.get(projectDTO.getOrganizationId()); + if (tenant == null) { + LOGGER.info("skip current config.id:{}", c.getId()); + return; + } + + IntHolder index = indexMap.get(c.getProjectId()); + if (index == null) { + index = new IntHolder(); + index.value = 1; + indexMap.put(c.getProjectId(), index); + } DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { }); - devopsHelmConfigDTO.setUrl(helmConfig.get("url")); + URL processedUrl = null; + try { + processedUrl = new URL(helmConfig.get("url")); + } catch (Exception e) { + LOGGER.warn("current config:{} errorMsg:{}", c.getConfig(), e.getMessage()); + } + devopsHelmConfigDTO.setUrl(String.format("%s://%s/%s/%s", processedUrl.getProtocol(), processedUrl.getHost(), tenant.getTenantNum(), projectDTO.getCode())); devopsHelmConfigDTO.setUsername(helmConfig.get("userName")); devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); - devopsHelmConfigDTO.setResourceId(c.getOrganizationId()); + devopsHelmConfigDTO.setRepoDefault(false); + devopsHelmConfigDTO.setResourceId(c.getProjectId()); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); index.value++; devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); @@ -328,17 +365,41 @@ private void fixHelmConfig() { // 应用层 appHelmConfig.forEach(c -> { AppServiceDTO appServiceDTO = appServiceDTOMap.get(c.getAppServiceId()); + ProjectDTO projectDTO = projectDTOMap.get(appServiceDTO.getProjectId()); + if (projectDTO == null) { + LOGGER.info("skip current config.id:{}", c.getId()); + return; + } + Tenant tenant = tenantMap.get(projectDTO.getOrganizationId()); + if (tenant == null) { + LOGGER.info("skip current config.id:{}", c.getId()); + return; + } + + IntHolder index = indexMap.get(appServiceDTO.getProjectId()); + if (index == null) { + index = new IntHolder(); + index.value = 1; + indexMap.put(appServiceDTO.getProjectId(), index); + } DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setId(c.getId()); devopsHelmConfigDTO.setName(String.format("自定义Helm仓库-%s", index.value)); Map helmConfig = JsonHelper.unmarshalByJackson(c.getConfig(), new TypeReference>() { }); - devopsHelmConfigDTO.setUrl(helmConfig.get("url")); + URL processedUrl = null; + try { + processedUrl = new URL(helmConfig.get("url")); + } catch (Exception e) { + LOGGER.warn("current config:{} errorMsg:{}", c.getConfig(), e.getMessage()); + } + devopsHelmConfigDTO.setUrl(String.format("%s://%s/%s/%s", processedUrl.getProtocol(), processedUrl.getHost(), tenant.getTenantNum(), projectDTO.getCode())); devopsHelmConfigDTO.setUsername(helmConfig.get("userName")); devopsHelmConfigDTO.setPassword(helmConfig.get("password")); devopsHelmConfigDTO.setRepoPrivate(Boolean.parseBoolean(helmConfig.get("isPrivate"))); - devopsHelmConfigDTO.setResourceId(c.getOrganizationId()); + devopsHelmConfigDTO.setRepoDefault(false); + devopsHelmConfigDTO.setResourceId(appServiceDTO.getProjectId()); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTOToInsert.add(devopsHelmConfigDTO); @@ -350,8 +411,12 @@ private void fixHelmConfig() { appServiceHelmRelDTOToInsert.add(appServiceHelmRelDTO); }); - devopsHelmConfigService.batchInsertInNewTrans(devopsHelmConfigDTOToInsert); - appServiceHelmRelService.batchInsertInNewTrans(appServiceHelmRelDTOToInsert); + if (!ObjectUtils.isEmpty(devopsHelmConfigDTOToInsert)) { + devopsHelmConfigService.batchInsertInNewTrans(devopsHelmConfigDTOToInsert); + } + if (!ObjectUtils.isEmpty(appServiceHelmRelDTOToInsert)) { + appServiceHelmRelService.batchInsertInNewTrans(appServiceHelmRelDTOToInsert); + } LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>>>>end fix helm config >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>!"); } From f39b888b7bab8960669bfda15c17f4547dab063d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Fri, 22 Jul 2022 17:25:42 +0800 Subject: [PATCH 152/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=94=A8=E6=88=B7=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/GitlabUserServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/GitlabUserServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/GitlabUserServiceImpl.java index 4b0aa6fbff..764bf46bfe 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/GitlabUserServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/GitlabUserServiceImpl.java @@ -100,7 +100,7 @@ public class GitlabUserServiceImpl implements GitlabUserService { @Override public void createGitlabUser(GitlabUserRequestVO gitlabUserReqDTO) { - checkGitlabUser(gitlabUserReqDTO); +// checkGitlabUser(gitlabUserReqDTO); GitLabUserDTO gitLabUserDTO = gitlabServiceClientOperator.queryUserByUserName(gitlabUserReqDTO.getUsername()); if (gitLabUserDTO == null) { String randomPassword = GenerateUUID.generateRandomGitlabPassword(); @@ -156,7 +156,7 @@ public Boolean updateGitlabUserInNewTx(GitlabUserRequestVO gitlabUserReqDTO) { @Override public void updateGitlabUser(GitlabUserRequestVO gitlabUserReqDTO) { - checkGitlabUser(gitlabUserReqDTO); +// checkGitlabUser(gitlabUserReqDTO); UserAttrDTO userAttrDTO = userAttrService.baseQueryById(TypeUtil.objToLong(gitlabUserReqDTO.getExternUid())); if (userAttrDTO != null) { gitlabServiceClientOperator.updateUser(TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), From 2a4341736590875a93d3bc366f7e07f283d5bebd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 17:30:34 +0800 Subject: [PATCH 153/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/v1/AppServiceController.java | 17 --------- .../v1/DevopsProjectConfigController.java | 3 +- .../choerodon/devops/api/vo/CheckInfoVO.java | 37 +++++++++++++++++++ .../devops/app/service/AppServiceService.java | 4 +- .../service/impl/AppServiceServiceImpl.java | 23 +++++++++--- 5 files changed, 59 insertions(+), 25 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java index 39bfd25ee4..1cf280b8f7 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/AppServiceController.java @@ -568,23 +568,6 @@ public ResponseEntity queryByCode( .orElseThrow(() -> new CommonException(ERROR_APPLICATION_GET)); } - - /** - * 校验chart仓库配置信息是否正确 - * - * @param configVO chartMuseum信息 - */ - @Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER}) - @ApiOperation(value = "校验chart仓库配置信息是否正确") - @PostMapping(value = "/check_chart") - public void checkChart( - @ApiParam(value = "项目id", required = true) - @PathVariable(value = "project_id") Long projectId, - @ApiParam(value = "chartMuseum信息", required = true) - @RequestBody ConfigVO configVO) { - applicationServiceService.checkChart(projectId,configVO.getUrl(), configVO.getUsername(), configVO.getPassword()); - } - /** * 验证用于克隆仓库的url及授权的access token是否有效 * diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java index 2f7299dbe6..14bd977184 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsProjectConfigController.java @@ -12,6 +12,7 @@ import io.choerodon.core.exception.CommonException; import io.choerodon.core.iam.InitRoleCode; import io.choerodon.core.iam.ResourceLevel; +import io.choerodon.devops.api.vo.CheckInfoVO; import io.choerodon.devops.api.vo.ConfigVO; import io.choerodon.devops.api.vo.DefaultConfigVO; import io.choerodon.devops.api.vo.DevopsConfigRepVO; @@ -98,7 +99,7 @@ public ResponseEntity queryProjectDefaultConfig( @Permission(level = ResourceLevel.ORGANIZATION, roles = {InitRoleCode.PROJECT_OWNER}) @ApiOperation(value = "校验chart配置信息是否正确") @PostMapping(value = "/check_chart") - public ResponseEntity checkChart( + public ResponseEntity checkChart( @ApiParam(value = "项目id", required = true) @PathVariable(value = "project_id") Long projectId, @ApiParam(value = "chartMuseum信息", required = true) diff --git a/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java b/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java new file mode 100644 index 0000000000..0c9bedde73 --- /dev/null +++ b/src/main/java/io/choerodon/devops/api/vo/CheckInfoVO.java @@ -0,0 +1,37 @@ +package io.choerodon.devops.api.vo; + +/** + * 〈功能简述〉 + * 〈〉 + * + * @author lihao + * @since 2022/07/22 + */ +public class CheckInfoVO { + private boolean success; + private String errMsg; + + public CheckInfoVO() { + } + + public CheckInfoVO(boolean success, String errMsg) { + this.success = success; + this.errMsg = errMsg; + } + + public boolean isSuccess() { + return success; + } + + public void setSuccess(boolean success) { + this.success = success; + } + + public String getErrMsg() { + return errMsg; + } + + public void setErrMsg(String errMsg) { + this.errMsg = errMsg; + } +} diff --git a/src/main/java/io/choerodon/devops/app/service/AppServiceService.java b/src/main/java/io/choerodon/devops/app/service/AppServiceService.java index fde83afc58..ed967bf6d4 100644 --- a/src/main/java/io/choerodon/devops/app/service/AppServiceService.java +++ b/src/main/java/io/choerodon/devops/app/service/AppServiceService.java @@ -284,9 +284,9 @@ Page pageInternalByOptionsWithAccessLevel(Long projectId, * @param url ChartMuseum地址 * @param username 用户名 * @param password 密码 - * @return true如果通过 (未通过则抛出错误信息) + * @return CheckInfoVO */ - Boolean checkChart(Long projectId, String url, @Nullable String username, @Nullable String password); + CheckInfoVO checkChart(Long projectId, String url, @Nullable String username, @Nullable String password); /** * 查看sonarqube相关信息 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 884bbaeb8a..8e68c0b8e1 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -1451,13 +1451,16 @@ public Boolean checkChartOnOrganization(String url, @Nullable String username, @ } @Override - public Boolean checkChart(Long projectId, String url, @Nullable String username, @Nullable String password) { + public CheckInfoVO checkChart(Long projectId, String url, @Nullable String username, @Nullable String password) { + CheckInfoVO checkInfoVO = new CheckInfoVO(); url = url.endsWith("/") ? url.substring(0, url.length() - 1) : url; URL processedUrl; try { processedUrl = new URL(url); } catch (Exception e) { - throw new CommonException("error.chart.address.invalid", e.getMessage()); + checkInfoVO.setSuccess(false); + checkInfoVO.setErrMsg("helm仓库地址不正确"); + return checkInfoVO; } ConfigurationProperties configurationProperties = new ConfigurationProperties(); configurationProperties.setBaseUrl(processedUrl.getProtocol() + "://" + processedUrl.getHost()); @@ -1476,12 +1479,22 @@ public Boolean checkChart(Long projectId, String url, @Nullable String username, Call getIndex = chartClient.getIndex(params[1], params[2]); result = getIndex.execute(); } catch (Exception ex) { - throw new CommonException("error.chart.address.unreachable"); + checkInfoVO.setSuccess(false); + checkInfoVO.setErrMsg("无法访问helm仓库:" + ex.getMessage()); + return checkInfoVO; + } + if (result != null && result.isSuccessful()) { + checkInfoVO.setSuccess(true); + return checkInfoVO; } if (result != null && (result.code() > 400 && result.code() < 500)) { - throw new CommonException("error.chart.authentication.failed"); + checkInfoVO.setSuccess(false); + checkInfoVO.setErrMsg("鉴权失败"); + return checkInfoVO; } - return true; + checkInfoVO.setSuccess(false); + checkInfoVO.setErrMsg("测试连接失败"); + return checkInfoVO; } @Override From 216b7f4d5511d7149a2ff707ba36dc943bb0e666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Fri, 22 Jul 2022 17:47:49 +0800 Subject: [PATCH 154/228] [IMP] udpate pom version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index de5f4e61e2..7f2fc8807d 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.4-SNAPSHOT + 2.1.4.RELEASE jar https://github.com/open-hand/devops-service From 41a3e0f70dc13c9d5b630c0b646f282490088c6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 22 Jul 2022 17:55:20 +0800 Subject: [PATCH 155/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=A0=A1?= =?UTF-8?q?=E9=AA=8Chelm=E4=BB=93=E5=BA=93=E5=90=8D=E7=A7=B0=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=AD=98=E5=9C=A8sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceServiceImpl.java | 4 ++++ src/main/resources/mapper/DevopsHelmConfigMapper.xml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index 8e68c0b8e1..e7eae897a5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -1474,6 +1474,10 @@ public CheckInfoVO checkChart(Long projectId, String url, @Nullable String usern Response result; try { String[] params = processedUrl.getPath().split("/"); + if (params.length != 2) { + checkInfoVO.setSuccess(false); + checkInfoVO.setErrMsg("helm仓库地址无效,应该类似:http://localhost:8080/org1/repoa"); + } Retrofit retrofit = RetrofitHandler.initRetrofit(configurationProperties, new RetrofitHandler.StringConverter()); chartClient = retrofit.create(ChartClient.class); Call getIndex = chartClient.getIndex(params[1], params[2]); diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index b9986f4f54..cce2298075 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -29,7 +29,7 @@ WHERE resource_type = 'project' AND name = #{name} - AND resource_id != #{helmConfigId} + AND id != #{helmConfigId} From 45d34e6987cb59b41639fc2151176f80611f9c44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Sat, 23 Jul 2022 18:10:40 +0800 Subject: [PATCH 156/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7f2fc8807d..58393f6cf1 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.4.RELEASE + 2.1.5-SNAPSHOT jar https://github.com/open-hand/devops-service From 334dc920fd2956d38230675ee5c70794e58cdda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Sun, 24 Jul 2022 14:34:32 +0800 Subject: [PATCH 157/228] =?UTF-8?q?[FIX]=20=E5=A4=84=E7=90=86devopsHostCom?= =?UTF-8?q?mand=E4=B8=BAnull=E7=9A=84=E6=83=85=E5=86=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsHostAppServiceImpl.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostAppServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostAppServiceImpl.java index 104ed8242c..29e9814003 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostAppServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHostAppServiceImpl.java @@ -354,6 +354,13 @@ public DevopsHostAppVO queryAppById(Long projectId, Long id) { devopsHostAppVO.setCreator(creator); devopsHostAppVO.setUpdater(updater); + if (devopsHostAppVO.getDevopsHostCommandDTO()==null){ + DevopsHostCommandDTO defaultDevopsHostCommandDTO = new DevopsHostCommandDTO(); + defaultDevopsHostCommandDTO.setHostId(devopsHostAppVO.getHostId()); + defaultDevopsHostCommandDTO.setStatus("failed"); + defaultDevopsHostCommandDTO.setError("Operation missing"); + devopsHostAppVO.setDevopsHostCommandDTO(defaultDevopsHostCommandDTO); + } return devopsHostAppVO; } From 7fb12ce510537a92d2a9690533cee736e3ff68c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 09:26:50 +0800 Subject: [PATCH 158/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E9=85=8D=E7=BD=AE=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/AppServiceServiceImpl.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java index e7eae897a5..6a9ec97593 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceServiceImpl.java @@ -1474,9 +1474,10 @@ public CheckInfoVO checkChart(Long projectId, String url, @Nullable String usern Response result; try { String[] params = processedUrl.getPath().split("/"); - if (params.length != 2) { + if (params.length != 3) { checkInfoVO.setSuccess(false); checkInfoVO.setErrMsg("helm仓库地址无效,应该类似:http://localhost:8080/org1/repoa"); + return checkInfoVO; } Retrofit retrofit = RetrofitHandler.initRetrofit(configurationProperties, new RetrofitHandler.StringConverter()); chartClient = retrofit.create(ChartClient.class); @@ -1493,7 +1494,7 @@ public CheckInfoVO checkChart(Long projectId, String url, @Nullable String usern } if (result != null && (result.code() > 400 && result.code() < 500)) { checkInfoVO.setSuccess(false); - checkInfoVO.setErrMsg("鉴权失败"); + checkInfoVO.setErrMsg("账号或密码不正确"); return checkInfoVO; } checkInfoVO.setSuccess(false); From 1d6d83d9966b2fa67625fb8568ae7fe153613ffe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 10:25:49 +0800 Subject: [PATCH 159/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E6=9B=B4=E6=96=B0=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/api/controller/v1/DevopsHelmConfigController.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java index d9c8e52a7a..0dd07dbb87 100644 --- a/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java +++ b/src/main/java/io/choerodon/devops/api/controller/v1/DevopsHelmConfigController.java @@ -80,6 +80,7 @@ public ResponseEntity createDevopsHelmConfig( @ApiOperation("更新helm仓库") @PutMapping + @Permission(level = ResourceLevel.ORGANIZATION) public ResponseEntity updateDevopsHelmConfig( @ApiParam("项目id") @PathVariable("project_id") Long projectId, From 204d1cdaebee0ee4d6df0dcfe70b39e3bf82e26e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 14:15:14 +0800 Subject: [PATCH 160/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E4=BB=93=E5=BA=93=E5=88=97=E8=A1=A8=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E4=BB=93=E5=BA=93=E8=AE=BE=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsHelmConfigServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 3020a1a74e..120af51167 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -82,6 +82,9 @@ public List listHelmConfig(Long projectId) { if (devopsHelmConfigDTOtOnOrganization != null) { Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); devopsHelmConfigDTOtOnOrganization.setName(tenant.getTenantNum() + "-" + projectDTO.getCode()); + if (defaultDevopsHelmConfigDTOOnProject != null) { + devopsHelmConfigDTOtOnOrganization.setRepoDefault(false); + } devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOtOnOrganization); } else { // 如果组织层的仓库为空,查询平台默认 @@ -94,6 +97,9 @@ public List listHelmConfig(Long projectId) { } Tenant tenant = baseServiceClientOperator.queryOrganizationById(projectDTO.getOrganizationId()); devopsHelmConfigDTOOnSite.setName(tenant.getTenantNum() + "-" + projectDTO.getCode()); + if (defaultDevopsHelmConfigDTOOnProject != null) { + devopsHelmConfigDTOOnSite.setRepoDefault(false); + } devopsHelmConfigDTOS.add(0, devopsHelmConfigDTOOnSite); } From bb8d8ea95bad097f733fab19f19643c2d9b6f8b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 14:45:35 +0800 Subject: [PATCH 161/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=B1=82helm=E4=BB=93=E5=BA=93=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsHelmConfigServiceImpl.java | 10 +++++++++- .../devops/infra/dto/DevopsHelmConfigDTO.java | 11 +++++++++++ .../devops/infra/mapper/DevopsHelmConfigMapper.java | 2 ++ src/main/resources/mapper/DevopsHelmConfigMapper.xml | 6 ++++++ src/main/resources/messages/messages_en_US.properties | 1 + src/main/resources/messages/messages_zh_CN.properties | 3 ++- .../groovy/devops_service/devops_helm_config.groovy | 1 + 7 files changed, 32 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 120af51167..f8e7f995fc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -153,11 +153,19 @@ public DevopsHelmConfigVO updateDevopsHelmConfigOnProjectLevel(Long projectId, D @Override @Transactional(rollbackFor = Exception.class) public void deleteDevopsHelmConfig(Long projectId, Long helmConfigId) { + DevopsHelmConfigDTO oldDevopsHelmConfigDTO = devopsHelmConfigMapper.listObjectVersionNumberById(helmConfigId); + if (oldDevopsHelmConfigDTO == null) { + return; + } + DevopsHelmConfigDTO devopsHelmConfigDTO = new DevopsHelmConfigDTO(); devopsHelmConfigDTO.setResourceId(projectId); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTO.setId(helmConfigId); - devopsHelmConfigMapper.delete(devopsHelmConfigDTO); + devopsHelmConfigDTO.setDeleted(true); + devopsHelmConfigDTO.setObjectVersionNumber(oldDevopsHelmConfigDTO.getObjectVersionNumber()); + + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper,devopsHelmConfigDTO,"error.helm.config.delete"); } @Override diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java index 6b8162559c..27bb661f4b 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsHelmConfigDTO.java @@ -43,6 +43,9 @@ public class DevopsHelmConfigDTO extends AuditDomain { @ApiModelProperty("是否为默认仓库") private Boolean repoDefault; + @ApiModelProperty("软删除 0未删除 1已删除") + private Boolean deleted; + public Long getId() { return id; } @@ -114,4 +117,12 @@ public String getResourceType() { public void setResourceType(String resourceType) { this.resourceType = resourceType; } + + public Boolean getDeleted() { + return deleted; + } + + public void setDeleted(Boolean deleted) { + this.deleted = deleted; + } } diff --git a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java index 99d9c6f011..362d78bfcd 100644 --- a/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java +++ b/src/main/java/io/choerodon/devops/infra/mapper/DevopsHelmConfigMapper.java @@ -23,4 +23,6 @@ public interface DevopsHelmConfigMapper extends BaseMapper DevopsHelmConfigDTO selectWithIdAndNameByAppServiceId(@Param("appServiceId") Long appServiceId); void batchInsert(@Param("devopsHelmConfigDTOS") List devopsHelmConfigDTOS); + + DevopsHelmConfigDTO listObjectVersionNumberById(@Param("helmConfigId") Long helmConfigId); } diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index cce2298075..415f1f091b 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -81,4 +81,10 @@ ) + + \ No newline at end of file diff --git a/src/main/resources/messages/messages_en_US.properties b/src/main/resources/messages/messages_en_US.properties index 03a610bb26..528e936e9c 100644 --- a/src/main/resources/messages/messages_en_US.properties +++ b/src/main/resources/messages/messages_en_US.properties @@ -932,3 +932,4 @@ error.get.helm.chart=Failed to get chart info of helm repo. error.chart.address.invalid=Invalid chart warehouse address error.chart.address.unreachable=Chart warehouse is unreachable error.helm.chart.download=Failed to download chart {0} +error.helm.config.delete=Failed to delete helm config diff --git a/src/main/resources/messages/messages_zh_CN.properties b/src/main/resources/messages/messages_zh_CN.properties index 10e5168424..5b65512dd3 100644 --- a/src/main/resources/messages/messages_zh_CN.properties +++ b/src/main/resources/messages/messages_zh_CN.properties @@ -928,4 +928,5 @@ error.helm.config.name.exists=helm仓库名称已存在 error.get.helm.chart=获取helm仓库chart信息失败 error.chart.address.invalid=无效的chart仓库地址 error.chart.address.unreachable=chart仓库不可达 -error.helm.chart.download=下载chart包失败 {0} \ No newline at end of file +error.helm.chart.download=下载chart包失败 {0} +error.helm.config.delete=删除helm仓库配置失败 \ No newline at end of file diff --git a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy index dcf4027290..f1d361d68f 100644 --- a/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy +++ b/src/main/resources/script/db/groovy/devops_service/devops_helm_config.groovy @@ -21,6 +21,7 @@ databaseChangeLog(logicalFilePath: 'dba/devops_helm_config.groovy') { column(name: 'resource_id', type: 'BIGINT UNSIGNED', remarks: '关联该仓库配置的资源id, 项目id 组织id 平台层为0') { constraints(nullable: false) } + column(name: "deleted",type: 'TINYINT(1)',remarks: '软删除 0未删除 1已删除',defaultValue: 0) column(name: "repo_private", type: 'TINYINT(1)', remarks: '是否私有 0 否 1是', defaultValue: 0) column(name: 'repo_default', type: 'TINYINT(1)', remarks: '是否为默认仓库', defaultValue: 0) From a5f7a2071d0d7fbb651cab12b45f5f3e1b08f48d Mon Sep 17 00:00:00 2001 From: jamin <245139263@qq.com> Date: Mon, 25 Jul 2022 14:54:59 +0800 Subject: [PATCH 162/228] =?UTF-8?q?[ADD]-=E6=9D=83=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-menu-user-role-label.xlsx | Bin 117213 -> 117242 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx index ca60b3d1d48e1d30a869ab4027ccab14dbee54fe..bc632fc73dea77b7a591b83ba7139f1481fe47d8 100644 GIT binary patch delta 89702 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®`A+h(+S`?2<_e&g&aO(?vE63$D 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

@+2zeKcb>Uahqc{SuY!Y+V0{y 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

<4)%r;b z4Q@dOZo$DMFN&rm?_Uul-WqSp$xhT|g-#|Gc9)OI4B1CCQ{+2~n_F_PS@8OD^=lk< zQmpldF3%2`+pDRk9H`g6tfbac9Q;|d-q!G98A`W=|7tm_#OnRN#C&r;G{7a^%cCU?Gf6gdR;|X58%NI$-y7iFkpJ61tp#wrM5=5dlkE};&Cdc@E6`_M){;Vu zTzcH5&HLk{eX-Qu3xBmGjNVCHG2m5KJ^+TXm)0&`Mpq|)YFVJ#=;Khm*7bAlx92^} zYzUZ7Posv|LOho`PY^6V*Ozy$Ny=H85Y>(xT{u+ul0+-M4wlivtfB;rfA}8=H znzouzABnQeaVeLAO<*U!dqJq1Dn${??*I5n$!wXV(V=9MW~;hrYk5$8v{$2rm;hlC zK2sMGgD_wL(3X_pU1BCG$YN@60;$!_k!z9?Y>=3#2H`nxS8^g^`QGgXUr^bDi$<9N z#=nDTW90!JuSAMKq!E&b?97p9I?FyX$t$9#SEc3O^Aslrp|+`hbXBL2HhgQui;%wX zwAy;aFfmo>cQWE5W9|$8cb>Vj`jstN+~n}&%%!@_3+#nEJuTyr1$GA2%hBrOG zKSDcPseqRJ0EC-+g$kp;x#QJvOI&;)9Xirm4@(rs`m@>JdU41qu_$=YeqLl$<+kSF zuxK{M{-z%HSt3=f$}(@MStaflMKbE}VuB&_5 zC|Pd&zKIZHvi&12!t;=wO(d|^^0*EV&#lTPw74)Bg`?_kk{Xk^WKo^?IQH^YFt?y! zkmoK)KVJqT%dnq^VVu{w_ZAVjJZJISo*1gX4fqvj_-TNj}35B>50Wqpa0|CLR znIbO)@wkd-4MvkwgRhw8b8L2DIM4}BIFUj%2MfXK7>~VXTd7d-%Yjy|r)cydS1;iL zIx(4%XgOG)esB~`T+m$oHXFf`oF{WJX~ON_&-1O&X-px@*5(}vyB+q8R^V2E; zAeKbkm&OiHWxk{WPc=J!wsCqUQ!&Dm-lze_h2BrAYQ#C=sL;krhex`b;J`XuwOgc! zm{*rHj^jEEPSR6fC3r`3TeGRUH5rjuD?i@9HIllbOUxL&8GM}}XR(5`o}J+!XlYD{ zCsu$gqHtKq2WfRavyY^60GQR4+9KTqk5aid-U~-ES;8-Y7No;888NO*0%hvVX?90W zGk8nzHeL}xp9rkf?W#77$wsT~_+44)<*wn6Za@{=|J*5zmH`lH-kgP>B&{44)|@;4 zOkj(SqiqNstup>3$e_ktWR)INq8syxzcSBe;}cidBsnB{lY$GFuKGc*E^x)25o|48 zg>TC=;+PKa9^jFYpSnzx@9X{h8L}3^rzv>tLT>5`u~*Pfg31%AN;votwD0Cti`2zl z%7a^-s%a&6=A-16d5Qv-szVI!lp&LPB=W6bagh_79gDNEJEWytqsafdc zVtE2C#KlUnI44_j;TN(ZCZb`{g7HPT6w@jC+{eMX%NKFB+nB@8>}c8SKf$5nvd%9x zfcMjpPA>+{Di^Ta_~dm3H+%O^!miXz3uX#3d{Cw_-vunA;c5@*bzb?sF=zKo;+BZ` zxIcN2ZsVawZEiS&o9?pbQs}#tvZ%`{&~hrn*lelqjRK{4WjnHx&B85&R{zF?y2M`T z9^u{>Tku%MMkye&eMUnCPU?18^zDj29XkC<9e~`WKh1%sB#iQOp(d~7}sRGv|u0Nd(NNQ zEq{ExGQ9P#_|fU$rQlfk?baWL5)+=do2<1I1{x=XK3)506@ed1>4C7_v8@Cu@n8=G z2xok1f)rL8_&gg$_MbOQp_Z!?P3_MVfzjfK4yXUDn4HY{UX(u)yr{eygnFo;iGUZk zbFAoe`>4hK1$n{B`FIDt{I@SXo8QEcvb)*0?>X4$r$mvGW!V`uP@}&O4wR+ew!FL# zE3A6Mh$-_0sRi>42o#O~Bg)YD?V~0z>g2D5ipYeSEm9}?=XFmRl2-DWBWM(Lwgi~X!mExu8+egad!jYo^Z&8F~Uq%@1vs&Wl7N}g1jP`@@vep7J z^GH?Y4sZuQ(}8U`PNfzey$>rymd|(2ce}J=BSO9Hp;i4pF=O@fM!?=g(g3B z<#}m?y#rP|v7fGX>Soe-rOBFZPdeY3p z^)t4ChP|KL<7R(^r{IDuEA5ONFBq+P*Hc+!DHXO{Dz{VuO#ic?aQXMtek_b#yJTbo z*;=9pN`tMAs=kec-awF7=G6Fpz!$tr!5SDd@RqIs3j1tF@S;nP4`pm*urx$#IGXS+ zZ!#sOiq*mJV5`*23NyEcNp!6-+@Vr|cO@)h@nNcLq5^Yx=*<1(t1BlWB4IA?f<|8r zjl|)#CKL9zy+z-|GkkLu?ilKEMf&-fLTb=6N$Oib)-nb=7)TYXw^a@)kG7;%&HIG$ zb1hXxZO4rf0e|*9`Xp%GwUH-Le5Ynh^#DMZ2!_|MW(2FY@I(8dL{`H%U%Vq3~g(7(#wtVh6g?pKo%NP9EB&u+0|cL~p0%OVx)Su!A$e zLkSy@(*ouJL$FYc_L8>A`)oh?zPs$_lnO86wL~nNd%vJK75QnL@PsGhINq#_agWln zo1GGy+jJH2g;jxQ-@bd!xH&(bHrjq2BI-x$@D%dJl}nS~47UnmqHkyUl1Ri*QUY96 z8AV&?@R0KrLDS(#cfDnxkw>A5cplSB%h=uIuMT;|&yY$DNp+6gr1Z6H=xWd6UZ6 z!P^J#ot)2N?9~sy__jfi0~mTM1Clzb83 zJ&IYD$PDvzdIA?OqCgL;GHPaDZdv<<{KS0 z8U8z^v>-2>sf!M&3SPKp$ayv2OtH(h)%iePd3XmNVvdrPS=phw=apts8-SO^0M8;y z1M!M{{-#mW!nyvE8i;3c;Fj!t)tp5m^rzZ2�tUi(gVI~4Nn{pBj|u_?FnJXp_5Q) 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 From 047b96146fdf98bd911fa47fab74708c08878614 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 15:31:33 +0800 Subject: [PATCH 163/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E4=BB=93=E5=BA=93=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsHelmConfigServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index f8e7f995fc..d4deacc0df 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -52,6 +52,7 @@ public List listHelmConfig(Long projectId) { DevopsHelmConfigDTO helmConfigSearchDTOOnProject = new DevopsHelmConfigDTO(); helmConfigSearchDTOOnProject.setResourceId(projectId); helmConfigSearchDTOOnProject.setResourceType(ResourceLevel.PROJECT.value()); + helmConfigSearchDTOOnProject.setDeleted(false); List devopsHelmConfigDTOListOnProject = devopsHelmConfigMapper.select(helmConfigSearchDTOOnProject); devopsHelmConfigDTOS.addAll(devopsHelmConfigDTOListOnProject); DevopsHelmConfigDTO defaultDevopsHelmConfigDTOOnProject = null; @@ -165,7 +166,7 @@ public void deleteDevopsHelmConfig(Long projectId, Long helmConfigId) { devopsHelmConfigDTO.setDeleted(true); devopsHelmConfigDTO.setObjectVersionNumber(oldDevopsHelmConfigDTO.getObjectVersionNumber()); - MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper,devopsHelmConfigDTO,"error.helm.config.delete"); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.delete"); } @Override From 92ee8f56fb836de7aa1a04a1b65405f55832e329 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 25 Jul 2022 16:33:10 +0800 Subject: [PATCH 164/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=BA=94?= =?UTF-8?q?=E7=94=A8=E5=B1=82=E6=9F=A5=E8=AF=A2helm=E4=BB=93=E5=BA=93?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/DevopsHelmConfigMapper.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/resources/mapper/DevopsHelmConfigMapper.xml b/src/main/resources/mapper/DevopsHelmConfigMapper.xml index 415f1f091b..10bf08e25e 100644 --- a/src/main/resources/mapper/DevopsHelmConfigMapper.xml +++ b/src/main/resources/mapper/DevopsHelmConfigMapper.xml @@ -33,12 +33,12 @@ - + @@ -38,6 +39,7 @@ FROM devops_helm_config WHERE resource_id = #{resourceId} AND resource_type = #{resourceType} + AND deleted=0 @@ -86,5 +90,6 @@ SELECT id,object_version_number FROM devops_helm_config WHERE id=#{helmConfigId} + AND deleted=0 \ No newline at end of file From b6379bf66f017c39fbee420476eaff4dc036e224 Mon Sep 17 00:00:00 2001 From: jamin <245139263@qq.com> Date: Mon, 25 Jul 2022 21:18:04 +0800 Subject: [PATCH 166/228] =?UTF-8?q?[ADD]-=E6=9D=83=E9=99=90=E9=9B=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-menu-user-role-label.xlsx | Bin 117242 -> 117214 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx index bc632fc73dea77b7a591b83ba7139f1481fe47d8..b59b0e7f37f411f8081d6728e799d4b2487e6893 100644 GIT binary patch delta 70323 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

5PEYV3Nir;0kV^Jp} z$gEpU7Pc-&l8}VHbGTzyl0?-X$El#^Okr`A_s26P^LSVaaT1Y-ssU?Ys|X!Kf*>%T zqZ??=ug)N9P>GhGsiq<@__8ARwM@NFLifwZD3TEB{PN+7Ot9bI;d1LoO#u_@o6ZSf zE^ud1(J4Bs9(HsqO%+wwvlOW&mHB`cBWga#$$c~-3l;z%=mSNRGHWO+0U~iKtkC~A zHUt{-?~5m~;lmXA=O{Kpw{t@{pHoY>5^rq72+ovnS4QleK*aCo%_v^Ai;+<`g)lpW z6CM+K7aB7V6UmdR_+3VtyHZszf;M&|uHYs$Qx#XO15h{V7g;~eA?Z!>M9(?E_4_+s zUU`6s;r`$GgA*_o9RkM~?n>cY4z5HYf`jr+D8^xSWCco+k78a){)?XH2(?IAVD=l# z4RnBlhC!_<*-PzXC&l(f0bfayCvt&##yP9)8sUb9vIqCC%fpiEhegHa<|hQADYurIrqKg%{W7kD?{U z;jt@@8Fb@ zkE-~P!t>P=eZm&od`_^U;;_81EzC);%~vV*eS43xJ^|%3Ofb}r2E0cvH;D;q;Ewc8 z$qFo+Bo^9Yso1+UL!tLL!lDep9zi$j91W`23*pK$SWO3E+!5X<6Y8>`kC2nt1Zh2R zisJl@HO7tw{{(Yc3Xtqc(KOg&>b)r`3BO!l@)0U^xxvpZJ6$%#e2Y0XCjXR2Xn)Ib zkJ?5@r@=!vGmXfr0(O!yylhQQP?$BgNGYtha@;K9IJXC@3C)Tn8tx5$=eeO%8I#ho z?fUrVXr=Ndus&F+-!lM^GAQyAk=3I^>i%P!{+o{|dd|r~!30Zn5S&$*6cF0o&H1c) zW3zR@WSU_BsP)T?ruS4GL=Xu!MFyT&@4o3m$LlJiqPb6s!<t zg)b68<2Jw1YB;_3YC0`CNSihW#EC|5&aq#W`#vr@p37DQyc3vPa){W)x;2`w2-EH6 zz1!@!HOQ;^ewkFIGtlg}hA%G~u8^RsuJqGp9>!a6dtElG({NRcE?R`C zUEd&6vC!I~40ZLa(^Ion=U8q;%K&)|oJnL-FHpgoc;8P)s-H|!tqhq2v; zkKIPqEXHZ14{R!gsUOu0uqW?TWdkB^EpKj{LMH4j`9^Gsar%L;xzI9`&>0sciB+Mm zZLF=Ao8Oi*Xd-qrUN92|0^0jA=lgfjuZ-GF;d4JE%SDAP6G?9uk@Y$AnOC7t`=_AY#)jrEeGm)a)LZpb*XVR> zS4m$cUj`4)25cD{I`9<6_=_AS16T_{1TX6^;f9Va{3R0SR?ASj+Lxo{zHN=~i+Ja7 z5&K9bYQg9QKy1)&rOu9bb)W>dDaN(GMg_LDY2r|NQ0?mVM|hSbpIGJN(-D$m=tvQC zB;IiHLN#?zPn!zRooNp_uU`UUB6Wzwyd(utZ4PM_QZ-^&mn^A@S-neL#de~{X}`by zpTl+=G4&D(CPOaJi}ZNynJ1EL~O`KumzVNYrU3*1O_pt ze|-m@+z{V)>$)t7@QDkUWl^JKQEE6>tP{vKrm|DPb#Cx3DG{fIB%g7FY1H3xU_WhQ zD=6~~*_5flT7WzFj9E>iD4kwcKlwsM?=(!UDd}G_NFrxYVH_C1tuVx=>9FAT3{L+8=_(pJz0FkK{ zJ5d8a_|nTX+zG$nT?!mZz~!k^X^DvjzqeSQ*4`2B$XON0KMu_^=!t<$PO30hPAQnpd8)H1H zGY`DKWB8opykt^;0ZzwYrZ6w4d{N=f=RrspUaGTR$-cpnUr=@>VelXG=Mfh4!DK2U z)p>Z^jPRjMSpUe%hpY!gU+~;ESR$|s&Nf2Vu$ki*D8&rVxDq&3cCg08D>NXT_1zL2 zBEeDBsAMW60DjW}wCA&VIHbrimP83V#RjPXH!hzZM>knCySWgT-uvi|^jd7r9B!rL zf6_+huStY>zlPR*GXWgpkr3E36Cq~qQSr3owjJ2TqD73jta=VH`)?TgTUT@-!izk$ zi#`wr4LlSov~7S&h`OL^L(YX*srR>}AKbFBFtw}Xe;L%3uUU(d@Oo49?S_Oj183dd z0jrg~ip>GJXGydAo|yHEVu*xmHXHQ#!rmONu`E2m*+q&k5mw@2p2H49iQ#khM_U2C8!C{z+^XLh|B zPrriCwOUa9RrN@Av8^n=_|ujbPxmaFiY|NYHs(nr+wbc<&WG};c-HSkU=-AL)?e~H zC@yK##9smi`SlcFX2?$V?8{wg7*&lC6F_%AwEW;_QM_s`r8QNbQoMTAg{}oP>7Tyl z8jV+yj=jSxS8nYRGiM}!A}dStVP0YIA<5 z>FrbzWmdXE8QwPBIo5 ze9-R`09(=}E0K;!z+MOwaVS1~?dh2k9Fm4$r84^>7s?b5q|_-$mV>Atjetz*jK4+h zOpjoRM_n$@zqdV2X=j5mDKR5a$M#W)f&wto^L2 zFHvu`lHV|Z3*@1R2q%NM2u#3Vxs$)2);6%ivE0sn1)6qp;^!0YgD#UI&8aKOq06Mx z5fsPXiX(5Nkwf;jgJn5%75<{QOn4%f*&o+poB7N3nUmKRea2uc&CZlht3r60=EBj9~Su z=IK9xjuftDSOd|uIV>DPK_jn4!T`wZIy0z!+Sp=3MHS55&Z^sAiq0BBh5yGUfW*pz zTI9!{CC@q28S3slgt@$OUBCBlk`8{`{FjY0lS2|MQ2@q*J{etPWl1hHtmV1IO~?ZI zEwe8me?JQe*{67R1SA1_y1Ukcny;z5@%$>$fqX;9 zW}YyCN15?Lq0V2_6_-ng$g6zMb;KhyyNA}jVD~cPMI$u#0M{0A3V~j@kAKBWeiFMW zlx#W#m|m#DRaSfjZ4B2_f zs;TW(T_K4&H6@L0VWfp+hFe5h^!}tm5QuYtko1ns+5m}SiXYo55yv51vbMnTM=LGx zWA&)un*!Lny(CmSMR`TH%I5h_s~=a9*-$-i3yvt1?xNf9JnlMAZV&b# zN`IHK0(|5lv%o(WuKmvf_vcQ5QsH;D1nkBG9NS_(S(XCsuo;bbL36|fg6ZyXBuX0n z{@~f~YQ(wT1%x6UA|JHW9MHAI#Z1EjSkdYaVA*EUu=R6OCL0ZtYGP*IXdR(|KGYye z)w5AF;LeM-l1Lxim9eUtYXwd>dWp_AirZRH#{`zU0zGjW-+F_42 zfBqXqUc`$wA9YQo)204<1)h+EQ`M9@uLr(v=9p{#hpWG(LEubX@)sEE3t?uD2;L#MU%|7lkAB5; z;M3G+wUmvePbrrN*=k&Oev`Hia#L#C(gLZq*V0NI{5#O~-pN=tVjK4mL)p>+ie*yX zWkeD@(t%~q4v|~S*L915G)|SXim+v4whAT@x+(Pk zAob&)aLioIOL><#)vP!$XNJSVjlW*a$cVM@GkWt>3X(ZP*vufGLcC351K!CCJ`1e7 z2kL<$DC{Nv$ktthYv_R5?#6rnDnXMZP1F+UI9F;P0HV4(lC) zSs{^x*O*dU@R>|Q29^q~*Q^BuU4)1szhHInKhFW^3j#jko3gDDi~-?%h9Jj-YskS0(uO;W+bKCNKR z_wn_A6x}UwbG|^|+`^2uqQ@(M^x!GT3w%$r&a!4$*Z7G1)tD3OfHeh*T-Tvve$0vW0?G>%R+B=>hdhbfRHerX<^Y|)BXmEP z3TN)lK%jUdPgGQgc*Fmsa?|~cT);q{e}_cHbX4rOvDc1=$PDf$pCo=Qj_}~9m=21m zL`ef{Tj3)(s;AzAqDc#)kEJBnR`K!P7cr`{mSQMD@NBRJL@^r0?93n(nLsziA8tTL z;F^!#57lYMCxo)q6OxN9gg)7X4D?cb8W$Pl5g9I$p#F=nJ#C5DcOJ~JJ>L%j+N&`}cr1wnySiy=fps8?_B96d=wA$cL*Z!V{V z-i_!pG9CIPrCYlbVPt+Ma@_C;qO9aG=P0(qm_QLCwgf?Bmj`MvRMj#2m8S0bXtg+T z81lIyfB&a4nAg^+@#t!xy`%}&e9q;7IwY3O7if{8?XqXmZjR~MAh=(#=BPoBJR7+ln?HJ%p zVsCm^k|eCn6#{n_Fsmq#`dbz;p#*aJy zH`=EYPA9K23<+$7uww?v0BZnaEqK8&v3?{=5W}D34>=j&y&VeS#+uIguG~2)cLNZ`j-r7Xehm6LSH5b{aUR^4y&!OLFJd55Fsr}wu2GM46Q>D-9%%Jg4co{WH< z_@$|q$VY1`^jS1n=uWUwd%=rapz z-_Vj{E2!D&`^!MaYeeq$Q{xY37-W!7P35oy~92UE*CY zX|v7#4jYr%5zySROs5=a0#R33+T57Zx384kuS)W#LL=o+bqN2S@Y+}0N=FK&n^E8b z-wVg+$~7~9+pR7lqJ$F`Bpa%00g>4rZn>C zB1L6>G?W$mBvu40Ok@95ysvl-K#hGQ?KMb7_CuLK2&v#|855_aFDVwGvfdRS@Czh@%M}IO5QRNF)i*c-Xu~CCB$$Q?XK2zJZ;FF6JXRvQ4jH5{Zi& z9?+KKAD?zG3X3IjK{XK6`UJKDkm8<{n{1AL55(sZT`lJz5c9R9e6_z3c-K zfF_rC=p8Pp?=W$Q4321jYsAO@PJVnK`ycqhij)LHNBygKN*+Kb#9*mOzj{${gRF(QeGU)dzzNL& zSl$#Y>sbk`dqkhPdOo~*O($hfO-nzvpv-_jyRWSD2}B51AVLH;AnW-Uz!5q&VGI9j z=AftIn1H0GfJN4F*)FIlw?aDX+btQc$`PivJ#?f6JDST0lydp)x$qw%$vkg3as#?9 zRgfB41>_q*(=2Oz`%3F6>GGP5WPy9SJKy$$fpSC0n0WOYo;ZDHgCqtI-B1siKshh@ zNd^n7KkWgs1y|)g+$U8HFkS_x+mFv?H5%FMJSoxc6uNb$S#MQ+l~i}s{Z&5Z2!Ex_ zPG()x>uw?BRdS5+v{3Y$E{P@|mCM$QV#XM3hyf8Rm-JhAIg1>3vMPl3AnIz5TCUcW zT4~qE{Mxe7ZhnqC9%xrLH!wE z4t;M7yA+54-{kqLin#7)v4BPex;0w(*H6f>Kbz&_(VL3BIjs%A$(ChFu(pzps`%8K z;p#eGo31goU{VTC`oM~o&=u{^pXIe_6fOcdGZ}K#O&6b^d4PMJ1{qm?RqoNrEc7yZ zc7F%o+@B=nj$p>PuE-|fzLD2{tDwq4hvB~J8_2d6Eg zsNK;vIq)if#)#aTaf13@DHO?@n{Sw;bo3=Tof)6v3P7IF+QXp{ZXk@ zJp7BfFT60u2{dOm@oDBI{xAn}0<}^q6E9*tD6wW-vYu_(E|$TIfO*Q8Zm`T_m3D}s zAgg^g0Bk$rEEvVD*dO0`^=0XgD{>=SNyPxWO#PE!K;9FpW|2OI%|iGOwA3JTD8)oC z;~N5ITVa=nV_EXit)e1`fxv5RW@?PDk|JH+vP)1=%f>=!;j>UFUr)_Y;?zl}FU3_| z%Ct!cr~@XVfdeRWs0Gml;bL5olx2;U-im?yQOSc}QD4WsMdAMYHRTG?bvOPJGfrlepH!7hWsMOe%d)TCq5N>S%3a&`KeitEO)YmA5pvE+i}j*FO6b z+}b)C^oGQs%u85$Cxczzu?pI@ zARegtx%V_;q3xXmQkGI68281KBfN2?9B$r!C=EeIhP1JX8RbKM;X8lpT*BI)JKVIK zXx3=#U-hwZZ2M6bk82plv#Ip^0|I9p=bD*~#cKPdlk69+Liyz8D3Z@`nDdVIG@oXi zQ%j|QD%r4CjWcg0O~`x%1!_nzktVD!d(b?b-~$5?yOmV*=Q{-3T>2^PHGMEO=K`&U z18_{-pn6a;Z%gPZiX5qyEeq?rFkm!R{mL56FZ9(=!HgPFA%gYu5f+>p2jY=A+ald(tJ9jw+LEBnh-!UiS#pGfaz#r9QH z*>4>?Y*`<%dGssNwERNf?Hgn5mXTZ1oto3)qxqtFm{W&YEKB6i($)_-a(oDDp8ymohyf6rfC_B}&tn%*cCG7f zdo&ROdQuzX*kB_pvF*U5-zCqe&z)A-`<8G?IT;BYma17~mr=TDIb4Kx&DojGAtQxL zUGR0YjxW~6bvA2GQ?L!RJxlRm&QkQ>~3Gm~qb(zN)vvFvAQk6S@ni&>|ro-wP}u#dzdFN+&SzS>+Da^)seT@xQ;g%wd>aw{C*2yw}M~Fo`e+x z^Hf}K(&FKJj!G-rRj00=ZL?4sq8YPqqw(CnocQzTvD0-dO_i=+%K$+CgNYn~qeeMS zX=`%bPXZk~@Py+_TG+3|uCpH*alZW;O!v!^-{$1!(&zRg;g5@nEohlI_x>8;!l%*o z3mvM*pl6JxN`7*%I`D8wT?~t0lJ-)u7|$)c^`F7~olD`U$Tt&Cy!!4w7kMDn}|GJyz1x!~;jzHi^`jW`7*78lyoRbg!De)wKCL$_c;J zm69jGUgzfrsyh%GZG3YK6*$`$>e+`(Id|&kANh*4${xY?9q_-PH;64n~ zY80J;btK{-(o4J8O50=9+qP&J?;P_}#@>GC&BjWT@=lk%S}#WyM~R}6^Lgf8#vpn% z4o5OMWAsRA6TdU6z3O-f&4Rv-pt&dm+;;L8F0H_YOl;S;&SjT|YO1**@8e==z=+x3 zOn2~VefN?V{yNj7g$SnJD`sklSqm0N`Si_}HZ?i#f04TuVa1d=tUK|<+vQ}?urCLw z*&ftuUzsszKgQOCtPj*TIim_<%_knXP^4)f%^?|$a8-}Z232Bv|GE&HT^<-KV3quI_vvA*(q*ZpjL zKm9;FuEZgvqULS7;NL83iTo{sztY0s{vpJAqd1YEqN;Vt^FzI8DeQa{>Ye+QF6;F* z`bTKYT~AZ_qEM@{nQ_zX;W~7Z+Vi$6GDVALW%(aLmcz!j@8QWpVZS^W)w>2zZI4B+ zoXm=oEir;)NJ^lqpq-CR_}*f1o&i^m8Mpn3RKzXAzX`l=iLKS%u11e&gMb;||V5`ZZ(2)fcDVwyBGN424U z7sZ&hfjbl+xGc`bU|hd4X#`zQD&0Br4Q-$Vhu|5DFq#=3gIwLc6Ur^t zd-(Rj(zW=xa$HFTN}E|`EWCAT1{_K$N@PK0%K%g;CeUg%@6w;S$V}^2$2Fi44b+t$ z{Wy^WccAX`SIo8M{75_aI}{^eUi!i~;MNxv@939QL7;-kc%p}lTD%ww9*xW;`8L6q zP?1B&oTY@C3oy0vCaAb(93t4Wgnmk9T$nRP_RAG?9$S3-FA;Oj-m`rh)Kw}F`|VRb zY3MbJw~q(1y9(Lb7g5(j>1#SrKU%9sE{(+U6y*M{H{yP}ruGgSh#E8}OlT0o!`bf0 z`!@zhZ>`=uKP=m!HlHYku*MP^mcYrGUbO!Fm~NkO7f+Ia3w{{0aDELnK{v|=sAjbH zxWA+emM$d-)1{$<28?39^Jk}P+UQ?g=3xaXt=_5>(8w=u=b}C%92G%6s~Km1-9%uM z9i4>|mW+6Ye@uS>f}FRGr;l+7<;3i$#wIn36qIT64q~JU^QRCvy_KR7zFZjE$su^3 zt?$N@A$1IfPFfznMl!OpG6i1|3t4Oapv9>gnyT7Qxeynd+5GH~3gjc^O&Nw1gZ4AV zrUEjXECK%!G)%1qI{S;9QPq_S%JU@Z%~qBg_dBnA_4h&z2OZnn7p`drB4=8B44-Aw z-L&nEVn@7n!v9oZ{PUt^Phuq&!q~s)X% z>AT6-3Fe>1HiChOg5MCdKBXeb%J~CbtJ%3iIC5GvWZ1Y6Qu@ABP1|7`z1RXK{G`r+ZwO z)jE8bd2WrJEnb=yKg`j$WDIwTXc9?dh=yPLL(C%a1FBg`JgT%`kM!F>SFlFE2K!I% zpqxU!odYgDX?9Ke(lN6Oum08}82eaK*+E%pH|o5d&1?#h4YwX98_%{Y+G=>VTsNAF zShy?dl~|ddOlQG&mkWJ0cbC_}mS^rFBYjQfUMwosT>3sj`9E1kzqfjGGcvz z`dQPGJ=UEhEB1^1XFP6_`t;OTmmr?~(*C|!#`jTU)=+oL$vPfXx1pjHy{h<1Q@Nr` zQmguj-P=eHPaay0&83VN58N&0lWZ9|8!tIh)qq*hk^92QCCLB;(lRt$J#qGm``|nEY#3Zp zrDctrp+cxJ61BUqqE5Bkc3l;=yj1_@i8MOPpl-Nk3;Xu(<&yy3^)$JZ*wU2=f%)H^ z#8*E8h`-xWrh@@_XOYpB9XA)WzRIjc@%Z;e*URl?)SxZPNu0 zZWODJjKDkEsbyD6Zut6gD?GatLRtnEp14X)THPgZ-r)DVEMBpE+p%^aIgqmAd~$-8 z5)bf!f-ATKc5R}@6t2<7z5CINR`!T(r8`Lyp;RBXNwRTNgN{wjqE!4moD&ZQE+4Gr z&YpJ*J>xx=_~?fF@#>_>Yy(BafQ07>^xDfJrdSQWgzf`kj^i`&6PEYB$=1k4-;j#V(yLBY+^B`OBDA)6L$j z(XT6G(fFek_!K}8l(`>XSoSX8Wz1CR@+ne=;oGfUXMGco|HwaJ*M$=s<;|u7cXD1Q zRhpg{eL2XMk^Cm$nGWPw)I1W?%@b~eB!@Y-Me?81q~ZyLoX zwaxG(ohtdR@0a(<^IahW#lUyKO@8odVc%WODxeknehlB5@(2qgxIetaT3U`M?1aAr zc|pCz&dBxZbfzk*zrPcq+`if*o*C-B@gXyiqUClMTF>^|RZ%kZUh% zZ1qjDJgz}d?hn8$IN1u(#4i>fp zhObzr?MkK}E4)N+B}&@F>JVq&Y1>1XKWC;3Xs?vIx=({jKo9QE~ELBp>QEy$VN27P*UD ztC3i~-xx*~h)T!w^6pPH*;sLb`mJHVf$i)b<8ta&P@5p@660}HV*}vKf6{g@IfE*s z!IC31E`>h=d7H1%9PIHbkKQ`ilT#mOal+j6`aUlIOL@7xb`|uD9{+v{#JP$;EEjYw zX&BXVfhS5T);3;da>HOf{rMlUpKTx^aSL_*pT7VZ!Mg(T@;BlVRvtrC_VvZ;F56tX z-cY7~v9CHojXQ6R6D5maw&bl$w}^^c!Ap1+*>6RmFL%1e5;B-9Rx15f%p$(iX*$LX5Bx2#$e%T zVCtVv{2ocM57TTa9@_uRwZ&6Dmgvd&yH&>UmtJ=AZSBU1N17?m8bCO)|A6P^kjo zjSYm2M^L{meh==9_oO845lfAVbXzadN^}Ud(S_AM73sV`HT)hW%l*~=@6u6=$c-0* zZUj`6eKOpWUqhX7GnYe7W$rJ|l7^Nnc$>SN71ShhU?yz#-VndMS|f<}I4sJ`_qIGK z`}kg>!=X$CB!-Pk+~m1gC9NykkZQw!3JVuMpI9Xi4MuNlnj`LvAI#6=TKz6ARz_w*woB3455o8CF~5wKT%fE|LV>&3Y7fgY-*{?mW6l zoT3SSsG21jNk*`7DNDwStxnfD770GYk<;1_sfxWGiR1Zlmd>8fKnt7P?}c!yL#+`N(bw*Op&WKkLuP)na>x^O|un+eW$j&a0Xyis1qN`qaeC zY^_y~7KM1D_arKo+WJT?v#p)A<|=47DjTujZr>Z5qt$_8jH2M#78?Sq#IbG(H=sld^mGdJAD)%x=utCgMa>rtf( zS@VPo<+0bz#F2nP4^!`Lod3-)=D2`2-zeUM+3UC~_j^YOHcc+>KtFC;>NDwL zC*&58E`l9nn~)8}>hA_W>!&n82^pPM{!*O39ZR4~brtY1(_a=hiy*q0?*+(D! zyJgH+>3+z_1@*(c?+DsG!q!_}7^3h$vewr%+0I}us&fi=8=%U>ocoO2kH*bAsCHvZ z{8z5iA<$644axma3wKXk_@WzqzpAjr=wh0?@{VBuP{>3x@ntf_{z&h$2R^XLB5N#H zf=&2jZmp9Ot~w1gvNT+HsD8?xBrj+QG7MYu7LNTUXf5Z<_eh_bhSU~fXTh(EKI8wg z=LdrT{V7lE!DN)=Xya?cZT>%ey>~p-Z}>lMa}YuySy>^w$U0U@cD5*FX0PnLY$@er zkMLF^BaxlGcUJb^Bzqk>_}+)s=llKqe*e7xct7s$bv>`=bzRTvJ}=;Zmu;jLCd#ap zTeZYmXuJfQveLq2m7>>pwK2UYwN^fYkc=j^NO*p4hMO}Ar^Rc59F)U#3!6k9TnoOV zG+#y#ybHxWqZKd)vzDOym>%*moNso97ED?qnPT5pG}>bUFPjz#AG?_}GFAd*+t3#y zvR^ORo|d8Hsb;J;6asAsqAtv>WakTI_MqZ*EAk+E8lO?BYU_U+{ZFOnd&>yvCH5}* zsI9>`?=E&n-?BV#_zy;Lww|yrn3u~29z5pOkEo8igROl1Dz?fq4}4gS7}r&YNjt*Q zb%pT?L4vf43m+k3k2Z@8#Mj#f@<2Kkr*YD2?@eUGiegelhCSqYu{>6SzKM}BZ|)Z& zi9@Qv;?sgM^nGXB0w!rJ+mB)U9?7UP&bYpqpLS`alQAT>7~{r$3ye39xv-PFhku%W zFJP6@l9Ok~k6-xI#%x%!oCH}6l_w$j)ZYzS_Mvjg2 zI!l&R3Uh%JsLR;}9b#rCG#lJ0@2vzQ@Gk+WTuAk%mtK1_rE&&)fk&Nrp!f!23AIF= zfnb;Au`Uy_-x8(Siu$T#r6su!ln5}t{&xayYRy~j-(tRVk1tb}WmIB`Omfz{t`I;> z&SDm_y$cl@3`mhaZS(EGuPyqX!q0!5+omcGpUf8=MK-ychH0Hc;q{q_0k(x3f>O7{ zvK_2f;jeh)3seY4XFEHpg!6Vo(Ttxe=GCv_*bXu~c@w?@TVSXB5;fsuT$$3K4;pDA z6K%#I&7le5S#X3dxDz>>?Q9ceV>KQUZZ|b9EDnM0fWVwg7Qe`$At86_s%N1GDb?+@ z&`&Zd^(NXl>dcb+4?*GTQ0RaScMq`3HvZbM`dsBz5`>_mSqp^>^W4*AN|7Qj z2VdIi-hu?G4t)kwo8@=L@1;e@F~PSDc;B92=RlzhndQZ^KaOA5t~1KhE`P1qx7+H?n3}oUisSbaqsS{TS_qTc;b~|;esMmM<4q8N+r$OJ z%9I!1kKDrr)(r{fnmr}CB*kP}@}kR@bqUHA$$hWk+#2?tyW94D8T)mHnwRx!GQaNJ z7CH!JNoawie>ve^h-Ju+7r27tk1i#Hva=k&{vj_XK8s*V0??dOL^|XNtlfbk9)HhW zb^5JvE6&rXDALOlEDGBr~3Mo&AjGMr}BE9MQ zpu-y9H#(lXAUiL+{!5@R7SFW{J2i$T57+f2rnOg%oeLTXEIreL>bh=6dtp3Ygv|4^ z+O{aQ>7=qGuJ+Pb_-a0T?lesnn}r}PT3;)Q!}3XzUf=g?y+e=p;4{`VAHn0!OCIdhmL-I|nUU)T)W1rSfKr{=kH6OaMLftGYn3qLlC0fe z<+XEVd6cRbGXbKWv~Yq9j9;1`O1@ud?qJN3O!;{X*K?oX6O9ctnIVKb{HjPiUYV@H zt~T_)J?6C_PuD@B!bJZc9~}AZg)ru3nglg)@7o#&q+du?%U8n{;hXdHe>%82qv>av zW3|}x4f?!95nTA<_IN|Z^r*7*-mS7I*gHlAwZnVO&tS3yyUx0LH+7o7r(Rs6d#8r` z#djp!h2r7u8rSIPP&|Gy>`3CwE07|W;2>)iv6ZBi8Axt%N9Ga3+!BvwKM)SB`wmnQ zOkMO2kHK76kr?GP;v>eqSk?CWm91(KDP5WZrE&**J*Tig{N8^o*v1#q6Y9PXf30{! z>dMN8&P@ufTgY;-b}XqV4UBGRo%@bGz-acQ>wPB5)ZA?EgU3v*nHW7;_4Jt8-5pPL4K+1`pP0q(1pxNj+gt3WG}qm7w2%AO~FtMkhgc3gJx;pG-H`BjD2 z`^rR&yzadHwR#&E;RyQ@cTt1yD*-|wxs)FB+!_A3qq}*uO&X*!Rr&L;rii=T2ldmk zYuCpffUm5$j*r>VzIS9=Yt{{^`c!!C7~19XsqK5Ebw9q0x0OBXX`gnefhbv+5E7Z3 z;QjygfgDe=?CKCfVU?){T$(H$&X%eJjR3gPg#gC)08|;875q2(5h7_isb5hKe zEwLR5A$~+o?`vAz8k3ky>jn#2rs~g&2M;-;Ad&2;()4iI*Q%2GIZw+ovU$!C=DgwL zn>%chbA=1UaDDp^`#ZUlv@K@{Hp1&Vr|D0xx4m^UvFzUVmQfT zWLXMg>oqwc?s6Bsolf_UbpMn!i!p~F(Hu4>+>(2SQRWT5|7^}clLen~f9}eweCCMy z%l=T+*i%h!y{1dS24lUM+9XmW2R3)OLaM|35KMvgR5b0<50g8&X^>8}kFEvPyD8E; z<+x6~?l9hyZ6T|}@t|#&_L*zP&B%OsPAVAZNhJU%4Kuy`lr=R@Jb(8?KZ6k#&3DhS zw0WpiZrEc8T;r7Xaf!W?DF0li(5VaOdwUqfB$ZqLX-e!uBW6q92OPbt*=^L6p9p9^ zljz0sqwrb+Io?@n)nm5s^C|`q3N&)b1n0;iXt1SxD1AT$SpinP&B`TdE;-T3Xxbu* zqxZ9$PK}{K%#q34`JOaw4Pmy2?J9i(cov1hm7X|SNm_d!?=rsm0^zEsl678KpcaHB z_5}C%%VSEm3@YRG=sj{Lfdtp|{|*U#{a%1CF}>Nud!^Okxv1{Hpkq@RN`)eW#ScxM zL_O(Hj%OQI|M2MCf4Fw66q24l22^t8ToXrL3>AA;?(}}M6e#5AY9u#5KJ4{q?oj}5 zI=qP8WuzTB*|CdP&vSV(*zKdca?hdSJJjuTC>(DoTZ(V)Ac%|n4 zSnG|>_&Am?svHA%=Hztme0bSBQ#AZTfxLZx71zj&P*FWlq5NifMDI!^ZR5{pBXaqo zkM!HipUX%t^ya>MFiPbnsTVylu=cu|1R8!)?zUZ0yrMyB$!A|{r+kl1W-Tgr;c0{2 zCn}#^nmyBn9`lu1*XjJV+&qI0CT2iw$~TN^E_kMK4$#@@BW=~Cte;=G@NrhivvFh1 z(Klu)?N$5WJ2S5w&inBy31rVgW08&Kp7;kOay|a{6bixbkUqve6G{)HQ-8s0KLhnW z+`?X#Rktl0<<>Of;cT7Bu=$?U_<3wiI__mlR&o9syj;C@dVFJoD8WH7qDr$HH?QvJ z1KzRR28D-Y>wfoar@#*x)NS<=3@j@RMs}yL<(!pQe?F^|%l9PYnjGQy_JD`82+Q@H z$BR+r(f)fw>UPwL^ok4EO13?@O!k}5WUMYehteTph%>yG2sicxXMyhnbg$9f#a>P~ zG{igj!99-NRmSGRSbw3x+Xu2=XIx2th{oVwbNiUh(GG~+Ez|UQiS@PU z1y|BMCu#hl3q`#xxyfamPa@li{95C(ACS7Z7Z~ zqn932=j|)$BZjIrbSs1+43!@gZ2K+Bc$t;c=RdM3awYXPn$!C11!9Z67>2b^19D7L z_lkDd#{s)b*$yd2HyZ1Fqi-^A4lbsbljkK2E(k%kKm-t-xSySo-K8wT>QoCBX{--G zkDuk{N`$$Z`LyNz9A(mg@N@8<-qNjjLMJlqZaz+#Y^CorlIZpjC(gS$vUcY>`S-At z6nbYZR9J%*JYX!{vwS}lJ`!+IYQbRl$F9PFnvu7?8cQEPA~`KALBzM??)UiH_tv=b zb5lPfCm3<>5>>sb4K#i(vFn@~(wnOvR~la>{J~hg0`p};2;Y~vWGEqw_>!(*M!H3e zd_JF8(PO0eOqzKo6Zp|p2As42A?cy5N3m&B@c{jEx`D7niKu5^#=UxsvoNeYuiTBw z{z`C7Vetk(XNgJnpk=F6>0aLTzyXbj%-gu{E=Hv}vC!LIC4Rc#nu7U}omHa|W*JKM znKN*j~op&FNa=@~D`=&Y~ zGokd>LT86rzSxHB^U6El8j0I4Jf7-w7gCri=|O2U^?!50Li*QVtfH58s~RAqyrdxO zkaK+}zWI?(q>Hhg69$(CjqzKSn{WL##wZnw_lghW*4YjgYiBLjXlo>rFBH# zSuv;fGS>?}!s84VB#f_(oc>G!E&sIndHQsus9t9`a+(H4q~S$zr}Rk%=o@J`&XtpY z5s!YvpIJcR&TO&Oe_dN9Ty6LhkbJ`BO zz@h!{xerl9x8zkLfV95;F0r0_imvRZfRyw6x0AFvfj5N`a!p;EI>?IZ6zW%*UnAWPu)bgR;~K zpKk}DXqMEQWLl2c!1y0AKxR%33_M?_)e`YJLtsnjqD*d%K})@Ows;t$dP~v++|LT- z9a1sqm2DIPDx(uGDLpdN3I$Q!u@s(N*G_5bwWFk){bS&pkw6Z|dgYGYw~BBN`?S(X zQ_dEy%$s_jAr*ZE|FJ&uxRU=QFTB9q4i2nfz9@*Nx6~yo#J-IY&%s{cq~MiKuJaKU zx7Wl-w2C>$sg-9*B)B(?G?Vt_yn?+)lBqXu=;TK4`SciMLOh@8vjnCVW$v1nzsfxD zy)#bfN9(cav2iU^UZ*Bt-lRrGYeDbZBg&qbHInpVT}YyF+stk|pPQbvwO}wm%cO%1 zFH*$KwaSaHsF85EB%4t~v__wYV0F|v04qLlEX_ifK=Jnu$@ z4W{>CVwGi(QF*N9;(>B6{Q@S95kN;9KWc&IwS@~zkNoR zZw2Sqrx2W9nbl_^7vH{i=KIRte&qwdH>wuh3*#}i2Q3RQliZLj&HXY&#Bi?LE%K#Q zO{!6?mSyjYh}p+DOsdZ!5jyAFe)5IuJ=1T{J@>h;t2;NYo-9&9XGz#BXH9^EtDD8y zSB;r;YxTLvhO|(wtfZ(8DQMz~xTpqvV3iru!-rJkXB5-xv;@QLbvl^_a;D;m4tfVJ zbku6r*IkagRDj%#%4|7ol7CIaa1r70;+(l~S5yCwQBbzO9Y|-0l-`TVMAUbZo*V_7 z>!6;qy%uO7ca1_1Z`k?049T0e`@*D*hL*2D4`Av_^ANz5mhZ(&LS0$L%+DyD2*4kg zN`#nNvW#VUY?tgm&g6IJd1#-bB^~}&_ndd#a>(HT^FGa+m2?xoXyw`*(rU2YO}TP< z`Ie{#&bel{1Qa7KlN&?y#x`#*J?GKbBHQIiObT#w^e&IW-%D86_mZ41}>vmO}-~re2-s)B|D;(l5PC?M9~bKxdQm zn9HZvjT?$ag>2)AMUEs= zSTUXCA5y0Ft~oRA1I;tpn^7kI4bW`v`-+pLwM>ieT+CXgbr0GCV&L{RB(t-icgwze zL86q|EZkob9HC;YZJ_FA@&Cd0w=+O1KkDviW@G zot0cUc&GrLY=O`Hx6d5oJURqVlx_4c;%!GhqqJ>{MqOh4@4aidjo347&wGXM*(p&i zVgYg4%C#>&v4FzkI&J&8#I}2aeH5MJW@K=KPZ~{svY+%p^(BVeR~;Pj+8=N2LD2Rw zuOtdJ{Q`XbRW(5JsfUk8YUHgW$?rdoNTF%{nYq~T^&39ZD-{YS$hFyKH_2t_Xm>Sn zeWGgdVbQjpKPujXdSzV=H^Ts&$1@ApX6!6lbs)* zlrKK{LOEn_2<`N5e@Zzz8ZD9Z+FeaC^xoY|?4tkZ21)8MXzQPxl;7bwILc=D+GU7Z zO)SygI84cLGphg}3?A?-JUQ%Xr!u=D{&Q)*0IEbSlIqzTK8zc9@lk=D!O*L0PG1)~ zUS83W^frB>i?@4JAfTw7Vq?2w7z3dm9}ITUD~H2B-EmpD*MQGRD9nVWp*_qyJ6tD+0~G%9!}A^ z{nsK`dk{en9;cf@bj|&2dF3xEPc$qI8k23@O!VrGVHc?d#jtEL%C+|V+lux6C?nT7h zr}qT%C_Ek<57fnk)G#0XPDR)Qz7x36C%<~CZsO<-e9PcVNapMHlT)hQ#5gB5o!aKB z3?7vauxqQO7;4r&bywsOQG6IH_|)FH7P;HR-fdEP9U&nthBkX+5qVK>2R!-`Lvq^ak> z9GQ%kPT2V#r%X(u7K_VhtUqw*mue{&t&}~WPH%uE7%PbTna2@ZSO&LlP$tB-I_MFu zjhdsjkKfwb1bc^~=D`}fRZWH^FWoyQ3nBD>gXOMvX+5%CqqIb zh8L$!mXA6iyTru&;E4Of<|dh$2XZH+s6!j_AHAh&#$rn2?A=vCuaolW%-f$@HdoK^ z%2*2)S}#|W?CMPX+$-X4GlY)APYx!JH|nP_5e@$=U=ZpHSZ)9Od3QVz&u-Ki`!~ z*NlqowyLae+t#r$j7ipg+bGsm(wly3buy9M7Pa%9ScS_nq-YsdEE}4VPuDgLFEkNB zT`9bhU|5CTnyA{_)j0kPXwtnp7OUxv53PPGr4N;UD#C|BpK0&Ke(^C=u?*PS#})3M z5t7DY*H|Eu)td{|f!Zr{0w-L>ycCQvOQIb24)@bMB0_%vm z*=-!6))bk-qI#LF#qL*7NOj=AuB(6c$%WBa7@49=WYmWvFO9bpz9Jw0dm4{fbSsta z;(=h3Z0KZ&>$MQWKx*9+@Xw)XQakc!@$69bYB z+DixFsr}ChE`oDGX9q*NAr&o)CXBIAXKNK6EoBc2e)<9Ka=d;@WvHsd_x@Wl(p8Hv z{Ehw8B)6sk17arAUB#oW>aDLRMrL ziI;AI&%=>r*;Waqq-L#tAI^sT18db)`pI1U$RBrCVVY{B79F1PO0iZD;p$Dj^?og( z!+Fm0UI#TDmHYljn^|;gBk;*^hM?q%q=AX(Xyu&!E#B3|RaL&dY5>S1!{b9L$s=f) z>SS^9*m*c3i04OnWc3Mk`AsjXSP_%u+AyEzt7_T%Lsj3b(o7)EyX?m>QZ?NSEn9}S z*!j1bv#jvE-(x><-D}TqVSM@)dzFUn5GCFFSTZ(Gl0@l4Usf?`kDqQ@0h4H{t@z=* zhA0Bw5HtBXeTVm`LdxZNMzV-f`@`0?oV*Yn3WEvmg0@O#-syOVqJ&xIuDt(2axm7HiD z4O#kDC2?{2vhC{^F4}I2KVz%E4u49S@k7B#3we)1%!YH`HT5N|@9q%@Cu@XqK^k2l zHz5J)wVScwc$=@baZF(0$}A1ojb3|jb#eX^>}kI}VpZ#c(XtEY#?G%VuZ+M0@gJS< z%JR0x^xo)eDPTuzg<>1QyOTHbGbrbNe1`0`7ntLoM?O`CKZKJhdKVi=B1P(lDdZ0t zF!>lPyO7tky$5wSn^y*&kM8(yLE;{VYDZwpG03R(@2NiNtS4Vk4LGeAJpI3t;yHw` zDxNqV+!fyz^<0=Gf4KgjXuR3IZwouW!Qyt4MG@ZYlVF^9)yo)z;BeSs-W~9^gA2B1 zWvLa`$@L;1tq;i?3_}{1RSeuVLdyya;qNJW zCk5y%yO!dfM7j9C9~)1#nD~YU#tWCWBeCA$8t&~Mv8u~~JGiHV9KoQ}vGH2&?ZV7e zSr^8O%Tc_auOvyJ9KWLXC2t6I`|X9P%)|=UzFJ!|>XGy~Bum0aIUQW&?~OMa7DL|y z(^F~u5kXP&OJ=J$f@Sqx5?qpAiYy`R0e`~R>)L?Iu<$KWxG#+g-BwG+Wx{&wiD?yckLaTVBi`sY%=fvBxX&D z?`?s<8Xr>ab2^IQnHjwB{DY5E#U9Wejyl{J!=JR!!n@<90=!mjZDUa+YTqfqF$@K-B2@FD#8A6KkM&1GkW$ySQ&$HF*^y`u3&bQqJ0kx! z#{rJUm-=OB#DBf=@snWP84V+;qi*(&WT`fGVyO*a^6=q1t?WZ>bdbtP-^DlU%HE7I z2OFsSeJDcMR&E`Ii_cWjTE4_|fugtb!G04>jJ@W>jpF0ERpxCXlXz0wFWOvuh8F7$ z&7`R0M`ByGdts_GZ`^7<*R+@3R6c#yh5gk-3mzMI5VWxK1D57phvDvH?A_F?l$Kyv zZp7n;ToeO9OBpF?h8`V7H9xyTkHT917q_7Rw`F6~Gwvh(t_;)M*`&bjwlrzOYk=FRjXef{NlU3MNo=X^3hL@WJGlhxHEcZ1i7k1j97*9 z8`q+z1f&gD=zX?)>BTnyb3-ye{YeS|9wh-Db=EdUTl;c<5%>G>`Zg;6^@PKPe{r!7 zaG_JC&pSQXEC6PEMgkxnTBSQ#KY!}!ryF~JvZ2=WwE{SU_&mvEv;(K(JBE6bYduU| zVUkB6yZ|^>{f7=1&dE@OibI;1_uGX+>`|{iWuix~RXl2?3}Tk=44gSAIA`G3DC&i+ z^_RvE>l=WBwsh11D5mR+9tR%%cwp+1N4F{fJc_(r9Ji#5Ym&CGeFn`z;zqG zPu^fnGGcS11wR6~-hakaJd&_yjRkdGj-a;r2a$3Bk*#!NiQ*+q6ISS%=yMjQ&qbL-UP6?$uh49`GRW5q^!H4nULDb|WIdNpv!C#Aa53?ti zp}c0}H-}$GmV|fL>ZUm#H1W>pO$V?4NHX=#qpPR|gyu~?SV3Cs9Fh)vMAn<$p>v+< zo-aN_h{WNphBy<%!w}ZB5eI2TS~GahlQ49M0{AE6+c+OU5)T>z!qrnwIqD1)+u;!^ z8_{B8yeWI9_?nsH>=MCDVm(}0k3^xV3_VQoWV)$H_ymB_u#Af|s=^wcAr@WQLrVo5 zMXOBlwm8>V|C`FlKePcRRRxoxJZ2snj)r96KYFctz+vAI07=f={D74!3k>`ETyj-!I%)dMjd9QsJkBf1+dq43x_v_h3~IoC6smfV%OBH4C}}V1g~gG= zhfxax1{}+%s}paKG-Wb`vBKwx?o0)wh$dA=hLIN6V|j+J(xf!p zWboe{i(a3VDRh+}M|F#yMcNun9qW*?{AQg5v@*s&CAYJ)`B2y;Uxh!92KnN{o1leip2EHfra2<=LJZGD@Gs86xq)OplKOF`xZB z<#>7EQSEfe51c+T2L&H7H3=|0OyTz{aEtik1JJKMNftrMWz#jv8%aVMpIqDX`w&yNWSR!azN$Sv~>k~RL0(FzNTcO zEoKUg`1`-HjTXc_^D$<%|^fmDWSAO zFZgU(|1)lZ|36e|{x0rMNbk!2ZDU zVUeI8@H<#dlydQq=v}WT3c(z@J>&GbMsYQKlf{9ue8w{(_$jTr+(E=z+`aW*c51cR@gS(9KO!1ig2!BB^ivoHUNZQ}XzhPqZ`29HTunQ3lr#z#P zJYx&va6axO^~aWD!pZrjA^zIn56BS9$g22Ws=2&;o`t>Il!Z?&k-}3 zG35&z87rzcfAmYtreLY@$#AB$-ja6@xFJ84I8B0z!Xbuvg0*+QA^h3Lr&TdNMr0Y~ zL@>rdjIXuosw1QcX|fcsFlDi%30uQ5f+;UAlaSI1%4_lA!Te$5dKhok@io#kgvuV2mhBG>BjM7UfSj zKD|t#tuU2n?-WTL7KKF7cvp=ofaw%qIK&VP=P?HuhCmNn={To;!TrV% zw3W5^w3W%i;@W6GI2ikfkG@owzjqG{Qv*v{p*1HXol<=H71YJGLxJ6VwSPh)?&_w_ z2@-Doj#6DSN~$JG3UQBfasRHurcpIrl76X^AL&jyM@X%F<{0-Q?&(c4SM8s&O|+** zNb7KK-o|u8#^gsH5r4-H6UL)pp(T^TGPFh12n9@Wz^KW0PO-to5!XwX^r&>p1gDuZ zb8oE{!U?USu5rdXr{1EbBuvT2vcwc*IsxuC-6cfiKC6~r_;&F!UM)eU_sT`CPzZB9J@1%p$N#Nq_tOdJTwlL138tDPtJX*G+c6wr*u!3xIlFO2B$ zw34rlTwBtWJ%k}ca_*8TA(jg4yq!82gCODyEM$BvWNC;FcQEMn+LDc|n9{l|qcnh! z;Z&1CUGpM(Z_>ZOVFSQ{T6#rt)8GIzz{Fa8bvyu#56?Ywm73VgRpmiU&%(bvC76&U zY&8Hw0VPaI8e6MhK;E?1k7T4~idG$Y#5$dEUi&VStkzw|DM$egIVCW33=Gw>Mr0Wg zljBgZe8xbQ#Q;?P_J`<#6P7ght5YPT@8H9vOOi&)bw+^=h90x3JYCLMa6QW}2e%ER z5NZgSw##nfv<@NF3BvLWGo}1sNjKrfWjTB21PTW{Vi@s_Q;;iV!WdeJH*zHVMdsK@SaGd0g2?)sv)aA`ZZ-A|_d(W0?0fNv1G?TWqvO^Hc@OJ0# zp!nHW8DuIh@-uC?CJ1_mv3d3(jK?&!yU}vaSR!d5mrF=%y>xlbPgt4qdbe_Nl=g&v zRj9c23cjsUt9uvKckk!?(pU)T>p>`u4+q!*P{Z=KKJL;UnB=44Wo=xOXuw>dP)cC+ z2|p2;faXOE92-n2gfu5Rfr9*|Wo@X6ib0tX0Xe|=NKChV)B;Yg!q$sYU&d6%peT_w z_qr(;eA4+O@T4gK$CZw0vmg@57QX$)SMa~(1)49uOix7Doaj@52_QLk@vJ6Bty*dp z0zhy@zIhJyhOLZ2#EmYpn6m!#y$Wc1esZXzs=Sm&>NrLX5H9-+ApE5bqDIY`^%oU2Q6=W zc|{C>LF=%PWECNl5%DVLz^%b1+ijyYap7MRg-X#&uMab`pjMN#fJbPN6O={(tAhQZ zj#dL17O7eII!geZ2Wryiha)!lIRbEk6Sx4!!EiXzIvkq=h}lISJI-U}vb4L>Pp#;H z-UBT2A zlQPrG>$rG|1}kMOX}rug;#Zj(nPKcG+2kLCmcw^g>7oPCr167+3&tRKvkR7nKwaVa zPeDeSki&Uw)1VHP(jq8tln@Ku$izqco9EEE>QFxUso2L~Qhk}EPjBl>1i=2%PGf&A zp?A|MDXSkO@M`zYUk!8XRBcDI>DYu?P1JuOQ4wV-${a&Ip(@4(2O`f*qCiYgin26( zB#ElM6D@(AqH3UMO#Dczj$U11LGi|WBVBgX-Du@f&JDF0pObJM5pvWq4= z&f~MZ($YZF5k-n&SzU?$P%ovErsD6^1AZfYN`W0^9Id5s0V!{fPCbu$M~AyTtWnbZ`~#ve?sE?h=K-Ks-F>2t5cgC=Q+8i&2rKw+?-x!*S!SsGH<>kfEgN?M&mRA zP@!Y^N0x$QU|#klXoK|-FO#r|6NFs#GSyr1I~TV^FnKA1DT5ik(If(xVH1!bbJ9{^ zb974HO+0keBFL!#?df9EJd<< z7exNy@>8lgWz`Nm@S97mso9Ei=u~Q=X7jj{VxzULkDFLpSr|Q^3z+YvN+}EVuT&~? zjD5zXUUo7k;?%8cqR|HV<*3ydztWZS>iK3EtxC1!8_S982px55e_$72l=IJkQD`0O zbT(1|EuC7WLX8cQsbj!NS;SG7_c>3c#tP`mG#x}=JC{1=Ds+B!>d!ul7n!EH%>Rwi zXp-xm2~_l#&T@SMA{KMnXILm=hOJ+?D?SZ(Ulf{HvE;^0fe;Q>jVg#IzsD#cbwmz))Q!Lq!Fd+<3i<3e; z5*W?o$CVVFUfc`@7PCU9ysM79AqP!jZ!!>n2F-#&cSNUU`_Y2{hD|=-X5mrVBWKM5 zneqK9=^C!nTwDS;#9el82v&HO8+XKo!5+QU!Sf*WxDh1%!3qm_S4Tz@rNMGw^)vpn z6dR`DF+jq%nK7O$^NNF5#uz>32N>hM97yU(4Kn)EjEtSm=Ypjx? zHBdy~y+Ia8KUM4>eJ_ETi8jk+AzS63C^T{*G;-1A87UyI@4`~!W ztLWV06pLH)mN_h_z;-|)XXzcl|Km;bltQ0WoX6}m*DVSN-0upMdPTlMV>_=PyvLiAfKcHXy@PeH)^`&;}j%$ztDMb`8nr=b8`a`Ht4Ite3Sn{i zSGf@YXk}4!I^-gn;7=3!aOXz#I-Q+Mz>xl@wE-mrW;%zSDTQ9>S3rxXoTBF#_ELJR z_s=0uz#;jQHi)_FaY%k%JXEfImWd*xw}L_XBKxmDDHs!=^mx$a?>fQL&~1e=p4ls%!Z4pjhV~Gut}rM>a|_ zHp;X(fkV1*|2G@dx9WG8_GklWDB{_?g7}QF_QMziJ4HnAG~q~GizToZc@Qhe@Z<)r zz38+>7n*Fd03%1T5=W9i>Q9n290d&Q~A^k-StP}1iU4bk;8zWk$o^I&HT(1f@}}#HkYZg z{}EiyhJ?NXi>AIdi38T}h#L}~j@0~{WYufFvIEf|{uM=%ewnKu6uy&wHw4u2gKXYd z3*s458o@CR)nP;g6ol$Z@kHT^GAhXbemq_U@{Q3n4aMa0#$(QU9Qp+QUn&q>OGkq* zkD`jFm(TBY)yD+1ScLzfRu~9SV9l#+bcEEuu7e*J675+AxTJN;NjTkEjsOM)1fMbf zM|v`s1+1XTE?Vuh+I;6HKxO(!Ilds>qojKCjcRIN)5KvztP`5N!cw&oNBH9xgV=bxX6s8UG)Xd^G zQd3Nb;yAAss25tczYdhEWkTrcTF2XABmD`BVcGUJZf#(wVV@1J^c~eT4&-=BHb9kk zj=w}&T+UChS#5Ujv0A>`in4PQID%|KiO57fv_-Pm$Q*8YusZ z7H|)`i_a@Zk^t8j#s2A6`^I16zoJ&&*;7Rg?pwygE(K8aQ3YxA45Zs(S|FCQ`E-R; z3ev|qsMd1urSlQw2bz#Rz7fv>fmp6TJ}WEtD_b$1**0BeA*!QvqO^`&T)JGA@LvdJ zWW4%Ij?#XKB!{xEs--sE;qXy^ko-vA^R2EaF8ZqpY8q_rcU1`=V1ay%669-Y=+sGmLH$OWk>S2e+x$rQv&#WHzW9rawM(HOxxWmO zO@DMws;71iq%smoPGvlcCf_x9yarea(iLXRLNoMR)IKUOPA%hsQ8Zu_bn|rBo-Es$ z9)uIRD!e)`?pF~}N2bZ@#~7eV;u(dQfg!v^=bcuu7#5YS$#o&tx_sMt{Dn*+cG0t3ULODr3mg%0n|D!c7;korF!pY^&= zOb*2@j)L4DM*i_G@&^JW>CbP#aL=@l)3kql_R}kn2fOp5>p!&8<4w}}Z(u%6`PY`C z+KU(jM1Iu<-cgq`MhTx*-y`JURA4kxV3bEId}twXHhVQEDys(HQ=dbcPkqKDbOYjk z_Wvdf;ng%Zeg&i6tZV*iita{<#{UGPbr6i0#%Jy2e#PacTPwYUq$h%Z9h42^L>hT% zUf#l)X8{3-fcQXRvqb%08XyGZv*fQ|44@XhSW2ZR3GCT z^slO+jmkbh0=an;T{oaB8YCYEx-dIab7$`u{t57;ytn0%E7sW{z=NvC0RSk-bO2;( z$u8mcCBNxMk`Lo6)tR77%QJB=TD?^Ad$-oQ|08 z7^w3}Um^0XE)@8a*3zUowY>|Z42Q;MyKbq1V66pk&vM+BSiQLi?_CbY@&`48`adkOWe+m=$rLY2d54DuG|5_GHw)5BNxqx^kLFZVuhs|%1qPPr{7uAvX|P}J)c;bNAz+pl zNT808+5#5@`YZKc33lJo{Z~a2sQD0+hG|;gi})WY{7kf_m&^n}uR)ApK7`D%mL*cr z`k%xz#D+1>*|HdVLkWL%3W;NZf!}2zYScgps`VX8;nd1MZtPOY-5^1?(%#0Y zNi_!g7sd(n(S-+&&63ibqd+b+a_R{0nn|nCS?x!3O9uI|9+?&;O$gCs zMgJ~iPgO22@3^+#7c^gHXb?B^+2kL~EWknVRoq8@4En>3%#!EH;W(!M%b;Zb-@XuC zQhi(A-TmdiD%2q$Gj3>nR&3>u(4%A%7znZcg^M(2h8WPhhngksN2B>4fi8yI!Ax~s z9x63Y1wB}S?nXdP2t@mbK(x2oNB(##jkWC^`Mv?bzzzv?>M}F1v9}RwH3*Q%M9_d@ z>t?Tnk2M;ipiMvxF-5;Sy22tJ)yUXL3_eYPTc`5&Plqjh68hCe#0jOZZxlqJ;rCm2 zKIpngOIk@4r<@3S z2WYGj-n<+vW&>87Tb9EL#`(+ejygs_`$uyrSLT=!GmCiX*FVnsHw-9C{EEKPZ|_Xx zMg7|>JG;?j605Pf488jT&KH(=W3B=Oh5T5A^GtG0N2=pRUfCsw`t8u`oVHv@3mWh# z{@*$1ZJ+^%NRE7wN?>Wt<{)xcghV{L-94{Hy#844vF*V~4spzI8^{K$Li?eCS%G z3AFTIxr9qf3jc2DO9s}<)%@)VfQ%;&^si@4l7E*A-$lN8o~naqGc14^a$QtI1noAc z+Y;BDr~zqhlEeSUm_0D23anz9X9eUTD}SH?d~^P=`{u8vNeqgCH_P;rc0#{&Pl^+= zWYVJKe>Q>(>K5VgzUeSpNhv2{bl-u7;;Br)TdPC{^9Y&@)m2IixNS)WoZ-61Vs> z5ZaN33!G$eYTzE3v-xj_D1zgmFk1PQNXs02P_{wq+&BMS^|Yd2+Z=zI@iK)}Bp9vN z8z>jPpOyW%2>!gdF&TJ{0c57rLU$keS*czV!iD#aveAL^@n^76kYswX)pL=p5lUP_ zjU^_Dr;jyW`GH%P1Yda%iua@@r&4KtcV%ROd;)!eGG?iTeN5BBcZ8Hc z55!#QN8*OGb3G^l8QM~P`9U*^tswQ1#zuyh=qtxrd^o7f>(BHIYYOP;G6(X_j1`c` zt^YX}dgbu2o!1km#}5l#ciExd{>Q>+t-1fWI)s#oKzSCgO-cH;0GwJ(EoyPuLx$UbjX%H+xFt*N{elpO@0r(kruSwOnthz-l&qH*odiDgWG%RcUBnUOo@kjW7X%6h zYX&Y>Ixw4uUVi0~rCxgur*2fbWn(;!}t6fUAJ>-0wzh z@B!_!So)<6KtFuHYx7xfC7`{RY-dbhHH`tP|M!ko_$-MHHO#+b zKLnnxWF-FTGNg4pY3^etb#Va%VFG~%4C8beSovF}HU%Tn>BsdQDgi@QD6{XcD8 zc|4Tg_ivO`))v`AeN@QULX@R!AtY-U`;u)!V@)1XNJ7F8Az88~`%Jd%d-g07W#45N z<#(S!_4#~%{Ufir&b{}XbMJY-&pGovo@4jR=|W!#gFb>~ukpD{;r1%!41AzxA;*3b zl<7fh3ubEa|nw2h4Xf=V7^uyVmnmF9$K_-TC7_L>?Eyhp5i(~BF5iQ<;%H??a4mXgFl@nh!V5Q1zP8hkv4cC^ zVe5Kc+QFT}m}#PA$RC3~xT_fo5(nnlck8IjUXtFI?6zDLSjX*%-9kri5$BbV0Tt$W zHaI_#41oj%dfBT?3|MEU8VvdoMjpjo`u<;fOLUlEEVIuphrduxm)rjmlv!+!9dZSY z5PO|O2q>pv&{Pp zI`q;e50b>9L5p7anNu8zuB*cc!$AAKBDfjmOk$Aw;qm{p!nlth2GKSlA7E>HZ6jEo7F-7tQ{jjKO-2H{JwL?iI-Kr6l&!*R|M!?by*@-AHGM~ft`O+; z+VSH5?jKJA2oy#Auf!#H$DjPXThHS_XQ8eGXXe7=z5=et%#ROCA$SR&Kv=N_W#Fv| z1gq3<=(e3jW0-39cW#|naiey1PcTj+sp%}0TF_Nq<(+?d4jPB^_WW(?$GJUH3;s^@ z5#gTrPzqe|rdMxG^clMPJI4p^{dREg2YX!^%Kez~jGSIwUdWiwG=VH!Ykl=Qh|Rc1 zn*fi%u&LpL%N3GEujuoYVea!m)*peCp;up3zGGVWYXRPeBAZ@MSs&?M@tSuKxnUH4 zS0IA^ia%UEcx8AN9uO(8%|iYB$`IX>FQ@KA?dW&c1w@{sbdw~>tJ(+1^38?U_YRAj z;dA`Lo{6fWu2qDdn!q$Zi(|e`mnb2euWncsqTHG}m>r#aIEwtt6Y)gbCVOk)iYKQQ zUZ|%>a}_~PlmnkQExoCg#BF`Lk1YLh+|Av!KRc%5a51+S+x5xF)=tbrg!mA*T%ZbV z6UIGajQ;rKl{vHH$JDv04z2$peHivEs&R4ix?X(g)@F2Jwn3~xiRVUB?1s|3jgr)o z8Cz*p%_mvHjdzx)(ANh-C7My+nbz2!e(3(jfvVNXhmc7&vCG0ZB`GDkQ&S>1HJ7CO zZW>F`mf3O8%EX(V*0NtSYHbfpwrej8M$^TKZO@M$w8LP%e370} zcQ9|z$u@^887ZV)LmvgTJ-dBLC^_9Jq)$9~4EmXbX^b69?n9C2;+*lpHuj<;xvAfy z(0-MlUdt5zyxbLzc-z}RlWWfyfB)rVWY!#Sl8v5!{{#}jgR1MX7MZfZoqg2z_+~na zK}=4>IlQAw49Mn0^&1b!xg5STdF_-OJjSk?BlfBvJogADpGwZ0+owATV;AfQF%iJy z1Mtg+h7Z(R&aj{u%qHjwpEXsqrz5kvdENwPS8WE=qWmj5F5^Jkl+hs zp++(JL6g=fMVDUx<=N=Q`ebEggC+5yHQ53I8N!W1OY@M|rWjLgQB-q*?}HI~U^X4B_-SL1l1RC%IQ z$a60FF2!5egZ=uqpA-nbSXK1wp5;+*-xOBwkxJ(5Rfp8U*RxI>@jr3o)~)KH^p{*@ zUjusOH&03Oxt#6d-;AHnNM5hkxG=fY%^UaPy~72_+EeAR`*nrh!4;JJxZv zA;K%l?I#6gw`z1m#Mq{Sx0ix98;2%y{y#|>s|cvfJhv6Y(N&x*h7RBu+di4^e%N2&ZD(i7RlJt9*i8PJP>&30B3?p)Tj(M<%q=OmBCEbR;} zhpDd}fL34joTlMBO=ITYz*%stEy+9m5SlL~lhx<)8EeaWC!Y6^ThFhPM@;Q`xLU(2 zWTdm5V>hp-*B!ryV83=X;QYO@Q4a(DHX~&|nXZi%e=)QzjiB!#W)aQjhX2TekmDav zp>;enrn&L>vz7(IM}|_A%SC?%=>xt|N4>q$4*|@Y@XeDW;m*@+=qVs6_?29TajvPT zJ6)p|HfnnQJ(n4EA4K073S&5Wi2mrITQb$Rl)y&2PmAGQrfa_#_}$Op`YL+&xQ9tc zj;q}Lmit|6F(S)~!7NMZNNtkSk#~F#k@y~Zc*2C?)gv9oiCFn_n+6LPgg-oXeY{#; z*+(M@`IE<7940{wgW_qr4*E&@MfxlwAu7zr`EJ$LW}7UG*=PZBv|G?JUAAQ`gOc`c zkXP-P?QA8TGh7T?@;PGi*{3Ce=f=#T8h^m1pBHys`#6{Mz;Gt)jHiuME@k2yufq7~ zrx})~YLv{_Hq=M02ka{OB zEJ4{pIp?AghTuXdsz3fl-WYQ82s5t(Pd7=68KbpqVFvYDm~LIeXIk z#NQ$z?5zu%M-*}{^2ru`vC^X=M+2c@uVvbhPfmROVzV=~j~c=9XVQsAWQEaf(lya| z$2<0vI&*|teA4z06k;L&v|y!9J@d<+8sLcldpob+HsB^pEeBQU6g#KHr@54-)x74A!WIcQcwJ7kDX~ zXs*0#UVMx9eogU@?@VQIh!1}tYLsGk%xCBNcRx0C&%!%2SS*Oa4!kQRj+{-f|9OeV zMWcq#Ib5()%;K#RL#1QjJ2O|SA+bm1vw5T_Nokhr6umyI?0$k{P>8@IC0r2wSzMTL z&P*Cr<7Acc12>k3n?k;7F8ie!{3)KQRc#857*UvNw;Y_CRuyCs?EINT@zfYgk^Un1 zUR03rmxxv|#%>Y5Fz>36tu@BATYqNelr~Ldh&cGN5hJ%$P?RJ$PEl!fsVAEadjeT7 zp>QnVL?d*MROiX3aJ9hOBPa5MIIRhegb8%R(Ylu=E8n|O!{`Z`@!2Gw$E(UGhB>Uy ztId2D36WLdHvqsyZTeO~b$8>2{!fXUkEVNH(mN3ims9&y>ZFRFcD1WQPsQ6g2aPNx z&XeE;kzBQ&iKg*|qbJ7N70sWEnQYoMzmvu5`!p<$tJuHEOBLIaw z=RAsuOz7s9%>+{J0VzG6i9U&iqv>U80RksDS2tn+zEGP6Ly}HB6~~?kzbo0U(9!Ss zY3aNygW?H%j0%W>Z{fuX1dP&KD12{!H*i1Ojb-xuRA$`pl|d~?_i4-(b5j1Q=CdZt z!qb<3*s6`4lPFfeRPnSW4Fqs%cWJj^&}j|D709o7E4guZzgave8}E3zSarbBM`-qn zp$N}K)h5y#X%=4}o>2QfaO}Cju)J8bJ6;eaIFQ9V#O|w@POesxMNLC5@d{j;XF&N} zruwFmOoJ8cq}db?6mx^HLVBetko`!qy7FcCCI)w=UW9+xGl_2%QNnFE3N_kB%WCAa zok!c!9cLWePFi$qOlZ!8$8vC~dVSRx;m8OopS#~Ed_AXAOfJodvsb`OLF@Ly85WBN z#>w>t3KGj#B3Ok`SShY5q_0p98G|+OAmD8)t#YOFjnH$)0;gheo$^Hy$##a%dY_tI zo(u3mOG!*Yc@;;9GwvO==kuRADsuQTwEDKM{?#-pIlj zACl81;5S#l?z3HpOO zR=)lOfG#5ILBV3y#*>F_&u~#_)!7DshI7(mvbypICu9w|VE zZ=9XZw1c*XxT3<+Sfj7VD&X8Kez-nlWS?^~8!^r=tHn9J7M0JUoN2H+X> z1ya&Cl_n!*q2NW({#ISj^y%<7J;}KHH9a|_zVt)R8wV{)mr$ifsKE-u*0lHk1Z{Al zb!#vO+&|`&C|zCXd3voW)ACl2o#Hcw;p9d2fxMt%D^x>sa?Y3*Vdaame{H6mMo&nL_{34l3#o?J=8HG6cw~+LQEOL1 zR}`9AP{8YMe(6jl1}&z$LWD_XtXGX_d;NI7_{NHF z*sx()>cItWn~(IIo=KlO8$YVLdHU1$cF1G&=O>cWc!o2SsHDW>EYDRioRii+@Z2TL zkG^QU!ymNo)%u|3^3?6q>%5@PA@(c?M$4wtDNMOeEXyu1_RZAuf!Cm3i#fTq>KO1r zC#fF~Ef%LyvAjutPrD{nWTpaBs7xmRT{mod*Y^xy-%RGQ03``+s0(HlCsm%!dD|=W zILuD{x`lI!ZX-JQwNfJ8Vd+1@qKMhJr|Ch{pyeC+Sl!1q&H@l4;6IGrxIpJGUn9JB zFnZ9ueV6f!OSSQdVKkNL6o&r&z0!H7@4;?kTlrKqcHFt$Nn6tq)d^x7fLCsV;B_w^ zBEO{{rRV1|`ZK=LADjNdETbJnTdPddcHP1d|KQdLpYglt%N+3>lyOMC?{Wm?X@3e1 z+!lj~#F0DG*Y^PaEnH(wa&8bfJ;(=}`N81e1XuotE*0>=bSVNkyMGOw!u&_97`TRgTYkIF$a+`&?(6h0bix_j6J!$J*6N4#+B?8o ztSrgEOtlU1(zO$5w$)$uBPStJqF#`C;VQr=(k_-98%PgcPygTJYA(bu7Mm6&0!j$j zC*Bs)1n-dnhqJt%lC75hgZ}p(ZvS^eiUh6z7QP@??wr`YOP!=3$C!+4Bt4c|Kheu7;Llr zIhgz^-OrcC&eI~8p>~5=8bIh{!>{_DCM>i!-~_y;3&Pp=NHqgtIP-o!P&PUD7c25z z_4rL()8-_|$YYMfG}vRgYt8{?-Cgv69!@%EP>2D80p}-jI$-j#H!tRnefsq3PPTL4 zu7oF9c1GobL*QO-(VO5R9+N*@6E@k-(AEYvV6z&aUQvO%?wusVZ^k-e!!6y}jJdCM zkeCG+?PTjuiOk$H*ezIrlmwO@^zIl%O#f~B6^iv-MLh-+ZIx#`G!ok7x4-G_WWkNl z6xQDs0U3cmS|fKO?(n63DIJHZBr*T-6x{ek`0xd0-yS=>RcU+Wp0DYjdCSyM3`Pe* zMg#B27@zC3muH9*WX3{!28k2A$U;ZVANXV6{+&ViL?93V5#FzhTNm9=%xX-Avma)8 z{S;-65oBp^#&8nMm)bP(cs#J{(>TF+bn@mxL&&3JD5mxg4|~E9cVghU#7N63_VO$aAZ%js`2BSx+22b3qhp8c0x)S5de5+q5KgxilMkQP9gj!7_3ilA zgn#IMqQBvX*}2ZS(MuI8feDjG#uyA+JA?VFp2eZ{ec}p4vloX`Yz0^XE9bOvWgre| zfjCs=5EJ2{woSL7G*ZHC^+CRUQl&1> z7IW5m#@s1;FMt~A7F0E*aLAQx`5@Cx5b7*$Ru7N+mJFWrK79*a?Wlxqc*@%7Ju}~z zqVB@oL5db%x>ytFpiYDU19@OAO?e~9`l~rH*^~odEh|kO^nx|Ye?oOmeJB*Y*jnq@ z&TB9Dd$#I*%&^g<{TakAcb+6+FD^SU1K!Mfx}l7}i`Z6D}MN92a|1 z>Y{1;ek6Ho$)RjneT_WHr@UF<iU@t#Dt(6( zzU`XSslj%rid;v?%_bJV~OJh2%7x-@%u>#7O8AfDT z!uyFbG3Y!#NWSMK6_@6ChiTTL!t{XkVB=W~s;!aRz}AO=`DqGIK6sUKGxz^7--VQ| ziXRrZ$Ni&azAmP7-K!)Y2+5yq?u$2<&aYfN*}1AXpTsFI*(CcaRP)SDv;3fXYn0ro zfSK%SyVT`?{j=u-R9=*XdJI(y(v2x?(Mw0A8%0j|8z(3+oK)vw;3|9oUHLR;Vv2k0 z{kG-w`AgJEe3z3wW450UTTAxK+=MgTl(ayl}vJ1KFx<#pWhu}`7CR{}Ae zguEb-6SXNl&~xVQVN9s@g3{KcB~n(AZZD_r z#MF+$_k)N*J}f|_J32ckKO zr}PZxl#+a>ra33Uo|j30{QLTYo3Us1PRRqmf4vGtHdcdIJ{}jTFs>cV1(!B4V6>c&_SIz+nt2-Zib$i z4cEnm_z_9k@1O&c?Qd|kYHoi**d+32Pf4FJ2y_t(`VRHzYs9j_CCW%ERTqG_0gE6) ztbXKwAeP+^mEVHV3y4 z6-xp+%1!y!?Ae{-3P4BM&MrHsEq+hIS#?@nfF5oiA(mA#qp9(9&cuxP(6A~V1%Sn6 zt%Ja>0MHPWZ7b+vK^dk7a8y7xU=)QWcr16o`SYR2fiU{fJKN(#=lkQI!vKfo+FRS# zr+}Qt4lzPY{2;=lMV1Zxf^-5bde0uCodEj)D+3R0mM3~B`Mq{x?FELk9JtxR)GP|A zW`IL?D)nwDloQU>_wBVeC(SO6ba?`XPwZErbFk=DM7nmUdWCyFun; z5zx6f_kSt}fpZ#b)&xv6OftHpV2&{!pak?OCPRl)oZL0bA1QVLzcH&ac4J;c+t)m7 zg;V|yY8}Nnm`6r5%MU`ROaO!14Ja|%xY>K6J*J{A9euG+Uj`@?jwj6UFh6KjX!tT& z@m9Hq)rg&s`np}j*U$}CsWt2`M8r>paaNBU`V}y)l#Y zc`G}0EWg_!(*_mb-kX6*Fd$*J|LV?SsYii^~d=CE{TC^U9y~b zuEY~U%UIS{));CXlQI#ZSuihhj7EB(>0J}#J$0&_y$_0^+o-42oHk-!yA6T-1LgC9 zs$W$_JU=@Ly=J&_kbkI+_#u5Gi}%X5^0|sIA&6x zYy-mK*~J$-If@!PLucK9{v>1m%h;95q6!bu*#HoZ--`INqb(j-E<443G#K_MMx#m_ zq0x>NO8U8mZmmtcy9LE`tt z&}hDm8p=fxw5H|u(FLa&ex*CdrPpx{Dv6xmtyqRTa3>7Ej~|QUoAV7`<=adnKabS- z7Hql3)GssFC|+iJTKkpctqUb(!S>qTP{8x+A9ZUVfoz7pI1Vu-NZ90vrzk;&t^Ya( z-btRzGsCIR5U`>bTU2g-{MRqxpQhRy?^EHz*DYMvn>FIO$xG^$CxoN*dh&ye?^2EZ ztXEl;zP}{V$)CiW-_38GsidY|`6bx>@Ex`N2{r35>JeXs2|ySNe|$gfH~uD>T161Fr1gY`FJOlBCMfY+bCeX>8j+KRb*zE1b7-0 zV4D>E2`&A_ZQqCOmX;o)w=PE@F9ME%1qBezky)@!`0vd2V*Y-$ee`t~lh1NUIW z?mf7mir=G(;MRocnAgipioJ9lxZ&&+;2ZAsQ|cThIKDFOD@sQk`|rI)Ic>*X2}1_d z0L<+FRbGYz4y0I!zI7q3L+}C!z~`lik$Q&`^@WVxzNvjM-k4jOn8)}u_@Eo4rFJhk zR9)qS-0tOT0Y4%A)-MdHVtbuBSnAOvSx z;7d|Y+bmte(o5-wq4y-5gfd@xT}mewfT|y(g33-_nGKlhPNjy^)Fdr#I&Ll4X)SKi z?Qjkeeky>h;e?{yok-MIpL5^P;|_ZPd88!yA_NHUI}}c^FOnqj{jzOR8T_SuAOcoGbpFjI47%jz2Jb z&_!rR8j&IWHQfw;VrJXvz&Qx5(Cn5+;*1P=capo%fC*yx?!v>;wfQHhOQe+ty6Ub2p>vzYILoTrfcLWKFo_AD5usb`NJG`h9o;3E}TTV zQOx(1uaWA+snVf_Ru`^RM;=8BNLKK4uovC{H<$43&VJ0ft=ulACc0q@T>0!*w*Z*t zI`&n#uvtdMjhwA9{=+A}#yun6adbtH_!U){r0h+#!#Cj1=jf6z!@B(M?g3dlyR|fi zet&yCYoony3g$MmKm+2(c&u;nK~MI0b= zol~FoW#$~!x23`-tK_mfF{3Xub708R?DwRVQTZj2UZ4=|J8aQ zZ^m9E+a&#ehCskFI&qm__698({AZ8~u%0E8NKvc<0N?{A6b{3!gA03`tGF~%8o$d? zfzR}}s}gqS^BHJJJ~E$TFDdX>@P4-WSaVnP&sG7`2m6D-1~=9Jo>KrlZChq<760>N zEYK(*yw#yI)9hy*H`|6;GaG6fa=vMO_?SvTTP!0#atx)IMQ^U@VDmLT^V^-;n;36> zyfQA-2Vei7?{<^kUV>_Hwi@?i9j^2Lhrt_lE^Vk2R zINea0zU5ebLCNu>ER(2Cl4?gEkfhpNO@F!&Y3SIxp8Hd)`2Bh;3)j{phxBVxM*su# za~eZq7TTim`)8TDlgUTiyNl@s6;;g6+o()O#&jo*1Q&o4KIS4U! z&v6v#s9P(P;`F~W9vyKno#z5l_H0ZP!Xz3gD6FRpuNgX1m*1T%X1pHVYfH<}aQV@$ zX?%F<50Bf847tl8=g3ZF_gy^~*LpRO%@XV8`sz4?qN6U^nc}iQnNEA)fR+j>m#m2@ zr(x=N{BoL|&h$WWmJ{%W`aOM9=Wy=myRPk20>+-Gto-$kUM@%=Y$PwJ-U=m$j-F*l zQs((xYCn}Qf#x9Nf2iNea?Sj09f#Oy>;%}qQTogNBja{L^7s7{U~L{9X%hY>Ms{lJ zN-FSk{$m|GPBna?{;<5=2-|i?o)C(y=j$VOi?Eowo1q=%W1{7`12HF>->kC_`E?(fM^6J<8^0ac*|6f@S%RL$jQ9@N*Bng z0^6UntUCTsjukIOnjDl=N$M0Z!v6<-;sQF(#vbo zi!Dk0MpmLJB@ato+k{5Njg%B;lcw{~D`6o8vI95B4sgCQapib5)%C!lf)?~p4#=FV zIV2WwuA54~*E&U6xgCL6wpSHT#01<92W!fFmE>dnxv_Xfmaij+dCZ%`@GUsbzlAjp zC5V*8oZ_9-*q+JH#SCH6jFLNY=c?$h`ekxRG@1Wi6=cMqpLkES3)S|0_={dcbQjC4 zegHD;X6@pBexHyJ*v3KCtJjFn0!v+2I-JU=>Ln8$=6J-ztCPQ#&EmwZ5=W|?uSO=C zaBw6}@gt7S$~!09u>Bl{eicGn{o6lWMswZ;x%pLWuRvS#+lzx`>yxTw>yq26aZ0Sy zi;&Fbhdh)><@&;;+oFM^u8=$(9}i7pUX!}DZc@c+iPY0ow$bw&zFMs|dFT9}aICnN zd@W%rrE8$^W;iIh7zSFP+^-*v%IWl1^kKKgUebGcr&X=R=PnIF=OzvFk*V)Ek7v(D z57@lPNqgX$&j;+vO_P|>WMQq92m6tXdU2 zbgw~}%!btse>QLdY@nL39i98A2uT`Hk}%Jo*$!pcg-`l!sZL&nypC-Uw3F= zUTXT~d^9pMuQ4-NOv@y(bcsEF{WkoV$&8yJ?*($XrW;!Kk!g)|K2^z`iu9qsQgviT zxGUW7A4^j4#Ebx5Eaarg=t}i5u4^jI9c7R`GcQ6X>&RL)#I9vj5Jh{aC`&5jJy(|g zdoIeRfEjnuZ+bnNt;AiHvOt%O@4Z|7YF?QkRh|Kc3ACocTaYa+iHXhpdzU*(h}F#H zqO1yNk&SEk-v1Jo0w&4F7V{%$pt?fry&|FXSkXfjKZSL>>eQ*rzp-9?8x3ny*h0@#0Gls6!q~S~~%-f64zu#m#Kn=`3k|DKE zx+uihq&h}(@C_Rq}=mGvT1#mZs1y)^_;r+?lh2U zDdN<{PsR@%r3h_7N@4*zpTpg>M9F^sV{0T^$`V{sI_cv~A*W?$)h&8R*kQk*g&&0<2D+@m@0XPA+e(OngF zQAOQsZSi|F5B+qyBo=YI&P!C6KP}5I@o>{5q4e(S2Gb3{Mo~+~C0(=!&ZM7odF69c z7Ku|DN`^l7 z-F-&sHm64CbkPX~%*muVrVGRU5yuEvni9XyE;BjBnPbYUO%7-Q}V_lTN!{=dh zMW1}jk-u!iriB?;(omu8&Tt?5?S}t3Cd@PGJI4gtxefk0CrwARd^$9Oy1Fvlr;a>) z9!^kLkT@h_677@!|2zEZthf_t#jd%^Y39b+U8(D)hD8RiK)+VUTfazvC(X>q{hZy% zjxG7s|8)L~$MWn_cBbN-rvOXvsQkN(AKMw%4MDH12yS#XeO^hXcYb>*z3{GK$@2C} z^OB{ZIE4CzCEO|XT$#$;4i1*wUhZ?oZN2%~8VtFv{4hjvKKQl0ztBSff%PXvPCw2l zz|!Lp1|$eltScU|2z4G*wir8fEBu6-7~@4{FiJ7XPF|64DR3Gb1!A#@Fxl7Yimkt!R#Ls2a z-cVuawU4N={LY4BKdJB$l9j)ckszru%_!w9F4xAnaO+9WagQ_OhWL>_$FtKq;vxaR zvJ*Dm$g$W?>n$g$O0RBSR%)gZ)y4&>+Ep(fet!3e^ZMvb&`F_PN^f zV!3M(%vk#>1Qmi2n^cVuMqI@XR3qdO)!2V(5LXdFSc@8j7(x#Fx(0k^hy7fGILl1* z1Co9F1P|@oN4;<7A7URH_|G&B%UFxJj0nMM!9Sw0p|wCrGq$r9ag*c&=?gXrTI}UI z1TC|s9JRcp+P;14k|g`+|0QBS1sKJM^{qqDFbRQgX4&cO+b6F3-%+mEoH~Ro2~#mq zBxOAi`TGrn*Y^KMq+%s;lzKgacfW}M;sra!32YSni<#KYFN5Ik4+c~sz(W2H^%8;W delta 70548 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 C^&=7h From 9527b7466b445d5cb9a4eb5831037543e25474a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 26 Jul 2022 00:11:00 +0800 Subject: [PATCH 167/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9helm=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=88=9B=E5=BB=BA=E5=92=8C=E6=9B=B4=E6=96=B0=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsHelmConfigServiceImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index eeaf721f2a..37c1cd7e11 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import org.springframework.util.ObjectUtils; import org.springframework.web.client.RestTemplate; import io.choerodon.core.exception.CommonException; @@ -133,6 +134,7 @@ public DevopsHelmConfigVO createDevopsHelmConfigOnProjectLevel(Long projectId, D DevopsHelmConfigDTO devopsHelmConfigDTO = ConvertUtils.convertObject(devopsHelmConfigVO, DevopsHelmConfigDTO.class); devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTO.setResourceId(projectId); + devopsHelmConfigDTO.setRepoPrivate(!ObjectUtils.isEmpty(devopsHelmConfigDTO.getUsername()) && !ObjectUtils.isEmpty(devopsHelmConfigDTO.getPassword())); DevopsHelmConfigDTO result = MapperUtil.resultJudgedInsertSelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.insert"); return ConvertUtils.convertObject(result, DevopsHelmConfigVO.class); @@ -146,6 +148,10 @@ public DevopsHelmConfigVO updateDevopsHelmConfigOnProjectLevel(Long projectId, D devopsHelmConfigDTO.setResourceType(ResourceLevel.PROJECT.value()); devopsHelmConfigDTO.setResourceId(projectId); + devopsHelmConfigDTO.setRepoPrivate(!ObjectUtils.isEmpty(devopsHelmConfigDTO.getUsername()) && !ObjectUtils.isEmpty(devopsHelmConfigDTO.getPassword())); + devopsHelmConfigDTO.setRepoDefault(null); + devopsHelmConfigDTO.setDeleted(null); + MapperUtil.resultJudgedUpdateByPrimaryKeySelective(devopsHelmConfigMapper, devopsHelmConfigDTO, "error.helm.config.update"); return ConvertUtils.convertObject(devopsHelmConfigDTO, DevopsHelmConfigVO.class); From 2588aeee3c2d98ace7197abfed18dc8c60a70534 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 26 Jul 2022 00:16:20 +0800 Subject: [PATCH 168/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=B5=81?= =?UTF-8?q?=E6=B0=B4=E7=BA=BF=E4=B8=8A=E4=BC=A0chart=E5=8C=85=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2helm=E4=BB=93=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsHelmConfigServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java index 37c1cd7e11..d8ee43c55b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsHelmConfigServiceImpl.java @@ -244,7 +244,7 @@ public DevopsHelmConfigDTO queryAppConfig(Long appServiceId, Long projectId, Lon DevopsHelmConfigDTO devopsHelmConfigDTO; AppServiceHelmRelDTO appServiceHelmRelDTO = appServiceHelmRelService.queryByAppServiceId(appServiceId); if (appServiceHelmRelDTO != null) { - return queryById(appServiceHelmRelDTO.getId()); + return queryById(appServiceHelmRelDTO.getHelmConfigId()); } devopsHelmConfigDTO = queryDefaultDevopsHelmConfigByLevel(ResourceLevel.PROJECT.value(), projectId); if (devopsHelmConfigDTO != null) { From a5c976fea1253dd2175517ec4d18a7988cf79ec2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 26 Jul 2022 10:42:30 +0800 Subject: [PATCH 169/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8D=E4=B8=BB?= =?UTF-8?q?=E6=9C=BA=E5=BA=94=E7=94=A8=E6=B2=A1=E6=9C=89=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E5=91=BD=E4=BB=A4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../resources/mapper/DevopsHostAppMapper.xml | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/main/resources/mapper/DevopsHostAppMapper.xml b/src/main/resources/mapper/DevopsHostAppMapper.xml index c6a822deee..e4509b31bb 100644 --- a/src/main/resources/mapper/DevopsHostAppMapper.xml +++ b/src/main/resources/mapper/DevopsHostAppMapper.xml @@ -110,12 +110,31 @@ + From 17fa2e3892f388693678e996542eab0f48e76c8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 28 Jul 2022 22:16:47 +0800 Subject: [PATCH 174/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom=E4=B8=BA2?= =?UTF-8?q?.1.5.RELEASE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 58393f6cf1..83d6f175d0 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.5-SNAPSHOT + 2.1.5.RELEASE jar https://github.com/open-hand/devops-service From ff830a54a7273f89f632e1ee080588f58d6743b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Fri, 29 Jul 2022 16:06:48 +0800 Subject: [PATCH 175/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8D=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=BB=84=E7=BB=87=E5=B1=82=E4=B8=8B=E5=85=B1=E4=BA=AB?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/main/resources/mapper/AppServiceMapper.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 83d6f175d0..97fd9772bc 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.1.5.RELEASE + 2.1.6-SNAPSHOT jar https://github.com/open-hand/devops-service diff --git a/src/main/resources/mapper/AppServiceMapper.xml b/src/main/resources/mapper/AppServiceMapper.xml index 6ca7368458..5c461c8d59 100644 --- a/src/main/resources/mapper/AppServiceMapper.xml +++ b/src/main/resources/mapper/AppServiceMapper.xml @@ -550,7 +550,7 @@ das.project_id, das.`name`, das.CODE, - das.type, + das.type FROM devops_app_service das LEFT JOIN devops_app_service_share_rule b ON das.id = b.app_service_id From 28487e4179f0b9e22fe5a99ab63fc5e32804e701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 1 Aug 2022 09:47:20 +0800 Subject: [PATCH 176/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=A1=B9=E7=9B=AE=E5=88=97=E8=A1=A8=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsGitServiceImpl.java | 6 ++++-- .../choerodon/devops/infra/feign/GitlabServiceClient.java | 3 ++- .../infra/feign/fallback/GitlabServiceClientFallback.java | 2 +- .../infra/feign/operator/GitlabServiceClientOperator.java | 5 +++-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index ccc1ba0b0f..27da7dfe4d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -1367,7 +1367,8 @@ public Page listOwnedProjectByGroupId(Long projectId, Integer true, search, pageRequest.getPage(), - pageRequest.getSize()); + pageRequest.getSize(), + null); int totalElements = 0; if (gitlabProjectDTOS.size() < pageRequest.getSize()) { @@ -1378,7 +1379,8 @@ public Page listOwnedProjectByGroupId(Long projectId, Integer true, search, pageRequest.getPage() + 1, - pageRequest.getSize()); + pageRequest.getSize(), + null); if (CollectionUtils.isEmpty(nextProjects)) { totalElements = ((pageRequest.getPage() + 1) * pageRequest.getSize()); } else { diff --git a/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java b/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java index 70801e94d9..e003e2d287 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java +++ b/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java @@ -842,7 +842,8 @@ ResponseEntity> listProjects( @RequestParam(value = "owned", required = false) Boolean owned, @RequestParam(value = "search", required = false) String search, @RequestParam(value = "page", required = false) Integer page, - @RequestParam(value = "perPage", required = false) Integer perPage); + @RequestParam(value = "perPage", required = false) Integer perPage, + @RequestParam(value = "minAccessLevel", required = false) Integer minAccessLevel); @ApiParam(value = "迁移应用服务") @PutMapping(value = "/v1/projects/{projectId}/transfer") diff --git a/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java b/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java index 2bf8add674..e957dbaf1b 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java +++ b/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java @@ -547,7 +547,7 @@ public ResponseEntity> listGroupsWithParam(Integer userId, Boolea } @Override - public ResponseEntity> listProjects(Integer groupId, Integer userId, Boolean owned, String search, Integer page, Integer perPage) { + public ResponseEntity> listProjects(Integer groupId, Integer userId, Boolean owned, String search, Integer page, Integer perPage, Integer minAccessLevel) { throw new CommonException("error.query.group.project"); } diff --git a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java index 5a16527bda..ff5ff998eb 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java +++ b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java @@ -1568,8 +1568,9 @@ public List listProject(Integer groupId, Boolean owned, String search, Integer page, - Integer perPage) { - return gitlabServiceClient.listProjects(groupId, userId, owned, search, page, perPage).getBody(); + Integer perPage, + Integer minAccessLevel) { + return gitlabServiceClient.listProjects(groupId, userId, owned, search, page, perPage, minAccessLevel).getBody(); } public GitlabProjectDTO transferProject(Integer gitlabProjectId, Integer gitlabGroupId, Integer userId) { From 621d0ff1a7f5ad9292840174ab991289d3b7fc7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 1 Aug 2022 11:41:14 +0800 Subject: [PATCH 177/228] =?UTF-8?q?[IMP]=20=E5=88=A0=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=BD=99=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/AppServiceVersionServiceImpl.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java index c91de02fc5..c9d7382ffb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceVersionServiceImpl.java @@ -44,7 +44,6 @@ import io.choerodon.devops.infra.dto.iam.Tenant; import io.choerodon.devops.infra.enums.ProjectConfigType; import io.choerodon.devops.infra.exception.DevopsCiInvalidException; -import io.choerodon.devops.infra.feign.RdupmClient; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; import io.choerodon.devops.infra.mapper.*; import io.choerodon.devops.infra.util.*; @@ -106,10 +105,6 @@ public class AppServiceVersionServiceImpl implements AppServiceVersionService { @Autowired private DevopsCiPipelineChartService devopsCiPipelineChartService; @Autowired - private DevopsCiPipelineService devopsCiPipelineService; - @Autowired - private RdupmClient rdupmClient; - @Autowired private DevopsConfigMapper devopsConfigMapper; @Autowired private DevopsRegistrySecretMapper devopsRegistrySecretMapper; From a969cd654862da1fc8989acd4338def056952793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 1 Aug 2022 14:34:25 +0800 Subject: [PATCH 178/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2group=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/infra/feign/GitlabServiceClient.java | 11 +++++++++++ .../fallback/GitlabServiceClientFallback.java | 5 +++++ .../operator/GitlabServiceClientOperator.java | 14 ++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java b/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java index e003e2d287..f59d05b2ae 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java +++ b/src/main/java/io/choerodon/devops/infra/feign/GitlabServiceClient.java @@ -154,6 +154,17 @@ ResponseEntity revokeImpersonationToken(@PathVariable("userId") Integer us ResponseEntity queryGroupByName(@PathVariable("groupName") String groupName, @RequestParam(value = "userId") Integer userId); + /** + * 根据组的path查询组 + * + * @param groupIid 组的id + * @param userId 用户id + * @return 组 + */ + @GetMapping(value = "/v1/groups/{group_iid}") + ResponseEntity queryGroupByIid(@PathVariable("group_iid") Integer groupIid, + @RequestParam(value = "userId") Integer userId); + @PostMapping(value = "/v1/projects/{projectId}/repository/file") ResponseEntity createFile(@PathVariable("projectId") Integer projectId, @RequestBody FileCreationVO fileCreationVO, diff --git a/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java b/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java index e957dbaf1b..951e5303c5 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java +++ b/src/main/java/io/choerodon/devops/infra/feign/fallback/GitlabServiceClientFallback.java @@ -206,6 +206,11 @@ public ResponseEntity queryGroupByName(String groupName, Integer userI throw new CommonException("error.group.get"); } + @Override + public ResponseEntity queryGroupByIid(Integer groupIid, Integer userId) { + throw new CommonException("error.group.get"); + } + @Override public ResponseEntity getFile(Integer projectId, String commit, String filePath) { throw new CommonException("error.file.get"); diff --git a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java index ff5ff998eb..ac1fd71fea 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java +++ b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java @@ -1842,4 +1842,18 @@ public void deletePipelineSchedule(Integer projectId, } } + public GroupDTO queryGroupByIid(Integer groupIid, Integer userId) { + ResponseEntity groupDTOResponseEntity; + try { + groupDTOResponseEntity = gitlabServiceClient.queryGroupByIid(groupIid, userId); + } catch (Exception e) { + throw new CommonException(e); + } + if (groupDTOResponseEntity != null) { + return groupDTOResponseEntity.getBody(); + } else { + return null; + } + } + } From becfe81e852dc22b4e6435c6edadf6e29e629cdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 1 Aug 2022 17:52:17 +0800 Subject: [PATCH 179/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E7=94=A8=E6=88=B7=E6=A8=A1=E6=8B=9Ftoken=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/UserAttrService.java | 8 ++++++++ .../app/service/impl/UserAttrServiceImpl.java | 12 ++++++++++++ .../operator/GitlabServiceClientOperator.java | 15 +++++++++++++++ 3 files changed, 35 insertions(+) diff --git a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java index 8eff1b7055..9fc2dbb8bf 100644 --- a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java +++ b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java @@ -101,4 +101,12 @@ public interface UserAttrService { * @return UserAttrDTO */ UserAttrDTO queryGitlabAdminByIamId(); + + /** + * 创建用户的模拟令牌 + * + * @param iamUserId + * @return + */ + UserAttrDTO createImpersonationToken(Long iamUserId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java index f39a9df3da..341eb65f6d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java @@ -19,6 +19,7 @@ import io.choerodon.devops.infra.dto.repo.RdmMemberQueryDTO; import io.choerodon.devops.infra.dto.repo.RdmMemberViewDTO; import io.choerodon.devops.infra.feign.operator.BaseServiceClientOperator; +import io.choerodon.devops.infra.feign.operator.GitlabServiceClientOperator; import io.choerodon.devops.infra.feign.operator.HrdsCodeRepoClientOperator; import io.choerodon.devops.infra.mapper.UserAttrMapper; import io.choerodon.devops.infra.util.*; @@ -33,6 +34,8 @@ public class UserAttrServiceImpl implements UserAttrService { private HrdsCodeRepoClientOperator hrdsCodeRepoClientOperator; @Autowired private BaseServiceClientOperator baseServiceClientOperator; + @Autowired + private GitlabServiceClientOperator gitlabServiceClientOperator; @Override public UserAttrVO queryByUserId(Long userId) { @@ -226,4 +229,13 @@ public UserAttrDTO queryGitlabAdminByIamId() { throw new CommonException("error.get.iam.admin"); } } + + @Override + public UserAttrDTO createImpersonationToken(Long iamUserId) { + UserAttrDTO userAttrDTO = userAttrMapper.selectByPrimaryKey(iamUserId); + String impersonationToken = gitlabServiceClientOperator.createImpersonationToken(TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), null); + userAttrDTO.setGitlabToken(impersonationToken); + userAttrMapper.updateByPrimaryKeySelective(userAttrDTO); + return userAttrDTO; + } } diff --git a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java index ac1fd71fea..8a00a12867 100644 --- a/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java +++ b/src/main/java/io/choerodon/devops/infra/feign/operator/GitlabServiceClientOperator.java @@ -256,6 +256,21 @@ public String createProjectToken(Integer gitlabProjectId, Integer userId, String return impersonationToken.getBody().getToken(); } + /** + * 创建用户的模拟token + * + * @param userId + * @param name + * @return + */ + public String createImpersonationToken(Integer userId, String name) { + ResponseEntity impersonationToken = gitlabServiceClient.createProjectToken(userId, name, null); + if (impersonationToken.getBody() == null) { + throw new CommonException("error.create.project.token"); + } + return impersonationToken.getBody().getToken(); + } + /** * 从gitlab项目创建access token * From 740153dbad45a3abc846b4fc5024a9ab0915394a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Mon, 1 Aug 2022 17:59:31 +0800 Subject: [PATCH 180/228] =?UTF-8?q?[IMP]=20=E6=B7=BB=E5=8A=A0=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E7=94=A8=E6=88=B7=E6=A8=A1=E6=8B=9Ftoken=E7=9A=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/UserAttrService.java | 4 ++-- .../app/service/impl/UserAttrServiceImpl.java | 15 ++++++++++----- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java index 9fc2dbb8bf..c26032ce8a 100644 --- a/src/main/java/io/choerodon/devops/app/service/UserAttrService.java +++ b/src/main/java/io/choerodon/devops/app/service/UserAttrService.java @@ -103,10 +103,10 @@ public interface UserAttrService { UserAttrDTO queryGitlabAdminByIamId(); /** - * 创建用户的模拟令牌 + * 查询用户的模拟令牌,不存在则创建 * * @param iamUserId * @return */ - UserAttrDTO createImpersonationToken(Long iamUserId); + String queryOrCreateImpersonationToken(Long iamUserId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java index 341eb65f6d..b139a86443 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/UserAttrServiceImpl.java @@ -231,11 +231,16 @@ public UserAttrDTO queryGitlabAdminByIamId() { } @Override - public UserAttrDTO createImpersonationToken(Long iamUserId) { + public String queryOrCreateImpersonationToken(Long iamUserId) { UserAttrDTO userAttrDTO = userAttrMapper.selectByPrimaryKey(iamUserId); - String impersonationToken = gitlabServiceClientOperator.createImpersonationToken(TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), null); - userAttrDTO.setGitlabToken(impersonationToken); - userAttrMapper.updateByPrimaryKeySelective(userAttrDTO); - return userAttrDTO; + + if (org.apache.commons.lang3.StringUtils.isEmpty(userAttrDTO.getGitlabToken())) { + String impersonationToken = gitlabServiceClientOperator.createImpersonationToken(TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), null); + userAttrDTO.setGitlabToken(impersonationToken); + userAttrMapper.updateByPrimaryKeySelective(userAttrDTO); + return impersonationToken; + } else { + return userAttrDTO.getGitlabToken(); + } } } From 92d03661fe4d967516c34af25429fb8832e355f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8F=B2=E5=B8=B8=E8=90=8D?= Date: Tue, 2 Aug 2022 11:38:31 +0800 Subject: [PATCH 181/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E5=88=9D?= =?UTF-8?q?=E5=A7=8B=E5=8C=96=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init-database.sh | 4 ++-- .../hzero-menu-user-role-label.xlsx | Bin 117214 -> 116842 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/init-database.sh b/init-database.sh index a615ca9024..52143bdc72 100755 --- a/init-database.sh +++ b/init-database.sh @@ -8,11 +8,11 @@ mvn org.apache.maven.plugins:maven-dependency-plugin:get \ -Dartifact=${TOOL_GROUP_ID}:${TOOL_ARTIFACT_ID}:${TOOL_VERSION} \ -Dtransitive=false -java -Dspring.datasource.url="jdbc:mysql://localhost:33306/?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \ +java -Dspring.datasource.url="jdbc:mysql://localhost:3306/?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \ -Dspring.datasource.username=root \ -Dspring.datasource.password=root \ -Dspring.datasource.driver-class-name=com.mysql.jdbc.Driver \ - -Dinstaller.datasources.platform.url="jdbc:mysql://localhost:33306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \ + -Dinstaller.datasources.platform.url="jdbc:mysql://localhost:3306/?useUnicode=true&characterEncoding=utf-8&useSSL=false&useInformationSchema=true&remarks=true" \ -Dinstaller.datasources.platform.username=root \ -Dinstaller.datasources.platform.password=root \ -Ddata.init=true \ diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_platform/hzero-menu-user-role-label.xlsx index b59b0e7f37f411f8081d6728e799d4b2487e6893..f643c43fefe7acd138d99cb3d720873c7c10fe17 100644 GIT binary patch delta 105999 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 z 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 Date: Mon, 15 Aug 2022 10:26:52 +0800 Subject: [PATCH 215/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E5=B8=AE=E5=8A=A9=E6=96=87=E6=A1=A3=E9=93=BE=E6=8E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hzero-data-message-template-open.xlsx | Bin 79393 -> 78954 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx b/src/main/resources/script/db/init-data/devops_service/hzero_message/hzero-data-message-template-open.xlsx index c2bbb4ea46c84bbb197d9de1d9eb3f304389f42e..0ac83f749e7d3099120dc09060ee9441c490a18c 100644 GIT binary patch literal 78954 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 V^NA7Qab%!T;FcZ01B^M){{i{eG6w(v literal 79393 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 Date: Mon, 15 Aug 2022 14:07:07 +0800 Subject: [PATCH 216/228] =?UTF-8?q?[IMP]=20=E6=B5=81=E6=B0=B4=E7=BA=BF?= =?UTF-8?q?=E9=83=A8=E7=BD=B2=E6=9B=B4=E6=96=B0=E5=BA=94=E7=94=A8=E4=B8=8D?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=BA=94=E7=94=A8=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../devops/app/service/impl/DevopsCdPipelineServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java index d58c3c8038..27a2b69f52 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCdPipelineServiceImpl.java @@ -624,8 +624,8 @@ public void pipelineDeploy(Long pipelineRecordId, Long stageRecordId, Long jobRe devopsCdEnvDeployInfoDTO.getAppCode(), devopsDeployAppCenterEnvDTO.getObjectId(), CommandType.UPDATE.getType(), - devopsCdEnvDeployInfoDTO.getAppName(), - devopsCdEnvDeployInfoDTO.getAppCode()); + null, + null); appServiceDeployVO.setInstanceId(devopsDeployAppCenterEnvDTO.getObjectId()); AppServiceInstanceVO appServiceInstanceVO = appServiceInstanceService.createOrUpdate(devopsCdJobRecordDTO.getProjectId(), appServiceDeployVO, true); commandId = appServiceInstanceVO.getCommandId(); From cce15124b720c375bb3f6c882962ae64c2325393 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 16 Aug 2022 14:37:56 +0800 Subject: [PATCH 217/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9pom=E6=96=87?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 817bbacd99..266379eeae 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.2.0-SNAPSHOT + 2.2.0-alpha-SNAPSHOT jar https://github.com/open-hand/devops-service diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java index fcffcc574a..b1a897cd8c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDemoEnvInitServiceImpl.java @@ -356,7 +356,7 @@ private void doCreate(String image, String token, String version, String commit, String destFilePath = DESTINATION_PATH + version; String path = FileUtil.multipartFileToFile(storeFilePath, files); //上传chart包到chartmuseum - chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUserName(), helmConfig.getPassword()); + chartUtil.uploadChart(helmUrl, organization.getTenantNum(), projectDTO.getDevopsComponentCode(), new File(path), helmConfig.getUsername(), helmConfig.getPassword()); // 有需求让重新上传chart包,所以校验重复推后 if (newApplicationVersion != null) { From 18b2f8d5fa04ab31bd90d90aa16788b7264962ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 16 Aug 2022 15:14:55 +0800 Subject: [PATCH 218/228] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 266379eeae..f9871d864b 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.2.0-alpha-SNAPSHOT + 2.2.0-alpha.3.RELEASE jar https://github.com/open-hand/devops-service From c4ad0ab572025a237b75567228c8e41ab09e868e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E7=81=8F?= Date: Tue, 16 Aug 2022 15:18:55 +0800 Subject: [PATCH 219/228] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 81d5a5c83e..817bbacd99 100644 --- a/pom.xml +++ b/pom.xml @@ -3,7 +3,7 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 devops-service - 2.2.0-alpha.2.RELEASE + 2.2.0-SNAPSHOT jar https://github.com/open-hand/devops-service From 68838bbf430d9a86010f73205bf6491eb855584c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 18 Aug 2022 11:25:41 +0800 Subject: [PATCH 220/228] =?UTF-8?q?[IMP]=20=E5=8D=87=E7=BA=A7k8s=20api?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- .../api/validator/DevopsPvValidator.java | 9 +- .../app/eventhandler/DevopsSagaHandler.java | 18 +- .../payload/PersistentVolumeClaimPayload.java | 2 +- .../payload/PersistentVolumePayload.java | 3 +- .../payload/ServiceSagaPayLoad.java | 4 +- .../HandlerObjectFileRelationsService.java | 7 +- .../impl/AgentMsgHandlerServiceImpl.java | 33 +- .../impl/AppExceptionRecordServiceImpl.java | 10 +- .../impl/AppServiceInstanceServiceImpl.java | 32 +- .../impl/ConvertC7nSecretServiceImpl.java | 8 +- .../ConvertPersistentVolumeServiceImpl.java | 21 +- .../impl/ConvertV1ConfigMapServiceImpl.java | 8 +- .../impl/ConvertV1EndPointsServiceImpl.java | 16 +- ...ertV1PersistentVolumeClaimServiceImpl.java | 10 +- .../impl/ConvertV1ServiceServiceImpl.java | 10 +- .../ConvertV1beta1IngressServiceImpl.java | 13 +- .../impl/DevopsConfigMapServiceImpl.java | 25 +- .../impl/DevopsCronJobServiceImpl.java | 28 +- .../impl/DevopsDaemonSetServiceImpl.java | 20 +- .../impl/DevopsDeployGroupServiceImpl.java | 20 +- .../impl/DevopsEnvApplicationServiceImpl.java | 6 +- .../service/impl/DevopsEnvPodServiceImpl.java | 41 +- .../impl/DevopsEnvResourceServiceImpl.java | 15 +- .../service/impl/DevopsGitServiceImpl.java | 26 +- .../impl/DevopsIngressServiceImpl.java | 11 +- .../service/impl/DevopsJobServiceImpl.java | 26 +- .../app/service/impl/DevopsPvServiceImpl.java | 18 +- .../service/impl/DevopsPvcServiceImpl.java | 14 +- .../service/impl/DevopsSecretServiceImpl.java | 18 +- .../impl/DevopsServiceServiceImpl.java | 12 +- .../impl/DevopsStatefulSetServiceImpl.java | 23 +- .../HandlePVCFileRelationServiceImpl.java | 14 +- .../HandlerC7nCertificationServiceImpl.java | 15 +- ...HandlerC7nReleaseRelationsServiceImpl.java | 10 +- .../impl/HandlerC7nSecretServiceImpl.java | 16 +- .../HandlerConfigMapRelationsServiceImpl.java | 12 +- .../impl/HandlerCronJobServiceImpl.java | 10 +- .../HandlerCustomResourceServiceImpl.java | 8 +- .../impl/HandlerDaemonSetServiceImpl.java | 12 +- .../impl/HandlerDeploymentServiceImpl.java | 10 +- .../HandlerIngressRelationsServiceImpl.java | 23 +- .../service/impl/HandlerJobServiceImpl.java | 10 +- .../HandlerPersistentVolumeServiceImpl.java | 20 +- .../HandlerServiceRelationsServiceImpl.java | 13 +- .../impl/HandlerStatefulSetServiceImpl.java | 10 +- .../gitops/ResourceConvertToYamlHandler.java | 43 +- .../gitops/YamlConvertToResourceHandler.java | 4 +- .../choerodon/devops/infra/util/K8sUtil.java | 11 +- .../client/models/V1NodeSelector.java | 74 --- .../models/V1NodeSelectorRequirement.java | 119 ---- .../client/models/V1NodeSelectorTerm.java | 107 ---- .../client/models/V1PersistentVolumeSpec.java | 548 ----------------- .../client/models/V1PodDNSConfig.java | 133 ----- .../client/models/V1PodDNSConfigOption.java | 85 --- .../kubernetes/client/models/V1PodSpec.java | 549 ------------------ .../io/kubernetes/client/models/V1Secret.java | 224 ------- .../client/models/V1VolumeNodeAffinity.java | 69 --- 58 files changed, 378 insertions(+), 2280 deletions(-) delete mode 100644 src/main/java/io/kubernetes/client/models/V1NodeSelector.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1NodeSelectorRequirement.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1NodeSelectorTerm.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1PersistentVolumeSpec.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1PodDNSConfig.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1PodDNSConfigOption.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1PodSpec.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1Secret.java delete mode 100644 src/main/java/io/kubernetes/client/models/V1VolumeNodeAffinity.java diff --git a/pom.xml b/pom.xml index 817bbacd99..f98026163c 100644 --- a/pom.xml +++ b/pom.xml @@ -243,7 +243,7 @@ io.kubernetes client-java - 1.0.0-beta3 + 16.0.0 compile diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java index d6cd058b90..dcaf091f66 100644 --- a/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java +++ b/src/main/java/io/choerodon/devops/api/validator/DevopsPvValidator.java @@ -1,12 +1,13 @@ package io.choerodon.devops.api.validator; +import io.kubernetes.client.openapi.models.V1HostPathVolumeSource; +import io.kubernetes.client.openapi.models.V1NFSVolumeSource; + +import java.util.regex.Pattern; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.kubernetes.LocalPvResource; import io.choerodon.devops.infra.enums.VolumeTypeEnum; -import io.kubernetes.client.models.V1HostPathVolumeSource; -import io.kubernetes.client.models.V1NFSVolumeSource; - -import java.util.regex.Pattern; public class DevopsPvValidator { diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java b/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java index e088d7f1cd..abf610cd5b 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/DevopsSagaHandler.java @@ -1,17 +1,9 @@ package io.choerodon.devops.app.eventhandler; -import static io.choerodon.asgard.saga.SagaDefinition.TimeoutPolicy.ALERT_ONLY; -import static io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants.*; - -import java.io.IOException; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.util.Objects; - import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonObject; -import io.kubernetes.client.JSON; +import io.kubernetes.client.openapi.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +11,14 @@ import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.Objects; + +import static io.choerodon.asgard.saga.SagaDefinition.TimeoutPolicy.ALERT_ONLY; +import static io.choerodon.devops.app.eventhandler.constants.SagaTopicCodeConstants.*; + import io.choerodon.asgard.saga.SagaDefinition; import io.choerodon.asgard.saga.annotation.SagaTask; import io.choerodon.devops.api.vo.*; diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java index fa59784fd8..4092e8c508 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumeClaimPayload.java @@ -2,7 +2,7 @@ import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO; import io.choerodon.devops.infra.dto.DevopsPvcDTO; -import io.kubernetes.client.models.V1PersistentVolumeClaim; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; public class PersistentVolumeClaimPayload { private Long projectId; diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java index 47b906a97b..b433efe868 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/PersistentVolumePayload.java @@ -1,8 +1,9 @@ package io.choerodon.devops.app.eventhandler.payload; +import io.kubernetes.client.openapi.models.V1PersistentVolume; + import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO; import io.choerodon.devops.infra.dto.DevopsPvDTO; -import io.kubernetes.client.models.V1PersistentVolume; public class PersistentVolumePayload { private Long projectId; diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java index 13244c4980..d2d3f3d3a8 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/ServiceSagaPayLoad.java @@ -3,8 +3,8 @@ import io.choerodon.devops.api.vo.DevopsIngressVO; import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO; import io.choerodon.devops.infra.dto.DevopsServiceDTO; -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1Service; +import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1Service; import io.swagger.annotations.ApiModelProperty; /** diff --git a/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java b/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java index aaa28a635d..f0c2feeed8 100644 --- a/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java +++ b/src/main/java/io/choerodon/devops/app/service/HandlerObjectFileRelationsService.java @@ -1,12 +1,11 @@ package io.choerodon.devops.app.service; +import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; +import io.kubernetes.client.openapi.models.V1Endpoints; + import java.util.List; import java.util.Map; -import io.kubernetes.client.models.V1Endpoints; - -import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; - /** * 处理资源对象和文件对应关系 diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java index a251a2678e..dbcf7c3690 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java @@ -1,24 +1,11 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.GitOpsConstants.DATE_PATTERN; -import static io.choerodon.devops.infra.constant.GitOpsConstants.THREE_MINUTE_MILLISECONDS; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; -import static org.springframework.transaction.annotation.Isolation.READ_COMMITTED; - -import java.io.IOException; -import java.security.cert.CertificateException; -import java.security.cert.X509Certificate; -import java.text.SimpleDateFormat; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; -import io.kubernetes.client.JSON; import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.codehaus.jackson.map.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -30,6 +17,20 @@ import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; +import java.io.IOException; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.text.SimpleDateFormat; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.GitOpsConstants.DATE_PATTERN; +import static io.choerodon.devops.infra.constant.GitOpsConstants.THREE_MINUTE_MILLISECONDS; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import static org.springframework.transaction.annotation.Isolation.READ_COMMITTED; + import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; @@ -311,7 +312,7 @@ public void handlerUpdatePodMessage(String key, String msg, Long envId) { * @return true 当状态不等于Pending时,所有container都ready */ private Boolean getReadyValue(String podStatus, V1Pod v1Pod) { - return !PENDING.equals(podStatus) && v1Pod.getStatus().getContainerStatuses().stream().map(V1ContainerStatus::isReady).reduce((one, another) -> mapNullToFalse(one) && mapNullToFalse(another)).orElse(Boolean.FALSE); + return !PENDING.equals(podStatus) && v1Pod.getStatus().getContainerStatuses().stream().map(V1ContainerStatus::getReady).reduce((one, another) -> mapNullToFalse(one) && mapNullToFalse(another)).orElse(Boolean.FALSE); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java index f7704a617a..d92e41ddbb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java @@ -1,17 +1,17 @@ package io.choerodon.devops.app.service.impl; -import java.util.Date; -import java.util.List; - -import io.kubernetes.client.JSON; import io.kubernetes.client.models.V1beta2Deployment; import io.kubernetes.client.models.V1beta2StatefulSet; +import io.kubernetes.client.openapi.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.Date; +import java.util.List; + import io.choerodon.devops.app.service.AppExceptionRecordService; import io.choerodon.devops.app.service.DevopsDeployAppCenterService; import io.choerodon.devops.infra.dto.AppExceptionRecordDTO; @@ -35,7 +35,7 @@ public class AppExceptionRecordServiceImpl implements AppExceptionRecordService private static final String ERROR_UPDATE_EXCEPTION_RECORD = "error.update.exception.record"; private static final String ERROR_SAVE_EXCEPTION_RECORD = "error.save.exception.record"; - private static final JSON JSON = new JSON(); + private static final io.kubernetes.client.openapi.JSON JSON = new JSON(); @Autowired private AppExceptionRecordMapper appExceptionRecordMapper; @Autowired diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index d5722140fc..4009763ba3 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -1,25 +1,11 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_CODE; -import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_NAME; -import static io.choerodon.devops.infra.constant.MiscConstants.APP_INSTANCE_DELETE_REDIS_KEY; - -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.text.DecimalFormat; -import java.util.*; -import java.util.concurrent.TimeUnit; -import java.util.function.Function; -import java.util.stream.Collectors; -import javax.annotation.Nullable; - import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Service; import io.kubernetes.client.models.V1beta1Ingress; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Service; import org.apache.commons.lang.StringUtils; import org.hzero.core.base.BaseConstants; import org.hzero.core.util.Pair; @@ -39,6 +25,20 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + +import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_CODE; +import static io.choerodon.devops.infra.constant.MarketConstant.APP_SHELVES_NAME; +import static io.choerodon.devops.infra.constant.MiscConstants.APP_INSTANCE_DELETE_REDIS_KEY; + import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertC7nSecretServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertC7nSecretServiceImpl.java index 68a39b3117..06ae019cbd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertC7nSecretServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertC7nSecretServiceImpl.java @@ -1,13 +1,13 @@ package io.choerodon.devops.app.service.impl; -import java.util.List; -import java.util.Map; - -import io.kubernetes.client.models.V1Secret; +import io.kubernetes.client.openapi.models.V1Secret; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.List; +import java.util.Map; + import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsSecretService; import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertPersistentVolumeServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertPersistentVolumeServiceImpl.java index 664e89a625..90fdabb9ed 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertPersistentVolumeServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertPersistentVolumeServiceImpl.java @@ -1,5 +1,16 @@ package io.choerodon.devops.app.service.impl; +import io.kubernetes.client.openapi.models.V1PersistentVolume; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import static io.choerodon.devops.infra.util.GitOpsUtil.*; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsPvService; @@ -10,16 +21,6 @@ import io.choerodon.devops.infra.enums.ResourceType; import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.TypeUtil; -import io.kubernetes.client.models.V1PersistentVolume; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.StringUtils; - -import java.util.List; -import java.util.Map; -import java.util.regex.Pattern; - -import static io.choerodon.devops.infra.util.GitOpsUtil.*; /** * @author zmf diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ConfigMapServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ConfigMapServiceImpl.java index b406e9cb8d..ea86de036e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ConfigMapServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ConfigMapServiceImpl.java @@ -1,12 +1,12 @@ package io.choerodon.devops.app.service.impl; -import java.util.List; -import java.util.Map; - -import io.kubernetes.client.models.V1ConfigMap; +import io.kubernetes.client.openapi.models.V1ConfigMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + import io.choerodon.devops.app.service.DevopsConfigMapService; import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.infra.dto.DevopsConfigMapDTO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1EndPointsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1EndPointsServiceImpl.java index 9a5b707122..fdaa70df6d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1EndPointsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1EndPointsServiceImpl.java @@ -1,18 +1,18 @@ package io.choerodon.devops.app.service.impl; +import io.kubernetes.client.openapi.models.CoreV1EndpointPort; +import io.kubernetes.client.openapi.models.V1EndpointAddress; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.stereotype.Component; + import java.util.List; import java.util.Map; -import io.kubernetes.client.models.V1EndpointAddress; -import io.kubernetes.client.models.V1EndpointPort; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.stereotype.Component; - import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; +import io.choerodon.devops.infra.enums.GitOpsObjectError; import io.choerodon.devops.infra.enums.ResourceType; import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.TypeUtil; -import io.choerodon.devops.infra.enums.GitOpsObjectError; @Component public class ConvertV1EndPointsServiceImpl extends ConvertK8sObjectService { @@ -45,8 +45,8 @@ public void checkParameters(V1Endpoints v1Endpoints, Map objectP if (v1Endpoints.getSubsets().get(0).getPorts().isEmpty()) { throw new GitOpsExplainException(GitOpsObjectError.END_POINT_PORTS_NOT_FOUND.getError()); } else { - for (V1EndpointPort v1EndpointPort : v1Endpoints.getSubsets().get(0).getPorts()) { - if (v1EndpointPort.getPort() == null) { + for (CoreV1EndpointPort coreV1EndpointPort : v1Endpoints.getSubsets().get(0).getPorts()) { + if (coreV1EndpointPort.getPort() == null) { throw new GitOpsExplainException(GitOpsObjectError.END_POINT_ADDRESS_IP_NOT_FOUND.getError()); } } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1PersistentVolumeClaimServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1PersistentVolumeClaimServiceImpl.java index 59df5f4b2d..099c8ca003 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1PersistentVolumeClaimServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1PersistentVolumeClaimServiceImpl.java @@ -1,14 +1,14 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.util.GitOpsUtil.*; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; +import org.springframework.util.CollectionUtils; import java.util.List; import java.util.Map; -import io.kubernetes.client.models.V1PersistentVolumeClaim; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; -import org.springframework.util.CollectionUtils; +import static io.choerodon.devops.infra.util.GitOpsUtil.*; import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsPvcService; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ServiceServiceImpl.java index fddc0ca7de..5549e04dcb 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1ServiceServiceImpl.java @@ -1,16 +1,16 @@ package io.choerodon.devops.app.service.impl; -import java.util.List; -import java.util.Map; - -import io.kubernetes.client.models.V1Service; -import io.kubernetes.client.models.V1ServicePort; +import io.kubernetes.client.openapi.models.V1Service; +import io.kubernetes.client.openapi.models.V1ServicePort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; +import java.util.List; +import java.util.Map; + import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsServiceService; import io.choerodon.devops.infra.constant.GitOpsConstants; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java index b0acc15f0f..efb8623fc3 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java @@ -1,14 +1,13 @@ package io.choerodon.devops.app.service.impl; -import java.util.List; -import java.util.Map; - -import io.kubernetes.client.models.V1beta1HTTPIngressPath; -import io.kubernetes.client.models.V1beta1Ingress; -import io.kubernetes.client.models.V1beta1IngressRule; +import io.kubernetes.client.openapi.models.V1Ingress; +import io.kubernetes.client.proto.V1beta1Extensions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.Map; + import io.choerodon.devops.api.validator.DevopsIngressValidator; import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsIngressService; @@ -20,7 +19,7 @@ import io.choerodon.devops.infra.util.TypeUtil; @Component -public class ConvertV1beta1IngressServiceImpl extends ConvertK8sObjectService { +public class ConvertV1beta1IngressServiceImpl extends ConvertK8sObjectService { @Autowired private DevopsIngressService devopsIngressService; @Autowired diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java index a6b0092ccd..d23a4486be 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsConfigMapServiceImpl.java @@ -1,20 +1,7 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.*; - -import java.util.ArrayList; -import java.util.List; -import java.util.Map; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1ConfigMap; -import io.kubernetes.client.models.V1ObjectMeta; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsConfigMapRespVO; @@ -34,6 +21,18 @@ import io.choerodon.devops.infra.util.*; import io.choerodon.mybatis.pagehelper.PageHelper; import io.choerodon.mybatis.pagehelper.domain.PageRequest; +import io.kubernetes.client.openapi.models.V1ConfigMap; +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import static io.choerodon.devops.infra.constant.MiscConstants.*; @Service public class DevopsConfigMapServiceImpl implements DevopsConfigMapService { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCronJobServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCronJobServiceImpl.java index 336c4ab8f6..d2dfeb6656 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCronJobServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCronJobServiceImpl.java @@ -1,17 +1,9 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; - -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1beta1CronJob; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1beta1CronJob; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +13,14 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.core.utils.ConvertUtils; @@ -89,7 +89,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageRequest cronJobInfoVO.setActive(v1beta1CronJob.getStatus().getActive() == null ? 0 : v1beta1CronJob.getStatus().getActive().size()); cronJobInfoVO.setSchedule(v1beta1CronJob.getSpec().getSchedule()); - cronJobInfoVO.setSuspend(v1beta1CronJob.getSpec().isSuspend()); + cronJobInfoVO.setSuspend(v1beta1CronJob.getSpec().getSuspend()); cronJobInfoVO.setLabels(v1beta1CronJob.getMetadata().getLabels()); cronJobInfoVO.setCreationTimestamp(v1beta1CronJob.getMetadata().getCreationTimestamp().toString()); List portRes = new ArrayList<>(); @@ -103,7 +103,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageRequest } cronJobInfoVO.setPorts(portRes); if (v1beta1CronJob.getStatus() != null && v1beta1CronJob.getStatus().getLastScheduleTime() != null) { - cronJobInfoVO.setLastScheduleTime(v1beta1CronJob.getStatus().getLastScheduleTime().toString("yyyy-MM-dd HH:mm:ss")); + cronJobInfoVO.setLastScheduleTime(v1beta1CronJob.getStatus().getLastScheduleTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } else { ZoneId zoneId = ZoneId.systemDefault(); cronJobInfoVO.setLastScheduleTime(v.getLastUpdateDate().toInstant().atZone(zoneId).toLocalDateTime().format(DATE_TIME_FORMATTER)); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java index c385aaa46d..624f1f94ff 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java @@ -1,17 +1,9 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; - -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; import io.kubernetes.client.models.V1ContainerPort; import io.kubernetes.client.models.V1beta2DaemonSet; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +13,14 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.core.utils.ConvertUtils; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java index 25f7ee3a10..921b3e4fb0 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java @@ -1,18 +1,9 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.CUSTOM_REPO; -import static io.choerodon.devops.app.service.AppServiceInstanceService.PARENT_WORK_LOAD_LABEL; -import static io.choerodon.devops.app.service.AppServiceInstanceService.PARENT_WORK_LOAD_NAME_LABEL; -import static io.choerodon.devops.infra.enums.ResourceType.DEPLOYMENT; - -import java.io.IOException; -import java.math.BigDecimal; -import java.util.*; - -import io.kubernetes.client.JSON; import io.kubernetes.client.custom.IntOrString; import io.kubernetes.client.custom.Quantity; import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; import org.hzero.core.util.EncryptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -23,6 +14,15 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.io.IOException; +import java.math.BigDecimal; +import java.util.*; + +import static io.choerodon.devops.app.eventhandler.constants.HarborRepoConstants.CUSTOM_REPO; +import static io.choerodon.devops.app.service.AppServiceInstanceService.PARENT_WORK_LOAD_LABEL; +import static io.choerodon.devops.app.service.AppServiceInstanceService.PARENT_WORK_LOAD_NAME_LABEL; +import static io.choerodon.devops.infra.enums.ResourceType.DEPLOYMENT; + import io.choerodon.core.exception.CommonException; import io.choerodon.core.oauth.DetailsHelper; import io.choerodon.devops.api.vo.*; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java index 7018196931..b6fb8f66dd 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java @@ -1,8 +1,5 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.stream.Collectors; - import io.kubernetes.client.JSON; import io.kubernetes.client.models.V1Container; import io.kubernetes.client.models.V1ContainerPort; @@ -11,6 +8,9 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.*; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.*; import io.choerodon.devops.api.vo.iam.DevopsEnvMessageVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvPodServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvPodServiceImpl.java index 9d58ee6f88..225c0ad752 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvPodServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvPodServiceImpl.java @@ -1,24 +1,5 @@ package io.choerodon.devops.app.service.impl; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Pod; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.annotation.Lazy; -import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.util.Assert; -import org.springframework.util.CollectionUtils; -import org.springframework.util.ObjectUtils; -import org.springframework.util.StringUtils; - import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.ContainerVO; @@ -34,6 +15,24 @@ import io.choerodon.mybatis.pagehelper.PageHelper; import io.choerodon.mybatis.pagehelper.domain.PageRequest; import io.choerodon.mybatis.pagehelper.domain.Sort; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Pod; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.Assert; +import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * Created by Zenger on 2018/4/17. @@ -110,7 +109,7 @@ public void fillContainers(DevopsEnvPodVO devopsEnvPodVO) { .map(container -> { ContainerVO containerVO = new ContainerVO(); containerVO.setName(container.getName()); - containerVO.setReady(container.isReady()); + containerVO.setReady(container.getReady()); return containerVO; }) .collect(Collectors.toList()); @@ -417,7 +416,7 @@ private void fillContainers(Long envId, DevopsEnvPodVO devopsEnvPodVO) { .map(container -> { ContainerVO containerVO = new ContainerVO(); containerVO.setName(container.getName()); - containerVO.setReady(container.isReady()); + containerVO.setReady(container.getReady()); return containerVO; }) .collect(Collectors.toList()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java index 53b39161b2..acc9dcb1d7 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java @@ -1,14 +1,10 @@ package io.choerodon.devops.app.service.impl; -import java.io.IOException; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import io.kubernetes.client.JSON; import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; @@ -16,6 +12,11 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.io.IOException; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.*; import io.choerodon.devops.app.service.*; @@ -329,7 +330,7 @@ private void addPodToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1Pod v1 Long restart = 0L; if (v1Pod.getStatus().getContainerStatuses() != null) { for (V1ContainerStatus v1ContainerStatus : v1Pod.getStatus().getContainerStatuses()) { - if (v1ContainerStatus.isReady() && v1ContainerStatus.getState().getRunning().getStartedAt() != null) { + if (v1ContainerStatus.getReady() && v1ContainerStatus.getState().getRunning().getStartedAt() != null) { ready = ready + 1; } restart = restart + v1ContainerStatus.getRestartCount(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index 3267ae241f..86788fc14b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -1,19 +1,7 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.KubernetesConstants.METADATA; -import static io.choerodon.devops.infra.constant.KubernetesConstants.NAME; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.util.*; -import java.util.function.Function; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.annotation.PostConstruct; - import com.alibaba.fastjson.JSONObject; -import io.kubernetes.client.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1Endpoints; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.CheckoutConflictException; import org.jetbrains.annotations.NotNull; @@ -32,6 +20,18 @@ import org.springframework.util.StringUtils; import org.yaml.snakeyaml.Yaml; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.*; +import java.util.function.Function; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import javax.annotation.PostConstruct; + +import static io.choerodon.devops.infra.constant.KubernetesConstants.METADATA; +import static io.choerodon.devops.infra.constant.KubernetesConstants.NAME; + import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index fc2b31c68b..e9fbbc8bda 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -1,15 +1,11 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.annotation.Nullable; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import io.kubernetes.client.JSON; import io.kubernetes.client.custom.IntOrString; import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -20,6 +16,11 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsJobServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsJobServiceImpl.java index 6b1b2c38d2..714099ca75 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsJobServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsJobServiceImpl.java @@ -1,17 +1,9 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; - -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1Job; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1Job; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +13,14 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.core.utils.ConvertUtils; @@ -101,7 +101,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageRequest pag } jobInfoVO.setPorts(portRes); if (v1Job.getStatus() != null && v1Job.getStatus().getCompletionTime() != null) { - jobInfoVO.setAge(v1Job.getStatus().getCompletionTime().toString("yyyy-MM-dd HH:mm:ss")); + jobInfoVO.setAge(v1Job.getStatus().getCompletionTime().toLocalTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); } else { ZoneId zoneId = ZoneId.systemDefault(); jobInfoVO.setAge(v.getLastUpdateDate().toInstant().atZone(zoneId).toLocalDateTime().format(DATE_TIME_FORMATTER)); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvServiceImpl.java index 2bc5de3622..000e4075b8 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvServiceImpl.java @@ -1,14 +1,10 @@ package io.choerodon.devops.app.service.impl; -import java.math.BigDecimal; -import java.util.*; -import java.util.stream.Collectors; - import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.type.TypeReference; import com.google.gson.Gson; import io.kubernetes.client.custom.Quantity; -import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -17,6 +13,10 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; import io.choerodon.core.domain.Page; @@ -768,13 +768,13 @@ public List listLabels(Long projectId, Long clusterId) { .filter(s -> !StringUtils.isEmpty(s)) .map(s -> JsonHelper.unmarshalByJackson(s, new TypeReference>() { })) - .forEach(l -> l.forEach((k, v)->{ + .forEach(l -> l.forEach((k, v) -> { DevopsPvLabelVO devopsPvLabelVO = new DevopsPvLabelVO(); devopsPvLabelVO.setKey(k); devopsPvLabelVO.setValue(v); - if (!labels.contains(devopsPvLabelVO)){ - labels.add(devopsPvLabelVO); - } + if (!labels.contains(devopsPvLabelVO)) { + labels.add(devopsPvLabelVO); + } })); return labels; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvcServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvcServiceImpl.java index 9d75895e25..6863b30c16 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvcServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsPvcServiceImpl.java @@ -1,14 +1,11 @@ package io.choerodon.devops.app.service.impl; -import java.math.BigDecimal; -import java.util.*; - import com.google.gson.Gson; import io.kubernetes.client.custom.Quantity; -import io.kubernetes.client.models.V1ObjectMeta; -import io.kubernetes.client.models.V1PersistentVolumeClaim; -import io.kubernetes.client.models.V1PersistentVolumeClaimSpec; -import io.kubernetes.client.models.V1ResourceRequirements; +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaimSpec; +import io.kubernetes.client.openapi.models.V1ResourceRequirements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -18,6 +15,9 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.math.BigDecimal; +import java.util.*; + import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java index 583298e7ad..9286ac7474 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsSecretServiceImpl.java @@ -1,18 +1,18 @@ package io.choerodon.devops.app.service.impl; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1ObjectMeta; -import io.kubernetes.client.models.V1Secret; +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import io.kubernetes.client.openapi.models.V1Secret; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.validator.DevopsSecretValidator; @@ -202,7 +202,11 @@ private static V1Secret initV1Secret(DevopsSecretDTO devopsSecretDTO) { metadata.setName(devopsSecretDTO.getName()); secret.setMetadata(metadata); secret.setType("Opaque"); - secret.setData(devopsSecretDTO.getValueMap()); + Map data = new HashMap<>(); + devopsSecretDTO.getValueMap().forEach((k, v) -> { + data.put(k, v.getBytes()); + }); + secret.setData(data); return secret; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsServiceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsServiceServiceImpl.java index ddfae30d5e..895b76cf5d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsServiceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsServiceServiceImpl.java @@ -12,9 +12,9 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.netflix.servo.util.Strings; -import io.kubernetes.client.JSON; import io.kubernetes.client.custom.IntOrString; -import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -1067,11 +1067,11 @@ private V1Endpoints initV1EndPoints(DevopsServiceReqVO devopsServiceReqVO) { }).collect(Collectors.toList())); final Integer[] serialNumber = {0}; v1EndpointSubset.setPorts(value.stream().map(port -> { - V1EndpointPort v1EndpointPort = new V1EndpointPort(); - v1EndpointPort.setPort(port.getPort()); + CoreV1EndpointPort coreV1EndpointPort = new CoreV1EndpointPort(); + coreV1EndpointPort.setPort(port.getPort()); serialNumber[0] = serialNumber[0] + 1; - v1EndpointPort.setName(port.getName() == null ? "http" + serialNumber[0] : port.getName()); - return v1EndpointPort; + coreV1EndpointPort.setName(port.getName() == null ? "http" + serialNumber[0] : port.getName()); + return coreV1EndpointPort; }).collect(Collectors.toList())); v1EndpointSubsets.add(v1EndpointSubset); }); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java index 6c128d23ba..a62961c162 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java @@ -1,17 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; - -import java.time.ZoneId; -import java.time.format.DateTimeFormatter; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1beta2StatefulSet; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +12,14 @@ import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.core.utils.ConvertUtils; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlePVCFileRelationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlePVCFileRelationServiceImpl.java index 0657fc8763..a78b4d4b54 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlePVCFileRelationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlePVCFileRelationServiceImpl.java @@ -1,18 +1,18 @@ package io.choerodon.devops.app.service.impl; +import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1PersistentVolumeClaim; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1PersistentVolumeClaim; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsPvcReqVO; import io.choerodon.devops.app.service.DevopsEnvCommandService; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nCertificationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nCertificationServiceImpl.java index f74d3844c9..0af06921e2 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nCertificationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nCertificationServiceImpl.java @@ -1,15 +1,7 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.stream.Collectors; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; -import org.springframework.util.CollectionUtils; - import io.choerodon.devops.api.vo.kubernetes.C7nCertification; import io.choerodon.devops.api.vo.kubernetes.certification.CertificationExistCert; import io.choerodon.devops.api.vo.kubernetes.certification.CertificationSpec; @@ -20,6 +12,13 @@ import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.GitUtil; import io.choerodon.devops.infra.util.TypeUtil; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.*; +import java.util.stream.Collectors; @Service diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java index 83e56f1a47..279aa6bb55 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nReleaseRelationsServiceImpl.java @@ -1,10 +1,6 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.stream.Collectors; -import javax.annotation.Nullable; - -import io.kubernetes.client.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1Endpoints; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -13,6 +9,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.*; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.AppServiceDeployVO; import io.choerodon.devops.api.vo.AppServiceInstanceVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java index 111f46e41f..f92a5b9d59 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerC7nSecretServiceImpl.java @@ -1,13 +1,13 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.stream.Collectors; - -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1Secret; +import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1Secret; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.validator.DevopsSecretValidator; import io.choerodon.devops.api.vo.SecretReqVO; @@ -193,7 +193,7 @@ private SecretReqVO getSecretReqDTO(V1Secret c7nSecret, Long envId, String type) // 这两种其实是一样的处理方式, 都从data里面取数据(2020/10/10) if (DOCKER_REGISTRY_SECRET_TYPE.equals(c7nSecret.getType())) { Map map = new HashMap<>(); - c7nSecret.getData().forEach(map::put); + Objects.requireNonNull(c7nSecret.getData()).forEach((k, v) -> map.put(k, Arrays.toString(v))); secretReqVO.setValue(map); } else { secretReqVO.setValue(mergeSecretData(c7nSecret.getData(), c7nSecret.getStringData())); @@ -201,7 +201,7 @@ private SecretReqVO getSecretReqDTO(V1Secret c7nSecret, Long envId, String type) return secretReqVO; } - private Map mergeSecretData(Map data, Map stringData) { + private Map mergeSecretData(Map data, Map stringData) { // k8s处理stringData和data的逻辑是将stringData的value进行base64加密后, 与data合并, // 如果键相同, stringData覆盖data的值 Map converted = new LinkedHashMap<>(); @@ -210,7 +210,7 @@ private Map mergeSecretData(Map data, Map converted.put(k, Base64Util.getBase64EncodedString(v))); } if (data != null) { - data.forEach(converted::putIfAbsent); + data.forEach((k, v) -> converted.putIfAbsent(k, Arrays.toString(v))); } return converted; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerConfigMapRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerConfigMapRelationsServiceImpl.java index a91e7e5b75..a8fc5b8c9f 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerConfigMapRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerConfigMapRelationsServiceImpl.java @@ -1,17 +1,17 @@ package io.choerodon.devops.app.service.impl; +import com.google.gson.Gson; +import io.kubernetes.client.openapi.models.V1ConfigMap; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import com.google.gson.Gson; -import io.kubernetes.client.models.V1ConfigMap; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsConfigMapRespVO; import io.choerodon.devops.api.vo.DevopsConfigMapVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerCronJobServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerCronJobServiceImpl.java index 64e277765e..2962064268 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerCronJobServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerCronJobServiceImpl.java @@ -1,7 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @@ -9,9 +10,8 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.workload.DevopsCronjobVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerCustomResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerCustomResourceServiceImpl.java index 49edc57ec6..e1b7b68e94 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerCustomResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerCustomResourceServiceImpl.java @@ -1,15 +1,15 @@ package io.choerodon.devops.app.service.impl; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - import io.choerodon.core.exception.CommonException; import io.choerodon.devops.app.service.*; import io.choerodon.devops.infra.dto.DevopsCustomizeResourceContentDTO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerDaemonSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerDaemonSetServiceImpl.java index 22ea335b21..2e09b6b992 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerDaemonSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerDaemonSetServiceImpl.java @@ -1,8 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; -import static io.choerodon.devops.infra.enums.ResourceType.DAEMONSET; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @@ -10,9 +10,9 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import static io.choerodon.devops.infra.enums.ResourceType.DAEMONSET; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsDaemonSetVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerDeploymentServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerDeploymentServiceImpl.java index b2e70077fb..07e7fbb98b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerDeploymentServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerDeploymentServiceImpl.java @@ -1,7 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @@ -9,9 +10,8 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsDeploymentVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java index 37ecc660d4..9afd8da34a 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java @@ -1,22 +1,23 @@ package io.choerodon.devops.app.service.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import io.kubernetes.client.custom.IntOrString; import io.kubernetes.client.models.V1Endpoints; import io.kubernetes.client.models.V1beta1HTTPIngressPath; -import io.kubernetes.client.models.V1beta1Ingress; -import io.kubernetes.client.models.V1beta1IngressBackend; +import io.kubernetes.client.models.V1Ingress; +import io.kubernetes.client.models.V1IngressBackend; +import io.kubernetes.client.openapi.models.V1Endpoints; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.validator.DevopsIngressValidator; import io.choerodon.devops.api.vo.DevopsIngressPathVO; @@ -30,7 +31,7 @@ import io.choerodon.devops.infra.util.TypeUtil; @Service -public class HandlerIngressRelationsServiceImpl implements HandlerObjectFileRelationsService { +public class HandlerIngressRelationsServiceImpl implements HandlerObjectFileRelationsService { public static final String INGRESS = "Ingress"; private static final String GIT_SUFFIX = "/.git"; private static final Pattern PATTERN = Pattern.compile("^[-+]?[\\d]*$"); @@ -46,7 +47,7 @@ public class HandlerIngressRelationsServiceImpl implements HandlerObjectFileRela @Override - public void handlerRelations(Map objectPath, List beforeSync, List v1beta1Ingresses, List v1Endpoints, Long envId, Long projectId, String path, Long userId) { + public void handlerRelations(Map objectPath, List beforeSync, List v1beta1Ingresses, List v1Endpoints, Long envId, Long projectId, String path, Long userId) { List beforeIngress = beforeSync.stream() .filter(devopsEnvFileResourceE -> devopsEnvFileResourceE.getResourceType().equals(INGRESS)) .map(devopsEnvFileResourceE -> { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerJobServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerJobServiceImpl.java index b74569c996..7dd5b6662c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerJobServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerJobServiceImpl.java @@ -1,7 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @@ -9,9 +10,8 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsJobVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerPersistentVolumeServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerPersistentVolumeServiceImpl.java index cc78bc5618..7770a011d6 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerPersistentVolumeServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerPersistentVolumeServiceImpl.java @@ -1,20 +1,20 @@ package io.choerodon.devops.app.service.impl; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.stream.Collectors; - -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1PersistentVolume; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1PersistentVolume; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsPvReqVO; import io.choerodon.devops.api.vo.kubernetes.LocalPvResource; @@ -182,7 +182,7 @@ private DevopsPvReqVO constructPv(V1PersistentVolume pv, Long envId, String type devopsPvReqVO.setEnvId(envId); devopsPvReqVO.setName(pv.getMetadata().getName()); devopsPvReqVO.setCommandType(type); - Map labels=pv.getMetadata().getLabels(); + Map labels = pv.getMetadata().getLabels(); if (!CollectionUtils.isEmpty(labels)) { devopsPvReqVO.setLabels(JsonHelper.marshalByJackson(pv.getMetadata().getLabels())); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java index b44793b31a..bc569dce68 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java @@ -1,16 +1,16 @@ package io.choerodon.devops.app.service.impl; -import java.util.*; -import java.util.stream.Collectors; - import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1Service; +import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1Service; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.*; +import java.util.stream.Collectors; + import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.validator.DevopsServiceValidator; import io.choerodon.devops.api.vo.DevopsServiceReqVO; @@ -248,7 +248,8 @@ private void checkServiceName( } private Boolean checkIsNotChange(DevopsServiceDTO devopsServiceDTO, DevopsServiceReqVO devopsServiceReqVO) { - List oldPort = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() {}.getType()); + List oldPort = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { + }.getType()); //查询网络对应的实例 List devopsServiceInstanceDTOS = devopsServiceInstanceService.baseListByServiceId(devopsServiceDTO.getId()); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerStatefulSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerStatefulSetServiceImpl.java index 8a5dc43a77..39dc0d8d0d 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerStatefulSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerStatefulSetServiceImpl.java @@ -1,7 +1,8 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; -import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; +import io.kubernetes.client.openapi.models.V1Endpoints; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; @@ -9,9 +10,8 @@ import java.util.Objects; import java.util.stream.Collectors; -import io.kubernetes.client.models.V1Endpoints; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; +import static io.choerodon.devops.infra.constant.MiscConstants.UPDATE_TYPE; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsStatefulSetVO; diff --git a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java index 1def230511..8db339498d 100644 --- a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java +++ b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java @@ -1,25 +1,6 @@ package io.choerodon.devops.infra.gitops; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - import com.alibaba.fastjson.JSONObject; -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.*; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.util.CollectionUtils; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.nodes.Tag; - import io.choerodon.core.convertor.ApplicationContextHelper; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.kubernetes.C7nCertification; @@ -32,6 +13,24 @@ import io.choerodon.devops.infra.util.JsonYamlConversionUtil; import io.choerodon.devops.infra.util.SkipNullRepresenterUtil; import io.choerodon.devops.infra.util.TypeUtil; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.util.CollectionUtils; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.nodes.Tag; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; public class ResourceConvertToYamlHandler { @@ -39,7 +38,7 @@ public class ResourceConvertToYamlHandler { public static final String UPDATE = "update"; private static final String C7NTAG = "!!io.choerodon.devops.api.vo.kubernetes.C7nHelmRelease"; - private static final String INGTAG = "!!io.kubernetes.client.models.V1beta1Ingress"; + private static final String INGTAG = "!!io.kubernetes.client.models.V1Ingress"; private static final String SVCTAG = "!!io.kubernetes.client.models.V1Service"; private static final String CERTTAG = "!!io.choerodon.devops.api.vo.kubernetes.C7nCertification"; private static final String CONFIGMAPTAG = "!!io.kubernetes.client.models.V1ConfigMap"; @@ -275,8 +274,8 @@ private void handleService(T t, String content, String objectType, String operat private void handleIngress(T t, Boolean deleteCert, String objectType, String operationType, StringBuilder resultBuilder, JSONObject jsonObject) { Yaml yaml2 = new Yaml(); - V1beta1Ingress v1beta1Ingress = yaml2.loadAs(jsonObject.toJSONString(), V1beta1Ingress.class); - V1beta1Ingress newV1beta1Ingress; + V1Ingress v1beta1Ingress = yaml2.loadAs(jsonObject.toJSONString(), V1Ingress.class); + V1Ingress newV1Ingress; // 如果这个Ingress对象是被修改的对象 if (objectType.equals(ResourceType.INGRESS.getType()) && v1beta1Ingress.getMetadata().getName().equals(((V1beta1Ingress) t).getMetadata().getName())) { diff --git a/src/main/java/io/choerodon/devops/infra/gitops/YamlConvertToResourceHandler.java b/src/main/java/io/choerodon/devops/infra/gitops/YamlConvertToResourceHandler.java index a0f12af36e..c227bae833 100644 --- a/src/main/java/io/choerodon/devops/infra/gitops/YamlConvertToResourceHandler.java +++ b/src/main/java/io/choerodon/devops/infra/gitops/YamlConvertToResourceHandler.java @@ -1,10 +1,10 @@ package io.choerodon.devops.infra.gitops; +import io.kubernetes.client.openapi.JSON; + import java.util.Map; import java.util.Objects; -import io.kubernetes.client.JSON; - import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.TypeUtil; diff --git a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java index 12591c04d1..5db723cef3 100644 --- a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java @@ -1,10 +1,8 @@ package io.choerodon.devops.infra.util; -import java.util.*; -import java.util.regex.Pattern; - -import io.kubernetes.client.JSON; import io.kubernetes.client.models.*; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.CollectionUtils; @@ -13,6 +11,9 @@ import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.nodes.Tag; +import java.util.*; +import java.util.regex.Pattern; + /** * Created by younger on 2018/4/25. */ @@ -49,7 +50,7 @@ public class K8sUtil { */ public static final Pattern LABEL_NAME_PATTERN = Pattern.compile("^([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9]$"); - public static final Pattern PORT_NAME_PATTERN=Pattern.compile("^[0-9a-z]([0-9a-z]+-)*[0-9a-z]*[0-9a-z]$"); + public static final Pattern PORT_NAME_PATTERN = Pattern.compile("^[0-9a-z]([0-9a-z]+-)*[0-9a-z]*[0-9a-z]$"); private K8sUtil() { diff --git a/src/main/java/io/kubernetes/client/models/V1NodeSelector.java b/src/main/java/io/kubernetes/client/models/V1NodeSelector.java deleted file mode 100644 index 62ec98b2ab..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1NodeSelector.java +++ /dev/null @@ -1,74 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -@ApiModel( - description = "A node selector represents the union of the results of one or more label queries over a set of nodes; that is, it represents the OR of the selectors represented by the node selector terms." -) -public class V1NodeSelector { - public static final String SERIALIZED_NAME_NODE_SELECTOR_TERMS = "nodeSelectorTerms"; - @SerializedName("nodeSelectorTerms") - private List nodeSelectorTerms = new ArrayList(); - - public V1NodeSelector() { - } - - public V1NodeSelector nodeSelectorTerms(List nodeSelectorTerms) { - this.nodeSelectorTerms = nodeSelectorTerms; - return this; - } - - public V1NodeSelector addNodeSelectorTermsItem(V1NodeSelectorTerm nodeSelectorTermsItem) { - this.nodeSelectorTerms.add(nodeSelectorTermsItem); - return this; - } - - @ApiModelProperty( - required = true, - value = "Required. A list of node selector terms. The terms are ORed." - ) - public List getNodeSelectorTerms() { - return this.nodeSelectorTerms; - } - - public void setNodeSelectorTerms(List nodeSelectorTerms) { - this.nodeSelectorTerms = nodeSelectorTerms; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1NodeSelector v1NodeSelector = (V1NodeSelector)o; - return Objects.equals(this.nodeSelectorTerms, v1NodeSelector.nodeSelectorTerms); - } else { - return false; - } - } - - public int hashCode() { - return Objects.hash(new Object[]{this.nodeSelectorTerms}); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1NodeSelector {\n"); - sb.append(" nodeSelectorTerms: ").append(this.toIndentedString(this.nodeSelectorTerms)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1NodeSelectorRequirement.java b/src/main/java/io/kubernetes/client/models/V1NodeSelectorRequirement.java deleted file mode 100644 index 991b6792fb..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1NodeSelectorRequirement.java +++ /dev/null @@ -1,119 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import javax.annotation.Nullable; - -@ApiModel( - description = "A node selector requirement is a selector that contains values, a key, and an operator that relates the key and values." -) -public class V1NodeSelectorRequirement { - public static final String SERIALIZED_NAME_KEY = "key"; - @SerializedName("key") - private String key; - public static final String SERIALIZED_NAME_OPERATOR = "operator"; - @SerializedName("operator") - private String operator; - public static final String SERIALIZED_NAME_VALUES = "values"; - @SerializedName("values") - private List values = null; - - public V1NodeSelectorRequirement() { - } - - public V1NodeSelectorRequirement key(String key) { - this.key = key; - return this; - } - - @ApiModelProperty( - required = true, - value = "The label key that the selector applies to." - ) - public String getKey() { - return this.key; - } - - public void setKey(String key) { - this.key = key; - } - - public V1NodeSelectorRequirement operator(String operator) { - this.operator = operator; - return this; - } - - @ApiModelProperty( - required = true, - value = "Represents a key's relationship to a set of values. Valid operators are In, NotIn, Exists, DoesNotExist. Gt, and Lt." - ) - public String getOperator() { - return this.operator; - } - - public void setOperator(String operator) { - this.operator = operator; - } - - public V1NodeSelectorRequirement values(List values) { - this.values = values; - return this; - } - - public V1NodeSelectorRequirement addValuesItem(String valuesItem) { - if (this.values == null) { - this.values = new ArrayList(); - } - - this.values.add(valuesItem); - return this; - } - - @Nullable - @ApiModelProperty("An array of string values. If the operator is In or NotIn, the values array must be non-empty. If the operator is Exists or DoesNotExist, the values array must be empty. If the operator is Gt or Lt, the values array must have a single element, which will be interpreted as an integer. This array is replaced during a strategic merge patch.") - public List getValues() { - return this.values; - } - - public void setValues(List values) { - this.values = values; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1NodeSelectorRequirement v1NodeSelectorRequirement = (V1NodeSelectorRequirement)o; - return Objects.equals(this.key, v1NodeSelectorRequirement.key) && Objects.equals(this.operator, v1NodeSelectorRequirement.operator) && Objects.equals(this.values, v1NodeSelectorRequirement.values); - } else { - return false; - } - } - - public int hashCode() { - return Objects.hash(new Object[]{this.key, this.operator, this.values}); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1NodeSelectorRequirement {\n"); - sb.append(" key: ").append(this.toIndentedString(this.key)).append("\n"); - sb.append(" operator: ").append(this.toIndentedString(this.operator)).append("\n"); - sb.append(" values: ").append(this.toIndentedString(this.values)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1NodeSelectorTerm.java b/src/main/java/io/kubernetes/client/models/V1NodeSelectorTerm.java deleted file mode 100644 index f5b5d12acf..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1NodeSelectorTerm.java +++ /dev/null @@ -1,107 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import javax.annotation.Nullable; - -@ApiModel( - description = "A null or empty node selector term matches no objects. The requirements of them are ANDed. The TopologySelectorTerm type implements a subset of the NodeSelectorTerm." -) -public class V1NodeSelectorTerm { - public static final String SERIALIZED_NAME_MATCH_EXPRESSIONS = "matchExpressions"; - @SerializedName("matchExpressions") - private List matchExpressions = null; - public static final String SERIALIZED_NAME_MATCH_FIELDS = "matchFields"; - @SerializedName("matchFields") - private List matchFields = null; - - public V1NodeSelectorTerm() { - } - - public V1NodeSelectorTerm matchExpressions(List matchExpressions) { - this.matchExpressions = matchExpressions; - return this; - } - - public V1NodeSelectorTerm addMatchExpressionsItem(V1NodeSelectorRequirement matchExpressionsItem) { - if (this.matchExpressions == null) { - this.matchExpressions = new ArrayList(); - } - - this.matchExpressions.add(matchExpressionsItem); - return this; - } - - @Nullable - @ApiModelProperty("A list of node selector requirements by node's labels.") - public List getMatchExpressions() { - return this.matchExpressions; - } - - public void setMatchExpressions(List matchExpressions) { - this.matchExpressions = matchExpressions; - } - - public V1NodeSelectorTerm matchFields(List matchFields) { - this.matchFields = matchFields; - return this; - } - - public V1NodeSelectorTerm addMatchFieldsItem(V1NodeSelectorRequirement matchFieldsItem) { - if (this.matchFields == null) { - this.matchFields = new ArrayList<>(); - } - - this.matchFields.add(matchFieldsItem); - return this; - } - - @Nullable - @ApiModelProperty("A list of node selector requirements by node's fields.") - public List getMatchFields() { - return this.matchFields; - } - - public void setMatchFields(List matchFields) { - this.matchFields = matchFields; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1NodeSelectorTerm v1NodeSelectorTerm = (V1NodeSelectorTerm)o; - return Objects.equals(this.matchExpressions, v1NodeSelectorTerm.matchExpressions) && Objects.equals(this.matchFields, v1NodeSelectorTerm.matchFields); - } else { - return false; - } - } - - @Override - public int hashCode() { - return Objects.hash(new Object[]{this.matchExpressions, this.matchFields}); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1NodeSelectorTerm {\n"); - sb.append(" matchExpressions: ").append(this.toIndentedString(this.matchExpressions)).append("\n"); - sb.append(" matchFields: ").append(this.toIndentedString(this.matchFields)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1PersistentVolumeSpec.java b/src/main/java/io/kubernetes/client/models/V1PersistentVolumeSpec.java deleted file mode 100644 index 8223daebe2..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1PersistentVolumeSpec.java +++ /dev/null @@ -1,548 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package io.kubernetes.client.models; - -import java.util.*; - -import com.google.gson.annotations.SerializedName; -import io.kubernetes.client.custom.Quantity; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -@ApiModel( - description = "PersistentVolumeSpec is the specification of a persistent volume." -) -public class V1PersistentVolumeSpec { - @SerializedName("accessModes") - private List accessModes = null; - @SerializedName("awsElasticBlockStore") - private V1AWSElasticBlockStoreVolumeSource awsElasticBlockStore = null; - @SerializedName("azureDisk") - private V1AzureDiskVolumeSource azureDisk = null; - @SerializedName("azureFile") - private V1AzureFilePersistentVolumeSource azureFile = null; - @SerializedName("capacity") - private Map capacity = null; - @SerializedName("cephfs") - private V1CephFSPersistentVolumeSource cephfs = null; - @SerializedName("cinder") - private V1CinderVolumeSource cinder = null; - @SerializedName("claimRef") - private V1ObjectReference claimRef = null; - @SerializedName("fc") - private V1FCVolumeSource fc = null; - @SerializedName("flexVolume") - private V1FlexVolumeSource flexVolume = null; - @SerializedName("flocker") - private V1FlockerVolumeSource flocker = null; - @SerializedName("gcePersistentDisk") - private V1GCEPersistentDiskVolumeSource gcePersistentDisk = null; - @SerializedName("glusterfs") - private V1GlusterfsVolumeSource glusterfs = null; - @SerializedName("hostPath") - private V1HostPathVolumeSource hostPath = null; - @SerializedName("iscsi") - private V1ISCSIVolumeSource iscsi = null; - @SerializedName("local") - private V1LocalVolumeSource local = null; - @SerializedName("mountOptions") - private List mountOptions = null; - @SerializedName("nfs") - private V1NFSVolumeSource nfs = null; - @SerializedName("persistentVolumeReclaimPolicy") - private String persistentVolumeReclaimPolicy = null; - @SerializedName("photonPersistentDisk") - private V1PhotonPersistentDiskVolumeSource photonPersistentDisk = null; - @SerializedName("portworxVolume") - private V1PortworxVolumeSource portworxVolume = null; - @SerializedName("quobyte") - private V1QuobyteVolumeSource quobyte = null; - @SerializedName("rbd") - private V1RBDVolumeSource rbd = null; - @SerializedName("scaleIO") - private V1ScaleIOPersistentVolumeSource scaleIO = null; - @SerializedName("storageClassName") - private String storageClassName = null; - @SerializedName("storageos") - private V1StorageOSPersistentVolumeSource storageos = null; - @SerializedName("vsphereVolume") - private V1VsphereVirtualDiskVolumeSource vsphereVolume = null; - @SerializedName("nodeAffinity") - private V1VolumeNodeAffinity nodeAffinity; - - public V1PersistentVolumeSpec() { - } - - public V1PersistentVolumeSpec accessModes(List accessModes) { - this.accessModes = accessModes; - return this; - } - - public V1PersistentVolumeSpec addAccessModesItem(String accessModesItem) { - if (this.accessModes == null) { - this.accessModes = new ArrayList<>(); - } - - this.accessModes.add(accessModesItem); - return this; - } - - @ApiModelProperty("AccessModes contains all ways the volume can be mounted. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#access-modes") - public List getAccessModes() { - return this.accessModes; - } - - public void setAccessModes(List accessModes) { - this.accessModes = accessModes; - } - - public V1PersistentVolumeSpec awsElasticBlockStore(V1AWSElasticBlockStoreVolumeSource awsElasticBlockStore) { - this.awsElasticBlockStore = awsElasticBlockStore; - return this; - } - - @ApiModelProperty("AWSElasticBlockStore represents an AWS Disk resource that is attached to a kubelet's host machine and then exposed to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes#awselasticblockstore") - public V1AWSElasticBlockStoreVolumeSource getAwsElasticBlockStore() { - return this.awsElasticBlockStore; - } - - public void setAwsElasticBlockStore(V1AWSElasticBlockStoreVolumeSource awsElasticBlockStore) { - this.awsElasticBlockStore = awsElasticBlockStore; - } - - public V1PersistentVolumeSpec azureDisk(V1AzureDiskVolumeSource azureDisk) { - this.azureDisk = azureDisk; - return this; - } - - @ApiModelProperty("AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.") - public V1AzureDiskVolumeSource getAzureDisk() { - return this.azureDisk; - } - - public void setAzureDisk(V1AzureDiskVolumeSource azureDisk) { - this.azureDisk = azureDisk; - } - - public V1PersistentVolumeSpec azureFile(V1AzureFilePersistentVolumeSource azureFile) { - this.azureFile = azureFile; - return this; - } - - @ApiModelProperty("AzureFile represents an Azure File Service mount on the host and bind mount to the pod.") - public V1AzureFilePersistentVolumeSource getAzureFile() { - return this.azureFile; - } - - public void setAzureFile(V1AzureFilePersistentVolumeSource azureFile) { - this.azureFile = azureFile; - } - - public V1PersistentVolumeSpec capacity(Map capacity) { - this.capacity = capacity; - return this; - } - - public V1PersistentVolumeSpec putCapacityItem(String key, Quantity capacityItem) { - if (this.capacity == null) { - this.capacity = new HashMap<>(); - } - - this.capacity.put(key, capacityItem); - return this; - } - - @ApiModelProperty("A description of the persistent volume's resources and capacity. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#capacity") - public Map getCapacity() { - return this.capacity; - } - - public void setCapacity(Map capacity) { - this.capacity = capacity; - } - - public V1PersistentVolumeSpec cephfs(V1CephFSPersistentVolumeSource cephfs) { - this.cephfs = cephfs; - return this; - } - - @ApiModelProperty("CephFS represents a Ceph FS mount on the host that shares a pod's lifetime") - public V1CephFSPersistentVolumeSource getCephfs() { - return this.cephfs; - } - - public void setCephfs(V1CephFSPersistentVolumeSource cephfs) { - this.cephfs = cephfs; - } - - public V1PersistentVolumeSpec cinder(V1CinderVolumeSource cinder) { - this.cinder = cinder; - return this; - } - - @ApiModelProperty("Cinder represents a cinder volume attached and mounted on kubelets host machine More info: https://releases.k8s.io/HEAD/examples/mysql-cinder-pd/README.md") - public V1CinderVolumeSource getCinder() { - return this.cinder; - } - - public void setCinder(V1CinderVolumeSource cinder) { - this.cinder = cinder; - } - - public V1PersistentVolumeSpec claimRef(V1ObjectReference claimRef) { - this.claimRef = claimRef; - return this; - } - - @ApiModelProperty("ClaimRef is part of a bi-directional binding between PersistentVolume and PersistentVolumeClaim. Expected to be non-nil when bound. claim.VolumeName is the authoritative bind between PV and PVC. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#binding") - public V1ObjectReference getClaimRef() { - return this.claimRef; - } - - public void setClaimRef(V1ObjectReference claimRef) { - this.claimRef = claimRef; - } - - public V1PersistentVolumeSpec fc(V1FCVolumeSource fc) { - this.fc = fc; - return this; - } - - @ApiModelProperty("FC represents a Fibre Channel resource that is attached to a kubelet's host machine and then exposed to the pod.") - public V1FCVolumeSource getFc() { - return this.fc; - } - - public void setFc(V1FCVolumeSource fc) { - this.fc = fc; - } - - public V1PersistentVolumeSpec flexVolume(V1FlexVolumeSource flexVolume) { - this.flexVolume = flexVolume; - return this; - } - - @ApiModelProperty("FlexVolume represents a generic volume resource that is provisioned/attached using an exec based plugin. This is an alpha feature and may change in future.") - public V1FlexVolumeSource getFlexVolume() { - return this.flexVolume; - } - - public void setFlexVolume(V1FlexVolumeSource flexVolume) { - this.flexVolume = flexVolume; - } - - public V1PersistentVolumeSpec flocker(V1FlockerVolumeSource flocker) { - this.flocker = flocker; - return this; - } - - @ApiModelProperty("Flocker represents a Flocker volume attached to a kubelet's host machine and exposed to the pod for its usage. This depends on the Flocker control service being running") - public V1FlockerVolumeSource getFlocker() { - return this.flocker; - } - - public void setFlocker(V1FlockerVolumeSource flocker) { - this.flocker = flocker; - } - - public V1PersistentVolumeSpec gcePersistentDisk(V1GCEPersistentDiskVolumeSource gcePersistentDisk) { - this.gcePersistentDisk = gcePersistentDisk; - return this; - } - - @ApiModelProperty("GCEPersistentDisk represents a GCE Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#gcepersistentdisk") - public V1GCEPersistentDiskVolumeSource getGcePersistentDisk() { - return this.gcePersistentDisk; - } - - public void setGcePersistentDisk(V1GCEPersistentDiskVolumeSource gcePersistentDisk) { - this.gcePersistentDisk = gcePersistentDisk; - } - - public V1PersistentVolumeSpec glusterfs(V1GlusterfsVolumeSource glusterfs) { - this.glusterfs = glusterfs; - return this; - } - - @ApiModelProperty("Glusterfs represents a Glusterfs volume that is attached to a host and exposed to the pod. Provisioned by an admin. More info: https://releases.k8s.io/HEAD/examples/volumes/glusterfs/README.md") - public V1GlusterfsVolumeSource getGlusterfs() { - return this.glusterfs; - } - - public void setGlusterfs(V1GlusterfsVolumeSource glusterfs) { - this.glusterfs = glusterfs; - } - - public V1PersistentVolumeSpec hostPath(V1HostPathVolumeSource hostPath) { - this.hostPath = hostPath; - return this; - } - - @ApiModelProperty("HostPath represents a directory on the host. Provisioned by a developer or tester. This is useful for single-node development and testing only! On-host storage is not supported in any way and WILL NOT WORK in a multi-node cluster. More info: https://kubernetes.io/docs/concepts/storage/volumes#hostpath") - public V1HostPathVolumeSource getHostPath() { - return this.hostPath; - } - - public void setHostPath(V1HostPathVolumeSource hostPath) { - this.hostPath = hostPath; - } - - public V1PersistentVolumeSpec iscsi(V1ISCSIVolumeSource iscsi) { - this.iscsi = iscsi; - return this; - } - - @ApiModelProperty("ISCSI represents an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod. Provisioned by an admin.") - public V1ISCSIVolumeSource getIscsi() { - return this.iscsi; - } - - public void setIscsi(V1ISCSIVolumeSource iscsi) { - this.iscsi = iscsi; - } - - public V1PersistentVolumeSpec local(V1LocalVolumeSource local) { - this.local = local; - return this; - } - - @ApiModelProperty("Local represents directly-attached storage with node affinity") - public V1LocalVolumeSource getLocal() { - return this.local; - } - - public void setLocal(V1LocalVolumeSource local) { - this.local = local; - } - - public V1PersistentVolumeSpec mountOptions(List mountOptions) { - this.mountOptions = mountOptions; - return this; - } - - public V1PersistentVolumeSpec addMountOptionsItem(String mountOptionsItem) { - if (this.mountOptions == null) { - this.mountOptions = new ArrayList<>(); - } - - this.mountOptions.add(mountOptionsItem); - return this; - } - - @ApiModelProperty("A list of mount options, e.g. [\"ro\", \"soft\"]. Not validated - mount will simply fail if one is invalid. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes/#mount-options") - public List getMountOptions() { - return this.mountOptions; - } - - public void setMountOptions(List mountOptions) { - this.mountOptions = mountOptions; - } - - public V1PersistentVolumeSpec nfs(V1NFSVolumeSource nfs) { - this.nfs = nfs; - return this; - } - - @ApiModelProperty("NFS represents an NFS mount on the host. Provisioned by an admin. More info: https://kubernetes.io/docs/concepts/storage/volumes#nfs") - public V1NFSVolumeSource getNfs() { - return this.nfs; - } - - public void setNfs(V1NFSVolumeSource nfs) { - this.nfs = nfs; - } - - public V1PersistentVolumeSpec persistentVolumeReclaimPolicy(String persistentVolumeReclaimPolicy) { - this.persistentVolumeReclaimPolicy = persistentVolumeReclaimPolicy; - return this; - } - - @ApiModelProperty("What happens to a persistent volume when released from its claim. Valid options are Retain (default) and Recycle. Recycling must be supported by the volume plugin underlying this persistent volume. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#reclaiming") - public String getPersistentVolumeReclaimPolicy() { - return this.persistentVolumeReclaimPolicy; - } - - public void setPersistentVolumeReclaimPolicy(String persistentVolumeReclaimPolicy) { - this.persistentVolumeReclaimPolicy = persistentVolumeReclaimPolicy; - } - - public V1PersistentVolumeSpec photonPersistentDisk(V1PhotonPersistentDiskVolumeSource photonPersistentDisk) { - this.photonPersistentDisk = photonPersistentDisk; - return this; - } - - @ApiModelProperty("PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine") - public V1PhotonPersistentDiskVolumeSource getPhotonPersistentDisk() { - return this.photonPersistentDisk; - } - - public void setPhotonPersistentDisk(V1PhotonPersistentDiskVolumeSource photonPersistentDisk) { - this.photonPersistentDisk = photonPersistentDisk; - } - - public V1PersistentVolumeSpec portworxVolume(V1PortworxVolumeSource portworxVolume) { - this.portworxVolume = portworxVolume; - return this; - } - - @ApiModelProperty("PortworxVolume represents a portworx volume attached and mounted on kubelets host machine") - public V1PortworxVolumeSource getPortworxVolume() { - return this.portworxVolume; - } - - public void setPortworxVolume(V1PortworxVolumeSource portworxVolume) { - this.portworxVolume = portworxVolume; - } - - public V1PersistentVolumeSpec quobyte(V1QuobyteVolumeSource quobyte) { - this.quobyte = quobyte; - return this; - } - - @ApiModelProperty("Quobyte represents a Quobyte mount on the host that shares a pod's lifetime") - public V1QuobyteVolumeSource getQuobyte() { - return this.quobyte; - } - - public void setQuobyte(V1QuobyteVolumeSource quobyte) { - this.quobyte = quobyte; - } - - public V1PersistentVolumeSpec rbd(V1RBDVolumeSource rbd) { - this.rbd = rbd; - return this; - } - - @ApiModelProperty("RBD represents a Rados Block Device mount on the host that shares a pod's lifetime. More info: https://releases.k8s.io/HEAD/examples/volumes/rbd/README.md") - public V1RBDVolumeSource getRbd() { - return this.rbd; - } - - public void setRbd(V1RBDVolumeSource rbd) { - this.rbd = rbd; - } - - public V1PersistentVolumeSpec scaleIO(V1ScaleIOPersistentVolumeSource scaleIO) { - this.scaleIO = scaleIO; - return this; - } - - @ApiModelProperty("ScaleIO represents a ScaleIO persistent volume attached and mounted on Kubernetes nodes.") - public V1ScaleIOPersistentVolumeSource getScaleIO() { - return this.scaleIO; - } - - public void setScaleIO(V1ScaleIOPersistentVolumeSource scaleIO) { - this.scaleIO = scaleIO; - } - - public V1PersistentVolumeSpec storageClassName(String storageClassName) { - this.storageClassName = storageClassName; - return this; - } - - @ApiModelProperty("Name of StorageClass to which this persistent volume belongs. Empty value means that this volume does not belong to any StorageClass.") - public String getStorageClassName() { - return this.storageClassName; - } - - public void setStorageClassName(String storageClassName) { - this.storageClassName = storageClassName; - } - - public V1PersistentVolumeSpec storageos(V1StorageOSPersistentVolumeSource storageos) { - this.storageos = storageos; - return this; - } - - @ApiModelProperty("StorageOS represents a StorageOS volume that is attached to the kubelet's host machine and mounted into the pod More info: https://releases.k8s.io/HEAD/examples/volumes/storageos/README.md") - public V1StorageOSPersistentVolumeSource getStorageos() { - return this.storageos; - } - - public void setStorageos(V1StorageOSPersistentVolumeSource storageos) { - this.storageos = storageos; - } - - public V1PersistentVolumeSpec vsphereVolume(V1VsphereVirtualDiskVolumeSource vsphereVolume) { - this.vsphereVolume = vsphereVolume; - return this; - } - - @ApiModelProperty("VsphereVolume represents a vSphere volume attached and mounted on kubelets host machine") - public V1VsphereVirtualDiskVolumeSource getVsphereVolume() { - return this.vsphereVolume; - } - - public void setVsphereVolume(V1VsphereVirtualDiskVolumeSource vsphereVolume) { - this.vsphereVolume = vsphereVolume; - } - - @ApiModelProperty("V1VolumeNodeAffinity represents node that volume will be bound to") - public V1VolumeNodeAffinity getNodeAffinity() { - return nodeAffinity; - } - - public void setNodeAffinity(V1VolumeNodeAffinity nodeAffinity) { - this.nodeAffinity = nodeAffinity; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1PersistentVolumeSpec v1PersistentVolumeSpec = (V1PersistentVolumeSpec) o; - return Objects.equals(this.accessModes, v1PersistentVolumeSpec.accessModes) && Objects.equals(this.awsElasticBlockStore, v1PersistentVolumeSpec.awsElasticBlockStore) && Objects.equals(this.azureDisk, v1PersistentVolumeSpec.azureDisk) && Objects.equals(this.azureFile, v1PersistentVolumeSpec.azureFile) && Objects.equals(this.capacity, v1PersistentVolumeSpec.capacity) && Objects.equals(this.cephfs, v1PersistentVolumeSpec.cephfs) && Objects.equals(this.cinder, v1PersistentVolumeSpec.cinder) && Objects.equals(this.claimRef, v1PersistentVolumeSpec.claimRef) && Objects.equals(this.fc, v1PersistentVolumeSpec.fc) && Objects.equals(this.flexVolume, v1PersistentVolumeSpec.flexVolume) && Objects.equals(this.flocker, v1PersistentVolumeSpec.flocker) && Objects.equals(this.gcePersistentDisk, v1PersistentVolumeSpec.gcePersistentDisk) && Objects.equals(this.glusterfs, v1PersistentVolumeSpec.glusterfs) && Objects.equals(this.hostPath, v1PersistentVolumeSpec.hostPath) && Objects.equals(this.iscsi, v1PersistentVolumeSpec.iscsi) && Objects.equals(this.local, v1PersistentVolumeSpec.local) && Objects.equals(this.mountOptions, v1PersistentVolumeSpec.mountOptions) && Objects.equals(this.nfs, v1PersistentVolumeSpec.nfs) && Objects.equals(this.persistentVolumeReclaimPolicy, v1PersistentVolumeSpec.persistentVolumeReclaimPolicy) && Objects.equals(this.photonPersistentDisk, v1PersistentVolumeSpec.photonPersistentDisk) && Objects.equals(this.portworxVolume, v1PersistentVolumeSpec.portworxVolume) && Objects.equals(this.quobyte, v1PersistentVolumeSpec.quobyte) && Objects.equals(this.rbd, v1PersistentVolumeSpec.rbd) && Objects.equals(this.scaleIO, v1PersistentVolumeSpec.scaleIO) && Objects.equals(this.storageClassName, v1PersistentVolumeSpec.storageClassName) && Objects.equals(this.storageos, v1PersistentVolumeSpec.storageos) && Objects.equals(this.vsphereVolume, v1PersistentVolumeSpec.vsphereVolume) && Objects.equals(this.nodeAffinity, v1PersistentVolumeSpec.nodeAffinity); - } else { - return false; - } - } - - @Override - public int hashCode() { - return Objects.hash(new Object[]{this.accessModes, this.awsElasticBlockStore, this.azureDisk, this.azureFile, this.capacity, this.cephfs, this.cinder, this.claimRef, this.fc, this.flexVolume, this.flocker, this.gcePersistentDisk, this.glusterfs, this.hostPath, this.iscsi, this.local, this.mountOptions, this.nfs, this.persistentVolumeReclaimPolicy, this.photonPersistentDisk, this.portworxVolume, this.quobyte, this.rbd, this.scaleIO, this.storageClassName, this.storageos, this.vsphereVolume, this.nodeAffinity}); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1PersistentVolumeSpec {\n"); - sb.append(" accessModes: ").append(this.toIndentedString(this.accessModes)).append("\n"); - sb.append(" awsElasticBlockStore: ").append(this.toIndentedString(this.awsElasticBlockStore)).append("\n"); - sb.append(" azureDisk: ").append(this.toIndentedString(this.azureDisk)).append("\n"); - sb.append(" azureFile: ").append(this.toIndentedString(this.azureFile)).append("\n"); - sb.append(" capacity: ").append(this.toIndentedString(this.capacity)).append("\n"); - sb.append(" cephfs: ").append(this.toIndentedString(this.cephfs)).append("\n"); - sb.append(" cinder: ").append(this.toIndentedString(this.cinder)).append("\n"); - sb.append(" claimRef: ").append(this.toIndentedString(this.claimRef)).append("\n"); - sb.append(" fc: ").append(this.toIndentedString(this.fc)).append("\n"); - sb.append(" flexVolume: ").append(this.toIndentedString(this.flexVolume)).append("\n"); - sb.append(" flocker: ").append(this.toIndentedString(this.flocker)).append("\n"); - sb.append(" gcePersistentDisk: ").append(this.toIndentedString(this.gcePersistentDisk)).append("\n"); - sb.append(" glusterfs: ").append(this.toIndentedString(this.glusterfs)).append("\n"); - sb.append(" hostPath: ").append(this.toIndentedString(this.hostPath)).append("\n"); - sb.append(" iscsi: ").append(this.toIndentedString(this.iscsi)).append("\n"); - sb.append(" local: ").append(this.toIndentedString(this.local)).append("\n"); - sb.append(" mountOptions: ").append(this.toIndentedString(this.mountOptions)).append("\n"); - sb.append(" nfs: ").append(this.toIndentedString(this.nfs)).append("\n"); - sb.append(" persistentVolumeReclaimPolicy: ").append(this.toIndentedString(this.persistentVolumeReclaimPolicy)).append("\n"); - sb.append(" photonPersistentDisk: ").append(this.toIndentedString(this.photonPersistentDisk)).append("\n"); - sb.append(" portworxVolume: ").append(this.toIndentedString(this.portworxVolume)).append("\n"); - sb.append(" quobyte: ").append(this.toIndentedString(this.quobyte)).append("\n"); - sb.append(" rbd: ").append(this.toIndentedString(this.rbd)).append("\n"); - sb.append(" scaleIO: ").append(this.toIndentedString(this.scaleIO)).append("\n"); - sb.append(" storageClassName: ").append(this.toIndentedString(this.storageClassName)).append("\n"); - sb.append(" storageos: ").append(this.toIndentedString(this.storageos)).append("\n"); - sb.append(" vsphereVolume: ").append(this.toIndentedString(this.vsphereVolume)).append("\n"); - sb.append(" nodeAffinity: ").append(this.toIndentedString(this.nodeAffinity)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1PodDNSConfig.java b/src/main/java/io/kubernetes/client/models/V1PodDNSConfig.java deleted file mode 100644 index 1025432e0e..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1PodDNSConfig.java +++ /dev/null @@ -1,133 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import javax.annotation.Nullable; - -@ApiModel( - description = "PodDNSConfig defines the DNS parameters of a pod in addition to those generated from DNSPolicy." -) -public class V1PodDNSConfig { - public static final String SERIALIZED_NAME_NAMESERVERS = "nameservers"; - @SerializedName("nameservers") - private List nameservers = null; - public static final String SERIALIZED_NAME_OPTIONS = "options"; - @SerializedName("options") - private List options = null; - public static final String SERIALIZED_NAME_SEARCHES = "searches"; - @SerializedName("searches") - private List searches = null; - - public V1PodDNSConfig() { - } - - public V1PodDNSConfig nameservers(List nameservers) { - this.nameservers = nameservers; - return this; - } - - public V1PodDNSConfig addNameserversItem(String nameserversItem) { - if (this.nameservers == null) { - this.nameservers = new ArrayList(); - } - - this.nameservers.add(nameserversItem); - return this; - } - - @Nullable - @ApiModelProperty("A list of DNS name server IP addresses. This will be appended to the base nameservers generated from DNSPolicy. Duplicated nameservers will be removed.") - public List getNameservers() { - return this.nameservers; - } - - public void setNameservers(List nameservers) { - this.nameservers = nameservers; - } - - public V1PodDNSConfig options(List options) { - this.options = options; - return this; - } - - public V1PodDNSConfig addOptionsItem(V1PodDNSConfigOption optionsItem) { - if (this.options == null) { - this.options = new ArrayList(); - } - - this.options.add(optionsItem); - return this; - } - - @Nullable - @ApiModelProperty("A list of DNS resolver options. This will be merged with the base options generated from DNSPolicy. Duplicated entries will be removed. Resolution options given in Options will override those that appear in the base DNSPolicy.") - public List getOptions() { - return this.options; - } - - public void setOptions(List options) { - this.options = options; - } - - public V1PodDNSConfig searches(List searches) { - this.searches = searches; - return this; - } - - public V1PodDNSConfig addSearchesItem(String searchesItem) { - if (this.searches == null) { - this.searches = new ArrayList(); - } - - this.searches.add(searchesItem); - return this; - } - - @Nullable - @ApiModelProperty("A list of DNS search domains for host-name lookup. This will be appended to the base search paths generated from DNSPolicy. Duplicated search paths will be removed.") - public List getSearches() { - return this.searches; - } - - public void setSearches(List searches) { - this.searches = searches; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1PodDNSConfig v1PodDNSConfig = (V1PodDNSConfig)o; - return Objects.equals(this.nameservers, v1PodDNSConfig.nameservers) && Objects.equals(this.options, v1PodDNSConfig.options) && Objects.equals(this.searches, v1PodDNSConfig.searches); - } else { - return false; - } - } - - public int hashCode() { - return Objects.hash(new Object[]{this.nameservers, this.options, this.searches}); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1PodDNSConfig {\n"); - sb.append(" nameservers: ").append(this.toIndentedString(this.nameservers)).append("\n"); - sb.append(" options: ").append(this.toIndentedString(this.options)).append("\n"); - sb.append(" searches: ").append(this.toIndentedString(this.searches)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1PodDNSConfigOption.java b/src/main/java/io/kubernetes/client/models/V1PodDNSConfigOption.java deleted file mode 100644 index 99260529eb..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1PodDNSConfigOption.java +++ /dev/null @@ -1,85 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import java.util.Objects; -import javax.annotation.Nullable; - -@ApiModel( - description = "PodDNSConfigOption defines DNS resolver options of a pod." -) -public class V1PodDNSConfigOption { - public static final String SERIALIZED_NAME_NAME = "name"; - @SerializedName("name") - private String name; - public static final String SERIALIZED_NAME_VALUE = "value"; - @SerializedName("value") - private String value; - - public V1PodDNSConfigOption() { - } - - public V1PodDNSConfigOption name(String name) { - this.name = name; - return this; - } - - @Nullable - @ApiModelProperty("Required.") - public String getName() { - return this.name; - } - - public void setName(String name) { - this.name = name; - } - - public V1PodDNSConfigOption value(String value) { - this.value = value; - return this; - } - - @Nullable - @ApiModelProperty("") - public String getValue() { - return this.value; - } - - public void setValue(String value) { - this.value = value; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1PodDNSConfigOption v1PodDNSConfigOption = (V1PodDNSConfigOption)o; - return Objects.equals(this.name, v1PodDNSConfigOption.name) && Objects.equals(this.value, v1PodDNSConfigOption.value); - } else { - return false; - } - } - - public int hashCode() { - return Objects.hash(new Object[]{this.name, this.value}); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1PodDNSConfigOption {\n"); - sb.append(" name: ").append(this.toIndentedString(this.name)).append("\n"); - sb.append(" value: ").append(this.toIndentedString(this.value)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1PodSpec.java b/src/main/java/io/kubernetes/client/models/V1PodSpec.java deleted file mode 100644 index cf31133366..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1PodSpec.java +++ /dev/null @@ -1,549 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by FernFlower decompiler) -// - -package io.kubernetes.client.models; - -import java.util.*; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -@ApiModel( - description = "PodSpec is a description of a pod." -) -public class V1PodSpec { - @SerializedName("activeDeadlineSeconds") - private Long activeDeadlineSeconds = null; - @SerializedName("affinity") - private V1Affinity affinity = null; - @SerializedName("automountServiceAccountToken") - private Boolean automountServiceAccountToken = null; - @SerializedName("containers") - private List containers = new ArrayList(); - @SerializedName("dnsPolicy") - private String dnsPolicy = null; - @SerializedName("dnsConfig") - private V1PodDNSConfig dnsConfig = null; - @SerializedName("hostAliases") - private List hostAliases = null; - @SerializedName("hostIPC") - private Boolean hostIPC = null; - @SerializedName("hostNetwork") - private Boolean hostNetwork = null; - @SerializedName("hostPID") - private Boolean hostPID = null; - @SerializedName("hostname") - private String hostname = null; - @SerializedName("imagePullSecrets") - private List imagePullSecrets = null; - @SerializedName("initContainers") - private List initContainers = null; - @SerializedName("nodeName") - private String nodeName = null; - @SerializedName("nodeSelector") - private Map nodeSelector = null; - @SerializedName("priority") - private Integer priority = null; - @SerializedName("priorityClassName") - private String priorityClassName = null; - @SerializedName("restartPolicy") - private String restartPolicy = null; - @SerializedName("schedulerName") - private String schedulerName = null; - @SerializedName("securityContext") - private V1PodSecurityContext securityContext = null; - @SerializedName("serviceAccount") - private String serviceAccount = null; - @SerializedName("serviceAccountName") - private String serviceAccountName = null; - @SerializedName("subdomain") - private String subdomain = null; - @SerializedName("terminationGracePeriodSeconds") - private Long terminationGracePeriodSeconds = null; - @SerializedName("tolerations") - private List tolerations = null; - @SerializedName("volumes") - private List volumes = null; - - public V1PodSpec() { - } - - public V1PodSpec activeDeadlineSeconds(Long activeDeadlineSeconds) { - this.activeDeadlineSeconds = activeDeadlineSeconds; - return this; - } - - @ApiModelProperty("Optional duration in seconds the pod may be active on the node relative to StartTime before the system will actively try to mark it failed and kill associated containers. Value must be a positive integer.") - public Long getActiveDeadlineSeconds() { - return this.activeDeadlineSeconds; - } - - public void setActiveDeadlineSeconds(Long activeDeadlineSeconds) { - this.activeDeadlineSeconds = activeDeadlineSeconds; - } - - public V1PodSpec affinity(V1Affinity affinity) { - this.affinity = affinity; - return this; - } - - @ApiModelProperty("If specified, the pod's scheduling constraints") - public V1Affinity getAffinity() { - return this.affinity; - } - - public void setAffinity(V1Affinity affinity) { - this.affinity = affinity; - } - - public V1PodSpec automountServiceAccountToken(Boolean automountServiceAccountToken) { - this.automountServiceAccountToken = automountServiceAccountToken; - return this; - } - - @ApiModelProperty("AutomountServiceAccountToken indicates whether a service account token should be automatically mounted.") - public Boolean isAutomountServiceAccountToken() { - return this.automountServiceAccountToken; - } - - public void setAutomountServiceAccountToken(Boolean automountServiceAccountToken) { - this.automountServiceAccountToken = automountServiceAccountToken; - } - - public V1PodSpec containers(List containers) { - this.containers = containers; - return this; - } - - public V1PodSpec addContainersItem(V1Container containersItem) { - this.containers.add(containersItem); - return this; - } - - @ApiModelProperty( - required = true, - value = "List of containers belonging to the pod. Containers cannot currently be added or removed. There must be at least one container in a Pod. Cannot be updated." - ) - public List getContainers() { - return this.containers; - } - - public void setContainers(List containers) { - this.containers = containers; - } - - public V1PodSpec dnsPolicy(String dnsPolicy) { - this.dnsPolicy = dnsPolicy; - return this; - } - - public V1PodSpec dnsConfig(V1PodDNSConfig v1PodDNSConfig) { - this.dnsConfig = v1PodDNSConfig; - return this; - } - - public V1PodDNSConfig getDnsConfig() { - return dnsConfig; - } - - public void setDnsConfig(V1PodDNSConfig dnsConfig) { - this.dnsConfig = dnsConfig; - } - - @ApiModelProperty("Set DNS policy for containers within the pod. One of 'ClusterFirstWithHostNet', 'ClusterFirst' or 'Default'. Defaults to \"ClusterFirst\". To have DNS options set along with hostNetwork, you have to specify DNS policy explicitly to 'ClusterFirstWithHostNet'.") - public String getDnsPolicy() { - return this.dnsPolicy; - } - - public void setDnsPolicy(String dnsPolicy) { - this.dnsPolicy = dnsPolicy; - } - - public V1PodSpec hostAliases(List hostAliases) { - this.hostAliases = hostAliases; - return this; - } - - public V1PodSpec addHostAliasesItem(V1HostAlias hostAliasesItem) { - if (this.hostAliases == null) { - this.hostAliases = new ArrayList(); - } - - this.hostAliases.add(hostAliasesItem); - return this; - } - - @ApiModelProperty("HostAliases is an optional list of hosts and IPs that will be injected into the pod's hosts file if specified. This is only valid for non-hostNetwork pods.") - public List getHostAliases() { - return this.hostAliases; - } - - public void setHostAliases(List hostAliases) { - this.hostAliases = hostAliases; - } - - public V1PodSpec hostIPC(Boolean hostIPC) { - this.hostIPC = hostIPC; - return this; - } - - @ApiModelProperty("Use the host's ipc namespace. Optional: Default to false.") - public Boolean isHostIPC() { - return this.hostIPC; - } - - public void setHostIPC(Boolean hostIPC) { - this.hostIPC = hostIPC; - } - - public V1PodSpec hostNetwork(Boolean hostNetwork) { - this.hostNetwork = hostNetwork; - return this; - } - - @ApiModelProperty("Host networking requested for this pod. Use the host's network namespace. If this option is set, the ports that will be used must be specified. Default to false.") - public Boolean isHostNetwork() { - return this.hostNetwork; - } - - public void setHostNetwork(Boolean hostNetwork) { - this.hostNetwork = hostNetwork; - } - - public V1PodSpec hostPID(Boolean hostPID) { - this.hostPID = hostPID; - return this; - } - - @ApiModelProperty("Use the host's pid namespace. Optional: Default to false.") - public Boolean isHostPID() { - return this.hostPID; - } - - public void setHostPID(Boolean hostPID) { - this.hostPID = hostPID; - } - - public V1PodSpec hostname(String hostname) { - this.hostname = hostname; - return this; - } - - @ApiModelProperty("Specifies the hostname of the Pod If not specified, the pod's hostname will be set to a system-defined value.") - public String getHostname() { - return this.hostname; - } - - public void setHostname(String hostname) { - this.hostname = hostname; - } - - public V1PodSpec imagePullSecrets(List imagePullSecrets) { - this.imagePullSecrets = imagePullSecrets; - return this; - } - - public V1PodSpec addImagePullSecretsItem(V1LocalObjectReference imagePullSecretsItem) { - if (this.imagePullSecrets == null) { - this.imagePullSecrets = new ArrayList(); - } - - this.imagePullSecrets.add(imagePullSecretsItem); - return this; - } - - @ApiModelProperty("ImagePullSecrets is an optional list of references to secrets in the same namespace to use for pulling any of the images used by this PodSpec. If specified, these secrets will be passed to individual puller implementations for them to use. For example, in the case of docker, only DockerConfig type secrets are honored. More info: https://kubernetes.io/docs/concepts/containers/images#specifying-imagepullsecrets-on-a-pod") - public List getImagePullSecrets() { - return this.imagePullSecrets; - } - - public void setImagePullSecrets(List imagePullSecrets) { - this.imagePullSecrets = imagePullSecrets; - } - - public V1PodSpec initContainers(List initContainers) { - this.initContainers = initContainers; - return this; - } - - public V1PodSpec addInitContainersItem(V1Container initContainersItem) { - if (this.initContainers == null) { - this.initContainers = new ArrayList(); - } - - this.initContainers.add(initContainersItem); - return this; - } - - @ApiModelProperty("List of initialization containers belonging to the pod. Init containers are executed in order prior to containers being started. If any init container fails, the pod is considered to have failed and is handled according to its restartPolicy. The name for an init container or normal container must be unique among all containers. Init containers may not have Lifecycle actions, Readiness probes, or Liveness probes. The resourceRequirements of an init container are taken into account during scheduling by finding the highest request/limit for each resource type, and then using the max of of that value or the sum of the normal containers. Limits are applied to init containers in a similar fashion. Init containers cannot currently be added or removed. Cannot be updated. More info: https://kubernetes.io/docs/concepts/workloads/pods/init-containers/") - public List getInitContainers() { - return this.initContainers; - } - - public void setInitContainers(List initContainers) { - this.initContainers = initContainers; - } - - public V1PodSpec nodeName(String nodeName) { - this.nodeName = nodeName; - return this; - } - - @ApiModelProperty("NodeName is a request to schedule this pod onto a specific node. If it is non-empty, the scheduler simply schedules this pod onto that node, assuming that it fits resource requirements.") - public String getNodeName() { - return this.nodeName; - } - - public void setNodeName(String nodeName) { - this.nodeName = nodeName; - } - - public V1PodSpec nodeSelector(Map nodeSelector) { - this.nodeSelector = nodeSelector; - return this; - } - - public V1PodSpec putNodeSelectorItem(String key, String nodeSelectorItem) { - if (this.nodeSelector == null) { - this.nodeSelector = new HashMap(); - } - - this.nodeSelector.put(key, nodeSelectorItem); - return this; - } - - @ApiModelProperty("NodeSelector is a selector which must be true for the pod to fit on a node. Selector which must match a node's labels for the pod to be scheduled on that node. More info: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/") - public Map getNodeSelector() { - return this.nodeSelector; - } - - public void setNodeSelector(Map nodeSelector) { - this.nodeSelector = nodeSelector; - } - - public V1PodSpec priority(Integer priority) { - this.priority = priority; - return this; - } - - @ApiModelProperty("The priority value. Various system components use this field to find the priority of the pod. When Priority Admission Controller is enabled, it prevents users from setting this field. The admission controller populates this field from PriorityClassName. The higher the value, the higher the priority.") - public Integer getPriority() { - return this.priority; - } - - public void setPriority(Integer priority) { - this.priority = priority; - } - - public V1PodSpec priorityClassName(String priorityClassName) { - this.priorityClassName = priorityClassName; - return this; - } - - @ApiModelProperty("If specified, indicates the pod's priority. \"SYSTEM\" is a special keyword which indicates the highest priority. Any other name must be defined by creating a PriorityClass object with that name. If not specified, the pod priority will be default or zero if there is no default.") - public String getPriorityClassName() { - return this.priorityClassName; - } - - public void setPriorityClassName(String priorityClassName) { - this.priorityClassName = priorityClassName; - } - - public V1PodSpec restartPolicy(String restartPolicy) { - this.restartPolicy = restartPolicy; - return this; - } - - @ApiModelProperty("Restart policy for all containers within the pod. One of Always, OnFailure, Never. Default to Always. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle/#restart-policy") - public String getRestartPolicy() { - return this.restartPolicy; - } - - public void setRestartPolicy(String restartPolicy) { - this.restartPolicy = restartPolicy; - } - - public V1PodSpec schedulerName(String schedulerName) { - this.schedulerName = schedulerName; - return this; - } - - @ApiModelProperty("If specified, the pod will be dispatched by specified scheduler. If not specified, the pod will be dispatched by default scheduler.") - public String getSchedulerName() { - return this.schedulerName; - } - - public void setSchedulerName(String schedulerName) { - this.schedulerName = schedulerName; - } - - public V1PodSpec securityContext(V1PodSecurityContext securityContext) { - this.securityContext = securityContext; - return this; - } - - @ApiModelProperty("SecurityContext holds pod-level security attributes and common container settings. Optional: Defaults to empty. See type description for default values of each field.") - public V1PodSecurityContext getSecurityContext() { - return this.securityContext; - } - - public void setSecurityContext(V1PodSecurityContext securityContext) { - this.securityContext = securityContext; - } - - public V1PodSpec serviceAccount(String serviceAccount) { - this.serviceAccount = serviceAccount; - return this; - } - - @ApiModelProperty("DeprecatedServiceAccount is a depreciated alias for ServiceAccountName. Deprecated: Use serviceAccountName instead.") - public String getServiceAccount() { - return this.serviceAccount; - } - - public void setServiceAccount(String serviceAccount) { - this.serviceAccount = serviceAccount; - } - - public V1PodSpec serviceAccountName(String serviceAccountName) { - this.serviceAccountName = serviceAccountName; - return this; - } - - @ApiModelProperty("ServiceAccountName is the name of the ServiceAccount to use to run this pod. More info: https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/") - public String getServiceAccountName() { - return this.serviceAccountName; - } - - public void setServiceAccountName(String serviceAccountName) { - this.serviceAccountName = serviceAccountName; - } - - public V1PodSpec subdomain(String subdomain) { - this.subdomain = subdomain; - return this; - } - - @ApiModelProperty("If specified, the fully qualified Pod hostname will be \"...svc.\". If not specified, the pod will not have a domainname at all.") - public String getSubdomain() { - return this.subdomain; - } - - public void setSubdomain(String subdomain) { - this.subdomain = subdomain; - } - - public V1PodSpec terminationGracePeriodSeconds(Long terminationGracePeriodSeconds) { - this.terminationGracePeriodSeconds = terminationGracePeriodSeconds; - return this; - } - - @ApiModelProperty("Optional duration in seconds the pod needs to terminate gracefully. May be decreased in delete request. Value must be non-negative integer. The value zero indicates delete immediately. If this value is nil, the default grace period will be used instead. The grace period is the duration in seconds after the processes running in the pod are sent a termination signal and the time when the processes are forcibly halted with a kill signal. Set this value longer than the expected cleanup time for your process. Defaults to 30 seconds.") - public Long getTerminationGracePeriodSeconds() { - return this.terminationGracePeriodSeconds; - } - - public void setTerminationGracePeriodSeconds(Long terminationGracePeriodSeconds) { - this.terminationGracePeriodSeconds = terminationGracePeriodSeconds; - } - - public V1PodSpec tolerations(List tolerations) { - this.tolerations = tolerations; - return this; - } - - public V1PodSpec addTolerationsItem(V1Toleration tolerationsItem) { - if (this.tolerations == null) { - this.tolerations = new ArrayList(); - } - - this.tolerations.add(tolerationsItem); - return this; - } - - @ApiModelProperty("If specified, the pod's tolerations.") - public List getTolerations() { - return this.tolerations; - } - - public void setTolerations(List tolerations) { - this.tolerations = tolerations; - } - - public V1PodSpec volumes(List volumes) { - this.volumes = volumes; - return this; - } - - public V1PodSpec addVolumesItem(V1Volume volumesItem) { - if (this.volumes == null) { - this.volumes = new ArrayList(); - } - - this.volumes.add(volumesItem); - return this; - } - - @ApiModelProperty("List of volumes that can be mounted by containers belonging to the pod. More info: https://kubernetes.io/docs/concepts/storage/volumes") - public List getVolumes() { - return this.volumes; - } - - public void setVolumes(List volumes) { - this.volumes = volumes; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1PodSpec v1PodSpec = (V1PodSpec) o; - return Objects.equals(this.activeDeadlineSeconds, v1PodSpec.activeDeadlineSeconds) && Objects.equals(this.affinity, v1PodSpec.affinity) && Objects.equals(this.automountServiceAccountToken, v1PodSpec.automountServiceAccountToken) && Objects.equals(this.containers, v1PodSpec.containers) && Objects.equals(this.dnsPolicy, v1PodSpec.dnsPolicy) && Objects.equals(this.hostAliases, v1PodSpec.hostAliases) && Objects.equals(this.hostIPC, v1PodSpec.hostIPC) && Objects.equals(this.hostNetwork, v1PodSpec.hostNetwork) && Objects.equals(this.hostPID, v1PodSpec.hostPID) && Objects.equals(this.hostname, v1PodSpec.hostname) && Objects.equals(this.imagePullSecrets, v1PodSpec.imagePullSecrets) && Objects.equals(this.initContainers, v1PodSpec.initContainers) && Objects.equals(this.nodeName, v1PodSpec.nodeName) && Objects.equals(this.nodeSelector, v1PodSpec.nodeSelector) && Objects.equals(this.priority, v1PodSpec.priority) && Objects.equals(this.priorityClassName, v1PodSpec.priorityClassName) && Objects.equals(this.restartPolicy, v1PodSpec.restartPolicy) && Objects.equals(this.schedulerName, v1PodSpec.schedulerName) && Objects.equals(this.securityContext, v1PodSpec.securityContext) && Objects.equals(this.serviceAccount, v1PodSpec.serviceAccount) && Objects.equals(this.serviceAccountName, v1PodSpec.serviceAccountName) && Objects.equals(this.subdomain, v1PodSpec.subdomain) && Objects.equals(this.terminationGracePeriodSeconds, v1PodSpec.terminationGracePeriodSeconds) && Objects.equals(this.tolerations, v1PodSpec.tolerations) && Objects.equals(this.volumes, v1PodSpec.volumes); - } else { - return false; - } - } - - public int hashCode() { - return Objects.hash(new Object[]{this.activeDeadlineSeconds, this.affinity, this.automountServiceAccountToken, this.containers, this.dnsPolicy, this.hostAliases, this.hostIPC, this.hostNetwork, this.hostPID, this.hostname, this.imagePullSecrets, this.initContainers, this.nodeName, this.nodeSelector, this.priority, this.priorityClassName, this.restartPolicy, this.schedulerName, this.securityContext, this.serviceAccount, this.serviceAccountName, this.subdomain, this.terminationGracePeriodSeconds, this.tolerations, this.volumes}); - } - - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1PodSpec {\n"); - sb.append(" activeDeadlineSeconds: ").append(this.toIndentedString(this.activeDeadlineSeconds)).append("\n"); - sb.append(" affinity: ").append(this.toIndentedString(this.affinity)).append("\n"); - sb.append(" automountServiceAccountToken: ").append(this.toIndentedString(this.automountServiceAccountToken)).append("\n"); - sb.append(" containers: ").append(this.toIndentedString(this.containers)).append("\n"); - sb.append(" dnsPolicy: ").append(this.toIndentedString(this.dnsPolicy)).append("\n"); - sb.append(" hostAliases: ").append(this.toIndentedString(this.hostAliases)).append("\n"); - sb.append(" hostIPC: ").append(this.toIndentedString(this.hostIPC)).append("\n"); - sb.append(" hostNetwork: ").append(this.toIndentedString(this.hostNetwork)).append("\n"); - sb.append(" hostPID: ").append(this.toIndentedString(this.hostPID)).append("\n"); - sb.append(" hostname: ").append(this.toIndentedString(this.hostname)).append("\n"); - sb.append(" imagePullSecrets: ").append(this.toIndentedString(this.imagePullSecrets)).append("\n"); - sb.append(" initContainers: ").append(this.toIndentedString(this.initContainers)).append("\n"); - sb.append(" nodeName: ").append(this.toIndentedString(this.nodeName)).append("\n"); - sb.append(" nodeSelector: ").append(this.toIndentedString(this.nodeSelector)).append("\n"); - sb.append(" priority: ").append(this.toIndentedString(this.priority)).append("\n"); - sb.append(" priorityClassName: ").append(this.toIndentedString(this.priorityClassName)).append("\n"); - sb.append(" restartPolicy: ").append(this.toIndentedString(this.restartPolicy)).append("\n"); - sb.append(" schedulerName: ").append(this.toIndentedString(this.schedulerName)).append("\n"); - sb.append(" securityContext: ").append(this.toIndentedString(this.securityContext)).append("\n"); - sb.append(" serviceAccount: ").append(this.toIndentedString(this.serviceAccount)).append("\n"); - sb.append(" serviceAccountName: ").append(this.toIndentedString(this.serviceAccountName)).append("\n"); - sb.append(" subdomain: ").append(this.toIndentedString(this.subdomain)).append("\n"); - sb.append(" terminationGracePeriodSeconds: ").append(this.toIndentedString(this.terminationGracePeriodSeconds)).append("\n"); - sb.append(" tolerations: ").append(this.toIndentedString(this.tolerations)).append("\n"); - sb.append(" volumes: ").append(this.toIndentedString(this.volumes)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} diff --git a/src/main/java/io/kubernetes/client/models/V1Secret.java b/src/main/java/io/kubernetes/client/models/V1Secret.java deleted file mode 100644 index a340a274c1..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1Secret.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - * Kubernetes - * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen) - * - * OpenAPI spec version: v1.8.11 - * - * - * NOTE: This class is auto generated by the swagger code generator program. - * https://github.com/swagger-api/swagger-codegen.git - * Do not edit the class manually. - */ - - -package io.kubernetes.client.models; - -import java.util.HashMap; -import java.util.Map; -import java.util.Objects; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -/** - * ===========复制这个类的主要目的是将data的类型从 Map改为Map - * Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes. - */ -@ApiModel(description = "Secret holds secret data of a certain type. The total bytes of the values in the Data field must be less than MaxSecretSize bytes.") - -public class V1Secret { - @SerializedName("apiVersion") - private String apiVersion = null; - - @SerializedName("data") - private Map data = null; - - @SerializedName("kind") - private String kind = null; - - @SerializedName("metadata") - private V1ObjectMeta metadata = null; - - @SerializedName("stringData") - private Map stringData = null; - - @SerializedName("type") - private String type = null; - - public V1Secret apiVersion(String apiVersion) { - this.apiVersion = apiVersion; - return this; - } - - /** - * APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources - * @return apiVersion - **/ - @ApiModelProperty(value = "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources") - public String getApiVersion() { - return apiVersion; - } - - public void setApiVersion(String apiVersion) { - this.apiVersion = apiVersion; - } - - public V1Secret data(Map data) { - this.data = data; - return this; - } - - public V1Secret putDataItem(String key, String dataItem) { - if (this.data == null) { - this.data = new HashMap<>(); - } - this.data.put(key, dataItem); - return this; - } - - /** - * Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4 - * @return data - **/ - @ApiModelProperty(value = "Data contains the secret data. Each key must consist of alphanumeric characters, '-', '_' or '.'. The serialized form of the secret data is a base64 encoded string, representing the arbitrary (possibly non-string) data value here. Described in https://tools.ietf.org/html/rfc4648#section-4") - public Map getData() { - return data; - } - - public void setData(Map data) { - this.data = data; - } - - public V1Secret kind(String kind) { - this.kind = kind; - return this; - } - - /** - * Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds - * @return kind - **/ - @ApiModelProperty(value = "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds") - public String getKind() { - return kind; - } - - public void setKind(String kind) { - this.kind = kind; - } - - public V1Secret metadata(V1ObjectMeta metadata) { - this.metadata = metadata; - return this; - } - - /** - * Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata - * @return metadata - **/ - @ApiModelProperty(value = "Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata") - public V1ObjectMeta getMetadata() { - return metadata; - } - - public void setMetadata(V1ObjectMeta metadata) { - this.metadata = metadata; - } - - public V1Secret stringData(Map stringData) { - this.stringData = stringData; - return this; - } - - public V1Secret putStringDataItem(String key, String stringDataItem) { - if (this.stringData == null) { - this.stringData = new HashMap<>(); - } - this.stringData.put(key, stringDataItem); - return this; - } - - /** - * stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API. - * @return stringData - **/ - @ApiModelProperty(value = "stringData allows specifying non-binary secret data in string form. It is provided as a write-only convenience method. All keys and values are merged into the data field on write, overwriting any existing values. It is never output when reading from the API.") - public Map getStringData() { - return stringData; - } - - public void setStringData(Map stringData) { - this.stringData = stringData; - } - - public V1Secret type(String type) { - this.type = type; - return this; - } - - /** - * Used to facilitate programmatic handling of secret data. - * @return type - **/ - @ApiModelProperty(value = "Used to facilitate programmatic handling of secret data.") - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - - - @Override - public boolean equals(java.lang.Object o) { - if (this == o) { - return true; - } - if (o == null || getClass() != o.getClass()) { - return false; - } - V1Secret v1Secret = (V1Secret) o; - return Objects.equals(this.apiVersion, v1Secret.apiVersion) && - Objects.equals(this.data, v1Secret.data) && - Objects.equals(this.kind, v1Secret.kind) && - Objects.equals(this.metadata, v1Secret.metadata) && - Objects.equals(this.stringData, v1Secret.stringData) && - Objects.equals(this.type, v1Secret.type); - } - - @Override - public int hashCode() { - return Objects.hash(apiVersion, data, kind, metadata, stringData, type); - } - - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1Secret {\n"); - - sb.append(" apiVersion: ").append(toIndentedString(apiVersion)).append("\n"); - sb.append(" data: ").append(toIndentedString(data)).append("\n"); - sb.append(" kind: ").append(toIndentedString(kind)).append("\n"); - sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); - sb.append(" stringData: ").append(toIndentedString(stringData)).append("\n"); - sb.append(" type: ").append(toIndentedString(type)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - /** - * Convert the given object to string with each line indented by 4 spaces - * (except the first line). - */ - private String toIndentedString(java.lang.Object o) { - if (o == null) { - return "null"; - } - return o.toString().replace("\n", "\n "); - } - -} - diff --git a/src/main/java/io/kubernetes/client/models/V1VolumeNodeAffinity.java b/src/main/java/io/kubernetes/client/models/V1VolumeNodeAffinity.java deleted file mode 100644 index 0879ec0bff..0000000000 --- a/src/main/java/io/kubernetes/client/models/V1VolumeNodeAffinity.java +++ /dev/null @@ -1,69 +0,0 @@ -// -// Source code recreated from a .class file by IntelliJ IDEA -// (powered by Fernflower decompiler) -// - -package io.kubernetes.client.models; - -import com.google.gson.annotations.SerializedName; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; - -import javax.annotation.Nullable; -import java.util.Objects; - -@ApiModel( - description = "VolumeNodeAffinity defines constraints that limit what nodes this volume can be accessed from." -) -public class V1VolumeNodeAffinity { - public static final String SERIALIZED_NAME_REQUIRED = "required"; - @SerializedName("required") - private V1NodeSelector required; - - public V1VolumeNodeAffinity() { - } - - public V1VolumeNodeAffinity required(V1NodeSelector required) { - this.required = required; - return this; - } - - @Nullable - @ApiModelProperty("") - public V1NodeSelector getRequired() { - return this.required; - } - - public void setRequired(V1NodeSelector required) { - this.required = required; - } - - public boolean equals(Object o) { - if (this == o) { - return true; - } else if (o != null && this.getClass() == o.getClass()) { - V1VolumeNodeAffinity v1VolumeNodeAffinity = (V1VolumeNodeAffinity) o; - return Objects.equals(this.required, v1VolumeNodeAffinity.required); - } else { - return false; - } - } - - @Override - public int hashCode() { - return Objects.hash(new Object[]{this.required}); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("class V1VolumeNodeAffinity {\n"); - sb.append(" required: ").append(this.toIndentedString(this.required)).append("\n"); - sb.append("}"); - return sb.toString(); - } - - private String toIndentedString(Object o) { - return o == null ? "null" : o.toString().replace("\n", "\n "); - } -} From c2e43f0724dc2fcac81414e299d420eb67313613 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 18 Aug 2022 14:58:51 +0800 Subject: [PATCH 221/228] =?UTF-8?q?[IMP]=20=E5=8D=87=E7=BA=A7k8s=20api?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payload/IngressSagaPayload.java | 8 +- .../impl/AgentMsgHandlerServiceImpl.java | 9 +- .../impl/AppExceptionRecordServiceImpl.java | 8 +- .../impl/AppServiceInstanceServiceImpl.java | 6 +- ...va => ConvertV1DeploymentServiceImpl.java} | 6 +- ....java => ConvertV1IngressServiceImpl.java} | 46 ++++--- ...a => ConvertV1StatefulSetServiceImpl.java} | 4 +- .../impl/DevopsDaemonSetServiceImpl.java | 8 +- .../impl/DevopsDeployGroupServiceImpl.java | 18 +-- .../impl/DevopsDeploymentServiceImpl.java | 28 ++-- .../impl/DevopsEnvApplicationServiceImpl.java | 16 +-- .../impl/DevopsEnvResourceServiceImpl.java | 31 ++--- .../impl/DevopsIngressServiceImpl.java | 128 +++++++++--------- .../impl/DevopsStatefulSetServiceImpl.java | 5 +- .../HandlerIngressRelationsServiceImpl.java | 90 ++++++------ .../gitops/ResourceConvertToYamlHandler.java | 16 +-- .../choerodon/devops/infra/util/K8sUtil.java | 19 +-- 17 files changed, 224 insertions(+), 222 deletions(-) rename src/main/java/io/choerodon/devops/app/service/impl/{ConvertV1beta2DeploymentServiceImpl.java => ConvertV1DeploymentServiceImpl.java} (95%) rename src/main/java/io/choerodon/devops/app/service/impl/{ConvertV1beta1IngressServiceImpl.java => ConvertV1IngressServiceImpl.java} (73%) rename src/main/java/io/choerodon/devops/app/service/impl/{ConvertV1beta2StatefulSetServiceImpl.java => ConvertV1StatefulSetServiceImpl.java} (96%) diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java index ebd036aa38..fb10e2a379 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java @@ -1,6 +1,6 @@ package io.choerodon.devops.app.eventhandler.payload; -import io.kubernetes.client.models.V1beta1Ingress; +import io.kubernetes.client.openapi.models.V1Ingress; import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO; import io.choerodon.devops.infra.dto.DevopsIngressDTO; @@ -15,7 +15,7 @@ public class IngressSagaPayload { private Boolean created; private DevopsEnvironmentDTO devopsEnvironmentDTO; private DevopsIngressDTO devopsIngressDTO; - private V1beta1Ingress v1beta1Ingress; + private V1Ingress v1beta1Ingress; public IngressSagaPayload() { @@ -59,11 +59,11 @@ public void setDevopsIngressDTO(DevopsIngressDTO devopsIngressDTO) { this.devopsIngressDTO = devopsIngressDTO; } - public V1beta1Ingress getV1beta1Ingress() { + public V1Ingress getV1Ingress() { return v1beta1Ingress; } - public void setV1beta1Ingress(V1beta1Ingress v1beta1Ingress) { + public void setV1Ingress(V1Ingress v1beta1Ingress) { this.v1beta1Ingress = v1beta1Ingress; } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java index dbcf7c3690..f9f43d809e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java @@ -3,7 +3,6 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; -import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.codehaus.jackson.map.ObjectMapper; @@ -602,11 +601,11 @@ public void resourceUpdate(String key, String msg, Long clusterId) { DevopsDeploymentDTO deploymentDTO = devopsDeploymentService.baseQueryByEnvIdAndName(envId, KeyParseUtil.getResourceName(key)); // 部署组创建的deployment,如果副本变为0则更新应用状态为停止 if (deploymentDTO != null && WorkloadSourceTypeEnums.DEPLOY_GROUP.getType().equals(deploymentDTO.getSourceType())) { - V1beta2Deployment v1beta2Deployment = K8sUtil.deserialize(msg, V1beta2Deployment.class); - if (v1beta2Deployment.getSpec().getReplicas() == 0 && !InstanceStatus.STOPPED.getStatus().equals(deploymentDTO.getStatus())) { + V1Deployment v1Deployment = K8sUtil.deserialize(msg, V1Deployment.class); + if (v1Deployment.getSpec().getReplicas() == 0 && !InstanceStatus.STOPPED.getStatus().equals(deploymentDTO.getStatus())) { deploymentDTO.setStatus(InstanceStatus.STOPPED.getStatus()); devopsDeploymentService.baseUpdate(deploymentDTO); - } else if (v1beta2Deployment.getSpec().getReplicas() > 0 && !InstanceStatus.RUNNING.getStatus().equals(deploymentDTO.getStatus())) { + } else if (v1Deployment.getSpec().getReplicas() > 0 && !InstanceStatus.RUNNING.getStatus().equals(deploymentDTO.getStatus())) { deploymentDTO.setStatus(InstanceStatus.RUNNING.getStatus()); devopsDeploymentService.baseUpdate(deploymentDTO); } @@ -947,7 +946,7 @@ public void handlerDomainCreateMessage(String key, String msg, Long clusterId) { return; } - V1beta1Ingress ingress = json.deserialize(msg, V1beta1Ingress.class); + V1Ingress ingress = json.deserialize(msg, V1Ingress.class); DevopsEnvResourceDTO devopsEnvResourceDTO = new DevopsEnvResourceDTO(); DevopsEnvResourceDetailDTO devopsEnvResourceDetailDTO = new DevopsEnvResourceDetailDTO(); devopsEnvResourceDetailDTO.setMessage(msg); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java index d92e41ddbb..e48b610472 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppExceptionRecordServiceImpl.java @@ -1,8 +1,8 @@ package io.choerodon.devops.app.service.impl; -import io.kubernetes.client.models.V1beta2Deployment; -import io.kubernetes.client.models.V1beta2StatefulSet; import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Deployment; +import io.kubernetes.client.openapi.models.V1StatefulSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -54,12 +54,12 @@ public void createOrUpdateExceptionRecord(String resourceType, String resource, int desired = 1; String resourceName = ""; if (ResourceType.DEPLOYMENT.getType().equals(resourceType)) { - V1beta2Deployment v1beta2Deployment = JSON.deserialize(resource, V1beta2Deployment.class); + V1Deployment v1beta2Deployment = JSON.deserialize(resource, V1Deployment.class); current = v1beta2Deployment.getStatus().getReadyReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReadyReplicas(); desired = v1beta2Deployment.getStatus().getReplicas() == null ? 0 : v1beta2Deployment.getStatus().getReplicas(); resourceName = v1beta2Deployment.getMetadata().getName(); } else if (ResourceType.STATEFULSET.getType().equals(resourceType)) { - V1beta2StatefulSet v1beta2StatefulSet = JSON.deserialize(resource, V1beta2StatefulSet.class); + V1StatefulSet v1beta2StatefulSet = JSON.deserialize(resource, V1StatefulSet.class); current = v1beta2StatefulSet.getStatus().getReadyReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReadyReplicas(); desired = v1beta2StatefulSet.getStatus().getReplicas() == null ? 0 : v1beta2StatefulSet.getStatus().getReplicas(); resourceName = v1beta2StatefulSet.getMetadata().getName(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index 4009763ba3..b6ad8090ee 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -3,8 +3,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; -import io.kubernetes.client.models.V1beta1Ingress; import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Ingress; import io.kubernetes.client.openapi.models.V1Service; import org.apache.commons.lang.StringUtils; import org.hzero.core.base.BaseConstants; @@ -2218,8 +2218,8 @@ public void batchDeploymentSaga(BatchDeploymentPayload batchDeploymentPayload) { } for (IngressSagaPayload ingressSagaPayload : batchDeploymentPayload.getIngressSagaPayloads()) { - ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); - ingressResourceConvertToYamlHandler.setType(ingressSagaPayload.getV1beta1Ingress()); + ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + ingressResourceConvertToYamlHandler.setType(ingressSagaPayload.getV1Ingress()); String ingressContent = ingressResourceConvertToYamlHandler.getCreationResourceContentForBatchDeployment(); String fileName = GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName() + GitOpsConstants.YAML_FILE_SUFFIX; pathContentMap.put(fileName, ingressContent); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2DeploymentServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1DeploymentServiceImpl.java similarity index 95% rename from src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2DeploymentServiceImpl.java rename to src/main/java/io/choerodon/devops/app/service/impl/ConvertV1DeploymentServiceImpl.java index 05754d7cd0..a5ac12bec5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2DeploymentServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1DeploymentServiceImpl.java @@ -19,9 +19,9 @@ import io.choerodon.devops.infra.util.TypeUtil; @Component -public class ConvertV1beta2DeploymentServiceImpl extends ConvertK8sObjectService { +public class ConvertV1DeploymentServiceImpl extends ConvertK8sObjectService { - public ConvertV1beta2DeploymentServiceImpl() { + public ConvertV1DeploymentServiceImpl() { super(DevopsDeploymentDTO.class); } @@ -37,7 +37,7 @@ public ResourceType getType() { } // @Override -// public void checkParameters(V1beta2Deployment v1beta2Deployment, Map objectPath) { +// public void checkParameters(V1Deployment v1beta2Deployment, Map objectPath) { // String filePath = objectPath.get(TypeUtil.objToString(v1beta2Deployment.hashCode())); // if (v1beta2Deployment.getMetadata() == null) { // throw new GitOpsExplainException(GitOpsObjectError.RELEASE_META_DATA_NOT_FOUND.getError(), filePath); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java similarity index 73% rename from src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java rename to src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java index efb8623fc3..2483fd647c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta1IngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java @@ -1,7 +1,8 @@ package io.choerodon.devops.app.service.impl; +import io.kubernetes.client.openapi.models.V1HTTPIngressPath; import io.kubernetes.client.openapi.models.V1Ingress; -import io.kubernetes.client.proto.V1beta1Extensions; +import io.kubernetes.client.openapi.models.V1IngressRule; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -19,18 +20,18 @@ import io.choerodon.devops.infra.util.TypeUtil; @Component -public class ConvertV1beta1IngressServiceImpl extends ConvertK8sObjectService { +public class ConvertV1IngressServiceImpl extends ConvertK8sObjectService { @Autowired private DevopsIngressService devopsIngressService; @Autowired private DevopsEnvFileResourceService devopsEnvFileResourceService; - public ConvertV1beta1IngressServiceImpl() { - super(V1beta1Ingress.class); + public ConvertV1IngressServiceImpl() { + super(V1Ingress.class); } @Override - public void checkIfExist(List v1beta1Ingresses, Long envId, List beforeSyncDelete, Map objectPath, V1beta1Ingress v1beta1Ingress) { + public void checkIfExist(List v1beta1Ingresses, Long envId, List beforeSyncDelete, Map objectPath, V1Ingress v1beta1Ingress) { String filePath = objectPath.get(TypeUtil.objToString(v1beta1Ingress.hashCode())); DevopsIngressDTO devopsIngressDTO = devopsIngressService.baseCheckByEnvAndName(envId, v1beta1Ingress.getMetadata().getName()); if (devopsIngressDTO != null @@ -55,7 +56,7 @@ public ResourceType getType() { } @Override - public void checkParameters(V1beta1Ingress v1beta1Ingress, Map objectPath) { + public void checkParameters(V1Ingress v1beta1Ingress, Map objectPath) { String filePath = objectPath.get(TypeUtil.objToString(v1beta1Ingress.hashCode())); if (v1beta1Ingress.getMetadata() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_META_DATA_NOT_FOUND.getError(), filePath); @@ -67,7 +68,7 @@ public void checkParameters(V1beta1Ingress v1beta1Ingress, Map o if (v1beta1Ingress.getSpec() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_SPEC_NOT_FOUND.getError(), filePath); } else { - checkV1beta1IngressRules(v1beta1Ingress, filePath); + checkV1IngressRules(v1beta1Ingress, filePath); } if (v1beta1Ingress.getApiVersion() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_API_VERSION_NOT_FOUND.getError(), filePath); @@ -78,30 +79,30 @@ public void checkParameters(V1beta1Ingress v1beta1Ingress, Map o } - private void checkV1beta1IngressRules(V1beta1Ingress v1beta1Ingress, String filePath) { - List v1beta1IngressRules = v1beta1Ingress.getSpec().getRules(); + private void checkV1IngressRules(V1Ingress v1beta1Ingress, String filePath) { + List v1beta1IngressRules = v1beta1Ingress.getSpec().getRules(); if (v1beta1IngressRules.isEmpty()) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULES_NOT_FOUND.getError(), filePath); } else { - for (V1beta1IngressRule v1beta1IngressRule : v1beta1IngressRules) { + for (V1IngressRule v1beta1IngressRule : v1beta1IngressRules) { if (v1beta1IngressRule.getHost() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULE_HOST_NOT_FOUND.getError(), filePath); } if (v1beta1IngressRule.getHttp() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULE_HTTP_NOT_FOUND.getError(), filePath); } else { - checkV1beta1HTTPIngressPaths(v1beta1IngressRule, filePath); + checkV1HTTPIngressPaths(v1beta1IngressRule, filePath); } } } } - private void checkV1beta1HTTPIngressPaths(V1beta1IngressRule v1beta1IngressRule, String filePath) { - List v1beta1HTTPIngressPaths = v1beta1IngressRule.getHttp().getPaths(); - if (v1beta1HTTPIngressPaths.isEmpty()) { + private void checkV1HTTPIngressPaths(V1IngressRule v1beta1IngressRule, String filePath) { + List v1HTTPIngressPaths = v1beta1IngressRule.getHttp().getPaths(); + if (v1HTTPIngressPaths.isEmpty()) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_NOT_FOUND.getError(), filePath); } else { - for (V1beta1HTTPIngressPath v1beta1HTTPIngressPath : v1beta1HTTPIngressPaths) { + for (V1HTTPIngressPath v1beta1HTTPIngressPath : v1HTTPIngressPaths) { if (v1beta1HTTPIngressPath.getPath() == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_PATH_NOT_FOUND.getError(), filePath); } @@ -114,12 +115,13 @@ private void checkV1beta1HTTPIngressPaths(V1beta1IngressRule v1beta1IngressRule, } } - private void checkBackend(V1beta1HTTPIngressPath v1beta1HTTPIngressPath, String filePath) { - if (v1beta1HTTPIngressPath.getBackend().getServiceName() == null) { - throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_NAME_NOT_FOUND.getError(), filePath); - } - if (v1beta1HTTPIngressPath.getBackend().getServicePort() == null) { - throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_PORT_NOT_FOUND.getError(), filePath); - } + private void checkBackend(V1HTTPIngressPath v1beta1HTTPIngressPath, String filePath) { + // TODO 兼容旧版本 +// if (v1beta1HTTPIngressPath.getBackend().getServiceName() == null) { +// throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_NAME_NOT_FOUND.getError(), filePath); +// } +// if (v1beta1HTTPIngressPath.getBackend().getServicePort() == null) { +// throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_PORT_NOT_FOUND.getError(), filePath); +// } } } \ No newline at end of file diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2StatefulSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1StatefulSetServiceImpl.java similarity index 96% rename from src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2StatefulSetServiceImpl.java rename to src/main/java/io/choerodon/devops/app/service/impl/ConvertV1StatefulSetServiceImpl.java index a77a5f0fcc..441eac45fc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1beta2StatefulSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1StatefulSetServiceImpl.java @@ -19,9 +19,9 @@ import io.choerodon.devops.infra.util.TypeUtil; @Component -public class ConvertV1beta2StatefulSetServiceImpl extends ConvertK8sObjectService { +public class ConvertV1StatefulSetServiceImpl extends ConvertK8sObjectService { - public ConvertV1beta2StatefulSetServiceImpl() { + public ConvertV1StatefulSetServiceImpl() { super(DevopsStatefulSetDTO.class); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java index 624f1f94ff..89205b3365 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDaemonSetServiceImpl.java @@ -1,9 +1,9 @@ package io.choerodon.devops.app.service.impl; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1beta2DaemonSet; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1DaemonSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -82,7 +82,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageReque DaemonSetInfoVO daemonSetInfoVO = ConvertUtils.convertObject(v, DaemonSetInfoVO.class); if (detailDTOMap.get(v.getResourceDetailId()) != null) { // 参考实例详情查询逻辑 - V1beta2DaemonSet v1beta2DaemonSet = json.deserialize(detailDTOMap.get(v.getResourceDetailId()).getMessage(), V1beta2DaemonSet.class); + V1DaemonSet v1beta2DaemonSet = json.deserialize(detailDTOMap.get(v.getResourceDetailId()).getMessage(), V1DaemonSet.class); daemonSetInfoVO.setName(v1beta2DaemonSet.getMetadata().getName()); @@ -158,7 +158,7 @@ public DevopsDaemonSetDTO baseQueryByEnvIdAndName(Long envId, String name) { @Override @Transactional(propagation = Propagation.NESTED) public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO appServiceInstanceDTO) { - V1beta2DaemonSet v1beta2DaemonSet = json.deserialize(detailsJson, V1beta2DaemonSet.class); + V1DaemonSet v1beta2DaemonSet = json.deserialize(detailsJson, V1DaemonSet.class); DevopsDaemonSetDTO oldDevopsDaemonSetDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), v1beta2DaemonSet.getMetadata().getName()); if (oldDevopsDaemonSetDTO != null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java index 921b3e4fb0..1d0ff0a1df 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeployGroupServiceImpl.java @@ -2,8 +2,8 @@ import io.kubernetes.client.custom.IntOrString; import io.kubernetes.client.custom.Quantity; -import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.hzero.core.util.EncryptionUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -196,7 +196,7 @@ public DevopsDeployAppCenterEnvVO updateContainer(Long projectId, DevopsDeployGr public String buildDeploymentYaml(ProjectDTO projectDTO, DevopsEnvironmentDTO devopsEnvironmentDTO, DevopsDeployGroupVO devopsDeployGroupVO) { - V1beta2Deployment deployment = new V1beta2Deployment(); + V1Deployment deployment = new V1Deployment(); deployment.setKind(DEPLOYMENT.getType()); deployment.setApiVersion("apps/v1"); try { @@ -216,8 +216,8 @@ public String buildDeploymentYaml(ProjectDTO projectDTO, DevopsEnvironmentDTO } } - private V1beta2Deployment addAppConfig(ProjectDTO projectDTO, DevopsEnvironmentDTO - devopsEnvironmentDTO, DevopsDeployGroupVO devopsDeployGroupVO, V1beta2Deployment deployment) throws IOException { + private V1Deployment addAppConfig(ProjectDTO projectDTO, DevopsEnvironmentDTO + devopsEnvironmentDTO, DevopsDeployGroupVO devopsDeployGroupVO, V1Deployment deployment) throws IOException { DevopsDeployGroupAppConfigVO devopsDeployGroupAppConfigVO = devopsDeployGroupVO.getAppConfig(); // 设置名称、labels、annotations V1ObjectMeta metadata = new V1ObjectMeta(); @@ -231,14 +231,14 @@ private V1beta2Deployment addAppConfig(ProjectDTO projectDTO, DevopsEnvironmentD deployment.setMetadata(metadata); // 设置spec - V1beta2DeploymentSpec v1beta2DeploymentSpec = new V1beta2DeploymentSpec(); + V1DeploymentSpec v1beta2DeploymentSpec = new V1DeploymentSpec(); v1beta2DeploymentSpec.setReplicas(devopsDeployGroupAppConfigVO.getReplicas()); // 设置升级策略 - V1beta2DeploymentStrategy v1beta2DeploymentStrategy = new V1beta2DeploymentStrategy(); + V1DeploymentStrategy v1beta2DeploymentStrategy = new V1DeploymentStrategy(); v1beta2DeploymentStrategy.setType(devopsDeployGroupAppConfigVO.getStrategyType()); if (devopsDeployGroupAppConfigVO.getStrategyType().equals("RollingUpdate")) { - V1beta2RollingUpdateDeployment rollingUpdate = new V1beta2RollingUpdateDeployment(); + V1RollingUpdateDeployment rollingUpdate = new V1RollingUpdateDeployment(); if (devopsDeployGroupAppConfigVO.getMaxSurge() != null) { rollingUpdate.setMaxSurge(new IntOrString(devopsDeployGroupAppConfigVO.getMaxSurge())); } @@ -310,8 +310,8 @@ private V1beta2Deployment addAppConfig(ProjectDTO projectDTO, DevopsEnvironmentD return deployment; } - private V1beta2Deployment addContainerConfig(ProjectDTO projectDTO, DevopsEnvironmentDTO - devopsEnvironmentDTO, DevopsDeployGroupVO devopsDeployGroupVO, V1beta2Deployment deployment) throws IOException { + private V1Deployment addContainerConfig(ProjectDTO projectDTO, DevopsEnvironmentDTO + devopsEnvironmentDTO, DevopsDeployGroupVO devopsDeployGroupVO, V1Deployment deployment) throws IOException { List devopsDeployGroupContainerConfigVOS = devopsDeployGroupVO.getContainerConfig(); List containers = new ArrayList<>(); boolean hasJarRdupm = false; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeploymentServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeploymentServiceImpl.java index ded3e78bbc..67e554fc34 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeploymentServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsDeploymentServiceImpl.java @@ -1,18 +1,11 @@ package io.choerodon.devops.app.service.impl; -import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; - -import java.io.IOException; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1beta2Deployment; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1Deployment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; @@ -21,6 +14,13 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.ObjectUtils; +import java.io.IOException; +import java.util.*; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.choerodon.devops.infra.constant.MiscConstants.CREATE_TYPE; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.core.utils.ConvertUtils; @@ -191,9 +191,9 @@ public Page pagingByEnvId(Long projectId, Long envId, PageRequ DeploymentInfoVO deploymentVO = ConvertUtils.convertObject(v, DeploymentInfoVO.class); if (detailDTOMap.get(v.getResourceDetailId()) != null) { // 参考实例详情查询逻辑 - V1beta2Deployment v1beta2Deployment = json.deserialize( + V1Deployment v1beta2Deployment = json.deserialize( detailDTOMap.get(v.getResourceDetailId()).getMessage(), - V1beta2Deployment.class); + V1Deployment.class); deploymentVO.setDesired(TypeUtil.objToLong(v1beta2Deployment.getSpec().getReplicas())); deploymentVO.setCurrent(TypeUtil.objToLong(v1beta2Deployment.getStatus().getReplicas())); deploymentVO.setUpToDate(TypeUtil.objToLong(v1beta2Deployment.getStatus().getUpdatedReplicas())); @@ -226,7 +226,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageRequ @Override @Transactional(propagation = Propagation.NESTED) public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO appServiceInstanceDTO) { - V1beta2Deployment v1beta2Deployment = json.deserialize(detailsJson, V1beta2Deployment.class); + V1Deployment v1beta2Deployment = json.deserialize(detailsJson, V1Deployment.class); DevopsDeploymentDTO oldDevopsDeploymentDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), v1beta2Deployment.getMetadata().getName()); if (oldDevopsDeploymentDTO != null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java index b6fb8f66dd..b5955244d2 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvApplicationServiceImpl.java @@ -1,9 +1,9 @@ package io.choerodon.devops.app.service.impl; -import io.kubernetes.client.JSON; -import io.kubernetes.client.models.V1Container; -import io.kubernetes.client.models.V1ContainerPort; -import io.kubernetes.client.models.V1beta2Deployment; +import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.V1Container; +import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1Deployment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -127,8 +127,8 @@ public List> listLabelByAppAndEnvId(Long envId, Long appServ List devopsEnvMessageVOS = baseListResourceByEnvAndApp(envId, appServiceId); List> listLabel = new ArrayList<>(); devopsEnvMessageVOS.forEach(devopsEnvMessageVO -> { - V1beta2Deployment v1beta2Deployment = json.deserialize( - devopsEnvMessageVO.getDetail(), V1beta2Deployment.class); + V1Deployment v1beta2Deployment = json.deserialize( + devopsEnvMessageVO.getDetail(), V1Deployment.class); listLabel.add(v1beta2Deployment.getMetadata().getLabels()); }); return listLabel; @@ -139,8 +139,8 @@ public List listPortByAppAndEnvId(Long envId, Long appServiceId List devopsEnvMessageVOS = baseListResourceByEnvAndApp(envId, appServiceId); List devopsEnvPortVOS = new ArrayList<>(); devopsEnvMessageVOS.forEach(devopsEnvMessageVO -> { - V1beta2Deployment v1beta2Deployment = json.deserialize( - devopsEnvMessageVO.getDetail(), V1beta2Deployment.class); + V1Deployment v1beta2Deployment = json.deserialize( + devopsEnvMessageVO.getDetail(), V1Deployment.class); List containers = v1beta2Deployment.getSpec().getTemplate().getSpec().getContainers(); for (V1Container container : containers) { List ports = container.getPorts(); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java index acc9dcb1d7..7a20241cc5 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java @@ -2,7 +2,6 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.springframework.beans.factory.annotation.Autowired; @@ -99,9 +98,9 @@ public DevopsEnvResourceVO listResourcesByDeploymentId(Long deploymentId) { // 获取相关的pod List devopsEnvPodVOs = devopsEnvPodService.listWorkloadPod(ResourceType.DEPLOYMENT.getType(), devopsDeploymentVO.getName()); - V1beta2Deployment v1beta2Deployment = json.deserialize( + V1Deployment v1beta2Deployment = json.deserialize( devopsEnvResourceDetailDTO.getMessage(), - V1beta2Deployment.class); + V1Deployment.class); addDeploymentToResource(devopsEnvResourceVO, v1beta2Deployment, deploymentId); @@ -148,9 +147,9 @@ private void dealWithResource(DevopsEnvResourceDetailDTO devopsEnvResourceDetail addPodToResource(devopsEnvResourceVO, v1Pod); break; case DEPLOYMENT: - V1beta2Deployment v1beta2Deployment = json.deserialize( + V1Deployment v1beta2Deployment = json.deserialize( devopsEnvResourceDetailDTO.getMessage(), - V1beta2Deployment.class); + V1Deployment.class); addDeploymentToResource(devopsEnvResourceVO, v1beta2Deployment, devopsEnvResourceDTO.getInstanceId()); break; @@ -161,24 +160,24 @@ private void dealWithResource(DevopsEnvResourceDetailDTO devopsEnvResourceDetail break; case INGRESS: if (devopsEnvResourceDTO.getInstanceId() != null) { - V1beta1Ingress v1beta1Ingress = json.deserialize( + V1Ingress v1beta1Ingress = json.deserialize( devopsEnvResourceDetailDTO.getMessage(), - V1beta1Ingress.class); + V1Ingress.class); devopsEnvResourceVO.getIngressVOS().add(addIngressToResource(v1beta1Ingress)); } break; case REPLICASET: - V1beta2ReplicaSet v1beta2ReplicaSet = json.deserialize( + V1ReplicaSet v1beta2ReplicaSet = json.deserialize( devopsEnvResourceDetailDTO.getMessage(), - V1beta2ReplicaSet.class); + V1ReplicaSet.class); addReplicaSetToResource(devopsEnvResourceVO, v1beta2ReplicaSet); break; case DAEMONSET: - V1beta2DaemonSet v1beta2DaemonSet = json.deserialize(devopsEnvResourceDetailDTO.getMessage(), V1beta2DaemonSet.class); + V1DaemonSet v1beta2DaemonSet = json.deserialize(devopsEnvResourceDetailDTO.getMessage(), V1DaemonSet.class); addDaemonSetToResource(devopsEnvResourceVO, v1beta2DaemonSet, devopsEnvResourceDTO.getInstanceId()); break; case STATEFULSET: - V1beta2StatefulSet v1beta2StatefulSet = json.deserialize(devopsEnvResourceDetailDTO.getMessage(), V1beta2StatefulSet.class); + V1StatefulSet v1beta2StatefulSet = json.deserialize(devopsEnvResourceDetailDTO.getMessage(), V1StatefulSet.class); addStatefulSetSetToResource(devopsEnvResourceVO, v1beta2StatefulSet, devopsEnvResourceDTO.getInstanceId()); break; case PERSISTENT_VOLUME_CLAIM: @@ -349,7 +348,7 @@ private void addPodToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1Pod v1 * @param devopsEnvResourceDTO 实例资源参数 * @param v1beta2Deployment deployment对象 */ - public void addDeploymentToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1beta2Deployment v1beta2Deployment, Long instanceId) { + public void addDeploymentToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1Deployment v1beta2Deployment, Long instanceId) { DeploymentVO deploymentVO = new DeploymentVO(); deploymentVO.setName(v1beta2Deployment.getMetadata().getName()); deploymentVO.setDesired(TypeUtil.objToLong(v1beta2Deployment.getSpec().getReplicas())); @@ -414,7 +413,7 @@ public void addServiceToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1Ser * * @param v1beta1Ingress ingress对象 */ - private IngressVO addIngressToResource(V1beta1Ingress v1beta1Ingress) { + private IngressVO addIngressToResource(V1Ingress v1beta1Ingress) { IngressVO ingressVO = new IngressVO(); ingressVO.setName(v1beta1Ingress.getMetadata().getName()); ingressVO.setHosts(K8sUtil.formatHosts(v1beta1Ingress.getSpec().getRules())); @@ -431,7 +430,7 @@ private IngressVO addIngressToResource(V1beta1Ingress v1beta1Ingress) { * @param devopsEnvResourceDTO 实例资源参数 * @param v1beta2ReplicaSet replicaSet对象 */ - public void addReplicaSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1beta2ReplicaSet v1beta2ReplicaSet) { + public void addReplicaSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1ReplicaSet v1beta2ReplicaSet) { if (v1beta2ReplicaSet.getSpec().getReplicas() == 0) { return; } @@ -450,7 +449,7 @@ public void addReplicaSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1 * @param devopsEnvResourceDTO 实例资源参数 * @param v1beta2DaemonSet daemonSet对象 */ - private void addDaemonSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1beta2DaemonSet v1beta2DaemonSet, Long instanceId) { + private void addDaemonSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1DaemonSet v1beta2DaemonSet, Long instanceId) { DaemonSetVO daemonSetVO = new DaemonSetVO(); daemonSetVO.setName(v1beta2DaemonSet.getMetadata().getName()); daemonSetVO.setAge(v1beta2DaemonSet.getMetadata().getCreationTimestamp().toString()); @@ -468,7 +467,7 @@ private void addDaemonSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1 * @param devopsEnvResourceDTO 实例资源参数 * @param v1beta2StatefulSet statefulSet对象 */ - private void addStatefulSetSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1beta2StatefulSet v1beta2StatefulSet, Long instanceId) { + private void addStatefulSetSetToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1StatefulSet v1beta2StatefulSet, Long instanceId) { StatefulSetVO statefulSetVO = new StatefulSetVO(); statefulSetVO.setName(v1beta2StatefulSet.getMetadata().getName()); statefulSetVO.setDesiredReplicas(TypeUtil.objToLong(v1beta2StatefulSet.getSpec().getReplicas())); diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index e9fbbc8bda..64a608cf05 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -2,10 +2,8 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.JSON; -import io.kubernetes.client.custom.IntOrString; -import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; +import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeanUtils; @@ -143,9 +141,9 @@ public void createIngress(Long projectId, DevopsIngressVO devopsIngressVO) { } } - // 初始化V1beta1Ingress对象 + // 初始化V1Ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1beta1Ingress v1beta1Ingress = initV1beta1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); // 处理创建域名数据 DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); @@ -176,9 +174,9 @@ public IngressSagaPayload createForBatchDeployment(DevopsEnvironmentDTO devopsEn } } - // 初始化V1beta1Ingress对象 + // 初始化V1Ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1beta1Ingress v1beta1Ingress = initV1beta1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); // 处理创建域名数据 DevopsIngressDTO devopsIngressDTO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); @@ -194,7 +192,7 @@ public IngressSagaPayload createForBatchDeployment(DevopsEnvironmentDTO devopsEn IngressSagaPayload ingressSagaPayload = new IngressSagaPayload(devopsEnvironmentDTO.getProjectId(), userAttrDTO.getGitlabUserId()); ingressSagaPayload.setDevopsIngressDTO(devopsIngressDTO); ingressSagaPayload.setCreated(true); - ingressSagaPayload.setV1beta1Ingress(v1beta1Ingress); + ingressSagaPayload.setV1Ingress(v1beta1Ingress); ingressSagaPayload.setDevopsEnvironmentDTO(devopsEnvironmentDTO); return ingressSagaPayload; } @@ -231,9 +229,9 @@ public void createIngressByGitOps(DevopsIngressVO devopsIngressVO, Long projectI clusterConnectionHandler.checkEnvConnection(devopsEnvironmentDTO.getClusterId()); - // 初始化V1beta1Ingress对象 + // 初始化V1Ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1beta1Ingress v1beta1Ingress = initV1beta1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); // 处理域名数据 DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); @@ -300,9 +298,9 @@ public void updateIngress(Long id, DevopsIngressVO devopsIngressVO, Long project DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(UPDATE); - // 初始化V1beta1Ingress对象 + // 初始化V1Ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1beta1Ingress v1beta1Ingress = initV1beta1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); // 处理域名数据 devopsIngressVO.setId(id); @@ -341,9 +339,9 @@ public void updateIngressByGitOps(Long id, DevopsIngressVO devopsIngressVO, Long return; } - // 初始化V1beta1Ingress对象 + // 初始化V1Ingress对象 String certName = devopsIngressVO.getCertName(); - V1beta1Ingress v1beta1Ingress = initV1beta1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); // 处理域名数据 devopsIngressVO.setId(id); @@ -504,8 +502,8 @@ public void deleteIngress(Long projectId, Long ingressId) { TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master"); } } else { - ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); - V1beta1Ingress v1beta1Ingress = new V1beta1Ingress(); + ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + V1Ingress v1beta1Ingress = new V1Ingress(); V1ObjectMeta v1ObjectMeta = new V1ObjectMeta(); v1ObjectMeta.setName(ingressDO.getName()); v1beta1Ingress.setMetadata(v1ObjectMeta); @@ -548,21 +546,22 @@ public Boolean checkDomainAndPath(Long envId, String domain, String path, Long i return baseCheckPath(envId, domain, path, id); } - private V1beta1HTTPIngressPath createPath(String hostPath, String serviceName, Long port) { - V1beta1HTTPIngressPath path = new V1beta1HTTPIngressPath(); - V1beta1IngressBackend backend = new V1beta1IngressBackend(); - backend.setServiceName(serviceName.toLowerCase()); - if (port != null) { - backend.setServicePort(new IntOrString(port.intValue())); - } + private V1HTTPIngressPath createPath(String hostPath, String serviceName, Long port) { + V1HTTPIngressPath path = new V1HTTPIngressPath(); + V1IngressBackend backend = new V1IngressBackend(); + // TODO 兼容旧版本 +// backend.setServiceName(serviceName.toLowerCase()); +// if (port != null) { +// backend.setServicePort(new IntOrString(port.intValue())); +// } path.setBackend(backend); path.setPath(hostPath); return path; } - private V1beta1Ingress initV1beta1Ingress(String host, String name, @Nullable String certName, @Nullable Map annotations) { - V1beta1Ingress ingress = new V1beta1Ingress(); + private V1Ingress initV1Ingress(String host, String name, @Nullable String certName, @Nullable Map annotations) { + V1Ingress ingress = new V1Ingress(); ingress.setKind(INGRESS); ingress.setApiVersion("extensions/v1beta1"); V1ObjectMeta metadata = new V1ObjectMeta(); @@ -573,12 +572,12 @@ private V1beta1Ingress initV1beta1Ingress(String host, String name, @Nullable St metadata.setLabels(labels); metadata.setAnnotations(annotations == null ? new HashMap<>() : annotations); ingress.setMetadata(metadata); - V1beta1IngressSpec spec = new V1beta1IngressSpec(); + V1IngressSpec spec = new V1IngressSpec(); - List rules = new ArrayList<>(); - V1beta1IngressRule rule = new V1beta1IngressRule(); - V1beta1HTTPIngressRuleValue http = new V1beta1HTTPIngressRuleValue(); - List paths = new ArrayList<>(); + List rules = new ArrayList<>(); + V1IngressRule rule = new V1IngressRule(); + V1HTTPIngressRuleValue http = new V1HTTPIngressRuleValue(); + List paths = new ArrayList<>(); http.setPaths(paths); rule.setHost(host); rule.setHttp(http); @@ -586,8 +585,8 @@ private V1beta1Ingress initV1beta1Ingress(String host, String name, @Nullable St spec.setRules(rules); if (certName != null) { - List tlsList = new ArrayList<>(); - V1beta1IngressTLS tls = new V1beta1IngressTLS(); + List tlsList = new ArrayList<>(); + V1IngressTLS tls = new V1IngressTLS(); tls.addHostsItem(host); tls.setSecretName(certName); tlsList.add(tls); @@ -600,7 +599,7 @@ private V1beta1Ingress initV1beta1Ingress(String host, String name, @Nullable St private void operateEnvGitLabFile(Integer envGitLabProjectId, Boolean deleteCert, - V1beta1Ingress ingress, + V1Ingress ingress, Boolean isCreate, String path, DevopsIngressDTO devopsIngressDTO, @@ -627,7 +626,7 @@ private void operateEnvGitLabFile(Integer envGitLabProjectId, IngressSagaPayload ingressSagaPayload = new IngressSagaPayload(devopsEnvironmentDTO.getProjectId(), userAttrDTO.getGitlabUserId()); ingressSagaPayload.setDevopsIngressDTO(devopsIngressDTO); ingressSagaPayload.setCreated(isCreate); - ingressSagaPayload.setV1beta1Ingress(ingress); + ingressSagaPayload.setV1Ingress(ingress); ingressSagaPayload.setDevopsEnvironmentDTO(devopsEnvironmentDTO); producer.apply( @@ -659,8 +658,8 @@ public void operateIngressBySaga(IngressSagaPayload ingressSagaPayload) { ingressSagaPayload.getDevopsEnvironmentDTO().getClusterCode()); } //在gitops库处理instance文件 - ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); - resourceConvertToYamlHandler.setType(ingressSagaPayload.getV1beta1Ingress()); + ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + resourceConvertToYamlHandler.setType(ingressSagaPayload.getV1Ingress()); resourceConvertToYamlHandler.operationEnvGitlabFile( GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName(), @@ -697,7 +696,7 @@ public void operateIngressBySaga(IngressSagaPayload ingressSagaPayload) { } - private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long projectId, V1beta1Ingress v1beta1Ingress) { + private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long projectId, V1Ingress v1beta1Ingress) { Long envId = devopsIngressVO.getEnvId(); String ingressName = devopsIngressVO.getName(); DevopsIngressValidator.checkIngressName(ingressName); @@ -729,7 +728,7 @@ private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long pr } - private List handlerPathList(List pathList, DevopsIngressVO devopsIngressVO, V1beta1Ingress v1beta1Ingress) { + private List handlerPathList(List pathList, DevopsIngressVO devopsIngressVO, V1Ingress v1beta1Ingress) { if (pathList == null || pathList.isEmpty()) { throw new CommonException(PATH_ERROR); } @@ -999,7 +998,7 @@ public void deleteIngressAndIngressPathByEnvId(Long envId) { @Override @Transactional(propagation = Propagation.NESTED) public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO appServiceInstanceDTO) { - V1beta1Ingress v1beta1Ingress = json.deserialize(detailsJson, V1beta1Ingress.class); + V1Ingress v1beta1Ingress = json.deserialize(detailsJson, V1Ingress.class); DevopsIngressDTO devopsIngressDTO = getDevopsIngressDTO(v1beta1Ingress, appServiceInstanceDTO.getEnvId()); DevopsIngressDTO oldDevopsIngressDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), v1beta1Ingress.getMetadata().getName()); // 更新ingress @@ -1075,7 +1074,7 @@ public ResourceType getType() { return ResourceType.INGRESS; } - private DevopsIngressDTO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, Long envId) { + private DevopsIngressDTO getDevopsIngressDTO(V1Ingress v1beta1Ingress, Long envId) { DevopsIngressDTO devopsIngressDTO = new DevopsIngressDTO(); devopsIngressDTO.setDomain(v1beta1Ingress.getSpec().getRules().get(0).getHost() ); @@ -1089,33 +1088,34 @@ private DevopsIngressDTO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, Long devopsIngressDTO.setEnvId(envId); List pathCheckList = new ArrayList<>(); List devopsIngressPathDTOS = new ArrayList<>(); - List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); - for (V1beta1HTTPIngressPath v1beta1HTTPIngressPath : paths) { + List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + for (V1HTTPIngressPath v1beta1HTTPIngressPath : paths) { String path = v1beta1HTTPIngressPath.getPath(); DevopsIngressValidator.checkPath(path); pathCheckList.add(path); - V1beta1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); - String serviceName = backend.getServiceName(); - DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( - serviceName, envId); - - Long servicePort = null; - IntOrString backendServicePort = backend.getServicePort(); - if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { - servicePort = TypeUtil.objToLong(backendServicePort); - } else { - if (devopsServiceDTO != null) { - List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { - }.getType()); - servicePort = listPorts.get(0).getPort(); - } - } - DevopsIngressPathDTO devopsIngressPathDTO = new DevopsIngressPathDTO(); - devopsIngressPathDTO.setPath(path); - devopsIngressPathDTO.setServicePort(servicePort); - devopsIngressPathDTO.setServiceName(serviceName); - devopsIngressPathDTO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); - devopsIngressPathDTOS.add(devopsIngressPathDTO); + V1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); + // TODO 兼容旧版本 +// String serviceName = backend.getServiceName(); +// DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( +// serviceName, envId); +// +// Long servicePort = null; +// IntOrString backendServicePort = backend.getServicePort(); +// if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { +// servicePort = TypeUtil.objToLong(backendServicePort); +// } else { +// if (devopsServiceDTO != null) { +// List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { +// }.getType()); +// servicePort = listPorts.get(0).getPort(); +// } +// } +// DevopsIngressPathDTO devopsIngressPathDTO = new DevopsIngressPathDTO(); +// devopsIngressPathDTO.setPath(path); +// devopsIngressPathDTO.setServicePort(servicePort); +// devopsIngressPathDTO.setServiceName(serviceName); +// devopsIngressPathDTO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); +// devopsIngressPathDTOS.add(devopsIngressPathDTO); } devopsIngressDTO.setDevopsIngressPathDTOS(devopsIngressPathDTOS); return devopsIngressDTO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java index a62961c162..ba625aa791 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsStatefulSetServiceImpl.java @@ -3,6 +3,7 @@ import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.V1Container; import io.kubernetes.client.openapi.models.V1ContainerPort; +import io.kubernetes.client.openapi.models.V1StatefulSet; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -83,7 +84,7 @@ public Page pagingByEnvId(Long projectId, Long envId, PageReq StatefulSetInfoVO statefulSetInfoVO = ConvertUtils.convertObject(v, StatefulSetInfoVO.class); if (detailDTOMap.get(v.getResourceDetailId()) != null) { // 参考实例详情查询逻辑 - V1beta2StatefulSet v1beta2StatefulSet = json.deserialize(detailDTOMap.get(v.getResourceDetailId()).getMessage(), V1beta2StatefulSet.class); + V1StatefulSet v1beta2StatefulSet = json.deserialize(detailDTOMap.get(v.getResourceDetailId()).getMessage(), V1StatefulSet.class); statefulSetInfoVO.setName(v1beta2StatefulSet.getMetadata().getName()); @@ -195,7 +196,7 @@ public DevopsStatefulSetVO createOrUpdateByGitOps(DevopsStatefulSetVO devopsStat @Override @Transactional(propagation = Propagation.NESTED) public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO appServiceInstanceDTO) { - V1beta2StatefulSet v1beta2StatefulSet = json.deserialize(detailsJson, V1beta2StatefulSet.class); + V1StatefulSet v1beta2StatefulSet = json.deserialize(detailsJson, V1StatefulSet.class); DevopsStatefulSetDTO oldDevopsStatefulSetDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), v1beta2StatefulSet.getMetadata().getName()); if (oldDevopsStatefulSetDTO != null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java index 9afd8da34a..1e567c287c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java @@ -1,13 +1,10 @@ package io.choerodon.devops.app.service.impl; import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; -import io.kubernetes.client.custom.IntOrString; -import io.kubernetes.client.models.V1Endpoints; -import io.kubernetes.client.models.V1beta1HTTPIngressPath; -import io.kubernetes.client.models.V1Ingress; -import io.kubernetes.client.models.V1IngressBackend; import io.kubernetes.client.openapi.models.V1Endpoints; +import io.kubernetes.client.openapi.models.V1HTTPIngressPath; +import io.kubernetes.client.openapi.models.V1Ingress; +import io.kubernetes.client.openapi.models.V1IngressBackend; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -23,7 +20,9 @@ import io.choerodon.devops.api.vo.DevopsIngressPathVO; import io.choerodon.devops.api.vo.DevopsIngressVO; import io.choerodon.devops.app.service.*; -import io.choerodon.devops.infra.dto.*; +import io.choerodon.devops.infra.dto.DevopsEnvCommandDTO; +import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; +import io.choerodon.devops.infra.dto.DevopsIngressDTO; import io.choerodon.devops.infra.enums.GitOpsObjectError; import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.GitOpsUtil; @@ -63,9 +62,9 @@ public void handlerRelations(Map objectPath, List addV1beta1Ingress = new ArrayList<>(); - List updateV1beta1Ingress = new ArrayList<>(); - GitOpsUtil.pickCUDResource(beforeIngress, v1beta1Ingresses, addV1beta1Ingress, updateV1beta1Ingress, v1beta1Ingress -> v1beta1Ingress.getMetadata().getName()); + List addV1Ingress = new ArrayList<>(); + List updateV1Ingress = new ArrayList<>(); + GitOpsUtil.pickCUDResource(beforeIngress, v1beta1Ingresses, addV1Ingress, updateV1Ingress, v1beta1Ingress -> v1beta1Ingress.getMetadata().getName()); //删除ingress,删除文件对象关联关系 beforeIngress.forEach(ingressName -> { @@ -76,18 +75,18 @@ public void handlerRelations(Map objectPath, List getTarget() { - return V1beta1Ingress.class; + public Class getTarget() { + return V1Ingress.class; } - private void addIngress(Map objectPath, Long envId, Long projectId, List addV1beta1Ingress, String path, Long userId) { - addV1beta1Ingress + private void addIngress(Map objectPath, Long envId, Long projectId, List addV1Ingress, String path, Long userId) { + addV1Ingress .forEach(v1beta1Ingress -> { String filePath = ""; try { @@ -128,8 +127,8 @@ private void addIngress(Map objectPath, Long envId, Long project }); } - private void updateIngress(Map objectPath, Long envId, Long projectId, List updateV1beta1Ingress, String path, Long userId) { - updateV1beta1Ingress + private void updateIngress(Map objectPath, Long envId, Long projectId, List updateV1Ingress, String path, Long userId) { + updateV1Ingress .forEach(v1beta1Ingress -> { String filePath = ""; try { @@ -179,7 +178,7 @@ private void updateIngress(Map objectPath, Long envId, Long proj } private void checkIngressAppVersion( - V1beta1Ingress v1beta1Ingress) { + V1Ingress v1beta1Ingress) { try { DevopsIngressValidator.checkIngressName(v1beta1Ingress.getMetadata().getName()); } catch (Exception e) { @@ -187,7 +186,7 @@ private void checkIngressAppVersion( } } - private DevopsIngressVO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, + private DevopsIngressVO getDevopsIngressDTO(V1Ingress v1beta1Ingress, Long envId, String filePath) { DevopsIngressVO devopsIngressVO = new DevopsIngressVO(); devopsIngressVO.setDomain(v1beta1Ingress.getSpec().getRules().get(0).getHost() @@ -197,12 +196,12 @@ private DevopsIngressVO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, devopsIngressVO.setEnvId(envId); List pathCheckList = new ArrayList<>(); List devopsIngressPathVOS = new ArrayList<>(); - List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); if (paths == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATH_IS_EMPTY.getError(), filePath); } - for (V1beta1HTTPIngressPath v1beta1HTTPIngressPath : paths) { - String path = v1beta1HTTPIngressPath.getPath(); + for (V1HTTPIngressPath v1HTTPIngressPath : paths) { + String path = v1HTTPIngressPath.getPath(); try { DevopsIngressValidator.checkPath(path); if (pathCheckList.contains(path)) { @@ -212,28 +211,29 @@ private DevopsIngressVO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, } catch (Exception e) { throw new GitOpsExplainException(e.getMessage(), filePath); } - V1beta1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); - String serviceName = backend.getServiceName(); - DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( - serviceName, envId); - - Long servicePort = null; - IntOrString backendServicePort = backend.getServicePort(); - if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { - servicePort = TypeUtil.objToLong(backendServicePort); - } else { - if (devopsServiceDTO != null) { - List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { - }.getType()); - servicePort = listPorts.get(0).getPort(); - } - } - DevopsIngressPathVO devopsIngressPathVO = new DevopsIngressPathVO(); - devopsIngressPathVO.setPath(path); - devopsIngressPathVO.setServicePort(servicePort); - devopsIngressPathVO.setServiceName(serviceName); - devopsIngressPathVO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); - devopsIngressPathVOS.add(devopsIngressPathVO); + V1IngressBackend backend = v1HTTPIngressPath.getBackend(); + // TODO 兼容旧版本 +// String serviceName = backend.getServiceName(); +// DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( +// serviceName, envId); +// +// Long servicePort = null; +// IntOrString backendServicePort = backend.getServicePort(); +// if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { +// servicePort = TypeUtil.objToLong(backendServicePort); +// } else { +// if (devopsServiceDTO != null) { +// List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { +// }.getType()); +// servicePort = listPorts.get(0).getPort(); +// } +// } +// DevopsIngressPathVO devopsIngressPathVO = new DevopsIngressPathVO(); +// devopsIngressPathVO.setPath(path); +// devopsIngressPathVO.setServicePort(servicePort); +// devopsIngressPathVO.setServiceName(serviceName); +// devopsIngressPathVO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); +// devopsIngressPathVOS.add(devopsIngressPathVO); } devopsIngressVO.setPathList(devopsIngressPathVOS); return devopsIngressVO; diff --git a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java index 8db339498d..b3933c2767 100644 --- a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java +++ b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java @@ -44,7 +44,7 @@ public class ResourceConvertToYamlHandler { private static final String CONFIGMAPTAG = "!!io.kubernetes.client.models.V1ConfigMap"; private static final String SECRET = "!!io.kubernetes.client.models.V1Secret"; private static final String ENDPOINTS = "!!io.kubernetes.client.models.V1Endpoints"; - private static final String DEPLOYMENT = "!!io.kubernetes.client.models.V1beta2Deployment"; + private static final String DEPLOYMENT = "!!io.kubernetes.client.models.V1Deployment"; private static final List WORKLOAD_RESOURCE_TYPE = new ArrayList<>(); @Value(value = "${devops.deploy.enableDeleteBlankLine:true}") @@ -278,14 +278,14 @@ private void handleIngress(T t, Boolean deleteCert, String objectType, String op V1Ingress newV1Ingress; // 如果这个Ingress对象是被修改的对象 - if (objectType.equals(ResourceType.INGRESS.getType()) && v1beta1Ingress.getMetadata().getName().equals(((V1beta1Ingress) t).getMetadata().getName())) { + if (objectType.equals(ResourceType.INGRESS.getType()) && v1beta1Ingress.getMetadata().getName().equals(((V1Ingress) t).getMetadata().getName())) { if (operationType.equals(UPDATE)) { - newV1beta1Ingress = (V1beta1Ingress) t; + newV1Ingress = (V1Ingress) t; if (!deleteCert) { - if (newV1beta1Ingress.getSpec().getTls() != null && !newV1beta1Ingress.getSpec().getTls().isEmpty()) { - newV1beta1Ingress.getSpec().setTls(newV1beta1Ingress.getSpec().getTls()); + if (newV1Ingress.getSpec().getTls() != null && !newV1Ingress.getSpec().getTls().isEmpty()) { + newV1Ingress.getSpec().setTls(newV1Ingress.getSpec().getTls()); } else { - newV1beta1Ingress.getSpec().setTls(v1beta1Ingress.getSpec().getTls()); + newV1Ingress.getSpec().setTls(v1beta1Ingress.getSpec().getTls()); } } } else { @@ -294,10 +294,10 @@ private void handleIngress(T t, Boolean deleteCert, String objectType, String op } } else { // 如果不是,进行保留 - newV1beta1Ingress = v1beta1Ingress; + newV1Ingress = v1beta1Ingress; } Tag tag2 = new Tag(INGTAG); - resultBuilder.append("\n").append(getYamlObject(tag2, true).dump(newV1beta1Ingress).replace(INGTAG, "---")); + resultBuilder.append("\n").append(getYamlObject(tag2, true).dump(newV1Ingress).replace(INGTAG, "---")); } private void handleC7nHelmRelease(T t, String objectType, String operationType, StringBuilder diff --git a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java index 5db723cef3..ad9c4c88ff 100644 --- a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java @@ -1,6 +1,5 @@ package io.choerodon.devops.infra.util; -import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; @@ -245,7 +244,7 @@ public static String makePortString(List servicePorts) { * @param ingress ingress对象 * @return 空的不可修改的Set, 如果没有 */ - public static Set analyzeIngressServices(V1beta1Ingress ingress) { + public static Set analyzeIngressServices(V1Ingress ingress) { if (ingress == null || ingress.getSpec() == null) { return Collections.emptySet(); } @@ -256,17 +255,19 @@ public static Set analyzeIngressServices(V1beta1Ingress ingress) { if (rule.getHttp() != null && !CollectionUtils.isEmpty(rule.getHttp().getPaths())) { rule.getHttp().getPaths().forEach(path -> { if (path.getBackend() != null) { - services.add(path.getBackend().getServiceName()); + // TODO 兼容旧版本 +// services.add(path.getBackend().getServiceName()); } }); } }); } + // TODO 兼容旧版本 // 将默认的backend相关的service加入集合 - if (ingress.getSpec().getBackend() != null) { - services.add(ingress.getSpec().getBackend().getServiceName()); - } +// if (ingress.getSpec().getBackend() != null) { +// services.add(ingress.getSpec().getBackend().getServiceName()); +// } return services; } @@ -296,11 +297,11 @@ public static String makeTargetPortString(List servicePorts) { * @param v1beta1IngressRules ingress对象 * @return string */ - public static String formatHosts(List v1beta1IngressRules) { + public static String formatHosts(List v1beta1IngressRules) { List results = new ArrayList<>(); int max = 3; boolean more = false; - for (V1beta1IngressRule v1beta1IngressRule : v1beta1IngressRules) { + for (V1IngressRule v1beta1IngressRule : v1beta1IngressRules) { if (results.size() == max) { more = true; } @@ -324,7 +325,7 @@ public static String formatHosts(List v1beta1IngressRules) { * @param v1beta1IngressTLS ingress对象 * @return string */ - public static String formatPorts(List v1beta1IngressTLS) { + public static String formatPorts(List v1beta1IngressTLS) { if (v1beta1IngressTLS != null && !v1beta1IngressTLS.isEmpty()) { return "80,443"; } From 030e4019c506eb6f37bf883e615e3981d7930380 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 23 Aug 2022 00:18:25 +0800 Subject: [PATCH 222/228] =?UTF-8?q?[IMP]=20=E5=85=BC=E5=AE=B9ingress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/validator/DevopsIngressValidator.java | 2 +- .../api/validator/DevopsServiceValidator.java | 8 +- .../devops/api/vo/DevopsIngressPathVO.java | 6 +- .../payload/BatchDeploymentPayload.java | 10 + .../payload/IngressSagaPayload.java | 21 +- .../app/service/DevopsIngressService.java | 4 + .../impl/AgentMsgHandlerServiceImpl.java | 4 +- .../impl/AppServiceInstanceServiceImpl.java | 20 +- .../ConvertV1Beta1IngressServiceImpl.java | 128 +++++++++ .../impl/ConvertV1IngressServiceImpl.java | 29 +- .../impl/DevopsClusterServiceImpl.java | 2 +- .../service/impl/DevopsGitServiceImpl.java | 10 + .../impl/DevopsIngressServiceImpl.java | 269 ++++++++++++------ .../HandlerServiceRelationsServiceImpl.java | 4 +- ...erV1Beta1IngressRelationsServiceImpl.java} | 91 +++--- .../HandlerV1IngressRelationsServiceImpl.java | 238 ++++++++++++++++ .../infra/dto/DevopsIngressPathDTO.java | 10 +- .../choerodon/devops/infra/dto/PortMapVO.java | 24 +- .../devops/infra/enums/GitOpsObjectError.java | 1 + .../devops/infra/enums/ResourceType.java | 2 + .../enums/UserEnvSupportedResourceType.java | 3 +- .../client/models/V1beta1HTTPIngressPath.java | 83 ++++++ .../models/V1beta1HTTPIngressRuleValue.java | 73 +++++ .../client/models/V1beta1Ingress.java | 134 +++++++++ .../client/models/V1beta1IngressBackend.java | 87 ++++++ .../client/models/V1beta1IngressRule.java | 80 ++++++ .../client/models/V1beta1IngressSpec.java | 117 ++++++++ .../client/models/V1beta1IngressStatus.java | 64 +++++ .../client/models/V1beta1IngressTLS.java | 91 ++++++ .../client/openapi/models/V1Ingress.java | 216 ++++++++++++++ 30 files changed, 1650 insertions(+), 181 deletions(-) create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/ConvertV1Beta1IngressServiceImpl.java rename src/main/java/io/choerodon/devops/app/service/impl/{HandlerIngressRelationsServiceImpl.java => HandlerV1Beta1IngressRelationsServiceImpl.java} (78%) create mode 100644 src/main/java/io/choerodon/devops/app/service/impl/HandlerV1IngressRelationsServiceImpl.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressPath.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressRuleValue.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1Ingress.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1IngressBackend.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1IngressRule.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1IngressSpec.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1IngressStatus.java create mode 100644 src/main/java/io/kubernetes/client/models/V1beta1IngressTLS.java create mode 100644 src/main/java/io/kubernetes/client/openapi/models/V1Ingress.java diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsIngressValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsIngressValidator.java index 74cd64c7b8..3558c41d4b 100644 --- a/src/main/java/io/choerodon/devops/api/validator/DevopsIngressValidator.java +++ b/src/main/java/io/choerodon/devops/api/validator/DevopsIngressValidator.java @@ -71,7 +71,7 @@ public static void checkPathVO(DevopsIngressPathVO path) { } } - private static Boolean checkPort(Long port) { + private static Boolean checkPort(Integer port) { return port >= 0 && port <= 65535; } diff --git a/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java b/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java index 7b99d53ea8..85290aa0d7 100644 --- a/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java +++ b/src/main/java/io/choerodon/devops/api/validator/DevopsServiceValidator.java @@ -64,7 +64,7 @@ private static void checkPorts(PortMapVO port) { if (!checkPort(port.getPort())) { throw new CommonException("error.port.illegal"); } - if (!checkPort(Long.valueOf(port.getTargetPort()))) { + if (!checkPort(Integer.valueOf(port.getTargetPort()))) { throw new CommonException("error.targetPort.illegal"); } if (port.getNodePort() != null && !checkPort(port.getNodePort())) { @@ -73,7 +73,7 @@ private static void checkPorts(PortMapVO port) { } - private static Boolean checkPort(Long port) { + private static Boolean checkPort(Integer port) { return port >= 0 && port <= 65535; } @@ -92,7 +92,7 @@ private static void checkIPAndPortUnique(DevopsServiceReqVO devopsServiceReqVO, List portMapVOList = JsonHelper.unmarshalByJackson(s.getPorts(), new TypeReference>() { }); portMapVOList.forEach(portMapVO -> { - Long port = portMapVO.getPort(); + Integer port = portMapVO.getPort(); String externalIp = s.getExternalIp(); devopsServiceReqVO.getPorts().forEach(p -> { if (!ObjectUtils.isEmpty(devopsServiceReqVO.getExternalIp())) { @@ -113,7 +113,7 @@ private static void checkIPAndPortUnique(DevopsServiceReqVO devopsServiceReqVO, List portMapVOList = JsonHelper.unmarshalByJackson(s.getPorts(), new TypeReference>() { }); portMapVOList.forEach(portMapVO -> { - Long nodePort = portMapVO.getNodePort(); + Integer nodePort = portMapVO.getNodePort(); if (nodePort != null) { devopsServiceReqVO.getPorts().forEach(p -> { if (Objects.equals(nodePort, p.getNodePort())) { diff --git a/src/main/java/io/choerodon/devops/api/vo/DevopsIngressPathVO.java b/src/main/java/io/choerodon/devops/api/vo/DevopsIngressPathVO.java index 5b2420b674..633c547682 100644 --- a/src/main/java/io/choerodon/devops/api/vo/DevopsIngressPathVO.java +++ b/src/main/java/io/choerodon/devops/api/vo/DevopsIngressPathVO.java @@ -22,7 +22,7 @@ public class DevopsIngressPathVO { @ApiModelProperty("网络的错误信息") private String serviceError; @ApiModelProperty("网络端口") - private Long servicePort; + private Integer servicePort; public String getPath() { @@ -57,11 +57,11 @@ public void setServiceStatus(String serviceStatus) { this.serviceStatus = serviceStatus; } - public Long getServicePort() { + public Integer getServicePort() { return servicePort; } - public void setServicePort(Long servicePort) { + public void setServicePort(Integer servicePort) { this.servicePort = servicePort; } diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/BatchDeploymentPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/BatchDeploymentPayload.java index 9431b6fb29..df57ab05a2 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/BatchDeploymentPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/BatchDeploymentPayload.java @@ -32,6 +32,8 @@ public class BatchDeploymentPayload { @ApiModelProperty("域名相关信息,可为空,其中元素不需要环境的信息") private List ingressSagaPayloads; + private Boolean operateForOldIngress; + public Long getEnvId() { return envId; } @@ -87,4 +89,12 @@ public List getIngressSagaPayloads() { public void setIngressSagaPayloads(List ingressSagaPayloads) { this.ingressSagaPayloads = ingressSagaPayloads; } + + public Boolean getOperateForOldIngress() { + return operateForOldIngress; + } + + public void setOperateForOldIngress(Boolean operateForOldIngress) { + this.operateForOldIngress = operateForOldIngress; + } } diff --git a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java index fb10e2a379..f1e5ca40a9 100644 --- a/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java +++ b/src/main/java/io/choerodon/devops/app/eventhandler/payload/IngressSagaPayload.java @@ -1,6 +1,6 @@ package io.choerodon.devops.app.eventhandler.payload; -import io.kubernetes.client.openapi.models.V1Ingress; +import io.kubernetes.client.common.KubernetesObject; import io.choerodon.devops.infra.dto.DevopsEnvironmentDTO; import io.choerodon.devops.infra.dto.DevopsIngressDTO; @@ -15,7 +15,8 @@ public class IngressSagaPayload { private Boolean created; private DevopsEnvironmentDTO devopsEnvironmentDTO; private DevopsIngressDTO devopsIngressDTO; - private V1Ingress v1beta1Ingress; + private String ingressJson; + private Boolean operateForOldIngress; public IngressSagaPayload() { @@ -59,12 +60,12 @@ public void setDevopsIngressDTO(DevopsIngressDTO devopsIngressDTO) { this.devopsIngressDTO = devopsIngressDTO; } - public V1Ingress getV1Ingress() { - return v1beta1Ingress; + public String getIngressJson() { + return ingressJson; } - public void setV1Ingress(V1Ingress v1beta1Ingress) { - this.v1beta1Ingress = v1beta1Ingress; + public void setIngressJson(String ingressJson) { + this.ingressJson = ingressJson; } public Boolean getCreated() { @@ -74,4 +75,12 @@ public Boolean getCreated() { public void setCreated(Boolean created) { this.created = created; } + + public Boolean getOperateForOldIngress() { + return operateForOldIngress; + } + + public void setOperateForOldIngress(Boolean operateForOldIngress) { + this.operateForOldIngress = operateForOldIngress; + } } diff --git a/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java b/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java index 90c83bdddd..bdc410ae76 100644 --- a/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java +++ b/src/main/java/io/choerodon/devops/app/service/DevopsIngressService.java @@ -1,7 +1,10 @@ package io.choerodon.devops.app.service; +import org.apache.catalina.core.ApplicationContext; + import java.util.List; +import io.choerodon.asgard.common.ApplicationContextHelper; import io.choerodon.core.domain.Page; import io.choerodon.devops.api.vo.DevopsIngressVO; import io.choerodon.devops.app.eventhandler.payload.IngressSagaPayload; @@ -158,4 +161,5 @@ IngressSagaPayload createForBatchDeployment( void updateStatus(Long envId, String name, String status); + boolean operateForOldTypeIngress(Long clusterId); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java index f9f43d809e..f61482c6dc 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AgentMsgHandlerServiceImpl.java @@ -822,9 +822,9 @@ private void handleUpdateServiceMsg(String key, Long envId, String msg, DevopsEn private List getPortMapES(V1Service v1Service) { return v1Service.getSpec().getPorts().stream().map(v1ServicePort -> { PortMapVO portMapVO = new PortMapVO(); - portMapVO.setPort(TypeUtil.objToLong(v1ServicePort.getPort())); + portMapVO.setPort(v1ServicePort.getPort()); portMapVO.setTargetPort(TypeUtil.objToString(v1ServicePort.getTargetPort())); - portMapVO.setNodePort(TypeUtil.objToLong(v1ServicePort.getNodePort())); + portMapVO.setNodePort(v1ServicePort.getNodePort()); portMapVO.setProtocol(v1ServicePort.getProtocol()); portMapVO.setName(v1ServicePort.getName()); return portMapVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java index b6ad8090ee..b0e2bc8442 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/AppServiceInstanceServiceImpl.java @@ -3,6 +3,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; +import io.kubernetes.client.models.V1beta1Ingress; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.V1Ingress; import io.kubernetes.client.openapi.models.V1Service; @@ -2218,11 +2219,20 @@ public void batchDeploymentSaga(BatchDeploymentPayload batchDeploymentPayload) { } for (IngressSagaPayload ingressSagaPayload : batchDeploymentPayload.getIngressSagaPayloads()) { - ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); - ingressResourceConvertToYamlHandler.setType(ingressSagaPayload.getV1Ingress()); - String ingressContent = ingressResourceConvertToYamlHandler.getCreationResourceContentForBatchDeployment(); - String fileName = GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName() + GitOpsConstants.YAML_FILE_SUFFIX; - pathContentMap.put(fileName, ingressContent); + if (batchDeploymentPayload.getOperateForOldIngress()) { + ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + ingressResourceConvertToYamlHandler.setType(JsonHelper.unmarshalByJackson(ingressSagaPayload.getIngressJson(), V1beta1Ingress.class)); + String ingressContent = ingressResourceConvertToYamlHandler.getCreationResourceContentForBatchDeployment(); + String fileName = GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName() + GitOpsConstants.YAML_FILE_SUFFIX; + pathContentMap.put(fileName, ingressContent); + } else { + ResourceConvertToYamlHandler ingressResourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + ingressResourceConvertToYamlHandler.setType(JsonHelper.unmarshalByJackson(ingressSagaPayload.getIngressJson(), V1Ingress.class)); + String ingressContent = ingressResourceConvertToYamlHandler.getCreationResourceContentForBatchDeployment(); + String fileName = GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName() + GitOpsConstants.YAML_FILE_SUFFIX; + pathContentMap.put(fileName, ingressContent); + } + } gitlabServiceClientOperator.createGitlabFiles( diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1Beta1IngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1Beta1IngressServiceImpl.java new file mode 100644 index 0000000000..d9db138e42 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1Beta1IngressServiceImpl.java @@ -0,0 +1,128 @@ +package io.choerodon.devops.app.service.impl; + +import io.kubernetes.client.models.V1beta1HTTPIngressPath; +import io.kubernetes.client.models.V1beta1Ingress; +import io.kubernetes.client.models.V1beta1IngressRule; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Map; + +import io.choerodon.devops.api.validator.DevopsIngressValidator; +import io.choerodon.devops.app.service.DevopsEnvFileResourceService; +import io.choerodon.devops.app.service.DevopsIngressService; +import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; +import io.choerodon.devops.infra.dto.DevopsIngressDTO; +import io.choerodon.devops.infra.enums.GitOpsObjectError; +import io.choerodon.devops.infra.enums.ResourceType; +import io.choerodon.devops.infra.exception.GitOpsExplainException; +import io.choerodon.devops.infra.util.TypeUtil; + +@Component +public class ConvertV1Beta1IngressServiceImpl extends ConvertK8sObjectService { + @Autowired + private DevopsIngressService devopsIngressService; + @Autowired + private DevopsEnvFileResourceService devopsEnvFileResourceService; + + public ConvertV1Beta1IngressServiceImpl() { + super(V1beta1Ingress.class); + } + + @Override + public void checkIfExist(List v1beta1Ingresses, Long + envId, List beforeSyncDelete, Map objectPath, V1beta1Ingress + v1beta1Ingress) { + String filePath = objectPath.get(TypeUtil.objToString(v1beta1Ingress.hashCode())); + DevopsIngressDTO devopsIngressDTO = devopsIngressService.baseCheckByEnvAndName(envId, v1beta1Ingress.getMetadata().getName()); + if (devopsIngressDTO != null + && beforeSyncDelete.stream() + .filter(devopsEnvFileResourceDTO -> devopsEnvFileResourceDTO.getResourceType().equals(v1beta1Ingress.getKind())) + .noneMatch(devopsEnvFileResourceDTO -> devopsEnvFileResourceDTO.getResourceId().equals(devopsIngressDTO.getId()))) { + DevopsEnvFileResourceDTO devopsEnvFileResourceDTO = devopsEnvFileResourceService.baseQueryByEnvIdAndResourceId(envId, devopsIngressDTO.getId(), v1beta1Ingress.getKind()); + if (devopsEnvFileResourceDTO != null && !devopsEnvFileResourceDTO.getFilePath().equals(objectPath.get(TypeUtil.objToString(v1beta1Ingress.hashCode())))) { + throw new GitOpsExplainException(GitOpsObjectError.OBJECT_EXIST.getError(), filePath, v1beta1Ingress.getMetadata().getName()); + } + } + if (v1beta1Ingresses.stream().anyMatch(v1beta1Ingress1 -> v1beta1Ingress1.getMetadata().getName().equals(v1beta1Ingress.getMetadata().getName()))) { + throw new GitOpsExplainException(GitOpsObjectError.OBJECT_EXIST.getError(), filePath, v1beta1Ingress.getMetadata().getName()); + } else { + v1beta1Ingresses.add(v1beta1Ingress); + } + } + + @Override + public ResourceType getType() { + return ResourceType.V1BETA1_INGRESS; + } + + @Override + public void checkParameters(V1beta1Ingress v1beta1Ingress, Map objectPath) { + String filePath = objectPath.get(TypeUtil.objToString(v1beta1Ingress.hashCode())); + if (v1beta1Ingress.getMetadata() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_META_DATA_NOT_FOUND.getError(), filePath); + } else { + if (v1beta1Ingress.getMetadata().getName() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_NAME_NOT_FOUND.getError(), filePath); + } + } + if (v1beta1Ingress.getSpec() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_SPEC_NOT_FOUND.getError(), filePath); + } else { + checkV1beta1IngressRules(v1beta1Ingress, filePath); + } + if (v1beta1Ingress.getApiVersion() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_API_VERSION_NOT_FOUND.getError(), filePath); + } + if (v1beta1Ingress.getMetadata().getAnnotations() != null) { + DevopsIngressValidator.checkAnnotationsForGitOps(v1beta1Ingress.getMetadata().getAnnotations(), filePath); + } + } + + + private void checkV1beta1IngressRules(V1beta1Ingress v1beta1Ingress, String filePath) { + List v1beta1IngressRules = v1beta1Ingress.getSpec().getRules(); + if (v1beta1IngressRules.isEmpty()) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULES_NOT_FOUND.getError(), filePath); + } else { + for (V1beta1IngressRule v1beta1IngressRule : v1beta1IngressRules) { + if (v1beta1IngressRule.getHost() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULE_HOST_NOT_FOUND.getError(), filePath); + } + if (v1beta1IngressRule.getHttp() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_RULE_HTTP_NOT_FOUND.getError(), filePath); + } else { + checkV1beta1HTTPIngressPaths(v1beta1IngressRule, filePath); + } + } + } + } + + private void checkV1beta1HTTPIngressPaths(V1beta1IngressRule v1beta1IngressRule, String filePath) { + List v1Beta1HTTPIngressPaths = v1beta1IngressRule.getHttp().getPaths(); + if (v1Beta1HTTPIngressPaths.isEmpty()) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_NOT_FOUND.getError(), filePath); + } else { + for (V1beta1HTTPIngressPath v1beta1HTTPIngressPath : v1Beta1HTTPIngressPaths) { + if (v1beta1HTTPIngressPath.getPath() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_PATH_NOT_FOUND.getError(), filePath); + } + if (v1beta1HTTPIngressPath.getBackend() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_BACKEND_NOT_FOUND.getError(), filePath); + } else { + checkBackend(v1beta1HTTPIngressPath, filePath); + } + } + } + } + + private void checkBackend(V1beta1HTTPIngressPath v1beta1HTTPIngressPath, String filePath) { + if (v1beta1HTTPIngressPath.getBackend().getServiceName() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_NAME_NOT_FOUND.getError(), filePath); + } + if (v1beta1HTTPIngressPath.getBackend().getServicePort() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_PORT_NOT_FOUND.getError(), filePath); + } + } +} \ No newline at end of file diff --git a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java index 2483fd647c..87f664ffa4 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/ConvertV1IngressServiceImpl.java @@ -1,14 +1,14 @@ package io.choerodon.devops.app.service.impl; -import io.kubernetes.client.openapi.models.V1HTTPIngressPath; -import io.kubernetes.client.openapi.models.V1Ingress; -import io.kubernetes.client.openapi.models.V1IngressRule; +import io.kubernetes.client.openapi.models.*; +import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.List; import java.util.Map; +import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.validator.DevopsIngressValidator; import io.choerodon.devops.app.service.DevopsEnvFileResourceService; import io.choerodon.devops.app.service.DevopsIngressService; @@ -52,7 +52,7 @@ public void checkIfExist(List v1beta1Ingresses, Long envId, List v1HTTPIngressPaths = v1beta1IngressRule.getHttp().getPaths(); + V1HTTPIngressRuleValue http = v1beta1IngressRule.getHttp(); + if (http == null) { + throw new CommonException(GitOpsObjectError.INGRESS_PATHS_NOT_FOUND.getError(), filePath); + } + List v1HTTPIngressPaths = http.getPaths(); if (v1HTTPIngressPaths.isEmpty()) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATHS_NOT_FOUND.getError(), filePath); } else { @@ -116,12 +120,13 @@ private void checkV1HTTPIngressPaths(V1IngressRule v1beta1IngressRule, String fi } private void checkBackend(V1HTTPIngressPath v1beta1HTTPIngressPath, String filePath) { - // TODO 兼容旧版本 -// if (v1beta1HTTPIngressPath.getBackend().getServiceName() == null) { -// throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_NAME_NOT_FOUND.getError(), filePath); -// } -// if (v1beta1HTTPIngressPath.getBackend().getServicePort() == null) { -// throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_PORT_NOT_FOUND.getError(), filePath); -// } + V1IngressServiceBackend v1IngressServiceBackend = v1beta1HTTPIngressPath.getBackend().getService(); + if (v1IngressServiceBackend == null || ObjectUtils.isEmpty(v1IngressServiceBackend.getName())) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_NAME_NOT_FOUND.getError(), filePath); + } + V1ServiceBackendPort port = v1IngressServiceBackend.getPort(); + if (port == null || port.getNumber() == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_BACKEND_SERVICE_PORT_NOT_FOUND.getError(), filePath); + } } } \ No newline at end of file diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java index 1b53e046cf..4d4fbea582 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsClusterServiceImpl.java @@ -145,7 +145,7 @@ public ClusterSummaryInfoVO queryClusterSummaryInfo(Long clusterId) { * @param clusterId 集群id * @return key */ - private String renderClusterInfoRedisKey(Long clusterId) { + public static String renderClusterInfoRedisKey(Long clusterId) { return String.format(CLUSTER_INFO_KEY_TEMPLATE, Objects.requireNonNull(clusterId)); } diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java index 86788fc14b..fc541a7f2c 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsGitServiceImpl.java @@ -149,6 +149,8 @@ public class DevopsGitServiceImpl implements DevopsGitService { private AppExternalConfigService appExternalConfigService; @Autowired private DevopsBranchMapper devopsBranchMapper; + @Autowired + private DevopsIngressService devopsIngressService; /** * 初始化转换类和处理关系的类 @@ -970,6 +972,14 @@ private Map convertFileToK8sObjects(List files, && isPvcTreatedAsCustomizeResourceBefore(envId, getPersistentVolumeClaimName(jsonObject, filePath))) { // 0.20版本之前被作为自定义资源解析的PVC仍然作为自定义资源看待 currentHandler = converters.get(ResourceType.MISSTYPE.getType()); + } else if (ResourceType.INGRESS.getType().equals(type)) { + DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(envId); + boolean operateForOldTypeIngress = devopsIngressService.operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + if (operateForOldTypeIngress) { + currentHandler = converters.get(ResourceType.V1BETA1_INGRESS.getType()); + } else { + currentHandler = converters.get(ResourceType.V1_INGRESS.getType()); + } } else { currentHandler = converters.get(type); if (currentHandler == null) { diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index 64a608cf05..db6310d127 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -2,6 +2,9 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; +import io.kubernetes.client.common.KubernetesObject; +import io.kubernetes.client.custom.IntOrString; +import io.kubernetes.client.models.*; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; @@ -9,6 +12,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -26,6 +30,7 @@ import io.choerodon.core.exception.CommonException; import io.choerodon.core.iam.ResourceLevel; import io.choerodon.devops.api.validator.DevopsIngressValidator; +import io.choerodon.devops.api.vo.ClusterSummaryInfoVO; import io.choerodon.devops.api.vo.DevopsIngressPathVO; import io.choerodon.devops.api.vo.DevopsIngressVO; import io.choerodon.devops.api.vo.DevopsServiceVO; @@ -101,6 +106,8 @@ public class DevopsIngressServiceImpl implements DevopsIngressService, ChartReso private SendNotificationService sendNotificationService; @Autowired PermissionHelper permissionHelper; + @Autowired + private RedisTemplate redisTemplate; private JSON json = new JSON(); @@ -141,18 +148,19 @@ public void createIngress(Long projectId, DevopsIngressVO devopsIngressVO) { } } - // 初始化V1Ingress对象 + boolean operateForOldIngress = operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + // 初始化Ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + KubernetesObject ingress = initIngressByK8sVersion(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations(), operateForOldIngress); // 处理创建域名数据 - DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); + DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, ingress, operateForOldIngress); DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(CREATE); // 在gitops库处理ingress文件 operateEnvGitLabFile( - TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), false, v1beta1Ingress, true, null, devopsIngressDO, userAttrDTO, devopsEnvCommandDTO, appServiceIds); + TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), false, ingress, true, null, devopsIngressDO, userAttrDTO, devopsEnvCommandDTO, appServiceIds, operateForOldIngress); } @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED) @@ -174,12 +182,14 @@ public IngressSagaPayload createForBatchDeployment(DevopsEnvironmentDTO devopsEn } } - // 初始化V1Ingress对象 + boolean operateForOldIngress = operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + + // 初始化ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + KubernetesObject ingress = initIngressByK8sVersion(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations(), operateForOldIngress); // 处理创建域名数据 - DevopsIngressDTO devopsIngressDTO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); + DevopsIngressDTO devopsIngressDTO = handlerIngress(devopsIngressVO, projectId, ingress, operateForOldIngress); DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(CREATE); @@ -192,7 +202,7 @@ public IngressSagaPayload createForBatchDeployment(DevopsEnvironmentDTO devopsEn IngressSagaPayload ingressSagaPayload = new IngressSagaPayload(devopsEnvironmentDTO.getProjectId(), userAttrDTO.getGitlabUserId()); ingressSagaPayload.setDevopsIngressDTO(devopsIngressDTO); ingressSagaPayload.setCreated(true); - ingressSagaPayload.setV1Ingress(v1beta1Ingress); + ingressSagaPayload.setIngressJson(JsonHelper.marshalByJackson(ingress)); ingressSagaPayload.setDevopsEnvironmentDTO(devopsEnvironmentDTO); return ingressSagaPayload; } @@ -229,11 +239,13 @@ public void createIngressByGitOps(DevopsIngressVO devopsIngressVO, Long projectI clusterConnectionHandler.checkEnvConnection(devopsEnvironmentDTO.getClusterId()); - // 初始化V1Ingress对象 + boolean operateForOldIngress = operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + + // 初始化ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + KubernetesObject v1beta1Ingress = initIngressByK8sVersion(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations(), operateForOldIngress); // 处理域名数据 - DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); + DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress, operateForOldIngress); DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(CREATE); @@ -298,13 +310,15 @@ public void updateIngress(Long id, DevopsIngressVO devopsIngressVO, Long project DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(UPDATE); - // 初始化V1Ingress对象 + boolean operateForOldIngress = operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + + // 初始化ingress对象 String certName = getCertName(devopsIngressVO.getCertId()); - V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + KubernetesObject v1beta1Ingress = initIngressByK8sVersion(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations(), operateForOldIngress); // 处理域名数据 devopsIngressVO.setId(id); - DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); + DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress, operateForOldIngress); // 判断当前容器目录下是否存在环境对应的gitops文件目录,不存在则克隆 @@ -312,7 +326,7 @@ public void updateIngress(Long id, DevopsIngressVO devopsIngressVO, Long project //在gitops库处理ingress文件 operateEnvGitLabFile( - TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), deleteCert, v1beta1Ingress, false, path, devopsIngressDO, userAttrDTO, devopsEnvCommandDTO, appServiceIds); + TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), deleteCert, v1beta1Ingress, false, path, devopsIngressDO, userAttrDTO, devopsEnvCommandDTO, appServiceIds, operateForOldIngress); } /** @@ -339,13 +353,15 @@ public void updateIngressByGitOps(Long id, DevopsIngressVO devopsIngressVO, Long return; } - // 初始化V1Ingress对象 + boolean operateForOldIngress = operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId()); + + // 初始化ingress对象 String certName = devopsIngressVO.getCertName(); - V1Ingress v1beta1Ingress = initV1Ingress(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations()); + KubernetesObject v1beta1Ingress = initIngressByK8sVersion(devopsIngressVO.getDomain(), devopsIngressVO.getName(), certName, devopsIngressVO.getAnnotations(), operateForOldIngress); // 处理域名数据 devopsIngressVO.setId(id); - DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress); + DevopsIngressDTO devopsIngressDO = handlerIngress(devopsIngressVO, projectId, v1beta1Ingress, operateForOldIngress); DevopsEnvCommandDTO devopsEnvCommandDTO = initDevopsEnvCommandDTO(UPDATE); @@ -546,66 +562,123 @@ public Boolean checkDomainAndPath(Long envId, String domain, String path, Long i return baseCheckPath(envId, domain, path, id); } - private V1HTTPIngressPath createPath(String hostPath, String serviceName, Long port) { + private V1HTTPIngressPath createV1Path(String hostPath, String serviceName, Integer port) { V1HTTPIngressPath path = new V1HTTPIngressPath(); - V1IngressBackend backend = new V1IngressBackend(); - // TODO 兼容旧版本 -// backend.setServiceName(serviceName.toLowerCase()); -// if (port != null) { -// backend.setServicePort(new IntOrString(port.intValue())); -// } + V1IngressBackend v1IngressBackend = new V1IngressBackend(); + V1IngressServiceBackend v1IngressServiceBackend = new V1IngressServiceBackend(); + V1ServiceBackendPort v1ServiceBackendPort = new V1ServiceBackendPort(); + v1IngressBackend.setService(v1IngressServiceBackend); + v1IngressServiceBackend.setPort(v1ServiceBackendPort); + + + v1IngressServiceBackend.setName(serviceName.toLowerCase()); + + if (port != null) { + v1ServiceBackendPort.setNumber(port); + } + + path.setBackend(v1IngressBackend); + path.setPath(hostPath); + return path; + } + + private V1beta1HTTPIngressPath createV1Beta1Path(String hostPath, String serviceName, Integer port) { + V1beta1HTTPIngressPath path = new V1beta1HTTPIngressPath(); + V1beta1IngressBackend backend = new V1beta1IngressBackend(); + backend.setServiceName(serviceName.toLowerCase()); + if (port != null) { + backend.setServicePort(new IntOrString(port.intValue())); + } path.setBackend(backend); path.setPath(hostPath); return path; } - private V1Ingress initV1Ingress(String host, String name, @Nullable String certName, @Nullable Map annotations) { - V1Ingress ingress = new V1Ingress(); - ingress.setKind(INGRESS); - ingress.setApiVersion("extensions/v1beta1"); - V1ObjectMeta metadata = new V1ObjectMeta(); - metadata.setName(name); - Map labels = new HashMap<>(); - labels.put("choerodon.io/network", "ingress"); - - metadata.setLabels(labels); - metadata.setAnnotations(annotations == null ? new HashMap<>() : annotations); - ingress.setMetadata(metadata); - V1IngressSpec spec = new V1IngressSpec(); - - List rules = new ArrayList<>(); - V1IngressRule rule = new V1IngressRule(); - V1HTTPIngressRuleValue http = new V1HTTPIngressRuleValue(); - List paths = new ArrayList<>(); - http.setPaths(paths); - rule.setHost(host); - rule.setHttp(http); - rules.add(rule); - spec.setRules(rules); - - if (certName != null) { - List tlsList = new ArrayList<>(); - V1IngressTLS tls = new V1IngressTLS(); - tls.addHostsItem(host); - tls.setSecretName(certName); - tlsList.add(tls); - spec.setTls(tlsList); - } + private KubernetesObject initIngressByK8sVersion(String host, String name, @Nullable String certName, @Nullable Map annotations, boolean operateForOldIngress) { + if (operateForOldIngress) { + V1beta1Ingress ingress = new V1beta1Ingress(); + ingress.setKind(INGRESS); + ingress.setApiVersion("extensions/v1beta1"); + V1ObjectMeta metadata = new V1ObjectMeta(); + metadata.setName(name); + Map labels = new HashMap<>(); + labels.put("choerodon.io/network", "ingress"); + + metadata.setLabels(labels); + metadata.setAnnotations(annotations == null ? new HashMap<>() : annotations); + ingress.setMetadata(metadata); + V1beta1IngressSpec spec = new V1beta1IngressSpec(); + + List rules = new ArrayList<>(); + V1beta1IngressRule rule = new V1beta1IngressRule(); + V1beta1HTTPIngressRuleValue http = new V1beta1HTTPIngressRuleValue(); + List paths = new ArrayList<>(); + http.setPaths(paths); + rule.setHost(host); + rule.setHttp(http); + rules.add(rule); + spec.setRules(rules); + + if (certName != null) { + List tlsList = new ArrayList<>(); + V1beta1IngressTLS tls = new V1beta1IngressTLS(); + tls.addHostsItem(host); + tls.setSecretName(certName); + tlsList.add(tls); + spec.setTls(tlsList); + } - ingress.setSpec(spec); - return ingress; + ingress.setSpec(spec); + return ingress; + } else { + V1Ingress ingress = new V1Ingress(); + ingress.setKind(INGRESS); + ingress.setApiVersion("networking.k8s.io/v1"); + V1ObjectMeta metadata = new V1ObjectMeta(); + metadata.setName(name); + Map labels = new HashMap<>(); + labels.put("choerodon.io/network", "ingress"); + + metadata.setLabels(labels); + metadata.setAnnotations(annotations == null ? new HashMap<>() : annotations); + ingress.setMetadata(metadata); + V1IngressSpec spec = new V1IngressSpec(); + + List rules = new ArrayList<>(); + V1IngressRule rule = new V1IngressRule(); + V1HTTPIngressRuleValue http = new V1HTTPIngressRuleValue(); + List paths = new ArrayList<>(); + http.setPaths(paths); + rule.setHost(host); + rule.setHttp(http); + rules.add(rule); + spec.setRules(rules); + + if (certName != null) { + List tlsList = new ArrayList<>(); + V1IngressTLS tls = new V1IngressTLS(); + tls.addHostsItem(host); + tls.setSecretName(certName); + tlsList.add(tls); + spec.setTls(tlsList); + } + + ingress.setSpec(spec); + return ingress; + } } private void operateEnvGitLabFile(Integer envGitLabProjectId, Boolean deleteCert, - V1Ingress ingress, + KubernetesObject ingress, Boolean isCreate, String path, DevopsIngressDTO devopsIngressDTO, UserAttrDTO userAttrDTO, DevopsEnvCommandDTO devopsEnvCommandDTO, - Set appServiceIds) { + Set appServiceIds, + boolean operateForOldIngress) { DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(devopsIngressDTO.getEnvId()); @@ -626,8 +699,9 @@ private void operateEnvGitLabFile(Integer envGitLabProjectId, IngressSagaPayload ingressSagaPayload = new IngressSagaPayload(devopsEnvironmentDTO.getProjectId(), userAttrDTO.getGitlabUserId()); ingressSagaPayload.setDevopsIngressDTO(devopsIngressDTO); ingressSagaPayload.setCreated(isCreate); - ingressSagaPayload.setV1Ingress(ingress); + ingressSagaPayload.setIngressJson(JsonHelper.marshalByJackson(ingress)); ingressSagaPayload.setDevopsEnvironmentDTO(devopsEnvironmentDTO); + ingressSagaPayload.setOperateForOldIngress(operateForOldIngress); producer.apply( StartSagaBuilder @@ -658,17 +732,30 @@ public void operateIngressBySaga(IngressSagaPayload ingressSagaPayload) { ingressSagaPayload.getDevopsEnvironmentDTO().getClusterCode()); } //在gitops库处理instance文件 - ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); - resourceConvertToYamlHandler.setType(ingressSagaPayload.getV1Ingress()); - - resourceConvertToYamlHandler.operationEnvGitlabFile( - GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName(), - ingressSagaPayload.getDevopsEnvironmentDTO().getGitlabEnvProjectId().intValue(), - ingressSagaPayload.getCreated() ? CREATE : UPDATE, - ingressSagaPayload.getGitlabUserId(), - ingressSagaPayload.getDevopsIngressDTO().getId(), INGRESS, null, false, ingressSagaPayload.getDevopsEnvironmentDTO().getId(), filePath); - if (ingressSagaPayload.getCreated()) { - sendNotificationService.sendWhenIngressSuccessOrDelete(ingressSagaPayload.getDevopsIngressDTO(), SendSettingEnum.CREATE_RESOURCE.value()); + if (ingressSagaPayload.getOperateForOldIngress()) { + ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + resourceConvertToYamlHandler.setType(JsonHelper.unmarshalByJackson(ingressSagaPayload.getIngressJson(), V1beta1Ingress.class)); + resourceConvertToYamlHandler.operationEnvGitlabFile( + GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName(), + ingressSagaPayload.getDevopsEnvironmentDTO().getGitlabEnvProjectId().intValue(), + ingressSagaPayload.getCreated() ? CREATE : UPDATE, + ingressSagaPayload.getGitlabUserId(), + ingressSagaPayload.getDevopsIngressDTO().getId(), INGRESS, null, false, ingressSagaPayload.getDevopsEnvironmentDTO().getId(), filePath); + if (ingressSagaPayload.getCreated()) { + sendNotificationService.sendWhenIngressSuccessOrDelete(ingressSagaPayload.getDevopsIngressDTO(), SendSettingEnum.CREATE_RESOURCE.value()); + } + } else { + ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + resourceConvertToYamlHandler.setType(JsonHelper.unmarshalByJackson(ingressSagaPayload.getIngressJson(), V1Ingress.class)); + resourceConvertToYamlHandler.operationEnvGitlabFile( + GitOpsConstants.INGRESS_PREFIX + ingressSagaPayload.getDevopsIngressDTO().getName(), + ingressSagaPayload.getDevopsEnvironmentDTO().getGitlabEnvProjectId().intValue(), + ingressSagaPayload.getCreated() ? CREATE : UPDATE, + ingressSagaPayload.getGitlabUserId(), + ingressSagaPayload.getDevopsIngressDTO().getId(), INGRESS, null, false, ingressSagaPayload.getDevopsEnvironmentDTO().getId(), filePath); + if (ingressSagaPayload.getCreated()) { + sendNotificationService.sendWhenIngressSuccessOrDelete(ingressSagaPayload.getDevopsIngressDTO(), SendSettingEnum.CREATE_RESOURCE.value()); + } } } catch (Exception e) { LOGGER.info("create or update Ingress failed!", e); @@ -696,7 +783,7 @@ public void operateIngressBySaga(IngressSagaPayload ingressSagaPayload) { } - private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long projectId, V1Ingress v1beta1Ingress) { + private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long projectId, KubernetesObject ingress, boolean operateForOldIngress) { Long envId = devopsIngressVO.getEnvId(); String ingressName = devopsIngressVO.getName(); DevopsIngressValidator.checkIngressName(ingressName); @@ -705,8 +792,8 @@ private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long pr //初始化ingressDO对象 DevopsIngressDTO devopsIngressDO = new DevopsIngressDTO(devopsIngressVO.getId(), projectId, envId, domain, ingressName, IngressStatus.OPERATING.getStatus()); - if (v1beta1Ingress.getMetadata().getAnnotations() != null) { - String annotations = gson.toJson(v1beta1Ingress.getMetadata().getAnnotations()); + if (ingress.getMetadata().getAnnotations() != null) { + String annotations = gson.toJson(ingress.getMetadata().getAnnotations()); // 避免数据比数据库结构的size还大 if (annotations.length() > 2000) { throw new CommonException("error.ingress.annotations.too.large"); @@ -715,7 +802,7 @@ private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long pr } //处理pathlist,生成域名和service的关联对象列表 - List devopsIngressPathDTOS = handlerPathList(devopsIngressVO.getPathList(), devopsIngressVO, v1beta1Ingress); + List devopsIngressPathDTOS = handlerPathList(devopsIngressVO.getPathList(), devopsIngressVO, ingress, operateForOldIngress); //校验域名的domain和path是否在数据库中已存在 if (devopsIngressPathDTOS.stream().noneMatch( @@ -728,7 +815,7 @@ private DevopsIngressDTO handlerIngress(DevopsIngressVO devopsIngressVO, Long pr } - private List handlerPathList(List pathList, DevopsIngressVO devopsIngressVO, V1Ingress v1beta1Ingress) { + private List handlerPathList(List pathList, DevopsIngressVO devopsIngressVO, KubernetesObject ingress, boolean operateForOldIngress) { if (pathList == null || pathList.isEmpty()) { throw new CommonException(PATH_ERROR); } @@ -736,7 +823,7 @@ private List handlerPathList(List pat List pathCheckList = new ArrayList<>(); pathList.forEach(t -> { Long serviceId = t.getServiceId(); - Long servicePort = t.getServicePort(); + Integer servicePort = t.getServicePort(); String hostPath = t.getPath(); if (hostPath == null) { @@ -753,8 +840,16 @@ private List handlerPathList(List pat devopsIngressPathDTOS.add(new DevopsIngressPathDTO( devopsIngressVO.getId(), hostPath, devopsServiceDTO == null ? null : devopsServiceDTO.getId(), devopsServiceDTO == null ? t.getServiceName() : devopsServiceDTO.getName(), servicePort)); - v1beta1Ingress.getSpec().getRules().get(0).getHttp().addPathsItem( - createPath(hostPath, t.getServiceName(), servicePort)); + if (operateForOldIngress) { + V1beta1Ingress v1beta1Ingress = (V1beta1Ingress) ingress; + v1beta1Ingress.getSpec().getRules().get(0).getHttp().addPathsItem( + createV1Beta1Path(hostPath, t.getServiceName(), servicePort)); + } else { + V1Ingress v1Ingress = (V1Ingress) ingress; + v1Ingress.getSpec().getRules().get(0).getHttp().addPathsItem( + createV1Path(hostPath, t.getServiceName(), servicePort)); + } + }); return devopsIngressPathDTOS; } @@ -1074,6 +1169,18 @@ public ResourceType getType() { return ResourceType.INGRESS; } + @Override + public boolean operateForOldTypeIngress(Long clusterId) { + ClusterSummaryInfoVO clusterSummaryInfoVO = JsonHelper.unmarshalByJackson(redisTemplate.opsForValue().get(DevopsClusterServiceImpl.renderClusterInfoRedisKey(clusterId)), ClusterSummaryInfoVO.class); + String[] split = clusterSummaryInfoVO.getVersion().split("\\."); + int minorVersion = Integer.parseInt(split[1]); + if (minorVersion <= 21) { + return true; + } else { + return false; + } + } + private DevopsIngressDTO getDevopsIngressDTO(V1Ingress v1beta1Ingress, Long envId) { DevopsIngressDTO devopsIngressDTO = new DevopsIngressDTO(); devopsIngressDTO.setDomain(v1beta1Ingress.getSpec().getRules().get(0).getHost() diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java index bc569dce68..c64235840e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerServiceRelationsServiceImpl.java @@ -205,9 +205,9 @@ private DevopsServiceReqVO getDevopsServiceDTO(V1Service v1Service, PortMapVO portMap = new PortMapVO(); portMap.setName(t.getName()); if (t.getNodePort() != null) { - portMap.setNodePort(t.getNodePort().longValue()); + portMap.setNodePort(t.getNodePort()); } - portMap.setPort(t.getPort().longValue()); + portMap.setPort(t.getPort()); portMap.setProtocol(t.getProtocol()); portMap.setTargetPort(TypeUtil.objToString(t.getTargetPort())); return portMap; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerV1Beta1IngressRelationsServiceImpl.java similarity index 78% rename from src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java rename to src/main/java/io/choerodon/devops/app/service/impl/HandlerV1Beta1IngressRelationsServiceImpl.java index 1e567c287c..566744fb9e 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/HandlerIngressRelationsServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerV1Beta1IngressRelationsServiceImpl.java @@ -1,10 +1,12 @@ package io.choerodon.devops.app.service.impl; +import com.google.common.reflect.TypeToken; import com.google.gson.Gson; +import io.kubernetes.client.custom.IntOrString; +import io.kubernetes.client.models.V1beta1HTTPIngressPath; +import io.kubernetes.client.models.V1beta1Ingress; +import io.kubernetes.client.models.V1beta1IngressBackend; import io.kubernetes.client.openapi.models.V1Endpoints; -import io.kubernetes.client.openapi.models.V1HTTPIngressPath; -import io.kubernetes.client.openapi.models.V1Ingress; -import io.kubernetes.client.openapi.models.V1IngressBackend; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -20,9 +22,7 @@ import io.choerodon.devops.api.vo.DevopsIngressPathVO; import io.choerodon.devops.api.vo.DevopsIngressVO; import io.choerodon.devops.app.service.*; -import io.choerodon.devops.infra.dto.DevopsEnvCommandDTO; -import io.choerodon.devops.infra.dto.DevopsEnvFileResourceDTO; -import io.choerodon.devops.infra.dto.DevopsIngressDTO; +import io.choerodon.devops.infra.dto.*; import io.choerodon.devops.infra.enums.GitOpsObjectError; import io.choerodon.devops.infra.exception.GitOpsExplainException; import io.choerodon.devops.infra.util.GitOpsUtil; @@ -30,7 +30,7 @@ import io.choerodon.devops.infra.util.TypeUtil; @Service -public class HandlerIngressRelationsServiceImpl implements HandlerObjectFileRelationsService { +public class HandlerV1Beta1IngressRelationsServiceImpl implements HandlerObjectFileRelationsService { public static final String INGRESS = "Ingress"; private static final String GIT_SUFFIX = "/.git"; private static final Pattern PATTERN = Pattern.compile("^[-+]?[\\d]*$"); @@ -46,7 +46,7 @@ public class HandlerIngressRelationsServiceImpl implements HandlerObjectFileRela @Override - public void handlerRelations(Map objectPath, List beforeSync, List v1beta1Ingresses, List v1Endpoints, Long envId, Long projectId, String path, Long userId) { + public void handlerRelations(Map objectPath, List beforeSync, List v1beta1Ingresses, List v1Endpoints, Long envId, Long projectId, String path, Long userId) { List beforeIngress = beforeSync.stream() .filter(devopsEnvFileResourceE -> devopsEnvFileResourceE.getResourceType().equals(INGRESS)) .map(devopsEnvFileResourceE -> { @@ -62,9 +62,9 @@ public void handlerRelations(Map objectPath, List addV1Ingress = new ArrayList<>(); - List updateV1Ingress = new ArrayList<>(); - GitOpsUtil.pickCUDResource(beforeIngress, v1beta1Ingresses, addV1Ingress, updateV1Ingress, v1beta1Ingress -> v1beta1Ingress.getMetadata().getName()); + List addV1beta1Ingress = new ArrayList<>(); + List updateV1beta1Ingress = new ArrayList<>(); + GitOpsUtil.pickCUDResource(beforeIngress, v1beta1Ingresses, addV1beta1Ingress, updateV1beta1Ingress, v1beta1Ingress -> v1beta1Ingress.getMetadata().getName()); //删除ingress,删除文件对象关联关系 beforeIngress.forEach(ingressName -> { @@ -75,18 +75,18 @@ public void handlerRelations(Map objectPath, List getTarget() { - return V1Ingress.class; + public Class getTarget() { + return V1beta1Ingress.class; } - private void addIngress(Map objectPath, Long envId, Long projectId, List addV1Ingress, String path, Long userId) { - addV1Ingress + private void addIngress(Map objectPath, Long envId, Long projectId, List addV1beta1Ingress, String path, Long userId) { + addV1beta1Ingress .forEach(v1beta1Ingress -> { String filePath = ""; try { @@ -127,8 +127,8 @@ private void addIngress(Map objectPath, Long envId, Long project }); } - private void updateIngress(Map objectPath, Long envId, Long projectId, List updateV1Ingress, String path, Long userId) { - updateV1Ingress + private void updateIngress(Map objectPath, Long envId, Long projectId, List updateV1beta1Ingress, String path, Long userId) { + updateV1beta1Ingress .forEach(v1beta1Ingress -> { String filePath = ""; try { @@ -178,7 +178,7 @@ private void updateIngress(Map objectPath, Long envId, Long proj } private void checkIngressAppVersion( - V1Ingress v1beta1Ingress) { + V1beta1Ingress v1beta1Ingress) { try { DevopsIngressValidator.checkIngressName(v1beta1Ingress.getMetadata().getName()); } catch (Exception e) { @@ -186,7 +186,7 @@ private void checkIngressAppVersion( } } - private DevopsIngressVO getDevopsIngressDTO(V1Ingress v1beta1Ingress, + private DevopsIngressVO getDevopsIngressDTO(V1beta1Ingress v1beta1Ingress, Long envId, String filePath) { DevopsIngressVO devopsIngressVO = new DevopsIngressVO(); devopsIngressVO.setDomain(v1beta1Ingress.getSpec().getRules().get(0).getHost() @@ -196,11 +196,11 @@ private DevopsIngressVO getDevopsIngressDTO(V1Ingress v1beta1Ingress, devopsIngressVO.setEnvId(envId); List pathCheckList = new ArrayList<>(); List devopsIngressPathVOS = new ArrayList<>(); - List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); if (paths == null) { throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATH_IS_EMPTY.getError(), filePath); } - for (V1HTTPIngressPath v1HTTPIngressPath : paths) { + for (V1beta1HTTPIngressPath v1HTTPIngressPath : paths) { String path = v1HTTPIngressPath.getPath(); try { DevopsIngressValidator.checkPath(path); @@ -211,29 +211,28 @@ private DevopsIngressVO getDevopsIngressDTO(V1Ingress v1beta1Ingress, } catch (Exception e) { throw new GitOpsExplainException(e.getMessage(), filePath); } - V1IngressBackend backend = v1HTTPIngressPath.getBackend(); - // TODO 兼容旧版本 -// String serviceName = backend.getServiceName(); -// DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( -// serviceName, envId); -// -// Long servicePort = null; -// IntOrString backendServicePort = backend.getServicePort(); -// if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { -// servicePort = TypeUtil.objToLong(backendServicePort); -// } else { -// if (devopsServiceDTO != null) { -// List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { -// }.getType()); -// servicePort = listPorts.get(0).getPort(); -// } -// } -// DevopsIngressPathVO devopsIngressPathVO = new DevopsIngressPathVO(); -// devopsIngressPathVO.setPath(path); -// devopsIngressPathVO.setServicePort(servicePort); -// devopsIngressPathVO.setServiceName(serviceName); -// devopsIngressPathVO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); -// devopsIngressPathVOS.add(devopsIngressPathVO); + V1beta1IngressBackend backend = v1HTTPIngressPath.getBackend(); + String serviceName = backend.getServiceName(); + DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( + serviceName, envId); + + Integer servicePort = null; + IntOrString backendServicePort = backend.getServicePort(); + if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { + servicePort = TypeUtil.objToInteger(backendServicePort); + } else { + if (devopsServiceDTO != null) { + List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { + }.getType()); + servicePort = listPorts.get(0).getPort(); + } + } + DevopsIngressPathVO devopsIngressPathVO = new DevopsIngressPathVO(); + devopsIngressPathVO.setPath(path); + devopsIngressPathVO.setServicePort(servicePort); + devopsIngressPathVO.setServiceName(serviceName); + devopsIngressPathVO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); + devopsIngressPathVOS.add(devopsIngressPathVO); } devopsIngressVO.setPathList(devopsIngressPathVOS); return devopsIngressVO; diff --git a/src/main/java/io/choerodon/devops/app/service/impl/HandlerV1IngressRelationsServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/HandlerV1IngressRelationsServiceImpl.java new file mode 100644 index 0000000000..905226c449 --- /dev/null +++ b/src/main/java/io/choerodon/devops/app/service/impl/HandlerV1IngressRelationsServiceImpl.java @@ -0,0 +1,238 @@ +package io.choerodon.devops.app.service.impl; + +import com.google.common.reflect.TypeToken; +import com.google.gson.Gson; +import io.kubernetes.client.openapi.models.*; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.regex.Pattern; +import java.util.stream.Collectors; + +import io.choerodon.core.exception.CommonException; +import io.choerodon.devops.api.validator.DevopsIngressValidator; +import io.choerodon.devops.api.vo.DevopsIngressPathVO; +import io.choerodon.devops.api.vo.DevopsIngressVO; +import io.choerodon.devops.app.service.*; +import io.choerodon.devops.infra.dto.*; +import io.choerodon.devops.infra.enums.GitOpsObjectError; +import io.choerodon.devops.infra.exception.GitOpsExplainException; +import io.choerodon.devops.infra.util.GitOpsUtil; +import io.choerodon.devops.infra.util.GitUtil; +import io.choerodon.devops.infra.util.TypeUtil; + +@Service +public class HandlerV1IngressRelationsServiceImpl implements HandlerObjectFileRelationsService { + public static final String INGRESS = "Ingress"; + private static final String GIT_SUFFIX = "/.git"; + private static final Pattern PATTERN = Pattern.compile("^[-+]?[\\d]*$"); + private Gson gson = new Gson(); + @Autowired + private DevopsIngressService devopsIngressService; + @Autowired + private DevopsEnvFileResourceService devopsEnvFileResourceService; + @Autowired + private DevopsServiceService devopsServiceService; + @Autowired + private DevopsEnvCommandService devopsEnvCommandService; + + + @Override + public void handlerRelations(Map objectPath, List beforeSync, List v1Ingresses, List v1Endpoints, Long envId, Long projectId, String path, Long userId) { + List beforeIngress = beforeSync.stream() + .filter(devopsEnvFileResourceE -> devopsEnvFileResourceE.getResourceType().equals(INGRESS)) + .map(devopsEnvFileResourceE -> { + DevopsIngressDTO devopsIngressDTO = devopsIngressService + .baseQuery(devopsEnvFileResourceE.getResourceId()); + if (devopsIngressDTO == null) { + devopsEnvFileResourceService + .baseDeleteByEnvIdAndResourceId(envId, devopsEnvFileResourceE.getResourceId(), INGRESS); + return null; + } + return devopsIngressDTO.getName(); + }) + .filter(Objects::nonNull) + .collect(Collectors.toList()); + //比较已存在域名和新增要处理的域名,获取新增域名,更新域名,删除域名 + List addV1Ingress = new ArrayList<>(); + List updateV1Ingress = new ArrayList<>(); + GitOpsUtil.pickCUDResource(beforeIngress, v1Ingresses, addV1Ingress, updateV1Ingress, v1Ingress -> v1Ingress.getMetadata().getName()); + + //删除ingress,删除文件对象关联关系 + beforeIngress.forEach(ingressName -> { + DevopsIngressDTO devopsIngressDTO = devopsIngressService.baseCheckByEnvAndName(envId, ingressName); + if (devopsIngressDTO != null) { + devopsIngressService.deleteIngressByGitOps(devopsIngressDTO.getId()); + devopsEnvFileResourceService.baseDeleteByEnvIdAndResourceId(envId, devopsIngressDTO.getId(), INGRESS); + } + }); + //新增ingress + addIngress(objectPath, envId, projectId, addV1Ingress, path, userId); + //更新ingress + updateIngress(objectPath, envId, projectId, updateV1Ingress, path, userId); + } + + @Override + public Class getTarget() { + return V1Ingress.class; + } + + private void addIngress(Map objectPath, Long envId, Long projectId, List addV1Ingress, String path, Long userId) { + addV1Ingress + .forEach(v1Ingress -> { + String filePath = ""; + try { + filePath = objectPath.get(TypeUtil.objToString(v1Ingress.hashCode())); + + checkIngressAppVersion(v1Ingress); + DevopsIngressDTO devopsIngressDTO = devopsIngressService + .baseCheckByEnvAndName(envId, v1Ingress.getMetadata().getName()); + DevopsIngressVO devopsIngressVO; + //初始化ingress对象参数,存在ingress则直接创建文件对象关联关系 + if (devopsIngressDTO == null) { + devopsIngressVO = getDevopsIngressDTO( + v1Ingress, + envId, filePath); + if (!devopsIngressVO.getPathList().stream() + .allMatch(t -> + devopsIngressService.baseCheckPath(envId, devopsIngressVO.getDomain(), t.getPath(), null))) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_DOMAIN_PATH_IS_EXIST.getError(), filePath); + } + devopsIngressService.createIngressByGitOps(devopsIngressVO, projectId, userId); + devopsIngressDTO = devopsIngressService + .baseCheckByEnvAndName(envId, v1Ingress.getMetadata().getName()); + } + DevopsEnvCommandDTO devopsEnvCommandDTO = devopsEnvCommandService.baseQuery(devopsIngressDTO.getCommandId()); + + devopsEnvCommandDTO.setSha(GitUtil.getFileLatestCommit(path + GIT_SUFFIX, filePath)); + devopsEnvCommandService.baseUpdateSha(devopsEnvCommandDTO.getId(), devopsEnvCommandDTO.getSha()); + + devopsEnvFileResourceService.updateOrCreateFileResource(objectPath, envId, null, v1Ingress.hashCode(), devopsIngressDTO.getId(), + v1Ingress.getKind()); + } catch (CommonException e) { + String errorCode = ""; + if (e instanceof GitOpsExplainException) { + errorCode = ((GitOpsExplainException) e).getErrorCode() == null ? "" : ((GitOpsExplainException) e).getErrorCode(); + } + throw new GitOpsExplainException(e.getMessage(), filePath, errorCode, e); + } + }); + } + + private void updateIngress(Map objectPath, Long envId, Long projectId, List updateV1Ingress, String path, Long userId) { + updateV1Ingress + .forEach(v1Ingress -> { + String filePath = ""; + try { + boolean isNotChange = false; + filePath = objectPath.get(TypeUtil.objToString(v1Ingress.hashCode())); + DevopsIngressDTO devopsIngressDTO = devopsIngressService + .baseCheckByEnvAndName(envId, v1Ingress.getMetadata().getName()); + checkIngressAppVersion(v1Ingress); + //初始化ingress对象参数,更新ingress并更新文件对象关联关系 + DevopsIngressVO devopsIngressVO = getDevopsIngressDTO( + v1Ingress, + envId, filePath); + DevopsIngressVO ingressVO = devopsIngressService.queryIngress(projectId, devopsIngressDTO.getId()); + if (devopsIngressVO.equals(ingressVO)) { + isNotChange = true; + } + if (!devopsIngressVO.getPathList().stream() + .allMatch(t -> + devopsIngressService.baseCheckPath(envId, devopsIngressVO.getDomain(), + t.getPath(), devopsIngressDTO.getId()))) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_DOMAIN_PATH_IS_EXIST.getError(), filePath); + } + DevopsEnvCommandDTO devopsEnvCommandDTO = devopsEnvCommandService.baseQuery(devopsIngressDTO.getCommandId()); + if (!isNotChange) { + devopsIngressService.updateIngressByGitOps(devopsIngressDTO.getId(), devopsIngressVO, projectId, userId); + DevopsIngressDTO newdevopsIngressDTO = devopsIngressService.baseCheckByEnvAndName(envId, v1Ingress.getMetadata().getName()); + devopsEnvCommandDTO = devopsEnvCommandService.baseQuery(newdevopsIngressDTO.getCommandId()); + } + + devopsEnvCommandDTO.setSha(GitUtil.getFileLatestCommit(path + GIT_SUFFIX, filePath)); + devopsEnvCommandService.baseUpdateSha(devopsEnvCommandDTO.getId(), devopsEnvCommandDTO.getSha()); + DevopsEnvFileResourceDTO devopsEnvFileResourceDTO = devopsEnvFileResourceService + .baseQueryByEnvIdAndResourceId(envId, devopsIngressDTO.getId(), v1Ingress.getKind()); + devopsEnvFileResourceService.updateOrCreateFileResource(objectPath, + envId, + devopsEnvFileResourceDTO, + v1Ingress.hashCode(), devopsIngressDTO.getId(), v1Ingress.getKind()); + + } catch (CommonException e) { + String errorCode = ""; + if (e instanceof GitOpsExplainException) { + errorCode = ((GitOpsExplainException) e).getErrorCode() == null ? "" : ((GitOpsExplainException) e).getErrorCode(); + } + throw new GitOpsExplainException(e.getMessage(), filePath, errorCode, e); + } + }); + } + + private void checkIngressAppVersion( + V1Ingress v1Ingress) { + try { + DevopsIngressValidator.checkIngressName(v1Ingress.getMetadata().getName()); + } catch (Exception e) { + throw new CommonException(e.getMessage(), e); + } + } + + private DevopsIngressVO getDevopsIngressDTO(V1Ingress v1Ingress, + Long envId, String filePath) { + DevopsIngressVO devopsIngressVO = new DevopsIngressVO(); + devopsIngressVO.setDomain(v1Ingress.getSpec().getRules().get(0).getHost() + ); + devopsIngressVO.setName(v1Ingress.getMetadata().getName()); + devopsIngressVO.setAnnotations(v1Ingress.getMetadata().getAnnotations()); + devopsIngressVO.setEnvId(envId); + List pathCheckList = new ArrayList<>(); + List devopsIngressPathVOS = new ArrayList<>(); + List paths = v1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + if (paths == null) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATH_IS_EMPTY.getError(), filePath); + } + for (V1HTTPIngressPath v1HTTPIngressPath : paths) { + String path = v1HTTPIngressPath.getPath(); + try { + DevopsIngressValidator.checkPath(path); + if (pathCheckList.contains(path)) { + throw new GitOpsExplainException(GitOpsObjectError.INGRESS_PATH_DUPLICATED.getError(), filePath); + } + pathCheckList.add(path); + } catch (Exception e) { + throw new GitOpsExplainException(e.getMessage(), filePath); + } + V1IngressBackend backend = v1HTTPIngressPath.getBackend(); + V1IngressServiceBackend v1IngressServiceBackend = backend.getService(); + V1ServiceBackendPort v1ServiceBackendPort = v1IngressServiceBackend.getPort(); + String serviceName = backend.getService().getName(); + DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( + serviceName, envId); + + Integer servicePort = null; + Integer backendServicePort = v1ServiceBackendPort.getNumber(); + if (PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { + servicePort = backendServicePort; + } else { + if (devopsServiceDTO != null) { + List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { + }.getType()); + servicePort = listPorts.get(0).getPort(); + } + } + DevopsIngressPathVO devopsIngressPathVO = new DevopsIngressPathVO(); + devopsIngressPathVO.setPath(path); + devopsIngressPathVO.setServicePort(servicePort); + devopsIngressPathVO.setServiceName(serviceName); + devopsIngressPathVO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); + devopsIngressPathVOS.add(devopsIngressPathVO); + } + devopsIngressVO.setPathList(devopsIngressPathVOS); + return devopsIngressVO; + } +} diff --git a/src/main/java/io/choerodon/devops/infra/dto/DevopsIngressPathDTO.java b/src/main/java/io/choerodon/devops/infra/dto/DevopsIngressPathDTO.java index 7aaaf8945c..d10ae6ffbc 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/DevopsIngressPathDTO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/DevopsIngressPathDTO.java @@ -28,7 +28,7 @@ public class DevopsIngressPathDTO extends AuditDomain { private String path; private Long serviceId; private String serviceName; - private Long servicePort; + private Integer servicePort; public DevopsIngressPathDTO() { } @@ -40,7 +40,7 @@ public DevopsIngressPathDTO(Long ingressId) { /** * 构造函数 */ - public DevopsIngressPathDTO(Long ingressId, String path, Long serviceId, String serviceName, Long servicePort) { + public DevopsIngressPathDTO(Long ingressId, String path, Long serviceId, String serviceName, Integer servicePort) { this.ingressId = ingressId; this.path = path; this.serviceId = serviceId; @@ -90,11 +90,11 @@ public void setServiceName(String serviceName) { this.serviceName = serviceName; } - public Long getServicePort() { + public Integer getServicePort() { return servicePort; } - public void setServicePort(Long servicePort) { + public void setServicePort(Integer servicePort) { this.servicePort = servicePort; } @@ -110,7 +110,7 @@ public boolean equals(Object o) { return Objects.equals(ingressId, that.ingressId) && Objects.equals(path, that.path) && Objects.equals(serviceId, that.serviceId) - && Objects.equals(servicePort,that.servicePort); + && Objects.equals(servicePort, that.servicePort); } @Override diff --git a/src/main/java/io/choerodon/devops/infra/dto/PortMapVO.java b/src/main/java/io/choerodon/devops/infra/dto/PortMapVO.java index 838b1174ba..7549243bef 100644 --- a/src/main/java/io/choerodon/devops/infra/dto/PortMapVO.java +++ b/src/main/java/io/choerodon/devops/infra/dto/PortMapVO.java @@ -14,9 +14,9 @@ public class PortMapVO implements Comparable { @ApiModelProperty("名称") private String name; @ApiModelProperty("端口号") - private Long port; + private Integer port; @ApiModelProperty("nodeport") - private Long nodePort; + private Integer nodePort; @ApiModelProperty("协议") private String protocol; @ApiModelProperty("目标端口") @@ -30,11 +30,19 @@ public void setName(String name) { this.name = name; } - public Long getNodePort() { + public Integer getPort() { + return port; + } + + public void setPort(Integer port) { + this.port = port; + } + + public Integer getNodePort() { return nodePort; } - public void setNodePort(Long nodePort) { + public void setNodePort(Integer nodePort) { this.nodePort = nodePort; } @@ -46,14 +54,6 @@ public void setProtocol(String protocol) { this.protocol = protocol; } - public Long getPort() { - return port; - } - - public void setPort(Long port) { - this.port = port; - } - public String getTargetPort() { return targetPort; } diff --git a/src/main/java/io/choerodon/devops/infra/enums/GitOpsObjectError.java b/src/main/java/io/choerodon/devops/infra/enums/GitOpsObjectError.java index c8b85ebec3..f909960d9b 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/GitOpsObjectError.java +++ b/src/main/java/io/choerodon/devops/infra/enums/GitOpsObjectError.java @@ -33,6 +33,7 @@ public enum GitOpsObjectError { INGRESS_API_VERSION_NOT_FOUND("ingress.api.version.not.found"), INGRESS_DOMAIN_PATH_IS_EXIST("ingress.domain.path.is.exist"), INGRESS_PATHS_NOT_FOUND("ingress.paths.not.found"), + INGRESS_RULE_VALUES_NOT_FOUND("ingress.rule.values.not.found"), INGRESS_PATHS_PATH_NOT_FOUND("ingress.paths.path.not.found"), INGRESS_PATHS_BACKEND_NOT_FOUND("ingress.paths.backend.not.found"), INGRESS_PATH_DUPLICATED("ingress.path.duplicated"), diff --git a/src/main/java/io/choerodon/devops/infra/enums/ResourceType.java b/src/main/java/io/choerodon/devops/infra/enums/ResourceType.java index 43455e53bb..dafc89ffb9 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/ResourceType.java +++ b/src/main/java/io/choerodon/devops/infra/enums/ResourceType.java @@ -6,6 +6,8 @@ public enum ResourceType { SERVICE("Service"), POD("Pod"), INGRESS("Ingress"), + V1_INGRESS("V1Ingress"), + V1BETA1_INGRESS("V1Beta1Ingress"), CERTIFICATE("Certificate"), ENDPOINTS("Endpoints"), C7NHELMRELEASE("C7NHelmRelease"), diff --git a/src/main/java/io/choerodon/devops/infra/enums/UserEnvSupportedResourceType.java b/src/main/java/io/choerodon/devops/infra/enums/UserEnvSupportedResourceType.java index 9af180c295..7ce47f22d2 100644 --- a/src/main/java/io/choerodon/devops/infra/enums/UserEnvSupportedResourceType.java +++ b/src/main/java/io/choerodon/devops/infra/enums/UserEnvSupportedResourceType.java @@ -11,7 +11,8 @@ */ public enum UserEnvSupportedResourceType { SERVICE("Service"), - INGRESS("Ingress"), + V1_INGRESS("V1Ingress"), + V1BETA1_INGRESS("V1Beta1Ingress"), C7NHELMRELEASE("C7NHelmRelease"), CERTIFICATE("Certificate"), CONFIGMAP("ConfigMap"), diff --git a/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressPath.java b/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressPath.java new file mode 100644 index 0000000000..b1de177b38 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressPath.java @@ -0,0 +1,83 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Objects; + +@ApiModel( + description = "HTTPIngressPath associates a path regex with a backend. Incoming urls matching the path are forwarded to the backend." +) +public class V1beta1HTTPIngressPath { + @SerializedName("backend") + private V1beta1IngressBackend backend = null; + @SerializedName("path") + private String path = null; + + public V1beta1HTTPIngressPath() { + } + + public V1beta1HTTPIngressPath backend(V1beta1IngressBackend backend) { + this.backend = backend; + return this; + } + + @ApiModelProperty( + required = true, + value = "Backend defines the referenced service endpoint to which the traffic will be forwarded to." + ) + public V1beta1IngressBackend getBackend() { + return this.backend; + } + + public void setBackend(V1beta1IngressBackend backend) { + this.backend = backend; + } + + public V1beta1HTTPIngressPath path(String path) { + this.path = path; + return this; + } + + @ApiModelProperty("Path is an extended POSIX regex as defined by IEEE Std 1003.1, (i.e this follows the egrep/unix syntax, not the perl syntax) matched against the path of an incoming request. Currently it can contain characters disallowed from the conventional \"path\" part of a URL as defined by RFC 3986. Paths must begin with a '/'. If unspecified, the path defaults to a catch all sending traffic to the backend.") + public String getPath() { + return this.path; + } + + public void setPath(String path) { + this.path = path; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1HTTPIngressPath v1beta1HTTPIngressPath = (V1beta1HTTPIngressPath)o; + return Objects.equals(this.backend, v1beta1HTTPIngressPath.backend) && Objects.equals(this.path, v1beta1HTTPIngressPath.path); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.backend, this.path}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1HTTPIngressPath {\n"); + sb.append(" backend: ").append(this.toIndentedString(this.backend)).append("\n"); + sb.append(" path: ").append(this.toIndentedString(this.path)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressRuleValue.java b/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressRuleValue.java new file mode 100644 index 0000000000..ac2a20ae9c --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1HTTPIngressRuleValue.java @@ -0,0 +1,73 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@ApiModel( + description = "HTTPIngressRuleValue is a list of http selectors pointing to backends. In the example: http:///? -> backend where where parts of the url correspond to RFC 3986, this resource will be used to match against everything after the last '/' and before the first '?' or '#'." +) +public class V1beta1HTTPIngressRuleValue { + @SerializedName("paths") + private List paths = new ArrayList(); + + public V1beta1HTTPIngressRuleValue() { + } + + public V1beta1HTTPIngressRuleValue paths(List paths) { + this.paths = paths; + return this; + } + + public V1beta1HTTPIngressRuleValue addPathsItem(V1beta1HTTPIngressPath pathsItem) { + this.paths.add(pathsItem); + return this; + } + + @ApiModelProperty( + required = true, + value = "A collection of paths that map requests to backends." + ) + public List getPaths() { + return this.paths; + } + + public void setPaths(List paths) { + this.paths = paths; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1HTTPIngressRuleValue v1beta1HTTPIngressRuleValue = (V1beta1HTTPIngressRuleValue)o; + return Objects.equals(this.paths, v1beta1HTTPIngressRuleValue.paths); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.paths}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1HTTPIngressRuleValue {\n"); + sb.append(" paths: ").append(this.toIndentedString(this.paths)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1Ingress.java b/src/main/java/io/kubernetes/client/models/V1beta1Ingress.java new file mode 100644 index 0000000000..98aba5c807 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1Ingress.java @@ -0,0 +1,134 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.kubernetes.client.common.KubernetesObject; +import io.kubernetes.client.openapi.models.V1ObjectMeta; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Objects; + +@ApiModel( + description = "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc." +) +public class V1beta1Ingress implements KubernetesObject { + @SerializedName("apiVersion") + private String apiVersion = null; + @SerializedName("kind") + private String kind = null; + @SerializedName("metadata") + private V1ObjectMeta metadata = null; + @SerializedName("spec") + private V1beta1IngressSpec spec = null; + @SerializedName("status") + private V1beta1IngressStatus status = null; + + public V1beta1Ingress() { + } + + public V1beta1Ingress apiVersion(String apiVersion) { + this.apiVersion = apiVersion; + return this; + } + + @ApiModelProperty("APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#resources") + public String getApiVersion() { + return this.apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public V1beta1Ingress kind(String kind) { + this.kind = kind; + return this; + } + + @ApiModelProperty("Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#types-kinds") + public String getKind() { + return this.kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public V1beta1Ingress metadata(V1ObjectMeta metadata) { + this.metadata = metadata; + return this; + } + + @ApiModelProperty("Standard object's metadata. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#metadata") + public V1ObjectMeta getMetadata() { + return this.metadata; + } + + public void setMetadata(V1ObjectMeta metadata) { + this.metadata = metadata; + } + + public V1beta1Ingress spec(V1beta1IngressSpec spec) { + this.spec = spec; + return this; + } + + @ApiModelProperty("Spec is the desired state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status") + public V1beta1IngressSpec getSpec() { + return this.spec; + } + + public void setSpec(V1beta1IngressSpec spec) { + this.spec = spec; + } + + public V1beta1Ingress status(V1beta1IngressStatus status) { + this.status = status; + return this; + } + + @ApiModelProperty("Status is the current state of the Ingress. More info: https://git.k8s.io/community/contributors/devel/api-conventions.md#spec-and-status") + public V1beta1IngressStatus getStatus() { + return this.status; + } + + public void setStatus(V1beta1IngressStatus status) { + this.status = status; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1Ingress v1beta1Ingress = (V1beta1Ingress) o; + return Objects.equals(this.apiVersion, v1beta1Ingress.apiVersion) && Objects.equals(this.kind, v1beta1Ingress.kind) && Objects.equals(this.metadata, v1beta1Ingress.metadata) && Objects.equals(this.spec, v1beta1Ingress.spec) && Objects.equals(this.status, v1beta1Ingress.status); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.apiVersion, this.kind, this.metadata, this.spec, this.status}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1Ingress {\n"); + sb.append(" apiVersion: ").append(this.toIndentedString(this.apiVersion)).append("\n"); + sb.append(" kind: ").append(this.toIndentedString(this.kind)).append("\n"); + sb.append(" metadata: ").append(this.toIndentedString(this.metadata)).append("\n"); + sb.append(" spec: ").append(this.toIndentedString(this.spec)).append("\n"); + sb.append(" status: ").append(this.toIndentedString(this.status)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1IngressBackend.java b/src/main/java/io/kubernetes/client/models/V1beta1IngressBackend.java new file mode 100644 index 0000000000..6e6286c423 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1IngressBackend.java @@ -0,0 +1,87 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.kubernetes.client.custom.IntOrString; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Objects; + +@ApiModel( + description = "IngressBackend describes all endpoints for a given service and port." +) +public class V1beta1IngressBackend { + @SerializedName("serviceName") + private String serviceName = null; + @SerializedName("servicePort") + private IntOrString servicePort = null; + + public V1beta1IngressBackend() { + } + + public V1beta1IngressBackend serviceName(String serviceName) { + this.serviceName = serviceName; + return this; + } + + @ApiModelProperty( + required = true, + value = "Specifies the name of the referenced service." + ) + public String getServiceName() { + return this.serviceName; + } + + public void setServiceName(String serviceName) { + this.serviceName = serviceName; + } + + public V1beta1IngressBackend servicePort(IntOrString servicePort) { + this.servicePort = servicePort; + return this; + } + + @ApiModelProperty( + required = true, + value = "Specifies the port of the referenced service." + ) + public IntOrString getServicePort() { + return this.servicePort; + } + + public void setServicePort(IntOrString servicePort) { + this.servicePort = servicePort; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1IngressBackend v1beta1IngressBackend = (V1beta1IngressBackend)o; + return Objects.equals(this.serviceName, v1beta1IngressBackend.serviceName) && Objects.equals(this.servicePort, v1beta1IngressBackend.servicePort); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.serviceName, this.servicePort}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1IngressBackend {\n"); + sb.append(" serviceName: ").append(this.toIndentedString(this.serviceName)).append("\n"); + sb.append(" servicePort: ").append(this.toIndentedString(this.servicePort)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1IngressRule.java b/src/main/java/io/kubernetes/client/models/V1beta1IngressRule.java new file mode 100644 index 0000000000..6f7febde0b --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1IngressRule.java @@ -0,0 +1,80 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Objects; + +@ApiModel( + description = "IngressRule represents the rules mapping the paths under a specified host to the related backend services. Incoming requests are first evaluated for a host match, then routed to the backend associated with the matching IngressRuleValue." +) +public class V1beta1IngressRule { + @SerializedName("host") + private String host = null; + @SerializedName("http") + private V1beta1HTTPIngressRuleValue http = null; + + public V1beta1IngressRule() { + } + + public V1beta1IngressRule host(String host) { + this.host = host; + return this; + } + + @ApiModelProperty("Host is the fully qualified domain name of a network host, as defined by RFC 3986. Note the following deviations from the \"host\" part of the URI as defined in the RFC: 1. IPs are not allowed. Currently an IngressRuleValue can only apply to the IP in the Spec of the parent Ingress. 2. The `:` delimiter is not respected because ports are not allowed. Currently the port of an Ingress is implicitly :80 for http and :443 for https. Both these may change in the future. Incoming requests are matched against the host before the IngressRuleValue. If the host is unspecified, the Ingress routes all traffic based on the specified IngressRuleValue.") + public String getHost() { + return this.host; + } + + public void setHost(String host) { + this.host = host; + } + + public V1beta1IngressRule http(V1beta1HTTPIngressRuleValue http) { + this.http = http; + return this; + } + + @ApiModelProperty("") + public V1beta1HTTPIngressRuleValue getHttp() { + return this.http; + } + + public void setHttp(V1beta1HTTPIngressRuleValue http) { + this.http = http; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1IngressRule v1beta1IngressRule = (V1beta1IngressRule)o; + return Objects.equals(this.host, v1beta1IngressRule.host) && Objects.equals(this.http, v1beta1IngressRule.http); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.host, this.http}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1IngressRule {\n"); + sb.append(" host: ").append(this.toIndentedString(this.host)).append("\n"); + sb.append(" http: ").append(this.toIndentedString(this.http)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1IngressSpec.java b/src/main/java/io/kubernetes/client/models/V1beta1IngressSpec.java new file mode 100644 index 0000000000..cc88f312d1 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1IngressSpec.java @@ -0,0 +1,117 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@ApiModel( + description = "IngressSpec describes the Ingress the user wishes to exist." +) +public class V1beta1IngressSpec { + @SerializedName("backend") + private V1beta1IngressBackend backend = null; + @SerializedName("rules") + private List rules = null; + @SerializedName("tls") + private List tls = null; + + public V1beta1IngressSpec() { + } + + public V1beta1IngressSpec backend(V1beta1IngressBackend backend) { + this.backend = backend; + return this; + } + + @ApiModelProperty("A default backend capable of servicing requests that don't match any rule. At least one of 'backend' or 'rules' must be specified. This field is optional to allow the loadbalancer controller or defaulting logic to specify a global default.") + public V1beta1IngressBackend getBackend() { + return this.backend; + } + + public void setBackend(V1beta1IngressBackend backend) { + this.backend = backend; + } + + public V1beta1IngressSpec rules(List rules) { + this.rules = rules; + return this; + } + + public V1beta1IngressSpec addRulesItem(V1beta1IngressRule rulesItem) { + if (this.rules == null) { + this.rules = new ArrayList(); + } + + this.rules.add(rulesItem); + return this; + } + + @ApiModelProperty("A list of host rules used to configure the Ingress. If unspecified, or no rule matches, all traffic is sent to the default backend.") + public List getRules() { + return this.rules; + } + + public void setRules(List rules) { + this.rules = rules; + } + + public V1beta1IngressSpec tls(List tls) { + this.tls = tls; + return this; + } + + public V1beta1IngressSpec addTlsItem(V1beta1IngressTLS tlsItem) { + if (this.tls == null) { + this.tls = new ArrayList(); + } + + this.tls.add(tlsItem); + return this; + } + + @ApiModelProperty("TLS configuration. Currently the Ingress only supports a single TLS port, 443. If multiple members of this list specify different hosts, they will be multiplexed on the same port according to the hostname specified through the SNI TLS extension, if the ingress controller fulfilling the ingress supports SNI.") + public List getTls() { + return this.tls; + } + + public void setTls(List tls) { + this.tls = tls; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1IngressSpec v1beta1IngressSpec = (V1beta1IngressSpec)o; + return Objects.equals(this.backend, v1beta1IngressSpec.backend) && Objects.equals(this.rules, v1beta1IngressSpec.rules) && Objects.equals(this.tls, v1beta1IngressSpec.tls); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.backend, this.rules, this.tls}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1IngressSpec {\n"); + sb.append(" backend: ").append(this.toIndentedString(this.backend)).append("\n"); + sb.append(" rules: ").append(this.toIndentedString(this.rules)).append("\n"); + sb.append(" tls: ").append(this.toIndentedString(this.tls)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1IngressStatus.java b/src/main/java/io/kubernetes/client/models/V1beta1IngressStatus.java new file mode 100644 index 0000000000..d36772c353 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1IngressStatus.java @@ -0,0 +1,64 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.kubernetes.client.openapi.models.V1LoadBalancerStatus; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.Objects; + +@ApiModel( + description = "IngressStatus describe the current state of the Ingress." +) +public class V1beta1IngressStatus { + @SerializedName("loadBalancer") + private V1LoadBalancerStatus loadBalancer = null; + + public V1beta1IngressStatus() { + } + + public V1beta1IngressStatus loadBalancer(V1LoadBalancerStatus loadBalancer) { + this.loadBalancer = loadBalancer; + return this; + } + + @ApiModelProperty("LoadBalancer contains the current status of the load-balancer.") + public V1LoadBalancerStatus getLoadBalancer() { + return this.loadBalancer; + } + + public void setLoadBalancer(V1LoadBalancerStatus loadBalancer) { + this.loadBalancer = loadBalancer; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1IngressStatus v1beta1IngressStatus = (V1beta1IngressStatus)o; + return Objects.equals(this.loadBalancer, v1beta1IngressStatus.loadBalancer); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.loadBalancer}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1IngressStatus {\n"); + sb.append(" loadBalancer: ").append(this.toIndentedString(this.loadBalancer)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/models/V1beta1IngressTLS.java b/src/main/java/io/kubernetes/client/models/V1beta1IngressTLS.java new file mode 100644 index 0000000000..c147004ff0 --- /dev/null +++ b/src/main/java/io/kubernetes/client/models/V1beta1IngressTLS.java @@ -0,0 +1,91 @@ +// +// Source code recreated from a .class file by IntelliJ IDEA +// (powered by FernFlower decompiler) +// + +package io.kubernetes.client.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + +@ApiModel( + description = "IngressTLS describes the transport layer security associated with an Ingress." +) +public class V1beta1IngressTLS { + @SerializedName("hosts") + private List hosts = null; + @SerializedName("secretName") + private String secretName = null; + + public V1beta1IngressTLS() { + } + + public V1beta1IngressTLS hosts(List hosts) { + this.hosts = hosts; + return this; + } + + public V1beta1IngressTLS addHostsItem(String hostsItem) { + if (this.hosts == null) { + this.hosts = new ArrayList(); + } + + this.hosts.add(hostsItem); + return this; + } + + @ApiModelProperty("Hosts are a list of hosts included in the TLS certificate. The values in this list must match the name/s used in the tlsSecret. Defaults to the wildcard host setting for the loadbalancer controller fulfilling this Ingress, if left unspecified.") + public List getHosts() { + return this.hosts; + } + + public void setHosts(List hosts) { + this.hosts = hosts; + } + + public V1beta1IngressTLS secretName(String secretName) { + this.secretName = secretName; + return this; + } + + @ApiModelProperty("SecretName is the name of the secret used to terminate SSL traffic on 443. Field is left optional to allow SSL routing based on SNI hostname alone. If the SNI host in a listener conflicts with the \"Host\" header field used by an IngressRule, the SNI host is used for termination and value of the Host header is used for routing.") + public String getSecretName() { + return this.secretName; + } + + public void setSecretName(String secretName) { + this.secretName = secretName; + } + + public boolean equals(Object o) { + if (this == o) { + return true; + } else if (o != null && this.getClass() == o.getClass()) { + V1beta1IngressTLS v1beta1IngressTLS = (V1beta1IngressTLS)o; + return Objects.equals(this.hosts, v1beta1IngressTLS.hosts) && Objects.equals(this.secretName, v1beta1IngressTLS.secretName); + } else { + return false; + } + } + + public int hashCode() { + return Objects.hash(new Object[]{this.hosts, this.secretName}); + } + + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1beta1IngressTLS {\n"); + sb.append(" hosts: ").append(this.toIndentedString(this.hosts)).append("\n"); + sb.append(" secretName: ").append(this.toIndentedString(this.secretName)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + private String toIndentedString(Object o) { + return o == null ? "null" : o.toString().replace("\n", "\n "); + } +} diff --git a/src/main/java/io/kubernetes/client/openapi/models/V1Ingress.java b/src/main/java/io/kubernetes/client/openapi/models/V1Ingress.java new file mode 100644 index 0000000000..3efd54a7b0 --- /dev/null +++ b/src/main/java/io/kubernetes/client/openapi/models/V1Ingress.java @@ -0,0 +1,216 @@ +/* +Copyright 2022 The Kubernetes Authors. +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at +http://www.apache.org/licenses/LICENSE-2.0 +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package io.kubernetes.client.openapi.models; + +import com.google.gson.annotations.SerializedName; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; + +import java.util.Objects; + +/** + * Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by + * a backend. An Ingress can be configured to give services externally-reachable urls, load balance + * traffic, terminate SSL, offer name based virtual hosting etc. + */ +@ApiModel( + description = + "Ingress is a collection of rules that allow inbound connections to reach the endpoints defined by a backend. An Ingress can be configured to give services externally-reachable urls, load balance traffic, terminate SSL, offer name based virtual hosting etc.") +@javax.annotation.Generated( + value = "org.openapitools.codegen.languages.JavaClientCodegen", + date = "2022-05-06T16:45:00.555Z[Etc/UTC]") +public class V1Ingress implements io.kubernetes.client.common.KubernetesObject { + public static final String SERIALIZED_NAME_API_VERSION = "apiVersion"; + + @SerializedName(SERIALIZED_NAME_API_VERSION) + private String apiVersion; + + public static final String SERIALIZED_NAME_KIND = "kind"; + + @SerializedName(SERIALIZED_NAME_KIND) + private String kind; + + public static final String SERIALIZED_NAME_METADATA = "metadata"; + + @SerializedName(SERIALIZED_NAME_METADATA) + private V1ObjectMeta metadata; + + public static final String SERIALIZED_NAME_SPEC = "spec"; + + @SerializedName(SERIALIZED_NAME_SPEC) + private V1IngressSpec spec; + + public static final String SERIALIZED_NAME_STATUS = "status"; + + @SerializedName(SERIALIZED_NAME_STATUS) + private V1IngressStatus status; + + public V1Ingress apiVersion(String apiVersion) { + + this.apiVersion = apiVersion; + return this; + } + + /** + * APIVersion defines the versioned schema of this representation of an object. Servers should + * convert recognized schemas to the latest internal value, and may reject unrecognized values. + * More info: + * https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources + * + * @return apiVersion + */ + @javax.annotation.Nullable + @ApiModelProperty( + value = + "APIVersion defines the versioned schema of this representation of an object. Servers should convert recognized schemas to the latest internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources") + public String getApiVersion() { + return apiVersion; + } + + public void setApiVersion(String apiVersion) { + this.apiVersion = apiVersion; + } + + public V1Ingress kind(String kind) { + + this.kind = kind; + return this; + } + + /** + * Kind is a string value representing the REST resource this object represents. Servers may infer + * this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More + * info: + * https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds + * + * @return kind + */ + @javax.annotation.Nullable + @ApiModelProperty( + value = + "Kind is a string value representing the REST resource this object represents. Servers may infer this from the endpoint the client submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds") + public String getKind() { + return kind; + } + + public void setKind(String kind) { + this.kind = kind; + } + + public V1Ingress metadata(V1ObjectMeta metadata) { + + this.metadata = metadata; + return this; + } + + /** + * Get metadata + * + * @return metadata + */ + @javax.annotation.Nullable + @ApiModelProperty(value = "") + public V1ObjectMeta getMetadata() { + return metadata; + } + + public void setMetadata(V1ObjectMeta metadata) { + this.metadata = metadata; + } + + public V1Ingress spec(V1IngressSpec spec) { + + this.spec = spec; + return this; + } + + /** + * Get spec + * + * @return spec + */ + @javax.annotation.Nullable + @ApiModelProperty(value = "") + public V1IngressSpec getSpec() { + return spec; + } + + public void setSpec(V1IngressSpec spec) { + this.spec = spec; + } + + public V1Ingress status(V1IngressStatus status) { + + this.status = status; + return this; + } + + /** + * Get status + * + * @return status + */ + @javax.annotation.Nullable + @ApiModelProperty(value = "") + public V1IngressStatus getStatus() { + return status; + } + + public void setStatus(V1IngressStatus status) { + this.status = status; + } + + @Override + public boolean equals(java.lang.Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + V1Ingress v1Ingress = (V1Ingress) o; + return Objects.equals(this.apiVersion, v1Ingress.apiVersion) + && Objects.equals(this.kind, v1Ingress.kind) + && Objects.equals(this.metadata, v1Ingress.metadata) + && Objects.equals(this.spec, v1Ingress.spec) + && Objects.equals(this.status, v1Ingress.status); + } + + @Override + public int hashCode() { + return Objects.hash(apiVersion, kind, metadata, spec, status); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("class V1Ingress {\n"); + sb.append(" apiVersion: ").append(toIndentedString(apiVersion)).append("\n"); + sb.append(" kind: ").append(toIndentedString(kind)).append("\n"); + sb.append(" metadata: ").append(toIndentedString(metadata)).append("\n"); + sb.append(" spec: ").append(toIndentedString(spec)).append("\n"); + sb.append(" status: ").append(toIndentedString(status)).append("\n"); + sb.append("}"); + return sb.toString(); + } + + /** + * Convert the given object to string with each line indented by 4 spaces (except the first line). + */ + private String toIndentedString(java.lang.Object o) { + if (o == null) { + return "null"; + } + return o.toString().replace("\n", "\n "); + } +} From 902f53e45d64d819f6fffc35ce8096e4bc9a2083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 23 Aug 2022 10:19:23 +0800 Subject: [PATCH 223/228] =?UTF-8?q?[IMP]=20=E5=85=BC=E5=AE=B9ingress?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsEnvResourceServiceImpl.java | 47 +++++-- .../impl/DevopsIngressServiceImpl.java | 128 +++++++++++++----- .../choerodon/devops/infra/util/K8sUtil.java | 92 +++++++++++-- 3 files changed, 214 insertions(+), 53 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java index 7a20241cc5..40313a4366 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsEnvResourceServiceImpl.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import io.kubernetes.client.models.V1beta1Ingress; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.springframework.beans.factory.annotation.Autowired; @@ -63,6 +64,10 @@ public class DevopsEnvResourceServiceImpl implements DevopsEnvResourceService { private DevopsDeploymentService devopsDeploymentService; @Autowired private DevopsEnvPodService devopsEnvPodService; + @Autowired + private DevopsIngressService devopsIngressService; + @Autowired + private DevopsEnvironmentService devopsEnvironmentService; @Override public DevopsEnvResourceVO listResourcesInHelmRelease(Long instanceId) { @@ -160,10 +165,18 @@ private void dealWithResource(DevopsEnvResourceDetailDTO devopsEnvResourceDetail break; case INGRESS: if (devopsEnvResourceDTO.getInstanceId() != null) { - V1Ingress v1beta1Ingress = json.deserialize( - devopsEnvResourceDetailDTO.getMessage(), - V1Ingress.class); - devopsEnvResourceVO.getIngressVOS().add(addIngressToResource(v1beta1Ingress)); + DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(envId); + if (devopsIngressService.operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId())) { + V1beta1Ingress v1beta1Ingress = json.deserialize( + devopsEnvResourceDetailDTO.getMessage(), + V1beta1Ingress.class); + devopsEnvResourceVO.getIngressVOS().add(addIngressToResourceOfV1Beta1Ingress(v1beta1Ingress)); + } else { + V1Ingress v1ingre = json.deserialize( + devopsEnvResourceDetailDTO.getMessage(), + V1Ingress.class); + devopsEnvResourceVO.getIngressVOS().add(addIngressToResourceOfV1Ingress(v1ingre)); + } } break; case REPLICASET: @@ -187,6 +200,7 @@ private void dealWithResource(DevopsEnvResourceDetailDTO devopsEnvResourceDetail default: break; } + } @Override @@ -408,22 +422,39 @@ public void addServiceToResource(DevopsEnvResourceVO devopsEnvResourceDTO, V1Ser devopsEnvResourceDTO.getServiceVOS().add(serviceVO); } + /** + * 增加ingress资源 + * + * @param v1Ingress ingress对象 + */ + private IngressVO addIngressToResourceOfV1Ingress(V1Ingress v1Ingress) { + IngressVO ingressVO = new IngressVO(); + ingressVO.setName(v1Ingress.getMetadata().getName()); + ingressVO.setHosts(K8sUtil.formatHostsOfV1Ingress(v1Ingress.getSpec().getRules())); + ingressVO.setPorts(K8sUtil.formatPortsOfV1Ingress(v1Ingress.getSpec().getTls())); + ingressVO.setAddress(K8sUtil.loadBalancerStatusStringer(v1Ingress.getStatus().getLoadBalancer())); + ingressVO.setAge(v1Ingress.getMetadata().getCreationTimestamp().toString()); + ingressVO.setServices(K8sUtil.analyzeIngressServicesV1Ingress(v1Ingress)); + return ingressVO; + } + /** * 增加ingress资源 * * @param v1beta1Ingress ingress对象 */ - private IngressVO addIngressToResource(V1Ingress v1beta1Ingress) { + private IngressVO addIngressToResourceOfV1Beta1Ingress(V1beta1Ingress v1beta1Ingress) { IngressVO ingressVO = new IngressVO(); ingressVO.setName(v1beta1Ingress.getMetadata().getName()); - ingressVO.setHosts(K8sUtil.formatHosts(v1beta1Ingress.getSpec().getRules())); - ingressVO.setPorts(K8sUtil.formatPorts(v1beta1Ingress.getSpec().getTls())); + ingressVO.setHosts(K8sUtil.formatHostsOfV1beta1Ingress(v1beta1Ingress.getSpec().getRules())); + ingressVO.setPorts(K8sUtil.formatPortsOfV1Beta1Ingress(v1beta1Ingress.getSpec().getTls())); ingressVO.setAddress(K8sUtil.loadBalancerStatusStringer(v1beta1Ingress.getStatus().getLoadBalancer())); ingressVO.setAge(v1beta1Ingress.getMetadata().getCreationTimestamp().toString()); - ingressVO.setServices(K8sUtil.analyzeIngressServices(v1beta1Ingress)); + ingressVO.setServices(K8sUtil.analyzeIngressServicesV1Beta1Ingress(v1beta1Ingress)); return ingressVO; } + /** * 增加replicaSet资源 * diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index db6310d127..44f71d5b22 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -1093,9 +1093,24 @@ public void deleteIngressAndIngressPathByEnvId(Long envId) { @Override @Transactional(propagation = Propagation.NESTED) public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO appServiceInstanceDTO) { - V1Ingress v1beta1Ingress = json.deserialize(detailsJson, V1Ingress.class); - DevopsIngressDTO devopsIngressDTO = getDevopsIngressDTO(v1beta1Ingress, appServiceInstanceDTO.getEnvId()); - DevopsIngressDTO oldDevopsIngressDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), v1beta1Ingress.getMetadata().getName()); + DevopsIngressDTO devopsIngressDTO; + String ingressName; + DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(appServiceInstanceDTO.getEnvId()); + if (devopsEnvironmentDTO == null) { + LOGGER.error("save chart resource failed! env not found! envId: {}", appServiceInstanceDTO.getEnvId()); + return; + } + if (operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId())) { + V1beta1Ingress v1beta1Ingress = json.deserialize(detailsJson, V1beta1Ingress.class); + devopsIngressDTO = getDevopsIngressDTOOfV1Beta1Ingress(v1beta1Ingress, appServiceInstanceDTO.getEnvId()); + ingressName = v1beta1Ingress.getMetadata().getName(); + } else { + V1Ingress v1Ingress = json.deserialize(detailsJson, V1beta1Ingress.class); + devopsIngressDTO = getDevopsIngressDTOOfV1Ingress(v1Ingress, appServiceInstanceDTO.getEnvId()); + ingressName = v1Ingress.getMetadata().getName(); + } + + DevopsIngressDTO oldDevopsIngressDTO = baseQueryByEnvIdAndName(appServiceInstanceDTO.getEnvId(), ingressName); // 更新ingress if (oldDevopsIngressDTO != null) { // 更新ingress记录 @@ -1116,18 +1131,12 @@ public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO }); } else { // 添加ingress - DevopsEnvironmentDTO devopsEnvironmentDTO = devopsEnvironmentService.baseQueryById(appServiceInstanceDTO.getEnvId()); - if (devopsEnvironmentDTO == null) { - LOGGER.error("save chart resource failed! env not found! envId: {}", appServiceInstanceDTO.getEnvId()); - return; - } - // 插入ingress记录 devopsIngressDTO.setStatus(IngressStatus.RUNNING.getStatus()); devopsIngressDTO.setEnvId(appServiceInstanceDTO.getEnvId()); devopsIngressDTO.setCommandId(appServiceInstanceDTO.getId()); devopsIngressDTO.setProjectId(devopsEnvironmentDTO.getProjectId()); - devopsIngressDTO.setName(v1beta1Ingress.getMetadata().getName()); + devopsIngressDTO.setName(ingressName); devopsIngressDTO.setInstanceId(appServiceInstanceDTO.getId()); devopsIngressDTO.setCreatedBy(appServiceInstanceDTO.getCreatedBy()); devopsIngressDTO.setLastUpdatedBy(appServiceInstanceDTO.getLastUpdatedBy()); @@ -1181,7 +1190,55 @@ public boolean operateForOldTypeIngress(Long clusterId) { } } - private DevopsIngressDTO getDevopsIngressDTO(V1Ingress v1beta1Ingress, Long envId) { + private DevopsIngressDTO getDevopsIngressDTOOfV1Ingress(V1Ingress v1Ingress, Long envId) { + DevopsIngressDTO devopsIngressDTO = new DevopsIngressDTO(); + devopsIngressDTO.setDomain(v1Ingress.getSpec().getRules().get(0).getHost() + ); + devopsIngressDTO.setName(v1Ingress.getMetadata().getName()); + String annotations = gson.toJson(v1Ingress.getMetadata().getAnnotations()); + // 避免数据比数据库结构的size还大 + if (annotations.length() > 2000) { + throw new CommonException("error.ingress.annotations.too.large"); + } + devopsIngressDTO.setAnnotations(annotations); + devopsIngressDTO.setEnvId(envId); + List pathCheckList = new ArrayList<>(); + List devopsIngressPathDTOS = new ArrayList<>(); + List paths = v1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + for (V1HTTPIngressPath v1beta1HTTPIngressPath : paths) { + String path = v1beta1HTTPIngressPath.getPath(); + DevopsIngressValidator.checkPath(path); + pathCheckList.add(path); + V1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); + V1IngressServiceBackend v1IngressServiceBackend = backend.getService(); + V1ServiceBackendPort port = v1IngressServiceBackend.getPort(); + String serviceName = v1IngressServiceBackend.getName(); + DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( + serviceName, envId); + + Integer servicePort = null; + Integer number = port.getNumber(); + if (PATTERN.matcher(TypeUtil.objToString(number)).matches()) { + servicePort = TypeUtil.objToInteger(number); + } else { + if (devopsServiceDTO != null) { + List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { + }.getType()); + servicePort = listPorts.get(0).getPort(); + } + } + DevopsIngressPathDTO devopsIngressPathDTO = new DevopsIngressPathDTO(); + devopsIngressPathDTO.setPath(path); + devopsIngressPathDTO.setServicePort(servicePort); + devopsIngressPathDTO.setServiceName(serviceName); + devopsIngressPathDTO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); + devopsIngressPathDTOS.add(devopsIngressPathDTO); + } + devopsIngressDTO.setDevopsIngressPathDTOS(devopsIngressPathDTOS); + return devopsIngressDTO; + } + + private DevopsIngressDTO getDevopsIngressDTOOfV1Beta1Ingress(V1beta1Ingress v1beta1Ingress, Long envId) { DevopsIngressDTO devopsIngressDTO = new DevopsIngressDTO(); devopsIngressDTO.setDomain(v1beta1Ingress.getSpec().getRules().get(0).getHost() ); @@ -1195,34 +1252,33 @@ private DevopsIngressDTO getDevopsIngressDTO(V1Ingress v1beta1Ingress, Long envI devopsIngressDTO.setEnvId(envId); List pathCheckList = new ArrayList<>(); List devopsIngressPathDTOS = new ArrayList<>(); - List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); - for (V1HTTPIngressPath v1beta1HTTPIngressPath : paths) { + List paths = v1beta1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); + for (V1beta1HTTPIngressPath v1beta1HTTPIngressPath : paths) { String path = v1beta1HTTPIngressPath.getPath(); DevopsIngressValidator.checkPath(path); pathCheckList.add(path); - V1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); - // TODO 兼容旧版本 -// String serviceName = backend.getServiceName(); -// DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( -// serviceName, envId); -// -// Long servicePort = null; -// IntOrString backendServicePort = backend.getServicePort(); -// if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { -// servicePort = TypeUtil.objToLong(backendServicePort); -// } else { -// if (devopsServiceDTO != null) { -// List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { -// }.getType()); -// servicePort = listPorts.get(0).getPort(); -// } -// } -// DevopsIngressPathDTO devopsIngressPathDTO = new DevopsIngressPathDTO(); -// devopsIngressPathDTO.setPath(path); -// devopsIngressPathDTO.setServicePort(servicePort); -// devopsIngressPathDTO.setServiceName(serviceName); -// devopsIngressPathDTO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); -// devopsIngressPathDTOS.add(devopsIngressPathDTO); + V1beta1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); + String serviceName = backend.getServiceName(); + DevopsServiceDTO devopsServiceDTO = devopsServiceService.baseQueryByNameAndEnvId( + serviceName, envId); + + Integer servicePort = null; + IntOrString backendServicePort = backend.getServicePort(); + if (backendServicePort.isInteger() || PATTERN.matcher(TypeUtil.objToString(backendServicePort)).matches()) { + servicePort = TypeUtil.objToInteger(backendServicePort); + } else { + if (devopsServiceDTO != null) { + List listPorts = gson.fromJson(devopsServiceDTO.getPorts(), new TypeToken>() { + }.getType()); + servicePort = listPorts.get(0).getPort(); + } + } + DevopsIngressPathDTO devopsIngressPathDTO = new DevopsIngressPathDTO(); + devopsIngressPathDTO.setPath(path); + devopsIngressPathDTO.setServicePort(servicePort); + devopsIngressPathDTO.setServiceName(serviceName); + devopsIngressPathDTO.setServiceId(devopsServiceDTO == null ? null : devopsServiceDTO.getId()); + devopsIngressPathDTOS.add(devopsIngressPathDTO); } devopsIngressDTO.setDevopsIngressPathDTOS(devopsIngressPathDTOS); return devopsIngressDTO; diff --git a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java index ad9c4c88ff..ce3bbf88e3 100644 --- a/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java +++ b/src/main/java/io/choerodon/devops/infra/util/K8sUtil.java @@ -1,5 +1,8 @@ package io.choerodon.devops.infra.util; +import io.kubernetes.client.models.V1beta1Ingress; +import io.kubernetes.client.models.V1beta1IngressRule; +import io.kubernetes.client.models.V1beta1IngressTLS; import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; @@ -244,7 +247,7 @@ public static String makePortString(List servicePorts) { * @param ingress ingress对象 * @return 空的不可修改的Set, 如果没有 */ - public static Set analyzeIngressServices(V1Ingress ingress) { + public static Set analyzeIngressServicesV1Ingress(V1Ingress ingress) { if (ingress == null || ingress.getSpec() == null) { return Collections.emptySet(); } @@ -255,19 +258,49 @@ public static Set analyzeIngressServices(V1Ingress ingress) { if (rule.getHttp() != null && !CollectionUtils.isEmpty(rule.getHttp().getPaths())) { rule.getHttp().getPaths().forEach(path -> { if (path.getBackend() != null) { - // TODO 兼容旧版本 -// services.add(path.getBackend().getServiceName()); + services.add(path.getBackend().getService().getName()); } }); } }); } - // TODO 兼容旧版本 // 将默认的backend相关的service加入集合 -// if (ingress.getSpec().getBackend() != null) { -// services.add(ingress.getSpec().getBackend().getServiceName()); -// } + if (ingress.getSpec().getDefaultBackend() != null) { + services.add(ingress.getSpec().getDefaultBackend().getService().getName()); + } + + return services; + } + + /** + * 解析ingress对象所关联的所有service的名称合集(使用集合的原因是可能重复) + * + * @param ingress ingress对象 + * @return 空的不可修改的Set, 如果没有 + */ + public static Set analyzeIngressServicesV1Beta1Ingress(V1beta1Ingress ingress) { + if (ingress == null || ingress.getSpec() == null) { + return Collections.emptySet(); + } + + Set services = new HashSet<>(); + if (!CollectionUtils.isEmpty(ingress.getSpec().getRules())) { + ingress.getSpec().getRules().forEach(rule -> { + if (rule.getHttp() != null && !CollectionUtils.isEmpty(rule.getHttp().getPaths())) { + rule.getHttp().getPaths().forEach(path -> { + if (path.getBackend() != null) { + services.add(path.getBackend().getServiceName()); + } + }); + } + }); + } + + // 将默认的backend相关的service加入集合 + if (ingress.getSpec().getBackend() != null) { + services.add(ingress.getSpec().getBackend().getServiceName()); + } return services; } @@ -297,7 +330,7 @@ public static String makeTargetPortString(List servicePorts) { * @param v1beta1IngressRules ingress对象 * @return string */ - public static String formatHosts(List v1beta1IngressRules) { + public static String formatHostsOfV1Ingress(List v1beta1IngressRules) { List results = new ArrayList<>(); int max = 3; boolean more = false; @@ -319,13 +352,54 @@ public static String formatHosts(List v1beta1IngressRules) { return result; } + /** + * 获取ip + * + * @param v1beta1IngressRules ingress对象 + * @return string + */ + public static String formatHostsOfV1beta1Ingress(List v1beta1IngressRules) { + List results = new ArrayList<>(); + int max = 3; + boolean more = false; + for (V1beta1IngressRule v1beta1IngressRule : v1beta1IngressRules) { + if (results.size() == max) { + more = true; + } + if (v1beta1IngressRule.getHost() != null && !more && v1beta1IngressRule.getHost().length() != 0) { + results.add(v1beta1IngressRule.getHost()); + } + } + if (results.isEmpty()) { + return "*"; + } + String result = String.join(",", results); + if (more) { + return result + (v1beta1IngressRules.size() - max) + "more..."; + } + return result; + } + + /** + * 获取端口 + * + * @param v1beta1IngressTLS ingress对象 + * @return string + */ + public static String formatPortsOfV1Ingress(List v1beta1IngressTLS) { + if (v1beta1IngressTLS != null && !v1beta1IngressTLS.isEmpty()) { + return "80,443"; + } + return "80"; + } + /** * 获取端口 * * @param v1beta1IngressTLS ingress对象 * @return string */ - public static String formatPorts(List v1beta1IngressTLS) { + public static String formatPortsOfV1Beta1Ingress(List v1beta1IngressTLS) { if (v1beta1IngressTLS != null && !v1beta1IngressTLS.isEmpty()) { return "80,443"; } From 3a921e408a3a5a0c13d542f95ceada80a8232830 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 23 Aug 2022 14:37:47 +0800 Subject: [PATCH 224/228] =?UTF-8?q?[IMP]=20V1Ingress=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E7=9A=84path=E9=BB=98=E8=AE=A4=E8=AE=BE=E7=BD=AEPrefix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/service/impl/DevopsIngressServiceImpl.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index 44f71d5b22..3745ff597b 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -64,6 +64,9 @@ public class DevopsIngressServiceImpl implements DevopsIngressService, ChartReso public static final String CREATE = "create"; public static final String UPDATE = "update"; public static final String DELETE = "delete"; + public static final String V1_INGRESS_PATH_TYPE_PREFIX = "Prefix"; + public static final String V1_INGRESS_PATH_TYPE_IMPLEMENT = "ImplementationSpecific"; + public static final String V1_INGRESS_PATH_TYPE_EXACT = "Exact"; private static final String DOMAIN_NAME_EXIST_ERROR = "error.domain.name.exist"; private static final String PATH_ERROR = "error.path.empty"; private static final String PATH_DUPLICATED = "error.path.duplicated"; @@ -579,6 +582,7 @@ private V1HTTPIngressPath createV1Path(String hostPath, String serviceName, Inte path.setBackend(v1IngressBackend); path.setPath(hostPath); + path.setPathType(V1_INGRESS_PATH_TYPE_PREFIX); return path; } @@ -1205,11 +1209,11 @@ private DevopsIngressDTO getDevopsIngressDTOOfV1Ingress(V1Ingress v1Ingress, Lon List pathCheckList = new ArrayList<>(); List devopsIngressPathDTOS = new ArrayList<>(); List paths = v1Ingress.getSpec().getRules().get(0).getHttp().getPaths(); - for (V1HTTPIngressPath v1beta1HTTPIngressPath : paths) { - String path = v1beta1HTTPIngressPath.getPath(); + for (V1HTTPIngressPath v1HTTPIngressPath : paths) { + String path = v1HTTPIngressPath.getPath(); DevopsIngressValidator.checkPath(path); pathCheckList.add(path); - V1IngressBackend backend = v1beta1HTTPIngressPath.getBackend(); + V1IngressBackend backend = v1HTTPIngressPath.getBackend(); V1IngressServiceBackend v1IngressServiceBackend = backend.getService(); V1ServiceBackendPort port = v1IngressServiceBackend.getPort(); String serviceName = v1IngressServiceBackend.getName(); From d5da332d8293b33c054ed5b52c0cf8bec4a33ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Mon, 29 Aug 2022 16:25:10 +0800 Subject: [PATCH 225/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E5=A4=8Dingress?= =?UTF-8?q?=E5=BA=8F=E5=88=97=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DevopsIngressServiceImpl.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java index 3745ff597b..70bb698667 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsIngressServiceImpl.java @@ -1,5 +1,10 @@ package io.choerodon.devops.app.service.impl; +import java.util.*; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import javax.annotation.Nullable; + import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import io.kubernetes.client.common.KubernetesObject; @@ -18,11 +23,6 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; -import java.util.*; -import java.util.regex.Pattern; -import java.util.stream.Collectors; -import javax.annotation.Nullable; - import io.choerodon.asgard.saga.annotation.Saga; import io.choerodon.asgard.saga.producer.StartSagaBuilder; import io.choerodon.asgard.saga.producer.TransactionalProducer; @@ -74,6 +74,7 @@ public class DevopsIngressServiceImpl implements DevopsIngressService, ChartReso private static final String CERT_NOT_ACTIVE = "error.cert.notActive"; private static final String INGRESS_NOT_EXIST = "ingress.not.exist"; private static final Gson gson = new Gson(); + private static final JSON k8sJson = new JSON(); private static final Pattern PATTERN = Pattern.compile("^[-+]?[\\d]*$"); @Autowired @@ -703,7 +704,7 @@ private void operateEnvGitLabFile(Integer envGitLabProjectId, IngressSagaPayload ingressSagaPayload = new IngressSagaPayload(devopsEnvironmentDTO.getProjectId(), userAttrDTO.getGitlabUserId()); ingressSagaPayload.setDevopsIngressDTO(devopsIngressDTO); ingressSagaPayload.setCreated(isCreate); - ingressSagaPayload.setIngressJson(JsonHelper.marshalByJackson(ingress)); + ingressSagaPayload.setIngressJson(k8sJson.serialize(ingress)); ingressSagaPayload.setDevopsEnvironmentDTO(devopsEnvironmentDTO); ingressSagaPayload.setOperateForOldIngress(operateForOldIngress); @@ -1105,11 +1106,11 @@ public void saveOrUpdateChartResource(String detailsJson, AppServiceInstanceDTO return; } if (operateForOldTypeIngress(devopsEnvironmentDTO.getClusterId())) { - V1beta1Ingress v1beta1Ingress = json.deserialize(detailsJson, V1beta1Ingress.class); + V1beta1Ingress v1beta1Ingress = k8sJson.deserialize(detailsJson, V1beta1Ingress.class); devopsIngressDTO = getDevopsIngressDTOOfV1Beta1Ingress(v1beta1Ingress, appServiceInstanceDTO.getEnvId()); ingressName = v1beta1Ingress.getMetadata().getName(); } else { - V1Ingress v1Ingress = json.deserialize(detailsJson, V1beta1Ingress.class); + V1Ingress v1Ingress = k8sJson.deserialize(detailsJson, V1beta1Ingress.class); devopsIngressDTO = getDevopsIngressDTOOfV1Ingress(v1Ingress, appServiceInstanceDTO.getEnvId()); ingressName = v1Ingress.getMetadata().getName(); } From 163d798cd64eeab9b488ab014ae9a04fc3fbab36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Tue, 30 Aug 2022 11:25:11 +0800 Subject: [PATCH 226/228] =?UTF-8?q?[IMP]=20=E4=BF=AE=E6=94=B9=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E9=9C=80=E8=A6=81=E5=90=8C=E6=AD=A5=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E7=9A=84deployment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/DevopsEnvCommandMapper.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/resources/mapper/DevopsEnvCommandMapper.xml b/src/main/resources/mapper/DevopsEnvCommandMapper.xml index 02580682c2..ac460d4317 100644 --- a/src/main/resources/mapper/DevopsEnvCommandMapper.xml +++ b/src/main/resources/mapper/DevopsEnvCommandMapper.xml @@ -154,6 +154,7 @@ FROM devops_deployment ddp INNER JOIN devops_env_command command ON ddp.command_id = command.id WHERE command.status = 'operating' + AND ddp.source_type!='chart' AND ddp.env_id = #{envId,jdbcType=BIGINT} AND command.last_update_date #{beforeDate}) From 7ce4936cb17d429e94cd775d32e8a09d36c07058 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=B5=A9?= Date: Thu, 1 Sep 2022 16:23:50 +0800 Subject: [PATCH 227/228] =?UTF-8?q?[FIX]=20=E4=BF=AE=E5=A4=8D=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E8=87=AA=E5=AE=9A=E4=B9=89=E8=B5=84=E6=BA=90=E4=BB=A5?= =?UTF-8?q?=E5=8F=8A=E8=B5=84=E6=BA=90tag?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/DevopsCustomizeResourceServiceImpl.java | 15 ++++++++------- .../gitops/ResourceConvertToYamlHandler.java | 14 ++++++++------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCustomizeResourceServiceImpl.java b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCustomizeResourceServiceImpl.java index c3242820d0..c68d897a89 100644 --- a/src/main/java/io/choerodon/devops/app/service/impl/DevopsCustomizeResourceServiceImpl.java +++ b/src/main/java/io/choerodon/devops/app/service/impl/DevopsCustomizeResourceServiceImpl.java @@ -1,9 +1,5 @@ package io.choerodon.devops.app.service.impl; -import java.io.IOException; -import java.util.*; -import java.util.stream.Collectors; - import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -12,6 +8,10 @@ import org.springframework.web.multipart.MultipartFile; import org.yaml.snakeyaml.Yaml; +import java.io.IOException; +import java.util.*; +import java.util.stream.Collectors; + import io.choerodon.core.domain.Page; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.DevopsCustomizeResourceCreateOrUpdateVO; @@ -232,11 +232,11 @@ public void deleteResource(Long projectId, Long resourceId) { return; } - List devopsCustomizeResourceDTOS = listByEnvAndFilePath(devopsEnvironmentDTO.getId(), devopsCustomizeResourceDTO.getFilePath()); + List devopsEnvFileResourceDTOS = devopsEnvFileResourceService.baseQueryByEnvIdAndPath(devopsEnvironmentDTO.getId(), devopsCustomizeResourceDTO.getFilePath()); //如果对象所在文件只有一个对象,则直接删除文件,否则把对象从文件中去掉,更新文件 - if (devopsCustomizeResourceDTOS.size() == 1) { - if (devopsCustomizeResourceDTOS.get(0).getId().equals(resourceId)) { + if (devopsEnvFileResourceDTOS.size() == 1) { + if (devopsEnvFileResourceDTOS.get(0).getId().equals(resourceId)) { gitlabServiceClientOperator.deleteFile( TypeUtil.objToInteger(devopsEnvironmentDTO.getGitlabEnvProjectId()), devopsCustomizeResourceDTO.getFilePath(), @@ -250,6 +250,7 @@ public void deleteResource(Long projectId, Long resourceId) { //获取更新内容 DevopsCustomizeResourceContentDTO devopsCustomizeResourceContentDTO = devopsCustomizeResourceContentService.baseQuery(devopsCustomizeResourceDTO.getContentId()); ResourceConvertToYamlHandler resourceConvertToYamlHandler = new ResourceConvertToYamlHandler<>(); + resourceConvertToYamlHandler.setType(devopsCustomizeResourceContentDTO); String updateContent = resourceConvertToYamlHandler.getUpdateContent(FileUtil.getYaml().load(devopsCustomizeResourceContentDTO.getContent()), false, null, devopsCustomizeResourceDTO.getFilePath(), ResourceType.CUSTOM.getType(), gitOpsPath, CommandType.DELETE.getType()); gitlabServiceClientOperator.updateFile(devopsEnvironmentDTO.getGitlabEnvProjectId().intValue(), devopsCustomizeResourceDTO.getFilePath(), updateContent, "UPDATE FILE", TypeUtil.objToInteger(userAttrDTO.getGitlabUserId()), "master"); } diff --git a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java index b3933c2767..f132801cc5 100644 --- a/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java +++ b/src/main/java/io/choerodon/devops/infra/gitops/ResourceConvertToYamlHandler.java @@ -1,6 +1,7 @@ package io.choerodon.devops.infra.gitops; import com.alibaba.fastjson.JSONObject; + import io.choerodon.core.convertor.ApplicationContextHelper; import io.choerodon.core.exception.CommonException; import io.choerodon.devops.api.vo.kubernetes.C7nCertification; @@ -13,6 +14,7 @@ import io.choerodon.devops.infra.util.JsonYamlConversionUtil; import io.choerodon.devops.infra.util.SkipNullRepresenterUtil; import io.choerodon.devops.infra.util.TypeUtil; + import io.kubernetes.client.openapi.JSON; import io.kubernetes.client.openapi.models.*; import org.slf4j.Logger; @@ -38,13 +40,13 @@ public class ResourceConvertToYamlHandler { public static final String UPDATE = "update"; private static final String C7NTAG = "!!io.choerodon.devops.api.vo.kubernetes.C7nHelmRelease"; - private static final String INGTAG = "!!io.kubernetes.client.models.V1Ingress"; - private static final String SVCTAG = "!!io.kubernetes.client.models.V1Service"; + private static final String INGTAG = "!!io.kubernetes.client.openapi.models.V1Ingress"; + private static final String SVCTAG = "!!io.kubernetes.client.openapi.models.V1Service"; private static final String CERTTAG = "!!io.choerodon.devops.api.vo.kubernetes.C7nCertification"; - private static final String CONFIGMAPTAG = "!!io.kubernetes.client.models.V1ConfigMap"; - private static final String SECRET = "!!io.kubernetes.client.models.V1Secret"; - private static final String ENDPOINTS = "!!io.kubernetes.client.models.V1Endpoints"; - private static final String DEPLOYMENT = "!!io.kubernetes.client.models.V1Deployment"; + private static final String CONFIGMAPTAG = "!!io.kubernetes.client.openapi.models.V1ConfigMap"; + private static final String SECRET = "!!io.kubernetes.client.openapi.models.V1Secret"; + private static final String ENDPOINTS = "!!io.kubernetes.client.openapi.models.V1Endpoints"; + private static final String DEPLOYMENT = "!!io.kubernetes.client.openapi.models.V1Deployment"; private static final List WORKLOAD_RESOURCE_TYPE = new ArrayList<>(); @Value(value = "${devops.deploy.enableDeleteBlankLine:true}") From 347470c7b2917d9c0647e9a4c3dcffa561f9d52a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Sep 2022 23:46:47 +0000 Subject: [PATCH 228/228] Bump jsoup from 1.14.3 to 1.15.3 Bumps [jsoup](https://github.com/jhy/jsoup) from 1.14.3 to 1.15.3. - [Release notes](https://github.com/jhy/jsoup/releases) - [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES) - [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.14.3...jsoup-1.15.3) --- updated-dependencies: - dependency-name: org.jsoup:jsoup dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f98026163c..183ba229b4 100644 --- a/pom.xml +++ b/pom.xml @@ -298,7 +298,7 @@ org.jsoup jsoup - 1.14.3 + 1.15.3