mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-13 01:50:55 +00:00
Merge pull request #4890 from brianpursley/kustomize-4628
merge2: preserve explicitly set null values
This commit is contained in:
@@ -732,6 +732,50 @@ spec:
|
|||||||
protocol: "TCP"
|
protocol: "TCP"
|
||||||
- containerPort: 8301
|
- containerPort: 8301
|
||||||
protocol: "UDP"
|
protocol: "UDP"
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
|
||||||
|
// Issue #4628
|
||||||
|
"should retain existing null values in targets": {
|
||||||
|
input: `
|
||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: chart
|
||||||
|
spec:
|
||||||
|
releaseName: helm-chart
|
||||||
|
timeout: 15m
|
||||||
|
values:
|
||||||
|
chart:
|
||||||
|
replicaCount: null
|
||||||
|
autoscaling: true
|
||||||
|
`,
|
||||||
|
patch: yaml.MustParse(`
|
||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: chart
|
||||||
|
spec:
|
||||||
|
releaseName: helm-chart
|
||||||
|
timeout: 15m
|
||||||
|
values:
|
||||||
|
deepgram-api:
|
||||||
|
some: value
|
||||||
|
`),
|
||||||
|
expected: `
|
||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2beta1
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: chart
|
||||||
|
spec:
|
||||||
|
releaseName: helm-chart
|
||||||
|
timeout: 15m
|
||||||
|
values:
|
||||||
|
chart:
|
||||||
|
replicaCount: null
|
||||||
|
autoscaling: true
|
||||||
|
deepgram-api:
|
||||||
|
some: value
|
||||||
`,
|
`,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
// Copyright 2019 The Kubernetes Authors.
|
// Copyright 2019 The Kubernetes Authors.
|
||||||
// SPDX-License-Identifier: Apache-2.0
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
// Package merge contains libraries for merging fields from one RNode to another
|
// Package merge2 contains libraries for merging fields from one RNode to another
|
||||||
// RNode
|
// RNode
|
||||||
package merge2
|
package merge2
|
||||||
|
|
||||||
@@ -20,7 +20,7 @@ func Merge(src, dest *yaml.RNode, mergeOptions yaml.MergeOptions) (*yaml.RNode,
|
|||||||
}.Walk()
|
}.Walk()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Merge parses the arguments, and merges fields from srcStr into destStr.
|
// MergeStrings parses the arguments, and merges fields from srcStr into destStr.
|
||||||
func MergeStrings(srcStr, destStr string, infer bool, mergeOptions yaml.MergeOptions) (string, error) {
|
func MergeStrings(srcStr, destStr string, infer bool, mergeOptions yaml.MergeOptions) (string, error) {
|
||||||
src, err := yaml.Parse(srcStr)
|
src, err := yaml.Parse(srcStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@@ -64,6 +64,12 @@ func (m Merger) VisitMap(nodes walk.Sources, s *openapi.ResourceSchema) (*yaml.R
|
|||||||
return walk.ClearNode, nil
|
return walk.ClearNode, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If Origin is missing, preserve explicitly set null in Dest ("null", "~", etc)
|
||||||
|
if nodes.Origin().IsNil() && !nodes.Dest().IsNil() && len(nodes.Dest().YNode().Value) > 0 {
|
||||||
|
// Return a new node so that it won't have a "!!null" tag and therefore won't be cleared.
|
||||||
|
return yaml.NewScalarRNode(nodes.Dest().YNode().Value), nil
|
||||||
|
}
|
||||||
|
|
||||||
return nodes.Origin(), nil
|
return nodes.Origin(), nil
|
||||||
}
|
}
|
||||||
if nodes.Origin().IsTaggedNull() {
|
if nodes.Origin().IsTaggedNull() {
|
||||||
|
|||||||
@@ -143,6 +143,66 @@ kind: Deployment
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test Case
|
||||||
|
//
|
||||||
|
{description: `remove scalar -- null in src, empty in dest`,
|
||||||
|
source: `
|
||||||
|
kind: Deployment
|
||||||
|
field: null
|
||||||
|
`,
|
||||||
|
dest: `
|
||||||
|
kind: Deployment
|
||||||
|
field:
|
||||||
|
`,
|
||||||
|
expected: `
|
||||||
|
kind: Deployment
|
||||||
|
`,
|
||||||
|
mergeOptions: yaml.MergeOptions{
|
||||||
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test Case
|
||||||
|
//
|
||||||
|
{description: `remove scalar -- null in src, null in dest`,
|
||||||
|
source: `
|
||||||
|
kind: Deployment
|
||||||
|
field: null
|
||||||
|
`,
|
||||||
|
dest: `
|
||||||
|
kind: Deployment
|
||||||
|
field: null
|
||||||
|
`,
|
||||||
|
expected: `
|
||||||
|
kind: Deployment
|
||||||
|
`,
|
||||||
|
mergeOptions: yaml.MergeOptions{
|
||||||
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
//
|
||||||
|
// Test Case
|
||||||
|
//
|
||||||
|
{description: `keep scalar -- missing in src, null in dest`,
|
||||||
|
source: `
|
||||||
|
kind: Deployment
|
||||||
|
`,
|
||||||
|
dest: `
|
||||||
|
kind: Deployment
|
||||||
|
field: null
|
||||||
|
`,
|
||||||
|
expected: `
|
||||||
|
kind: Deployment
|
||||||
|
field: null
|
||||||
|
`,
|
||||||
|
mergeOptions: yaml.MergeOptions{
|
||||||
|
ListIncreaseDirection: yaml.MergeOptionsListAppend,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
//
|
//
|
||||||
// Test Case
|
// Test Case
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -397,6 +397,7 @@ spec:
|
|||||||
replicas: 1
|
replicas: 1
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
|
creationTimestamp: null
|
||||||
labels:
|
labels:
|
||||||
workload.sas.com/class: stateless
|
workload.sas.com/class: stateless
|
||||||
spec:
|
spec:
|
||||||
|
|||||||
Reference in New Issue
Block a user