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" | 	"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