public PipelineTemplateConfig templateByName(CaseInsensitiveString foo) { for (PipelineTemplateConfig templateConfig : this) { if (templateConfig.name().equals(foo)) { return templateConfig; } } return null; }
public void cleanupAllUsagesOfRole(Role roleToDelete) { for (StageConfig stage : getStages()) { stage.cleanupAllUsagesOfRole(roleToDelete); } }
public PipelineTemplateConfigViewModel() { this(new PipelineTemplateConfig(), "", new ArrayList<>()); }
private void moveStage(StageConfig moveMeStage, int moveBy) { int current = this.indexOf(moveMeStage); if (current == -1) { throw new RuntimeException(String.format("Cannot find the stage '%s' in pipeline '%s'", moveMeStage.name(), name())); } this.remove(moveMeStage); this.add(current + moveBy, moveMeStage); }
public void validate(ValidationContext validationContext) { validateTemplateName(); validateStageNameUniqueness(); this.getAuthorization().validateTree(new DelegatingValidationContext(validationContext) { @Override public boolean shouldNotCheckRole() { return false; } }); }
public void encryptSecureProperties(CruiseConfig preprocessedConfig, PipelineTemplateConfig pipelineTemplateConfig) { if (doesNotHavePublishAndFetchExternalConfig()) { return; } for (StageConfig stageConfig : getStages()) { stageConfig.encryptSecureProperties(preprocessedConfig, pipelineTemplateConfig); } }
@Test public void shouldAllowEditingOfStageNameWhenItIsNotUsedAsDependencyMaterial() throws Exception { PipelineTemplateConfig template = new PipelineTemplateConfig(new CaseInsensitiveString("template"), StageConfigMother.oneBuildPlanWithResourcesAndMaterials("stage2")); BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); cruiseConfig.addTemplate(template); template.getStages().get(0).setName(new CaseInsensitiveString("updatedStageName")); template.validateTree(ConfigSaveValidationContext.forChain(cruiseConfig), cruiseConfig, false); assertThat(template.errors().isEmpty(), is(true)); }
@Test public void shouldValidateWhetherTheReferredParamsAreDefinedInPipelinesUsingTheTemplate() { PipelineTemplateConfig templateWithParams = PipelineTemplateConfigMother.createTemplateWithParams("template", "param1", "param2"); PipelineConfig pipelineConfig = PipelineConfigMother.pipelineConfigWithTemplate("pipeline", "template"); BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); cruiseConfig.addTemplate(templateWithParams); cruiseConfig.addPipelineWithoutValidation("group", pipelineConfig); templateWithParams.validateTree(ConfigSaveValidationContext.forChain(cruiseConfig), cruiseConfig, false); assertThat(templateWithParams.errors().getAllOn("params"), is(Arrays.asList("The param 'param1' is not defined in pipeline 'pipeline'", "The param 'param2' is not defined in pipeline 'pipeline'"))); }
public void validateNameUniquness(Map<String, PipelineTemplateConfig> templateMap) { String currentName = name.toLower(); PipelineTemplateConfig templateWithSameName = templateMap.get(currentName); if (templateWithSameName == null) { templateMap.put(currentName, this); } else { templateWithSameName.addError(NAME, String.format("Template name '%s' is not unique", templateWithSameName.name())); this.addError(NAME, String.format("Template name '%s' is not unique", name)); } }
@Override public void update(CruiseConfig modifiedConfig) { PipelineTemplateConfig existingTemplateConfig = findAddedTemplate(modifiedConfig); templateConfig.setAuthorization(existingTemplateConfig.getAuthorization()); TemplatesConfig templatesConfig = modifiedConfig.getTemplates(); templatesConfig.removeTemplateNamed(existingTemplateConfig.name()); templatesConfig.add(templateConfig); modifiedConfig.setTemplates(templatesConfig); }
private void validateDependencies(CruiseConfig preprocessedConfig) { List<CaseInsensitiveString> pipelineNames = preprocessedConfig.pipelinesAssociatedWithTemplate(this.name()); ParamsConfig paramsConfig = this.referredParams(); for (CaseInsensitiveString pipelineName : pipelineNames) { PipelineConfig pipelineConfig = preprocessedConfig.getPipelineConfigByName(pipelineName); PipelineConfigs pipelineGroup = preprocessedConfig.findGroupOfPipeline(pipelineConfig); PipelineConfigSaveValidationContext contextForStages = PipelineConfigSaveValidationContext.forChain(false, pipelineGroup.getGroup(), preprocessedConfig, pipelineConfig); validateParams(pipelineConfig, paramsConfig); validatePartsOfPipelineConfig(pipelineConfig, contextForStages); validateDependenciesOfDownstreams(pipelineConfig, contextForStages); } }
public static void toJSON(OutputWriter jsonWriter, PipelineTemplateConfig pipelineTemplateConfig) { jsonWriter.addLinks(linksWriter -> linksWriter .addLink("self", Routes.PipelineTemplateConfig.name(pipelineTemplateConfig.name().toString())) .addAbsoluteLink("doc", Routes.PipelineTemplateConfig.DOC) .addLink("find", Routes.PipelineTemplateConfig.find())); if (!pipelineTemplateConfig.errors().isEmpty()) { jsonWriter.addChild("errors", errorWriter -> { HashMap<String, String> errorMapping = new HashMap<>(); new ErrorGetter(new HashMap<>()).toJSON(errorWriter, pipelineTemplateConfig); }); } jsonWriter.add("name", pipelineTemplateConfig.name()); writeStages(jsonWriter, pipelineTemplateConfig); }
@Test public void shouldSetPrimitiveAttributes() { PipelineTemplateConfig pipelineTemplateConfig = new PipelineTemplateConfig(); Map map = m(PipelineTemplateConfig.NAME, "templateName"); pipelineTemplateConfig.setConfigAttributes(map); assertThat(pipelineTemplateConfig.name(), is(new CaseInsensitiveString("templateName"))); }
public boolean canBeEditedBy(CaseInsensitiveString username, List<Role> roles) { return getAuthorization().isUserAnAdmin(username, roles); } }
@Test public void shouldValidateRoleNamesInTemplateAdminAuthorization() { BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); ServerConfig serverConfig = new ServerConfig(new SecurityConfig(new AdminsConfig(new AdminUser(new CaseInsensitiveString("admin")))), null); cruiseConfig.setServerConfig(serverConfig); GoConfigMother.enableSecurityWithPasswordFilePlugin(cruiseConfig); RoleConfig roleConfig = new RoleConfig(new CaseInsensitiveString("non-existent-role"), new RoleUser("non-existent-user")); PipelineTemplateConfig template = new PipelineTemplateConfig(new CaseInsensitiveString("template"), new Authorization(new AdminsConfig(new AdminRole(roleConfig))), StageConfigMother.manualStage("stage2"), StageConfigMother.manualStage("stage")); template.validate(ConfigSaveValidationContext.forChain(cruiseConfig)); assertThat(template.getAllErrors().get(0).getAllOn("name"), is(Arrays.asList("Role \"non-existent-role\" does not exist."))); }
@Test public void shouldAddErrorsToRawCruiseConfigWhenTemplateHasErrors() { CruiseConfig cruiseConfig = GoConfigMother.configWithPipelines("pipeline-1"); cruiseConfig.getTemplates().add( new PipelineTemplateConfig(new CaseInsensitiveString("invalid template name"), new StageConfig(new CaseInsensitiveString("stage-1"), new JobConfigs(new JobConfig("job-1")) ))); PipelineConfig pipelineWithTemplate = new PipelineConfig(new CaseInsensitiveString("pipeline-with-template"), MaterialConfigsMother.defaultMaterialConfigs()); pipelineWithTemplate.setTemplateName(new CaseInsensitiveString("invalid template name")); cruiseConfig.getGroups().get(0).add(pipelineWithTemplate); CruiseConfig rawCruiseConfig = new Cloner().deepClone(cruiseConfig); MagicalGoConfigXmlLoader.validate(cruiseConfig); cruiseConfig.copyErrorsTo(rawCruiseConfig); ConfigErrors templateErrors = rawCruiseConfig.getTemplateByName(new CaseInsensitiveString("invalid template name")).errors(); assertThat(templateErrors.getAll().size(), is(1)); assertThat(templateErrors.getAll().get(0), is("Invalid template name 'invalid template name'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); }
@Test public void validate_shouldEnsureThatTemplateFollowsTheNameType() { BasicCruiseConfig cruiseConfig = GoConfigMother.defaultCruiseConfig(); PipelineTemplateConfig config = new PipelineTemplateConfig(new CaseInsensitiveString(".Abc")); config.validate(ConfigSaveValidationContext.forChain(cruiseConfig)); assertThat(config.errors().isEmpty(), is(false)); assertThat(config.errors().on(PipelineTemplateConfig.NAME), is("Invalid template name '.Abc'. This must be alphanumeric and can contain underscores and periods (however, it cannot start with a period). The maximum allowed length is 255 characters.")); }
private void validateElasticProfileId(JobConfig jobConfig, PipelineConfigSaveValidationContext preprocessedConfig) { String elasticProfileId = jobConfig.getElasticProfileId(); if (elasticProfileId != null && !preprocessedConfig.isValidProfileId(elasticProfileId)) { String message = String.format("No profile defined corresponding to profile_id '%s'", elasticProfileId); jobConfig.addError("elasticProfileId", message); this.errors().addAll(jobConfig.errors()); } }
@Test public void shouldThrowExceptionOnAddingTemplatesIfItAlreadyHasStages() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); try { PipelineTemplateConfig template = new PipelineTemplateConfig(); template.add(StageConfigMother.stageConfig("first")); pipelineConfig.setTemplateName(new CaseInsensitiveString("some-template")); fail("Should throw exception because the pipeline has stages already"); } catch (RuntimeException e) { assertThat(e.getMessage(), containsString("Cannot set template 'some-template' on pipeline 'pipeline' because it already has stages defined")); } }
@Test public void shouldReInitializeAuthorizationIfWeClearAllPermissions() { PipelineTemplateConfig templateConfig = PipelineTemplateConfigMother.createTemplate("template-1"); templateConfig.setConfigAttributes(m(BasicPipelineConfigs.AUTHORIZATION, a( DataStructureUtils.m(Authorization.NAME, "loser", Authorization.TYPE, Authorization.UserType.USER.toString(), Authorization.PRIVILEGES, a(DataStructureUtils.m(Authorization.PrivilegeType.ADMIN.toString(), Authorization.PrivilegeState.ON.toString()))), DataStructureUtils.m(Authorization.NAME, "boozer", Authorization.TYPE, Authorization.UserType.USER.toString(), Authorization.PRIVILEGES, a(DataStructureUtils.m(Authorization.PrivilegeType.ADMIN.toString(), Authorization.PrivilegeState.ON.toString()))), DataStructureUtils.m(Authorization.NAME, "geezer", Authorization.TYPE, Authorization.UserType.USER.toString(), Authorization.PRIVILEGES, a(DataStructureUtils.m(Authorization.PrivilegeType.ADMIN.toString(), Authorization.PrivilegeState.ON.toString())))))); Authorization authorization = templateConfig.getAuthorization(); assertThat(authorization.getAdminsConfig().size(), Matchers.is(3)); templateConfig.setConfigAttributes(m()); authorization = templateConfig.getAuthorization(); assertThat(authorization.getAdminsConfig().size(), Matchers.is(0)); }