private void updateMergedConfigForEdit(GoConfigHolder validatedConfigHolder, List<PartialConfig> partialConfigs) { if (partialConfigs.isEmpty()) return; CruiseConfig mergedCruiseConfigForEdit = cloner.deepClone(validatedConfigHolder.configForEdit); mergedCruiseConfigForEdit.merge(partialConfigs, true); validatedConfigHolder.mergedConfigForEdit = mergedCruiseConfigForEdit; }
protected void setMergedConfigForEditOn(GoConfigHolder validatedConfigHolder, List<PartialConfig> partials) { if (partials.isEmpty()) return; LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Starting."); CruiseConfig mergedCruiseConfigForEdit = cloner.deepClone(validatedConfigHolder.configForEdit); mergedCruiseConfigForEdit.merge(partials, true); validatedConfigHolder.mergedConfigForEdit = mergedCruiseConfigForEdit; LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Done."); } }
public void process(CruiseConfig cruiseConfig) { if (!cruiseConfig.getPartials().isEmpty()) { cruiseConfig.merge(cruiseConfig.getPartials(), false); } } }
private EntityConfigSaveResult trySavingEntity(EntityConfigUpdateCommand updatingCommand, Username currentUser, CruiseConfig modifiedConfig, List<PartialConfig> partials) { modifiedConfig.setPartials(partials); CruiseConfig preprocessedConfig = cloner.deepClone(modifiedConfig); MagicalGoConfigXmlLoader.preprocess(preprocessedConfig); updatingCommand.encrypt(preprocessedConfig); if (updatingCommand.isValid(preprocessedConfig)) { try { LOGGER.info("[Configuration Changed] Saving updated configuration."); String configAsXml = configAsXml(modifiedConfig, true); String md5 = CachedDigestUtils.md5Hex(configAsXml); MagicalGoConfigXmlLoader.setMd5(modifiedConfig, md5); MagicalGoConfigXmlLoader.setMd5(preprocessedConfig, md5); writeToConfigXmlFile(configAsXml); checkinConfigToGitRepo(partials, preprocessedConfig, configAsXml, md5, currentUser.getUsername().toString()); LOGGER.debug("[Config Save] Done writing with lock"); CruiseConfig mergedCruiseConfigForEdit = modifiedConfig; if (!partials.isEmpty()) { LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Starting."); mergedCruiseConfigForEdit = cloner.deepClone(modifiedConfig); mergedCruiseConfigForEdit.merge(partials, true); LOGGER.debug("[Config Save] Updating GoConfigHolder with mergedCruiseConfigForEdit: Done."); } return new EntityConfigSaveResult(updatingCommand.getPreprocessedEntityConfig(), new GoConfigHolder(preprocessedConfig, modifiedConfig, mergedCruiseConfigForEdit)); } catch (Exception e) { throw new RuntimeException("failed to save : " + e.getMessage()); } } else { throw new GoConfigInvalidException(preprocessedConfig, "Validation failed."); } }
@Test public void mergeShouldThrowWhenCalledSecondTime() { cruiseConfig = new BasicCruiseConfig(new BasicCruiseConfig(pipelines), PartialConfigMother.withEnvironment("remote-env")); assertThat(cruiseConfig.getEnvironments().size(),is(1)); try { cruiseConfig.merge(Arrays.asList(PartialConfigMother.withEnvironment("remote-env")), false); } catch (RuntimeException ex) { //ok assertThat(cruiseConfig.getEnvironments().size(),is(1)); cruiseConfig.validateAfterPreprocess(); return; } fail("should have thrown"); }
@Test public void shouldUpdatePipelineConfigsListWhenAPartialIsMerged(){ cruiseConfig = new BasicCruiseConfig(pipelines); PartialConfig partial = PartialConfigMother.withPipeline("pipeline3"); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(new GitMaterialConfig("http://git"), "myplug"); partial.setOrigins(new RepoConfigOrigin(configRepoConfig,"123")); ConfigReposConfig reposConfig = new ConfigReposConfig(); reposConfig.add(configRepoConfig); cruiseConfig.setConfigRepos(reposConfig); cruiseConfig.merge(Arrays.asList(partial), false); PipelineConfig pipeline3 = partial.getGroups().first().findBy(new CaseInsensitiveString("pipeline3")); assertThat(cruiseConfig.getAllPipelineConfigs().contains(pipeline3), is(true)); assertThat(cruiseConfig.getAllPipelineNames().contains(pipeline3.name()), is(true)); } }
@Test public void getAllLocalPipelineConfigs_shouldExcludePipelinesReferencedByRemoteEnvironmentWhenRequested() { pipelines = new BasicPipelineConfigs("group_main", new Authorization(), PipelineConfigMother.pipelineConfig("local-pipeline-1")); cruiseConfig = new BasicCruiseConfig(pipelines); ConfigReposConfig reposConfig = new ConfigReposConfig(); ConfigRepoConfig configRepoConfig = new ConfigRepoConfig(new GitMaterialConfig("http://git"), "myplug"); reposConfig.add(configRepoConfig); cruiseConfig.setConfigRepos(reposConfig); PartialConfig partialConfig = PartialConfigMother.withPipelineInGroup("remote-pipeline-1", "g2"); BasicEnvironmentConfig remoteEnvironment = new BasicEnvironmentConfig(new CaseInsensitiveString("UAT")); remoteEnvironment.setOrigins(new RepoConfigOrigin()); // remote environment declares a local pipeline as member remoteEnvironment.addPipeline(new CaseInsensitiveString("local-pipeline-1")); partialConfig.getEnvironments().add(remoteEnvironment); partialConfig.setOrigins(new RepoConfigOrigin(configRepoConfig,"123")); cruiseConfig.merge(Arrays.asList(partialConfig),true); assertThat(cruiseConfig.hasPipelineNamed(new CaseInsensitiveString("local-pipeline-1")),is(true)); List<PipelineConfig> localPipelines = cruiseConfig.getAllLocalPipelineConfigs(true); assertThat(localPipelines.size(),is(0)); }