@Override public void onConfigChange(CruiseConfig newCruiseConfig) { ConfigReposConfig partSources = newCruiseConfig.getConfigRepos(); this.reposConfig = partSources; notifyListeners(partSources); }
public PackageDefinition getPackageDefinition(CruiseConfig cruiseConfig) { Map packageDefinitionMap = (Map) params.get(PACKAGE_DEFINITION); String repositoryId = (String) packageDefinitionMap.get(REPOSITORY_ID); PackageRepository packageRepository = cruiseConfig.getPackageRepositories().find(repositoryId); PackageDefinition packageDefinition = null; if (packageRepository != null) { packageDefinition = packageRepository.findPackage((String) params.get(PACKAGE_ID)); } return packageDefinition; } }
private SCMs getSCMs() { return this.cachedGoConfig.currentConfig().getSCMs(); }
@Override public void update(CruiseConfig modifiedConfig) { existingPackageRepository = modifiedConfig.getPackageRepositories().find(repository.getRepoId()); PackageRepositories packageRepositories = modifiedConfig.getPackageRepositories(); packageRepositories.removePackageRepository(this.repository.getId()); modifiedConfig.setPackageRepositories(packageRepositories); }
public CruiseConfig update(CruiseConfig cruiseConfig) { AgentConfig agentConfig = cruiseConfig.agents().getAgentByUuid(uuid); if (agentConfig.isNull()) { bomb("Unable to delete agent; Agent [" + uuid + "] not found."); } cruiseConfig.getEnvironments().removeAgentFromAllEnvironments(uuid); cruiseConfig.agents().remove(agentConfig); return cruiseConfig; }
private PipelineConfigDependencyGraph findUpstream(PipelineConfig currentPipeline) { List<PipelineConfigDependencyGraph> graphs = new ArrayList<>(); for (CaseInsensitiveString name : currentPipeline.upstreamPipelines()) { PipelineConfig pipelineConfig = getCurrentConfig().pipelineConfigByName(name); graphs.add(findUpstream(pipelineConfig)); } return new PipelineConfigDependencyGraph(currentPipeline, graphs.toArray(new PipelineConfigDependencyGraph[0])); }
public boolean hasOperatePermissionForGroup(final CaseInsensitiveString username, String groupName) { CruiseConfig cruiseConfig = goConfigService.getCurrentConfig(); if (!cruiseConfig.isSecurityEnabled()) { return true; } if (isUserAdmin(new Username(username))) { return true; } PipelineConfigs group = cruiseConfig.getGroups().findGroup(groupName); return isUserAdminOfGroup(username, group) || group.hasOperatePermission(username, new UserRoleMatcherImpl(cruiseConfig.server().security())); }
public List<PipelineConfig> getAllPipelineConfigs() { return cruiseConfig().getAllPipelineConfigs(); }
@Override public Agents getPreprocessedEntityConfig() { return updatedConfig.agents(); } }
public void validate(CruiseConfig cruiseConfig) { ServerConfig server = cruiseConfig.server(); String newTokenGenerationKey = server.getTokenGenerationKey(); if (tokenGenerationKey == null) { tokenGenerationKey = newTokenGenerationKey; } if (tokenGenerationKey == null || tokenGenerationKey.equals(newTokenGenerationKey) || ! systemEnvironment.enforceServerImmutability() ) { return; } throw new RuntimeException("The value of 'tokenGenerationKey' cannot be modified while the server is online. If you really want to make this change, you may do so while the server is offline. Please note: updating 'tokenGenerationKey' will invalidate all registration tokens issued to the agents so far."); }
@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 shouldAllowRoleWithParamsForStageInTemplate() throws Exception { CruiseConfig cruiseConfig = new BasicCruiseConfig(); cruiseConfig.server().security().addRole(new RoleConfig(new CaseInsensitiveString("role"))); cruiseConfig.addTemplate(new PipelineTemplateConfig(new CaseInsensitiveString("template"), stageWithAuth("#{ROLE}"))); PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("pipeline"), new MaterialConfigs()); pipelineConfig.setTemplateName(new CaseInsensitiveString("template")); pipelineConfig.addParam(new ParamConfig("ROLE", "role")); cruiseConfig.addPipeline("group", pipelineConfig); List<ConfigErrors> errorses = MagicalGoConfigXmlLoader.validate(cruiseConfig); assertThat(errorses.isEmpty(), is(true)); }
@Test public void shouldDecideIfPluggableSCMMaterialCanBeDeleted_BasedOnPluggableSCMMaterialBeingUsedByPipelines() throws Exception { SCM scmConfigOne = SCMMother.create("scm-id-1"); SCM scmConfigTwo = SCMMother.create("scm-id-2"); cruiseConfig.getSCMs().addAll(Arrays.asList(scmConfigOne, scmConfigTwo)); PipelineConfig pipeline = PipelineConfigMother.pipelineConfig("pipeline"); pipeline.addMaterialConfig(new PluggableSCMMaterialConfig(null, scmConfigOne, null, null)); cruiseConfig.addPipeline("existing_group", pipeline); assertThat(cruiseConfig.canDeletePluggableSCMMaterial(scmConfigOne), is(false)); assertThat(cruiseConfig.canDeletePluggableSCMMaterial(scmConfigTwo), is(true)); }
@Override public void update(CruiseConfig preprocessedConfig) { EnvironmentsConfig environments = preprocessedConfig.getEnvironments(); EnvironmentConfig envToRemove = environments.find(new CaseInsensitiveString(oldEnvironmentConfigName)); int index = environments.indexOf(envToRemove); environments.remove(index); environments.add(index, environmentConfig); }
@Test public void shouldFailValidationIfSCMTypeMaterialForPipelineHasARefToNonExistentSCM() throws Exception { CruiseConfig configToSave = new BasicCruiseConfig(); String scmId = "does-not-exist"; PluggableSCMMaterialConfig pluggableSCMMaterialConfig = new PluggableSCMMaterialConfig(scmId); SCM scm = SCMMother.create("scm-id", "scm-name", "pluginid", "1.0", new Configuration(ConfigurationPropertyMother.create("k1", false, "v1"))); configToSave.getSCMs().add(scm); configToSave.addPipeline("default", PipelineConfigMother.pipelineConfig("test", new MaterialConfigs(pluggableSCMMaterialConfig), new JobConfigs(new JobConfig("ls")))); try { xmlWriter.write(configToSave, output, false); fail("should not allow this"); } catch (XsdValidationException exception) { assertThat(exception.getMessage(), is("Key 'scmIdReferredByMaterial' with value 'does-not-exist' not found for identity constraint of element 'cruise'.")); } }
@Override public boolean isValid(CruiseConfig preprocessedConfig) { for (PipelineConfig pipeline : preprocessedConfig.getAllPipelineConfigs()) { if(pipeline.materialConfigs().hasDependencyMaterial(pipelineConfig)){ this.result.unprocessableEntity("Cannot delete pipeline '" + pipelineConfig.name() + "' as pipeline '" + String.format("%s (%s)", pipeline.name(), pipeline.getOriginDisplayName()) + "' depends on it"); return false; } } for (EnvironmentConfig environment : preprocessedConfig.getEnvironments()) { if(environment.getPipelineNames().contains(pipelineConfig.name())){ this.result.unprocessableEntity("Cannot delete pipeline '" + pipelineConfig.name() + "' as it is present in environment '" + environment.name() + "'."); return false; } } return true; }
@Test public void agentWithNoIpAddressShouldBeValid() throws Exception { CruiseConfig cruiseConfig = new BasicCruiseConfig(); AgentConfig agent = new AgentConfig("uuid", null, null); cruiseConfig.agents().add(agent); assertThat(cruiseConfig.validateAfterPreprocess().isEmpty(), is(true)); }
private UpdateConfigCommand pipelineAdder(final PipelineConfig pipelineConfig, final String groupName) { return cruiseConfig -> { cruiseConfig.addPipeline(groupName, pipelineConfig); return cruiseConfig; }; }
private PipelineGroupModels allPipelineInstances(Username username) { CruiseConfig currentConfig = goConfigService.currentCruiseConfig(); PipelineGroups groups = currentConfig.getGroups(); PipelineInstanceModels activePipelines = filterPermissions(pipelineDao.loadActivePipelines(), username); PipelineGroupModels groupModels = new PipelineGroupModels(); for (PipelineConfig pipelineConfig : currentConfig.getAllPipelineConfigs()) { CaseInsensitiveString pipelineName = pipelineConfig.name(); for (PipelineInstanceModel activePipeline : activePipelines.findAll(CaseInsensitiveString.str(pipelineName))) { activePipeline.setTrackingTool(pipelineConfig.getTrackingTool()); activePipeline.setMingleConfig(pipelineConfig.getMingleConfig()); populatePlaceHolderStages(activePipeline); String groupName = groups.findGroupNameByPipeline(pipelineName); if (groupName == null) { throw new RuntimeException("Unable to find group find pipeline " + pipelineName); } populatePreviousStageState(activePipeline); populateLockStatus(activePipeline.getName(), username, activePipeline); boolean canForce = schedulingCheckerService.canManuallyTrigger(CaseInsensitiveString.str(pipelineName), username); PipelinePauseInfo pauseInfo = pipelinePauseService.pipelinePauseInfo(CaseInsensitiveString.str(pipelineName)); groupModels.addPipelineInstance(groupName, activePipeline, canForce, securityService.hasOperatePermissionForPipeline( username.getUsername(), CaseInsensitiveString.str(pipelineName) ), pauseInfo); } } for (PipelineConfigs group : groups) { populateMissingPipelines(username, groupModels, group); } return groupModels; }