From 107ca8116f4ea8a02aa7be6621b641243dae4398 Mon Sep 17 00:00:00 2001 From: Jim Minter Date: Thu, 28 Sep 2017 12:57:56 -0500 Subject: [PATCH] allow template labels to be parameterised --- .../apis/template/validation/validation.go | 2 -- pkg/template/template.go | 6 ++++ pkg/template/template_test.go | 34 +++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/pkg/template/apis/template/validation/validation.go b/pkg/template/apis/template/validation/validation.go index 55cabd597934..9ecd56831a17 100644 --- a/pkg/template/apis/template/validation/validation.go +++ b/pkg/template/apis/template/validation/validation.go @@ -4,7 +4,6 @@ import ( "fmt" "regexp" - unversionedvalidation "k8s.io/apimachinery/pkg/apis/meta/v1/validation" "k8s.io/apimachinery/pkg/util/validation/field" kapi "k8s.io/kubernetes/pkg/api" kapihelper "k8s.io/kubernetes/pkg/api/helper" @@ -52,7 +51,6 @@ func validateTemplateBody(template *templateapi.Template) (allErrs field.ErrorLi for i := range template.Parameters { allErrs = append(allErrs, ValidateParameter(&template.Parameters[i], field.NewPath("parameters").Index(i))...) } - allErrs = append(allErrs, unversionedvalidation.ValidateLabels(template.ObjectLabels, field.NewPath("labels"))...) return } diff --git a/pkg/template/template.go b/pkg/template/template.go index eba79a7eba14..4876bb0779ed 100644 --- a/pkg/template/template.go +++ b/pkg/template/template.go @@ -53,6 +53,12 @@ func (p *Processor) Process(template *templateapi.Template) field.ErrorList { // instruct a user on next steps for the template. template.Message, _ = p.EvaluateParameterSubstitution(paramMap, template.Message) + // Substitute parameters in ObjectLabels - must be done before the template + // objects themselves are iterated. + for k, v := range template.ObjectLabels { + template.ObjectLabels[k], _ = p.EvaluateParameterSubstitution(paramMap, v) + } + itemPath := field.NewPath("item") for i, item := range template.Objects { idxPath := itemPath.Index(i) diff --git a/pkg/template/template_test.go b/pkg/template/template_test.go index b58f926f5849..9fa7dea5f900 100644 --- a/pkg/template/template_test.go +++ b/pkg/template/template_test.go @@ -339,6 +339,40 @@ func TestEvaluateLabels(t *testing.T) { }`, Labels: map[string]string{"key2": "v3"}, }, + "parameterised label": { + Input: `{ + "kind":"Template", "apiVersion":"v1", + "objects": [ + { + "kind": "Service", "apiVersion": "v1", + "metadata": {"labels": {"key1": "v1", "key2": "v2"} } + } + ], + "parameters": [ + { + "name": "PARAMETER", + "value": "parameter-value" + } + ] + }`, + Output: `{ + "kind":"Template","apiVersion":"template.openshift.io/v1","metadata":{"creationTimestamp":null}, + "objects":[ + { + "apiVersion":"v1","kind":"Service","metadata":{ + "labels":{"key1":"v1","key2":"v2","key3":"parameter-value"}} + } + ], + "parameters":[ + { + "name":"PARAMETER", + "value":"parameter-value" + } + ], + "labels":{"key3":"parameter-value"} + }`, + Labels: map[string]string{"key3": "${PARAMETER}"}, + }, } for k, testCase := range testCases {