public void validateTemplate(PipelineTemplateConfig templateConfig) { if (hasTemplate()) { if (new NameTypeValidator().isNameInvalid(templateName.toString())) { errors().add(TEMPLATE_NAME, NameTypeValidator.errorMessage("template", templateName)); } if (hasStages() && !hasTemplateApplied()) { addError("stages", format("Cannot add stages to pipeline '%s' which already references template '%s'", this.name(), this.getTemplateName())); addError("template", format("Cannot set template '%s' on pipeline '%s' because it already has stages defined", this.getTemplateName(), this.name())); } if (templateConfig == null) { addError("pipeline", format("Pipeline '%s' refers to non-existent template '%s'.", name(), templateName)); } } }
@Test public void shouldKnowIfATemplateWasApplied() { PipelineConfig pipelineConfig = PipelineConfigMother.createPipelineConfig("pipeline", "stage", "build"); assertThat(pipelineConfig.hasTemplateApplied(), is(false)); pipelineConfig.clear(); PipelineTemplateConfig template = new PipelineTemplateConfig(); template.add(StageConfigMother.stageConfig("first")); pipelineConfig.usingTemplate(template); assertThat(pipelineConfig.hasTemplateApplied(), is(true)); }
public void process(CruiseConfig cruiseConfig) { for (PipelineConfig pipelineConfig : cruiseConfig.getAllPipelineConfigs()) { if (pipelineConfig.hasTemplate()) { CaseInsensitiveString templateName = pipelineConfig.getTemplateName(); PipelineTemplateConfig pipelineTemplate = cruiseConfig.findTemplate(templateName); pipelineConfig.validateTemplate(pipelineTemplate); if (pipelineConfig.errors().isEmpty() && !pipelineConfig.hasTemplateApplied()) { pipelineConfig.usingTemplate(pipelineTemplate); } } } } }
@Test public void shouldTemplatizeAPipeline() { PipelineConfig config = PipelineConfigMother.createPipelineConfigWithStages("pipeline", "stage1", "stage2"); config.templatize(new CaseInsensitiveString("template")); assertThat(config.hasTemplate(), is(true)); assertThat(config.hasTemplateApplied(), is(false)); assertThat(config.getTemplateName(), is(new CaseInsensitiveString("template"))); assertThat(config.isEmpty(), is(true)); config.templatize(new CaseInsensitiveString("")); assertThat(config.hasTemplate(), is(false)); config.templatize(null); assertThat(config.hasTemplate(), is(false)); }
@Test public void shouldNotExpandWhenTemplateAssociatedWithPipelineDoesNotExist() throws Exception { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("p"), new MaterialConfigs()); pipelineConfig.templatize(new CaseInsensitiveString("does_not_exist")); preprocessor.process(new BasicCruiseConfig(new BasicPipelineConfigs(pipelineConfig))); assertThat(pipelineConfig.hasTemplateApplied(), is(false)); }
@Test public void shouldValidatePipelineToCheckItDoesNotAllowBothTemplateAndStages() throws Exception { PipelineConfig pipelineConfig = new PipelineConfig(new CaseInsensitiveString("p"), new MaterialConfigs()); pipelineConfig.templatize(new CaseInsensitiveString("template")); pipelineConfig.addStageWithoutValidityAssertion(new StageConfig(new CaseInsensitiveString("stage"), new JobConfigs())); preprocessor.process(new BasicCruiseConfig(new BasicPipelineConfigs(pipelineConfig))); assertThat(pipelineConfig.hasTemplateApplied(), is(false)); assertThat(pipelineConfig.errors().on("stages"), is("Cannot add stages to pipeline 'p' which already references template 'template'")); assertThat(pipelineConfig.errors().on("template"), is("Cannot set template 'template' on pipeline 'p' because it already has stages defined")); }
if (pipelineConfig.hasTemplateApplied()) { final List<ConfigErrors> allErrors = new ArrayList<>(); new GoConfigGraphWalker(stageConfig).walk(new ErrorCollectingHandler(allErrors) {