summaryrefslogtreecommitdiffstats
path: root/src/k8splugin/internal/helm/helm.go
diff options
context:
space:
mode:
authorKonrad Bańka <k.banka@samsung.com>2020-11-12 09:13:37 +0100
committerKonrad Bańka <k.banka@samsung.com>2020-11-18 14:16:29 +0100
commit8c86f56defd56c5ea02eb6952ba4b852599100d5 (patch)
tree22914b5a493ffdff2f540354e38019869976cbcb /src/k8splugin/internal/helm/helm.go
parent0c352ef0d74d4b51a0fce5123b34a6753e8ab6a4 (diff)
Improve early-detection of empty template
Previous empty template detection pattern matched only against templates resolved to empty-or-whitespace-only files. This change makes it handle other case of empty yaml correctly, namely, yaml containing comments only. Issue-ID: MULTICLOUD-1252 Signed-off-by: Konrad Bańka <k.banka@samsung.com> Change-Id: I9132e167ec607c8a4a4ca5584141ed043c6ddd4f
Diffstat (limited to 'src/k8splugin/internal/helm/helm.go')
-rw-r--r--src/k8splugin/internal/helm/helm.go34
1 files changed, 22 insertions, 12 deletions
diff --git a/src/k8splugin/internal/helm/helm.go b/src/k8splugin/internal/helm/helm.go
index 2150758b..d3715fce 100644
--- a/src/k8splugin/internal/helm/helm.go
+++ b/src/k8splugin/internal/helm/helm.go
@@ -23,6 +23,7 @@ import (
"os"
"path/filepath"
"regexp"
+ "sort"
"strings"
utils "github.com/onap/multicloud-k8s/src/k8splugin/internal"
@@ -55,16 +56,17 @@ type Template interface {
// TemplateClient implements the Template interface
// It will also be used to maintain any localized state
type TemplateClient struct {
- whitespaceRegex *regexp.Regexp
- kubeVersion string
- kubeNameSpace string
- releaseName string
+ emptyRegex *regexp.Regexp
+ kubeVersion string
+ kubeNameSpace string
+ releaseName string
}
// NewTemplateClient returns a new instance of TemplateClient
func NewTemplateClient(k8sversion, namespace, releasename string) *TemplateClient {
return &TemplateClient{
- whitespaceRegex: regexp.MustCompile(`^\s*$`),
+ // emptyRegex defines template content that could be considered empty yaml-wise
+ emptyRegex: regexp.MustCompile(`(?m)\A(^(\s*#.*|\s*)$\n?)*\z`),
// defaultKubeVersion is the default value of --kube-version flag
kubeVersion: k8sversion,
kubeNameSpace: namespace,
@@ -209,11 +211,19 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
continue
}
rmap := releaseutil.SplitManifests(v)
- count := 0
- for _, v1 := range rmap {
- key := fmt.Sprintf("%s-%d", k, count)
- newRenderedTemplates[key] = v1
- count = count + 1
+
+ // Iterating over map can yield different order at times
+ // so first we'll sort keys
+ sortedKeys := make([]string, len(rmap))
+ for k1, _ := range rmap {
+ sortedKeys = append(sortedKeys, k1)
+ }
+ // This makes empty files have the lowest indices
+ sort.Strings(sortedKeys)
+
+ for k1, v1 := range sortedKeys {
+ key := fmt.Sprintf("%s-%d", k, k1)
+ newRenderedTemplates[key] = rmap[v1]
}
}
@@ -232,7 +242,7 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
}
// blank template after execution
- if h.whitespaceRegex.MatchString(data) {
+ if h.emptyRegex.MatchString(data) {
continue
}
@@ -260,7 +270,7 @@ func (h *TemplateClient) GenerateKubernetesArtifacts(inputPath string, valueFile
func getGroupVersionKind(data string) (schema.GroupVersionKind, error) {
out, err := k8syaml.ToJSON([]byte(data))
if err != nil {
- return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json")
+ return schema.GroupVersionKind{}, pkgerrors.Wrap(err, "Converting yaml to json:\n"+data)
}
simpleMeta := json.SimpleMetaFactory{}