diff --git a/manifest/parse.go b/manifest/parse.go index e9160f99..85dea087 100644 --- a/manifest/parse.go +++ b/manifest/parse.go @@ -7,7 +7,7 @@ import ( "log" "strings" - "gopkg.in/yaml.v2" + yaml "gopkg.in/yaml.v2" "k8s.io/helm/pkg/proto/hapi/release" ) @@ -90,20 +90,27 @@ func Parse(manifest string, defaultNamespace string) map[string]*MappingResult { if strings.TrimSpace(content) == "" { continue } - var metadata metadata - if err := yaml.Unmarshal([]byte(content), &metadata); err != nil { + var parsedMetadata metadata + if err := yaml.Unmarshal([]byte(content), &parsedMetadata); err != nil { log.Fatalf("YAML unmarshal error: %s\nCan't unmarshal %s", err, content) } - if metadata.Metadata.Namespace == "" { - metadata.Metadata.Namespace = defaultNamespace + + //Skip content without any metadata. It is probably a template that + //only contains comments in the current state. + if (metadata{}) == parsedMetadata { + continue + } + + if parsedMetadata.Metadata.Namespace == "" { + parsedMetadata.Metadata.Namespace = defaultNamespace } - name := metadata.String() + name := parsedMetadata.String() if _, ok := result[name]; ok { log.Printf("Error: Found duplicate key %#v in manifest", name) } else { result[name] = &MappingResult{ Name: name, - Kind: metadata.Kind, + Kind: parsedMetadata.Kind, Content: content, } } diff --git a/manifest/parse_test.go b/manifest/parse_test.go index fe9ffc2d..c8250f04 100644 --- a/manifest/parse_test.go +++ b/manifest/parse_test.go @@ -58,3 +58,13 @@ func TestDeployV1Beta1(t *testing.T) { foundObjects(Parse(string(spec), "default")), ) } + +func TestEmpty(t *testing.T) { + spec, err := ioutil.ReadFile("testdata/empty.yaml") + require.NoError(t, err) + + require.Equal(t, + []string{}, + foundObjects(Parse(string(spec), "default")), + ) +} diff --git a/manifest/testdata/empty.yaml b/manifest/testdata/empty.yaml new file mode 100644 index 00000000..dfb678cb --- /dev/null +++ b/manifest/testdata/empty.yaml @@ -0,0 +1,8 @@ +--- +# Source: nginx/pod.yaml +# This template is empty +# and only contains comments +--- +# Source: nginx/pod.yaml +# This template is empty +# and only contains comments