mirror of
				https://github.com/siderolabs/talos.git
				synced 2025-10-31 00:11:36 +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" | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"log" | ||||
| 
 | ||||
| 	"github.com/talos-systems/os-runtime/pkg/resource" | ||||
| 	"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) | ||||
| 		} | ||||
| 
 | ||||
| 		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) | ||||
| 
 | ||||
| 		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