mirror of
https://github.com/siderolabs/talos.git
synced 2025-11-01 00:41:40 +01:00
fix: skip empty manifest YAML sub-documents
If sub-doc contains a comment, it's not empty, but when loaded into JSON it yields `nil` which should be skipped, as `Unstructured` can't load from such object. E.g.: ``` --- # Some comment --- ``` Signed-off-by: Andrey Smirnov <smirnov.andrey@gmail.com>
This commit is contained in:
parent
e9fc54f6e3
commit
d2d5c72bb5
@ -10,6 +10,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"log"
|
||||||
|
|
||||||
"github.com/talos-systems/os-runtime/pkg/resource"
|
"github.com/talos-systems/os-runtime/pkg/resource"
|
||||||
"github.com/talos-systems/os-runtime/pkg/resource/core"
|
"github.com/talos-systems/os-runtime/pkg/resource/core"
|
||||||
@ -116,6 +117,13 @@ func (r *Manifest) SetYAML(yamlBytes []byte) error {
|
|||||||
return fmt.Errorf("error converting manifest to JSON: %w", err)
|
return fmt.Errorf("error converting manifest to JSON: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if bytes.Equal(jsonManifest, []byte("null")) || bytes.Equal(jsonManifest, []byte("{}")) {
|
||||||
|
// skip YAML docs which contain only comments
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("jsonManifest = %v", string(jsonManifest))
|
||||||
|
|
||||||
obj := new(unstructured.Unstructured)
|
obj := new(unstructured.Unstructured)
|
||||||
|
|
||||||
if err = json.Unmarshal(jsonManifest, obj); err != nil {
|
if err = json.Unmarshal(jsonManifest, obj); err != nil {
|
||||||
|
|||||||
49
pkg/resources/k8s/manifest_test.go
Normal file
49
pkg/resources/k8s/manifest_test.go
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
// This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
// License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
// file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
|
package k8s_test
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"github.com/stretchr/testify/require"
|
||||||
|
|
||||||
|
"github.com/talos-systems/talos/pkg/resources/k8s"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestManifestSetYAML(t *testing.T) {
|
||||||
|
manifest := k8s.NewManifest(k8s.ControlPlaneNamespaceName, "test")
|
||||||
|
|
||||||
|
require.NoError(t, manifest.SetYAML([]byte(strings.TrimSpace(`
|
||||||
|
---
|
||||||
|
apiVersion: audit.k8s.io/v1beta1
|
||||||
|
kind: Policy
|
||||||
|
rules:
|
||||||
|
- level: Metadata
|
||||||
|
---
|
||||||
|
`))))
|
||||||
|
|
||||||
|
assert.Len(t, manifest.Objects(), 1)
|
||||||
|
assert.Equal(t, manifest.Objects()[0].GetKind(), "Policy")
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestManifestSetYAMLEmptyComments(t *testing.T) {
|
||||||
|
manifest := k8s.NewManifest(k8s.ControlPlaneNamespaceName, "test")
|
||||||
|
|
||||||
|
require.NoError(t, manifest.SetYAML([]byte(strings.TrimSpace(`
|
||||||
|
---
|
||||||
|
apiVersion: audit.k8s.io/v1beta1
|
||||||
|
kind: Policy
|
||||||
|
rules:
|
||||||
|
- level: Metadata
|
||||||
|
---
|
||||||
|
# Left empty
|
||||||
|
---
|
||||||
|
`))))
|
||||||
|
|
||||||
|
assert.Len(t, manifest.Objects(), 1)
|
||||||
|
assert.Equal(t, manifest.Objects()[0].GetKind(), "Policy")
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user