Skip to content

Commit

Permalink
feat(pipelinetemplate): Support YAML output from templates (#1250)
Browse files Browse the repository at this point in the history
  • Loading branch information
robzienert committed Mar 29, 2017
1 parent 80294bd commit 7bb7b6c
Show file tree
Hide file tree
Showing 4 changed files with 58 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,16 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.netflix.spinnaker.orca.pipelinetemplate.PipelineTemplateModule;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.*;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.HandlebarsRenderer;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.JinjaRenderer;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.RenderedValueConverter;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.Renderer;
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render.YamlRenderedValueConverter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.yaml.snakeyaml.Yaml;

@ConditionalOnProperty("pipelineTemplate.enabled")
@ComponentScan(basePackageClasses = PipelineTemplateModule.class)
Expand All @@ -38,8 +43,8 @@ ObjectMapper pipelineTemplateObjectMapper() {
}

@Bean
RenderedValueConverter jsonRenderedValueConverter(ObjectMapper pipelineTemplateObjectMapper) {
return new JsonRenderedValueConverter(pipelineTemplateObjectMapper);
RenderedValueConverter yamlRenderedValueConverter() {
return new YamlRenderedValueConverter(new Yaml());
}

@Bean
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public String render(String template, RenderContext context) {
);
}

rendered = rendered.trim().replaceAll("\n", "");
rendered = rendered.trim();

if (!template.equals(rendered)) {
log.debug("rendered '" + template + "' -> '" + rendered + "'");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
/*
* Copyright 2017 Netflix, Inc.
*
* 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 com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render;

import com.netflix.spinnaker.orca.pipelinetemplate.exceptions.TemplateRenderException;
import org.yaml.snakeyaml.Yaml;
import org.yaml.snakeyaml.composer.ComposerException;

public class YamlRenderedValueConverter implements RenderedValueConverter {

private Yaml yaml;

public YamlRenderedValueConverter(Yaml yaml) {
this.yaml = yaml;
}

@Override
public Object convertRenderedValue(String renderedValue) {
try {
return yaml.load(renderedValue);
} catch (ComposerException e) {
throw new TemplateRenderException("template produced invalid yaml", e);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ package com.netflix.spinnaker.orca.pipelinetemplate.v1schema.render

import com.fasterxml.jackson.databind.ObjectMapper
import com.netflix.spinnaker.orca.pipelinetemplate.v1schema.model.PipelineTemplate
import org.yaml.snakeyaml.Yaml
import spock.lang.Specification
import spock.lang.Subject
import spock.lang.Unroll
Expand All @@ -25,8 +26,10 @@ class JinjaRendererSpec extends Specification {

ObjectMapper objectMapper = new ObjectMapper()

RenderedValueConverter renderedValueConverter = new YamlRenderedValueConverter(new Yaml())

@Subject
Renderer subject = new JinjaRenderer(objectMapper)
Renderer subject = new JinjaRenderer(renderedValueConverter, objectMapper)

@Unroll
def 'should render and return correct java type'() {
Expand Down Expand Up @@ -66,5 +69,12 @@ class JinjaRendererSpec extends Specification {
{% endfor %}
]
''' || List | ['key1:value1', 'key2:value2']
'''
{% for region in regions %}
- {{ region }}
{% endfor %}
''' || List | ['us-east-1', 'us-west-2']
}


}

0 comments on commit 7bb7b6c

Please sign in to comment.