mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	Merge pull request #121575 from apelisse/update-smd
Update sigs.k8s.io/structured-merge-diff to v4.4.0
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.mod
									
									
									
									
									
								
							@@ -128,7 +128,7 @@ require (
 | 
				
			|||||||
	k8s.io/sample-apiserver v0.0.0
 | 
						k8s.io/sample-apiserver v0.0.0
 | 
				
			||||||
	k8s.io/system-validators v1.8.0
 | 
						k8s.io/system-validators v1.8.0
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								go.sum
									
									
									
									
									
								
							@@ -1361,8 +1361,8 @@ sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3 h1:vq2Tt
 | 
				
			|||||||
sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3/go.mod h1:/d88dHCvoy7d0AKFT0yytezSGZKjsZBVs9YTkBHSGFk=
 | 
					sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3/go.mod h1:/d88dHCvoy7d0AKFT0yytezSGZKjsZBVs9YTkBHSGFk=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.100.1 // indirect
 | 
						k8s.io/klog/v2 v2.100.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/api/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/api/go.sum
									
									
									
										generated
									
									
									
								
							@@ -118,7 +118,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -34,7 +34,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -548,8 +548,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/apimachinery/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/apimachinery/go.sum
									
									
									
										generated
									
									
									
								
							@@ -161,7 +161,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,6 +25,7 @@ import (
 | 
				
			|||||||
	"k8s.io/apimachinery/pkg/runtime/schema"
 | 
						"k8s.io/apimachinery/pkg/runtime/schema"
 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/merge"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/merge"
 | 
				
			||||||
 | 
						"sigs.k8s.io/structured-merge-diff/v4/typed"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type structuredMergeManager struct {
 | 
					type structuredMergeManager struct {
 | 
				
			||||||
@@ -95,11 +96,11 @@ func (f *structuredMergeManager) Update(liveObj, newObj runtime.Object, managed
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
 | 
							return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned)
 | 
						newObjTyped, err := f.typeConverter.ObjectToTyped(newObjVersioned, typed.AllowDuplicates)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, fmt.Errorf("failed to convert new object (%v) to smd typed: %v", objectGVKNN(newObjVersioned), err)
 | 
							return nil, nil, fmt.Errorf("failed to convert new object (%v) to smd typed: %v", objectGVKNN(newObjVersioned), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
 | 
						liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, fmt.Errorf("failed to convert live object (%v) to smd typed: %v", objectGVKNN(liveObjVersioned), err)
 | 
							return nil, nil, fmt.Errorf("failed to convert live object (%v) to smd typed: %v", objectGVKNN(liveObjVersioned), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -139,11 +140,13 @@ func (f *structuredMergeManager) Apply(liveObj, patchObj runtime.Object, managed
 | 
				
			|||||||
		return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
 | 
							return nil, nil, fmt.Errorf("failed to convert live object (%v) to proper version: %v", objectGVKNN(liveObj), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Don't allow duplicates in the applied object.
 | 
				
			||||||
	patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
 | 
						patchObjTyped, err := f.typeConverter.ObjectToTyped(patchObj)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, fmt.Errorf("failed to create typed patch object (%v): %v", objectGVKNN(patchObj), err)
 | 
							return nil, nil, fmt.Errorf("failed to create typed patch object (%v): %v", objectGVKNN(patchObj), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned)
 | 
					
 | 
				
			||||||
 | 
						liveObjTyped, err := f.typeConverter.ObjectToTyped(liveObjVersioned, typed.AllowDuplicates)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, nil, fmt.Errorf("failed to create typed live object (%v): %v", objectGVKNN(liveObjVersioned), err)
 | 
							return nil, nil, fmt.Errorf("failed to create typed live object (%v): %v", objectGVKNN(liveObjVersioned), err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -32,7 +32,7 @@ import (
 | 
				
			|||||||
// TypeConverter allows you to convert from runtime.Object to
 | 
					// TypeConverter allows you to convert from runtime.Object to
 | 
				
			||||||
// typed.TypedValue and the other way around.
 | 
					// typed.TypedValue and the other way around.
 | 
				
			||||||
type TypeConverter interface {
 | 
					type TypeConverter interface {
 | 
				
			||||||
	ObjectToTyped(runtime.Object) (*typed.TypedValue, error)
 | 
						ObjectToTyped(runtime.Object, ...typed.ValidationOptions) (*typed.TypedValue, error)
 | 
				
			||||||
	TypedToObject(*typed.TypedValue) (runtime.Object, error)
 | 
						TypedToObject(*typed.TypedValue) (runtime.Object, error)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -54,7 +54,7 @@ func NewTypeConverter(openapiSpec map[string]*spec.Schema, preserveUnknownFields
 | 
				
			|||||||
	return &typeConverter{parser: tr}, nil
 | 
						return &typeConverter{parser: tr}, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
 | 
					func (c *typeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
 | 
				
			||||||
	gvk := obj.GetObjectKind().GroupVersionKind()
 | 
						gvk := obj.GetObjectKind().GroupVersionKind()
 | 
				
			||||||
	t := c.parser[gvk]
 | 
						t := c.parser[gvk]
 | 
				
			||||||
	if t == nil {
 | 
						if t == nil {
 | 
				
			||||||
@@ -62,9 +62,9 @@ func (c *typeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, er
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	switch o := obj.(type) {
 | 
						switch o := obj.(type) {
 | 
				
			||||||
	case *unstructured.Unstructured:
 | 
						case *unstructured.Unstructured:
 | 
				
			||||||
		return t.FromUnstructured(o.UnstructuredContent())
 | 
							return t.FromUnstructured(o.UnstructuredContent(), opts...)
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return t.FromStructured(obj)
 | 
							return t.FromStructured(obj, opts...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -84,12 +84,12 @@ func NewDeducedTypeConverter() TypeConverter {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ObjectToTyped converts an object into a TypedValue with a "deduced type".
 | 
					// ObjectToTyped converts an object into a TypedValue with a "deduced type".
 | 
				
			||||||
func (deducedTypeConverter) ObjectToTyped(obj runtime.Object) (*typed.TypedValue, error) {
 | 
					func (deducedTypeConverter) ObjectToTyped(obj runtime.Object, opts ...typed.ValidationOptions) (*typed.TypedValue, error) {
 | 
				
			||||||
	switch o := obj.(type) {
 | 
						switch o := obj.(type) {
 | 
				
			||||||
	case *unstructured.Unstructured:
 | 
						case *unstructured.Unstructured:
 | 
				
			||||||
		return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent())
 | 
							return typed.DeducedParseableType.FromUnstructured(o.UnstructuredContent(), opts...)
 | 
				
			||||||
	default:
 | 
						default:
 | 
				
			||||||
		return typed.DeducedParseableType.FromStructured(obj)
 | 
							return typed.DeducedParseableType.FromStructured(obj, opts...)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,7 +52,7 @@ require (
 | 
				
			|||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0
 | 
						sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -543,7 +543,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -67,7 +67,7 @@ require (
 | 
				
			|||||||
	gopkg.in/inf.v0 v0.9.1 // indirect
 | 
						gopkg.in/inf.v0 v0.9.1 // indirect
 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/cli-runtime/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/cli-runtime/go.sum
									
									
									
										generated
									
									
									
								
							@@ -266,7 +266,7 @@ sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKU
 | 
				
			|||||||
sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY=
 | 
					sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -30,7 +30,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/client-go/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/client-go/go.sum
									
									
									
										generated
									
									
									
								
							@@ -174,7 +174,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -106,7 +106,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
						sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/cloud-provider/go.sum
									
									
									
										generated
									
									
									
								
							@@ -461,7 +461,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,7 +29,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/cluster-bootstrap/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/cluster-bootstrap/go.sum
									
									
									
										generated
									
									
									
								
							@@ -111,7 +111,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ require (
 | 
				
			|||||||
	k8s.io/apimachinery v0.0.0
 | 
						k8s.io/apimachinery v0.0.0
 | 
				
			||||||
	k8s.io/client-go v0.0.0
 | 
						k8s.io/client-go v0.0.0
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -147,7 +147,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ require (
 | 
				
			|||||||
	golang.org/x/tools v0.12.0 // indirect
 | 
						golang.org/x/tools v0.12.0 // indirect
 | 
				
			||||||
	google.golang.org/protobuf v1.31.0 // indirect
 | 
						google.golang.org/protobuf v1.31.0 // indirect
 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/code-generator/go.sum
									
									
									
										generated
									
									
									
								
							@@ -150,8 +150,8 @@ k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdz
 | 
				
			|||||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 | 
					k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -78,7 +78,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/api v0.0.0 // indirect
 | 
						k8s.io/api v0.0.0 // indirect
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/component-base/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/component-base/go.sum
									
									
									
										generated
									
									
									
								
							@@ -273,7 +273,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -48,7 +48,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/component-helpers/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/component-helpers/go.sum
									
									
									
										generated
									
									
									
								
							@@ -164,7 +164,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -99,7 +99,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
						sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/controller-manager/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/controller-manager/go.sum
									
									
									
										generated
									
									
									
								
							@@ -456,7 +456,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,7 +28,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/csi-translation-lib/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/csi-translation-lib/go.sum
									
									
									
										generated
									
									
									
								
							@@ -109,7 +109,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -52,7 +52,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -188,7 +188,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -59,7 +59,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/endpointslice/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/endpointslice/go.sum
									
									
									
										generated
									
									
									
								
							@@ -215,7 +215,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -22,7 +22,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.100.1
 | 
						k8s.io/klog/v2 v2.100.1
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-aggregator/go.sum
									
									
									
										generated
									
									
									
								
							@@ -470,8 +470,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.100.1 // indirect
 | 
						k8s.io/klog/v2 v2.100.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -166,7 +166,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -39,7 +39,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.100.1 // indirect
 | 
						k8s.io/klog/v2 v2.100.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-proxy/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-proxy/go.sum
									
									
									
										generated
									
									
									
								
							@@ -173,7 +173,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -26,7 +26,7 @@ require (
 | 
				
			|||||||
	k8s.io/klog/v2 v2.100.1 // indirect
 | 
						k8s.io/klog/v2 v2.100.1 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kube-scheduler/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kube-scheduler/go.sum
									
									
									
										generated
									
									
									
								
							@@ -142,7 +142,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,7 +43,7 @@ require (
 | 
				
			|||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd
 | 
				
			||||||
	sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3
 | 
						sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3
 | 
				
			||||||
	sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3
 | 
						sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0
 | 
						sigs.k8s.io/yaml v1.3.0
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kubectl/go.sum
									
									
									
										generated
									
									
									
								
							@@ -334,7 +334,7 @@ sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3 h1:vq2Tt
 | 
				
			|||||||
sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3/go.mod h1:/d88dHCvoy7d0AKFT0yytezSGZKjsZBVs9YTkBHSGFk=
 | 
					sigs.k8s.io/kustomize/kustomize/v5 v5.0.4-0.20230601165947-6ce0bf390ce3/go.mod h1:/d88dHCvoy7d0AKFT0yytezSGZKjsZBVs9YTkBHSGFk=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,7 +56,7 @@ require (
 | 
				
			|||||||
	gopkg.in/yaml.v2 v2.4.0 // indirect
 | 
						gopkg.in/yaml.v2 v2.4.0 // indirect
 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
						gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/kubelet/go.sum
									
									
									
										generated
									
									
									
								
							@@ -249,7 +249,7 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -91,7 +91,7 @@ require (
 | 
				
			|||||||
	k8s.io/component-helpers v0.0.0 // indirect
 | 
						k8s.io/component-helpers v0.0.0 // indirect
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/legacy-cloud-providers/go.sum
									
									
									
										generated
									
									
									
								
							@@ -816,7 +816,7 @@ rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/metrics/go.sum
									
									
									
										generated
									
									
									
								
							@@ -175,8 +175,8 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -103,7 +103,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
						sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
replace (
 | 
					replace (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/pod-security-admission/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/pod-security-admission/go.sum
									
									
									
										generated
									
									
									
								
							@@ -456,7 +456,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ require (
 | 
				
			|||||||
	k8s.io/component-base v0.0.0
 | 
						k8s.io/component-base v0.0.0
 | 
				
			||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/sample-apiserver/go.sum
									
									
									
										generated
									
									
									
								
							@@ -466,8 +466,8 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2S
 | 
				
			|||||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
					sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -64,7 +64,7 @@ require (
 | 
				
			|||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect
 | 
						sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect
 | 
				
			||||||
	sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect
 | 
						sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/sample-cli-plugin/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/sample-cli-plugin/go.sum
									
									
									
										generated
									
									
									
								
							@@ -266,7 +266,7 @@ sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKU
 | 
				
			|||||||
sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY=
 | 
					sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U=
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
					sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,7 @@ require (
 | 
				
			|||||||
	k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
						k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect
 | 
				
			||||||
	k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
						k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
 | 
				
			||||||
	sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
						sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
 | 
				
			||||||
	sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect
 | 
						sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
 | 
				
			||||||
	sigs.k8s.io/yaml v1.3.0 // indirect
 | 
						sigs.k8s.io/yaml v1.3.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										4
									
								
								staging/src/k8s.io/sample-controller/go.sum
									
									
									
										generated
									
									
									
								
							@@ -177,8 +177,8 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn
 | 
				
			|||||||
k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
					k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo=
 | 
				
			||||||
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
					sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4=
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
					sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08=
 | 
				
			||||||
sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
					sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
					sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
 | 
				
			||||||
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
					sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,12 +17,14 @@ limitations under the License.
 | 
				
			|||||||
package apiserver
 | 
					package apiserver
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
	"context"
 | 
						"context"
 | 
				
			||||||
	"encoding/json"
 | 
						"encoding/json"
 | 
				
			||||||
	"flag"
 | 
						"flag"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"net/http"
 | 
						"net/http"
 | 
				
			||||||
	"reflect"
 | 
						"reflect"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
	"testing"
 | 
						"testing"
 | 
				
			||||||
	"time"
 | 
						"time"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -3670,3 +3672,772 @@ func TestApplyFormerlyAtomicFields(t *testing.T) {
 | 
				
			|||||||
		t.Fatalf("unexpected managed fields: %v", cmp.Diff(expectedManagedFields, managedFields))
 | 
							t.Fatalf("unexpected managed fields: %v", cmp.Diff(expectedManagedFields, managedFields))
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestDuplicatesInAssociativeLists(t *testing.T) {
 | 
				
			||||||
 | 
						client, closeFn := setup(t)
 | 
				
			||||||
 | 
						defer closeFn()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ds := []byte(`{
 | 
				
			||||||
 | 
					  "apiVersion": "apps/v1",
 | 
				
			||||||
 | 
					  "kind": "DaemonSet",
 | 
				
			||||||
 | 
					  "metadata": {
 | 
				
			||||||
 | 
					    "name": "example-daemonset",
 | 
				
			||||||
 | 
					    "labels": {
 | 
				
			||||||
 | 
					      "app": "example"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "spec": {
 | 
				
			||||||
 | 
					    "selector": {
 | 
				
			||||||
 | 
					      "matchLabels": {
 | 
				
			||||||
 | 
					        "app": "example"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "template": {
 | 
				
			||||||
 | 
					      "metadata": {
 | 
				
			||||||
 | 
					        "labels": {
 | 
				
			||||||
 | 
					          "app": "example"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "spec": {
 | 
				
			||||||
 | 
					        "containers": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "name": "nginx",
 | 
				
			||||||
 | 
					            "image": "nginx",
 | 
				
			||||||
 | 
					            "ports": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "port0",
 | 
				
			||||||
 | 
					                "containerPort": 1
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					              	"name": "port1",
 | 
				
			||||||
 | 
					                "containerPort": 80
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					              	"name": "port2",
 | 
				
			||||||
 | 
					                "containerPort": 80
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "env": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "ENV0",
 | 
				
			||||||
 | 
					                "value": "/env0value"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "PATH",
 | 
				
			||||||
 | 
					                "value": "/bin"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "PATH",
 | 
				
			||||||
 | 
					                "value": "$PATH:/usr/bin"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}`)
 | 
				
			||||||
 | 
						// Create the object
 | 
				
			||||||
 | 
						obj, err := client.AppsV1().RESTClient().
 | 
				
			||||||
 | 
							Post().
 | 
				
			||||||
 | 
							Namespace("default").
 | 
				
			||||||
 | 
							Param("fieldManager", "create").
 | 
				
			||||||
 | 
							Resource("daemonsets").
 | 
				
			||||||
 | 
							Body(ds).
 | 
				
			||||||
 | 
							Do(context.TODO()).
 | 
				
			||||||
 | 
							Get()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to create the object: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						daemon := obj.(*appsv1.DaemonSet)
 | 
				
			||||||
 | 
						if want, got := 3, len(daemon.Spec.Template.Spec.Containers[0].Env); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v EnvVars, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if want, got := 3, len(daemon.Spec.Template.Spec.Containers[0].Ports); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v Ports, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						expectManagedFields(t, daemon.ManagedFields, `
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "create",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:deprecated.daemonset.template.generation": {}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
								"f:revisionHistoryLimit": {},
 | 
				
			||||||
 | 
								"f:selector": {},
 | 
				
			||||||
 | 
								"f:template": {
 | 
				
			||||||
 | 
									"f:metadata": {
 | 
				
			||||||
 | 
										"f:labels": {
 | 
				
			||||||
 | 
											".": {},
 | 
				
			||||||
 | 
											"f:app": {}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:spec": {
 | 
				
			||||||
 | 
										"f:containers": {
 | 
				
			||||||
 | 
											"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
											".": {},
 | 
				
			||||||
 | 
											"f:env": {
 | 
				
			||||||
 | 
												".": {},
 | 
				
			||||||
 | 
												"k:{\"name\":\"ENV0\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:value": {}
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
												"k:{\"name\":\"PATH\"}": {}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"f:image": {},
 | 
				
			||||||
 | 
											"f:imagePullPolicy": {},
 | 
				
			||||||
 | 
											"f:name": {},
 | 
				
			||||||
 | 
											"f:ports": {
 | 
				
			||||||
 | 
												".": {},
 | 
				
			||||||
 | 
												"k:{\"containerPort\":1,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:containerPort": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:protocol": {}
 | 
				
			||||||
 | 
												},
 | 
				
			||||||
 | 
												"k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"f:resources": {},
 | 
				
			||||||
 | 
											"f:terminationMessagePath": {},
 | 
				
			||||||
 | 
											"f:terminationMessagePolicy": {}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:dnsPolicy": {},
 | 
				
			||||||
 | 
										"f:restartPolicy": {},
 | 
				
			||||||
 | 
										"f:schedulerName": {},
 | 
				
			||||||
 | 
										"f:securityContext": {},
 | 
				
			||||||
 | 
										"f:terminationGracePeriodSeconds": {}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:updateStrategy": {
 | 
				
			||||||
 | 
										"f:rollingUpdate": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:maxSurge": {},
 | 
				
			||||||
 | 
										"f:maxUnavailable": {}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:type": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Apply unrelated fields, fieldmanager should be strictly additive.
 | 
				
			||||||
 | 
						ds = []byte(`
 | 
				
			||||||
 | 
					apiVersion: apps/v1
 | 
				
			||||||
 | 
					kind: DaemonSet
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: example-daemonset
 | 
				
			||||||
 | 
					  labels:
 | 
				
			||||||
 | 
					    app: example
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    matchLabels:
 | 
				
			||||||
 | 
					      app: example
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    spec:
 | 
				
			||||||
 | 
					      containers:
 | 
				
			||||||
 | 
					        - name: nginx
 | 
				
			||||||
 | 
					          image: nginx
 | 
				
			||||||
 | 
					          ports:
 | 
				
			||||||
 | 
					            - name: port3
 | 
				
			||||||
 | 
					              containerPort: 443
 | 
				
			||||||
 | 
					          env:
 | 
				
			||||||
 | 
					            - name: HOME
 | 
				
			||||||
 | 
					              value: "/usr/home"
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
						obj, err = client.AppsV1().RESTClient().
 | 
				
			||||||
 | 
							Patch(types.ApplyPatchType).
 | 
				
			||||||
 | 
							Namespace("default").
 | 
				
			||||||
 | 
							Name("example-daemonset").
 | 
				
			||||||
 | 
							Param("fieldManager", "apply").
 | 
				
			||||||
 | 
							Resource("daemonsets").
 | 
				
			||||||
 | 
							Body(ds).
 | 
				
			||||||
 | 
							Do(context.TODO()).
 | 
				
			||||||
 | 
							Get()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to aply the first object: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						daemon = obj.(*appsv1.DaemonSet)
 | 
				
			||||||
 | 
						if want, got := 4, len(daemon.Spec.Template.Spec.Containers[0].Env); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v EnvVars, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if want, got := 4, len(daemon.Spec.Template.Spec.Containers[0].Ports); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v Ports, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						expectManagedFields(t, daemon.ManagedFields, `
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "apply",
 | 
				
			||||||
 | 
							"operation": "Apply",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														"k:{\"name\":\"HOME\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														"k:{\"containerPort\":443,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "create",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:deprecated.daemonset.template.generation": {}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:revisionHistoryLimit": {},
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:metadata": {
 | 
				
			||||||
 | 
											"f:labels": {
 | 
				
			||||||
 | 
												".": {},
 | 
				
			||||||
 | 
												"f:app": {}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"name\":\"ENV0\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														},
 | 
				
			||||||
 | 
														"k:{\"name\":\"PATH\"}": {}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:imagePullPolicy": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"containerPort\":1,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:protocol": {}
 | 
				
			||||||
 | 
														},
 | 
				
			||||||
 | 
														"k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:resources": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePath": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePolicy": {}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"f:dnsPolicy": {},
 | 
				
			||||||
 | 
											"f:restartPolicy": {},
 | 
				
			||||||
 | 
											"f:schedulerName": {},
 | 
				
			||||||
 | 
											"f:securityContext": {},
 | 
				
			||||||
 | 
											"f:terminationGracePeriodSeconds": {}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:updateStrategy": {
 | 
				
			||||||
 | 
										"f:rollingUpdate": {
 | 
				
			||||||
 | 
											".": {},
 | 
				
			||||||
 | 
											"f:maxSurge": {},
 | 
				
			||||||
 | 
											"f:maxUnavailable": {}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:type": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Change name of some ports.
 | 
				
			||||||
 | 
						ds = []byte(`{
 | 
				
			||||||
 | 
					  "apiVersion": "apps/v1",
 | 
				
			||||||
 | 
					  "kind": "DaemonSet",
 | 
				
			||||||
 | 
					  "metadata": {
 | 
				
			||||||
 | 
					    "name": "example-daemonset",
 | 
				
			||||||
 | 
					    "labels": {
 | 
				
			||||||
 | 
					      "app": "example"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "spec": {
 | 
				
			||||||
 | 
					    "selector": {
 | 
				
			||||||
 | 
					      "matchLabels": {
 | 
				
			||||||
 | 
					        "app": "example"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "template": {
 | 
				
			||||||
 | 
					      "metadata": {
 | 
				
			||||||
 | 
					        "labels": {
 | 
				
			||||||
 | 
					          "app": "example"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "spec": {
 | 
				
			||||||
 | 
					        "containers": [
 | 
				
			||||||
 | 
					          {
 | 
				
			||||||
 | 
					            "name": "nginx",
 | 
				
			||||||
 | 
					            "image": "nginx",
 | 
				
			||||||
 | 
					            "ports": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "port0",
 | 
				
			||||||
 | 
					                "containerPort": 1
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					              	"name": "port3",
 | 
				
			||||||
 | 
					                "containerPort": 443
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					              	"name": "port4",
 | 
				
			||||||
 | 
					                "containerPort": 80
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					              	"name": "port5",
 | 
				
			||||||
 | 
					                "containerPort": 80
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ],
 | 
				
			||||||
 | 
					            "env": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "ENV0",
 | 
				
			||||||
 | 
					                "value": "/env0value"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "PATH",
 | 
				
			||||||
 | 
					                "value": "/bin"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "PATH",
 | 
				
			||||||
 | 
					                "value": "$PATH:/usr/bin:/usr/local/bin"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "name": "HOME",
 | 
				
			||||||
 | 
					                "value": "/usr/home"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}`)
 | 
				
			||||||
 | 
						obj, err = client.AppsV1().RESTClient().
 | 
				
			||||||
 | 
							Put().
 | 
				
			||||||
 | 
							Namespace("default").
 | 
				
			||||||
 | 
							Name("example-daemonset").
 | 
				
			||||||
 | 
							Param("fieldManager", "update").
 | 
				
			||||||
 | 
							Resource("daemonsets").
 | 
				
			||||||
 | 
							Body(ds).
 | 
				
			||||||
 | 
							Do(context.TODO()).
 | 
				
			||||||
 | 
							Get()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to update the object: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						daemon = obj.(*appsv1.DaemonSet)
 | 
				
			||||||
 | 
						if want, got := 4, len(daemon.Spec.Template.Spec.Containers[0].Env); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v EnvVars, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if want, got := 4, len(daemon.Spec.Template.Spec.Containers[0].Ports); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v Ports, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						expectManagedFields(t, daemon.ManagedFields, `
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "apply",
 | 
				
			||||||
 | 
							"operation": "Apply",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														"k:{\"name\":\"HOME\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														"k:{\"containerPort\":443,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "create",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {},
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:revisionHistoryLimit": {},
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:metadata": {
 | 
				
			||||||
 | 
											"f:labels": {
 | 
				
			||||||
 | 
												".": {},
 | 
				
			||||||
 | 
												"f:app": {}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"name\":\"ENV0\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:imagePullPolicy": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"containerPort\":1,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:protocol": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:resources": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePath": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePolicy": {}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"f:dnsPolicy": {},
 | 
				
			||||||
 | 
											"f:restartPolicy": {},
 | 
				
			||||||
 | 
											"f:schedulerName": {},
 | 
				
			||||||
 | 
											"f:securityContext": {},
 | 
				
			||||||
 | 
											"f:terminationGracePeriodSeconds": {}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:updateStrategy": {
 | 
				
			||||||
 | 
										"f:rollingUpdate": {
 | 
				
			||||||
 | 
											".": {},
 | 
				
			||||||
 | 
											"f:maxSurge": {},
 | 
				
			||||||
 | 
											"f:maxUnavailable": {}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:type": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "update",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {
 | 
				
			||||||
 | 
									"f:deprecated.daemonset.template.generation": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														"k:{\"name\":\"PATH\"}": {}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														"k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {}
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Replaces envvars and paths.
 | 
				
			||||||
 | 
						ds = []byte(`
 | 
				
			||||||
 | 
					apiVersion: apps/v1
 | 
				
			||||||
 | 
					kind: DaemonSet
 | 
				
			||||||
 | 
					metadata:
 | 
				
			||||||
 | 
					  name: example-daemonset
 | 
				
			||||||
 | 
					  labels:
 | 
				
			||||||
 | 
					    app: example
 | 
				
			||||||
 | 
					spec:
 | 
				
			||||||
 | 
					  selector:
 | 
				
			||||||
 | 
					    matchLabels:
 | 
				
			||||||
 | 
					      app: example
 | 
				
			||||||
 | 
					  template:
 | 
				
			||||||
 | 
					    spec:
 | 
				
			||||||
 | 
					      containers:
 | 
				
			||||||
 | 
					        - name: nginx
 | 
				
			||||||
 | 
					          image: nginx
 | 
				
			||||||
 | 
					          ports:
 | 
				
			||||||
 | 
					            - name: port80
 | 
				
			||||||
 | 
					              containerPort: 80
 | 
				
			||||||
 | 
					          env:
 | 
				
			||||||
 | 
					            - name: PATH
 | 
				
			||||||
 | 
					              value: "/bin:/usr/bin:/usr/local/bin"
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
						obj, err = client.AppsV1().RESTClient().
 | 
				
			||||||
 | 
							Patch(types.ApplyPatchType).
 | 
				
			||||||
 | 
							Namespace("default").
 | 
				
			||||||
 | 
							Name("example-daemonset").
 | 
				
			||||||
 | 
							Param("fieldManager", "apply").
 | 
				
			||||||
 | 
							Param("force", "true").
 | 
				
			||||||
 | 
							Resource("daemonsets").
 | 
				
			||||||
 | 
							Body(ds).
 | 
				
			||||||
 | 
							Do(context.TODO()).
 | 
				
			||||||
 | 
							Get()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to apply the second object: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						daemon = obj.(*appsv1.DaemonSet)
 | 
				
			||||||
 | 
						// HOME is removed, PATH is replaced with 1.
 | 
				
			||||||
 | 
						if want, got := 2, len(daemon.Spec.Template.Spec.Containers[0].Env); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v EnvVars, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if want, got := 2, len(daemon.Spec.Template.Spec.Containers[0].Ports); want != got {
 | 
				
			||||||
 | 
							t.Fatalf("Expected %v Ports, got %v", want, got)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						expectManagedFields(t, daemon.ManagedFields, `
 | 
				
			||||||
 | 
					[
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "apply",
 | 
				
			||||||
 | 
							"operation": "Apply",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														"k:{\"name\":\"PATH\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														"k:{\"containerPort\":80,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "create",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {},
 | 
				
			||||||
 | 
									"f:labels": {
 | 
				
			||||||
 | 
										".": {},
 | 
				
			||||||
 | 
										"f:app": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								"f:spec": {
 | 
				
			||||||
 | 
									"f:revisionHistoryLimit": {},
 | 
				
			||||||
 | 
									"f:selector": {},
 | 
				
			||||||
 | 
									"f:template": {
 | 
				
			||||||
 | 
										"f:metadata": {
 | 
				
			||||||
 | 
											"f:labels": {
 | 
				
			||||||
 | 
												".": {},
 | 
				
			||||||
 | 
												"f:app": {}
 | 
				
			||||||
 | 
											}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:spec": {
 | 
				
			||||||
 | 
											"f:containers": {
 | 
				
			||||||
 | 
												"k:{\"name\":\"nginx\"}": {
 | 
				
			||||||
 | 
													".": {},
 | 
				
			||||||
 | 
													"f:env": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"name\":\"ENV0\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:value": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:image": {},
 | 
				
			||||||
 | 
													"f:imagePullPolicy": {},
 | 
				
			||||||
 | 
													"f:name": {},
 | 
				
			||||||
 | 
													"f:ports": {
 | 
				
			||||||
 | 
														".": {},
 | 
				
			||||||
 | 
														"k:{\"containerPort\":1,\"protocol\":\"TCP\"}": {
 | 
				
			||||||
 | 
															".": {},
 | 
				
			||||||
 | 
															"f:containerPort": {},
 | 
				
			||||||
 | 
															"f:name": {},
 | 
				
			||||||
 | 
															"f:protocol": {}
 | 
				
			||||||
 | 
														}
 | 
				
			||||||
 | 
													},
 | 
				
			||||||
 | 
													"f:resources": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePath": {},
 | 
				
			||||||
 | 
													"f:terminationMessagePolicy": {}
 | 
				
			||||||
 | 
												}
 | 
				
			||||||
 | 
											},
 | 
				
			||||||
 | 
											"f:dnsPolicy": {},
 | 
				
			||||||
 | 
											"f:restartPolicy": {},
 | 
				
			||||||
 | 
											"f:schedulerName": {},
 | 
				
			||||||
 | 
											"f:securityContext": {},
 | 
				
			||||||
 | 
											"f:terminationGracePeriodSeconds": {}
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
									"f:updateStrategy": {
 | 
				
			||||||
 | 
										"f:rollingUpdate": {
 | 
				
			||||||
 | 
											".": {},
 | 
				
			||||||
 | 
											"f:maxSurge": {},
 | 
				
			||||||
 | 
											"f:maxUnavailable": {}
 | 
				
			||||||
 | 
										},
 | 
				
			||||||
 | 
										"f:type": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							"manager": "update",
 | 
				
			||||||
 | 
							"operation": "Update",
 | 
				
			||||||
 | 
							"apiVersion": "apps/v1",
 | 
				
			||||||
 | 
							"time": null,
 | 
				
			||||||
 | 
							"fieldsType": "FieldsV1",
 | 
				
			||||||
 | 
							"fieldsV1": {
 | 
				
			||||||
 | 
								"f:metadata": {
 | 
				
			||||||
 | 
									"f:annotations": {
 | 
				
			||||||
 | 
										"f:deprecated.daemonset.template.generation": {}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					`)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func expectManagedFields(t *testing.T, managedFields []metav1.ManagedFieldsEntry, expect string) {
 | 
				
			||||||
 | 
						t.Helper()
 | 
				
			||||||
 | 
						for i := range managedFields {
 | 
				
			||||||
 | 
							managedFields[i].Time = &metav1.Time{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						got, err := json.MarshalIndent(managedFields, "", "  ")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to marshal managed fields: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						b := &bytes.Buffer{}
 | 
				
			||||||
 | 
						err = json.Indent(b, []byte(expect), "", "  ")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatalf("Failed to indent json: %v", err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						want := b.String()
 | 
				
			||||||
 | 
						diff := cmp.Diff(strings.Split(strings.TrimSpace(string(got)), "\n"), strings.Split(strings.TrimSpace(want), "\n"))
 | 
				
			||||||
 | 
						if len(diff) > 0 {
 | 
				
			||||||
 | 
							t.Fatalf("Want:\n%s\nGot:\n%s\nDiff:\n%s", string(want), string(got), diff)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								vendor/modules.txt
									
									
									
									
										vendored
									
									
								
							@@ -2553,7 +2553,7 @@ sigs.k8s.io/kustomize/kyaml/yaml/merge2
 | 
				
			|||||||
sigs.k8s.io/kustomize/kyaml/yaml/merge3
 | 
					sigs.k8s.io/kustomize/kyaml/yaml/merge3
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml/yaml/schema
 | 
					sigs.k8s.io/kustomize/kyaml/yaml/schema
 | 
				
			||||||
sigs.k8s.io/kustomize/kyaml/yaml/walk
 | 
					sigs.k8s.io/kustomize/kyaml/yaml/walk
 | 
				
			||||||
# sigs.k8s.io/structured-merge-diff/v4 v4.3.0
 | 
					# sigs.k8s.io/structured-merge-diff/v4 v4.4.1
 | 
				
			||||||
## explicit; go 1.13
 | 
					## explicit; go 1.13
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4/fieldpath
 | 
					sigs.k8s.io/structured-merge-diff/v4/fieldpath
 | 
				
			||||||
sigs.k8s.io/structured-merge-diff/v4/merge
 | 
					sigs.k8s.io/structured-merge-diff/v4/merge
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										45
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/pathelementmap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										45
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/fieldpath/pathelementmap.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -28,20 +28,15 @@ import (
 | 
				
			|||||||
// for PathElementSet and SetNodeMap, so we could probably share the
 | 
					// for PathElementSet and SetNodeMap, so we could probably share the
 | 
				
			||||||
// code.
 | 
					// code.
 | 
				
			||||||
type PathElementValueMap struct {
 | 
					type PathElementValueMap struct {
 | 
				
			||||||
	members sortedPathElementValues
 | 
						valueMap PathElementMap
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func MakePathElementValueMap(size int) PathElementValueMap {
 | 
					func MakePathElementValueMap(size int) PathElementValueMap {
 | 
				
			||||||
	return PathElementValueMap{
 | 
						return PathElementValueMap{
 | 
				
			||||||
		members: make(sortedPathElementValues, 0, size),
 | 
							valueMap: MakePathElementMap(size),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type pathElementValue struct {
 | 
					 | 
				
			||||||
	PathElement PathElement
 | 
					 | 
				
			||||||
	Value       value.Value
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type sortedPathElementValues []pathElementValue
 | 
					type sortedPathElementValues []pathElementValue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Implement the sort interface; this would permit bulk creation, which would
 | 
					// Implement the sort interface; this would permit bulk creation, which would
 | 
				
			||||||
@@ -53,7 +48,40 @@ func (spev sortedPathElementValues) Less(i, j int) bool {
 | 
				
			|||||||
func (spev sortedPathElementValues) Swap(i, j int) { spev[i], spev[j] = spev[j], spev[i] }
 | 
					func (spev sortedPathElementValues) Swap(i, j int) { spev[i], spev[j] = spev[j], spev[i] }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Insert adds the pathelement and associated value in the map.
 | 
					// Insert adds the pathelement and associated value in the map.
 | 
				
			||||||
 | 
					// If insert is called twice with the same PathElement, the value is replaced.
 | 
				
			||||||
func (s *PathElementValueMap) Insert(pe PathElement, v value.Value) {
 | 
					func (s *PathElementValueMap) Insert(pe PathElement, v value.Value) {
 | 
				
			||||||
 | 
						s.valueMap.Insert(pe, v)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Get retrieves the value associated with the given PathElement from the map.
 | 
				
			||||||
 | 
					// (nil, false) is returned if there is no such PathElement.
 | 
				
			||||||
 | 
					func (s *PathElementValueMap) Get(pe PathElement) (value.Value, bool) {
 | 
				
			||||||
 | 
						v, ok := s.valueMap.Get(pe)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return nil, false
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return v.(value.Value), true
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// PathElementValueMap is a map from PathElement to interface{}.
 | 
				
			||||||
 | 
					type PathElementMap struct {
 | 
				
			||||||
 | 
						members sortedPathElementValues
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type pathElementValue struct {
 | 
				
			||||||
 | 
						PathElement PathElement
 | 
				
			||||||
 | 
						Value       interface{}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func MakePathElementMap(size int) PathElementMap {
 | 
				
			||||||
 | 
						return PathElementMap{
 | 
				
			||||||
 | 
							members: make(sortedPathElementValues, 0, size),
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Insert adds the pathelement and associated value in the map.
 | 
				
			||||||
 | 
					// If insert is called twice with the same PathElement, the value is replaced.
 | 
				
			||||||
 | 
					func (s *PathElementMap) Insert(pe PathElement, v interface{}) {
 | 
				
			||||||
	loc := sort.Search(len(s.members), func(i int) bool {
 | 
						loc := sort.Search(len(s.members), func(i int) bool {
 | 
				
			||||||
		return !s.members[i].PathElement.Less(pe)
 | 
							return !s.members[i].PathElement.Less(pe)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
@@ -62,6 +90,7 @@ func (s *PathElementValueMap) Insert(pe PathElement, v value.Value) {
 | 
				
			|||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if s.members[loc].PathElement.Equals(pe) {
 | 
						if s.members[loc].PathElement.Equals(pe) {
 | 
				
			||||||
 | 
							s.members[loc].Value = v
 | 
				
			||||||
		return
 | 
							return
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	s.members = append(s.members, pathElementValue{})
 | 
						s.members = append(s.members, pathElementValue{})
 | 
				
			||||||
@@ -71,7 +100,7 @@ func (s *PathElementValueMap) Insert(pe PathElement, v value.Value) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// Get retrieves the value associated with the given PathElement from the map.
 | 
					// Get retrieves the value associated with the given PathElement from the map.
 | 
				
			||||||
// (nil, false) is returned if there is no such PathElement.
 | 
					// (nil, false) is returned if there is no such PathElement.
 | 
				
			||||||
func (s *PathElementValueMap) Get(pe PathElement) (value.Value, bool) {
 | 
					func (s *PathElementMap) Get(pe PathElement) (interface{}, bool) {
 | 
				
			||||||
	loc := sort.Search(len(s.members), func(i int) bool {
 | 
						loc := sort.Search(len(s.members), func(i int) bool {
 | 
				
			||||||
		return !s.members[i].PathElement.Less(pe)
 | 
							return !s.members[i].PathElement.Less(pe)
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										33
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										33
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/merge/update.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -34,8 +34,6 @@ type UpdaterBuilder struct {
 | 
				
			|||||||
	Converter     Converter
 | 
						Converter     Converter
 | 
				
			||||||
	IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set
 | 
						IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	EnableUnions bool
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Stop comparing the new object with old object after applying.
 | 
						// Stop comparing the new object with old object after applying.
 | 
				
			||||||
	// This was initially used to avoid spurious etcd update, but
 | 
						// This was initially used to avoid spurious etcd update, but
 | 
				
			||||||
	// since that's vastly inefficient, we've come-up with a better
 | 
						// since that's vastly inefficient, we've come-up with a better
 | 
				
			||||||
@@ -49,7 +47,6 @@ func (u *UpdaterBuilder) BuildUpdater() *Updater {
 | 
				
			|||||||
	return &Updater{
 | 
						return &Updater{
 | 
				
			||||||
		Converter:         u.Converter,
 | 
							Converter:         u.Converter,
 | 
				
			||||||
		IgnoredFields:     u.IgnoredFields,
 | 
							IgnoredFields:     u.IgnoredFields,
 | 
				
			||||||
		enableUnions:      u.EnableUnions,
 | 
					 | 
				
			||||||
		returnInputOnNoop: u.ReturnInputOnNoop,
 | 
							returnInputOnNoop: u.ReturnInputOnNoop,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -63,19 +60,9 @@ type Updater struct {
 | 
				
			|||||||
	// Deprecated: This will eventually become private.
 | 
						// Deprecated: This will eventually become private.
 | 
				
			||||||
	IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set
 | 
						IgnoredFields map[fieldpath.APIVersion]*fieldpath.Set
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	enableUnions bool
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	returnInputOnNoop bool
 | 
						returnInputOnNoop bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// EnableUnionFeature turns on union handling. It is disabled by default until the
 | 
					 | 
				
			||||||
// feature is complete.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Deprecated: Use the builder instead.
 | 
					 | 
				
			||||||
func (s *Updater) EnableUnionFeature() {
 | 
					 | 
				
			||||||
	s.enableUnions = true
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (s *Updater) update(oldObject, newObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, workflow string, force bool) (fieldpath.ManagedFields, *typed.Comparison, error) {
 | 
					func (s *Updater) update(oldObject, newObject *typed.TypedValue, version fieldpath.APIVersion, managers fieldpath.ManagedFields, workflow string, force bool) (fieldpath.ManagedFields, *typed.Comparison, error) {
 | 
				
			||||||
	conflicts := fieldpath.ManagedFields{}
 | 
						conflicts := fieldpath.ManagedFields{}
 | 
				
			||||||
	removed := fieldpath.ManagedFields{}
 | 
						removed := fieldpath.ManagedFields{}
 | 
				
			||||||
@@ -160,12 +147,6 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fieldpath.ManagedFields{}, err
 | 
							return nil, fieldpath.ManagedFields{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if s.enableUnions {
 | 
					 | 
				
			||||||
		newObject, err = liveObject.NormalizeUnions(newObject)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, fieldpath.ManagedFields{}, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	managers, compare, err := s.update(liveObject, newObject, version, managers, manager, true)
 | 
						managers, compare, err := s.update(liveObject, newObject, version, managers, manager, true)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fieldpath.ManagedFields{}, err
 | 
							return nil, fieldpath.ManagedFields{}, err
 | 
				
			||||||
@@ -179,7 +160,7 @@ func (s *Updater) Update(liveObject, newObject *typed.TypedValue, version fieldp
 | 
				
			|||||||
		ignored = fieldpath.NewSet()
 | 
							ignored = fieldpath.NewSet()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	managers[manager] = fieldpath.NewVersionedSet(
 | 
						managers[manager] = fieldpath.NewVersionedSet(
 | 
				
			||||||
		managers[manager].Set().Union(compare.Modified).Union(compare.Added).Difference(compare.Removed).RecursiveDifference(ignored),
 | 
							managers[manager].Set().Difference(compare.Removed).Union(compare.Modified).Union(compare.Added).RecursiveDifference(ignored),
 | 
				
			||||||
		version,
 | 
							version,
 | 
				
			||||||
		false,
 | 
							false,
 | 
				
			||||||
	)
 | 
						)
 | 
				
			||||||
@@ -198,22 +179,10 @@ func (s *Updater) Apply(liveObject, configObject *typed.TypedValue, version fiel
 | 
				
			|||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fieldpath.ManagedFields{}, err
 | 
							return nil, fieldpath.ManagedFields{}, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if s.enableUnions {
 | 
					 | 
				
			||||||
		configObject, err = configObject.NormalizeUnionsApply(configObject)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, fieldpath.ManagedFields{}, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	newObject, err := liveObject.Merge(configObject)
 | 
						newObject, err := liveObject.Merge(configObject)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to merge config: %v", err)
 | 
							return nil, fieldpath.ManagedFields{}, fmt.Errorf("failed to merge config: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if s.enableUnions {
 | 
					 | 
				
			||||||
		newObject, err = configObject.NormalizeUnionsApply(newObject)
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			return nil, fieldpath.ManagedFields{}, err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	lastSet := managers[manager]
 | 
						lastSet := managers[manager]
 | 
				
			||||||
	set, err := configObject.ToFieldSet()
 | 
						set, err := configObject.ToFieldSet()
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/schema/schemaschema.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -145,6 +145,7 @@ var SchemaSchemaYAML = `types:
 | 
				
			|||||||
        list:
 | 
					        list:
 | 
				
			||||||
          elementType:
 | 
					          elementType:
 | 
				
			||||||
            scalar: string
 | 
					            scalar: string
 | 
				
			||||||
 | 
					          elementRelationship: atomic
 | 
				
			||||||
- name: untyped
 | 
					- name: untyped
 | 
				
			||||||
  map:
 | 
					  map:
 | 
				
			||||||
    fields:
 | 
					    fields:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										460
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/compare.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										460
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/compare.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,460 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					Copyright 2018 The Kubernetes Authors.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Licensed under the Apache License, Version 2.0 (the "License");
 | 
				
			||||||
 | 
					you may not use this file except in compliance with the License.
 | 
				
			||||||
 | 
					You may obtain a copy of the License at
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    http://www.apache.org/licenses/LICENSE-2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Unless required by applicable law or agreed to in writing, software
 | 
				
			||||||
 | 
					distributed under the License is distributed on an "AS IS" BASIS,
 | 
				
			||||||
 | 
					WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
				
			||||||
 | 
					See the License for the specific language governing permissions and
 | 
				
			||||||
 | 
					limitations under the License.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					package typed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
				
			||||||
 | 
						"sigs.k8s.io/structured-merge-diff/v4/schema"
 | 
				
			||||||
 | 
						"sigs.k8s.io/structured-merge-diff/v4/value"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Comparison is the return value of a TypedValue.Compare() operation.
 | 
				
			||||||
 | 
					//
 | 
				
			||||||
 | 
					// No field will appear in more than one of the three fieldsets. If all of the
 | 
				
			||||||
 | 
					// fieldsets are empty, then the objects must have been equal.
 | 
				
			||||||
 | 
					type Comparison struct {
 | 
				
			||||||
 | 
						// Removed contains any fields removed by rhs (the right-hand-side
 | 
				
			||||||
 | 
						// object in the comparison).
 | 
				
			||||||
 | 
						Removed *fieldpath.Set
 | 
				
			||||||
 | 
						// Modified contains fields present in both objects but different.
 | 
				
			||||||
 | 
						Modified *fieldpath.Set
 | 
				
			||||||
 | 
						// Added contains any fields added by rhs.
 | 
				
			||||||
 | 
						Added *fieldpath.Set
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// IsSame returns true if the comparison returned no changes (the two
 | 
				
			||||||
 | 
					// compared objects are similar).
 | 
				
			||||||
 | 
					func (c *Comparison) IsSame() bool {
 | 
				
			||||||
 | 
						return c.Removed.Empty() && c.Modified.Empty() && c.Added.Empty()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// String returns a human readable version of the comparison.
 | 
				
			||||||
 | 
					func (c *Comparison) String() string {
 | 
				
			||||||
 | 
						bld := strings.Builder{}
 | 
				
			||||||
 | 
						if !c.Modified.Empty() {
 | 
				
			||||||
 | 
							bld.WriteString(fmt.Sprintf("- Modified Fields:\n%v\n", c.Modified))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !c.Added.Empty() {
 | 
				
			||||||
 | 
							bld.WriteString(fmt.Sprintf("- Added Fields:\n%v\n", c.Added))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !c.Removed.Empty() {
 | 
				
			||||||
 | 
							bld.WriteString(fmt.Sprintf("- Removed Fields:\n%v\n", c.Removed))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return bld.String()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ExcludeFields fields from the compare recursively removes the fields
 | 
				
			||||||
 | 
					// from the entire comparison
 | 
				
			||||||
 | 
					func (c *Comparison) ExcludeFields(fields *fieldpath.Set) *Comparison {
 | 
				
			||||||
 | 
						if fields == nil || fields.Empty() {
 | 
				
			||||||
 | 
							return c
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						c.Removed = c.Removed.RecursiveDifference(fields)
 | 
				
			||||||
 | 
						c.Modified = c.Modified.RecursiveDifference(fields)
 | 
				
			||||||
 | 
						c.Added = c.Added.RecursiveDifference(fields)
 | 
				
			||||||
 | 
						return c
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type compareWalker struct {
 | 
				
			||||||
 | 
						lhs     value.Value
 | 
				
			||||||
 | 
						rhs     value.Value
 | 
				
			||||||
 | 
						schema  *schema.Schema
 | 
				
			||||||
 | 
						typeRef schema.TypeRef
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Current path that we are comparing
 | 
				
			||||||
 | 
						path fieldpath.Path
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Resulting comparison.
 | 
				
			||||||
 | 
						comparison *Comparison
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// internal housekeeping--don't set when constructing.
 | 
				
			||||||
 | 
						inLeaf bool // Set to true if we're in a "big leaf"--atomic map/list
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Allocate only as many walkers as needed for the depth by storing them here.
 | 
				
			||||||
 | 
						spareWalkers *[]*compareWalker
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						allocator value.Allocator
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// compare compares stuff.
 | 
				
			||||||
 | 
					func (w *compareWalker) compare(prefixFn func() string) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						if w.lhs == nil && w.rhs == nil {
 | 
				
			||||||
 | 
							// check this condidition here instead of everywhere below.
 | 
				
			||||||
 | 
							return errorf("at least one of lhs and rhs must be provided")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						a, ok := w.schema.Resolve(w.typeRef)
 | 
				
			||||||
 | 
						if !ok {
 | 
				
			||||||
 | 
							return errorf("schema error: no type found matching: %v", *w.typeRef.NamedType)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						alhs := deduceAtom(a, w.lhs)
 | 
				
			||||||
 | 
						arhs := deduceAtom(a, w.rhs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// deduceAtom does not fix the type for nil values
 | 
				
			||||||
 | 
						// nil is a wildcard and will accept whatever form the other operand takes
 | 
				
			||||||
 | 
						if w.rhs == nil {
 | 
				
			||||||
 | 
							errs = append(errs, handleAtom(alhs, w.typeRef, w)...)
 | 
				
			||||||
 | 
						} else if w.lhs == nil || alhs.Equals(&arhs) {
 | 
				
			||||||
 | 
							errs = append(errs, handleAtom(arhs, w.typeRef, w)...)
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							w2 := *w
 | 
				
			||||||
 | 
							errs = append(errs, handleAtom(alhs, w.typeRef, &w2)...)
 | 
				
			||||||
 | 
							errs = append(errs, handleAtom(arhs, w.typeRef, w)...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if !w.inLeaf {
 | 
				
			||||||
 | 
							if w.lhs == nil {
 | 
				
			||||||
 | 
								w.comparison.Added.Insert(w.path)
 | 
				
			||||||
 | 
							} else if w.rhs == nil {
 | 
				
			||||||
 | 
								w.comparison.Removed.Insert(w.path)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return errs.WithLazyPrefix(prefixFn)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// doLeaf should be called on leaves before descending into children, if there
 | 
				
			||||||
 | 
					// will be a descent. It modifies w.inLeaf.
 | 
				
			||||||
 | 
					func (w *compareWalker) doLeaf() {
 | 
				
			||||||
 | 
						if w.inLeaf {
 | 
				
			||||||
 | 
							// We're in a "big leaf", an atomic map or list. Ignore
 | 
				
			||||||
 | 
							// subsequent leaves.
 | 
				
			||||||
 | 
							return
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						w.inLeaf = true
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// We don't recurse into leaf fields for merging.
 | 
				
			||||||
 | 
						if w.lhs == nil {
 | 
				
			||||||
 | 
							w.comparison.Added.Insert(w.path)
 | 
				
			||||||
 | 
						} else if w.rhs == nil {
 | 
				
			||||||
 | 
							w.comparison.Removed.Insert(w.path)
 | 
				
			||||||
 | 
						} else if !value.EqualsUsing(w.allocator, w.rhs, w.lhs) {
 | 
				
			||||||
 | 
							// TODO: Equality is not sufficient for this.
 | 
				
			||||||
 | 
							// Need to implement equality check on the value type.
 | 
				
			||||||
 | 
							w.comparison.Modified.Insert(w.path)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) doScalar(t *schema.Scalar) ValidationErrors {
 | 
				
			||||||
 | 
						// Make sure at least one side is a valid scalar.
 | 
				
			||||||
 | 
						lerrs := validateScalar(t, w.lhs, "lhs: ")
 | 
				
			||||||
 | 
						rerrs := validateScalar(t, w.rhs, "rhs: ")
 | 
				
			||||||
 | 
						if len(lerrs) > 0 && len(rerrs) > 0 {
 | 
				
			||||||
 | 
							return append(lerrs, rerrs...)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// All scalars are leaf fields.
 | 
				
			||||||
 | 
						w.doLeaf()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) prepareDescent(pe fieldpath.PathElement, tr schema.TypeRef, cmp *Comparison) *compareWalker {
 | 
				
			||||||
 | 
						if w.spareWalkers == nil {
 | 
				
			||||||
 | 
							// first descent.
 | 
				
			||||||
 | 
							w.spareWalkers = &[]*compareWalker{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						var w2 *compareWalker
 | 
				
			||||||
 | 
						if n := len(*w.spareWalkers); n > 0 {
 | 
				
			||||||
 | 
							w2, *w.spareWalkers = (*w.spareWalkers)[n-1], (*w.spareWalkers)[:n-1]
 | 
				
			||||||
 | 
						} else {
 | 
				
			||||||
 | 
							w2 = &compareWalker{}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						*w2 = *w
 | 
				
			||||||
 | 
						w2.typeRef = tr
 | 
				
			||||||
 | 
						w2.path = append(w2.path, pe)
 | 
				
			||||||
 | 
						w2.lhs = nil
 | 
				
			||||||
 | 
						w2.rhs = nil
 | 
				
			||||||
 | 
						w2.comparison = cmp
 | 
				
			||||||
 | 
						return w2
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) finishDescent(w2 *compareWalker) {
 | 
				
			||||||
 | 
						// if the descent caused a realloc, ensure that we reuse the buffer
 | 
				
			||||||
 | 
						// for the next sibling.
 | 
				
			||||||
 | 
						w.path = w2.path[:len(w2.path)-1]
 | 
				
			||||||
 | 
						*w.spareWalkers = append(*w.spareWalkers, w2)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) derefMap(prefix string, v value.Value) (value.Map, ValidationErrors) {
 | 
				
			||||||
 | 
						if v == nil {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						m, err := mapValue(w.allocator, v)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errorf("%v: %v", prefix, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return m, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) visitListItems(t *schema.List, lhs, rhs value.List) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						rLen := 0
 | 
				
			||||||
 | 
						if rhs != nil {
 | 
				
			||||||
 | 
							rLen = rhs.Length()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						lLen := 0
 | 
				
			||||||
 | 
						if lhs != nil {
 | 
				
			||||||
 | 
							lLen = lhs.Length()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						maxLength := rLen
 | 
				
			||||||
 | 
						if lLen > maxLength {
 | 
				
			||||||
 | 
							maxLength = lLen
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// Contains all the unique PEs between lhs and rhs, exactly once.
 | 
				
			||||||
 | 
						// Order doesn't matter since we're just tracking ownership in a set.
 | 
				
			||||||
 | 
						allPEs := make([]fieldpath.PathElement, 0, maxLength)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Gather all the elements from lhs, indexed by PE, in a list for duplicates.
 | 
				
			||||||
 | 
						lValues := fieldpath.MakePathElementMap(lLen)
 | 
				
			||||||
 | 
						for i := 0; i < lLen; i++ {
 | 
				
			||||||
 | 
							child := lhs.At(i)
 | 
				
			||||||
 | 
							pe, err := listItemToPathElement(w.allocator, w.schema, t, child)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
				
			||||||
 | 
								// If we can't construct the path element, we can't
 | 
				
			||||||
 | 
								// even report errors deeper in the schema, so bail on
 | 
				
			||||||
 | 
								// this element.
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if v, found := lValues.Get(pe); found {
 | 
				
			||||||
 | 
								list := v.([]value.Value)
 | 
				
			||||||
 | 
								lValues.Insert(pe, append(list, child))
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								lValues.Insert(pe, []value.Value{child})
 | 
				
			||||||
 | 
								allPEs = append(allPEs, pe)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Gather all the elements from rhs, indexed by PE, in a list for duplicates.
 | 
				
			||||||
 | 
						rValues := fieldpath.MakePathElementMap(rLen)
 | 
				
			||||||
 | 
						for i := 0; i < rLen; i++ {
 | 
				
			||||||
 | 
							rValue := rhs.At(i)
 | 
				
			||||||
 | 
							pe, err := listItemToPathElement(w.allocator, w.schema, t, rValue)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
				
			||||||
 | 
								// If we can't construct the path element, we can't
 | 
				
			||||||
 | 
								// even report errors deeper in the schema, so bail on
 | 
				
			||||||
 | 
								// this element.
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if v, found := rValues.Get(pe); found {
 | 
				
			||||||
 | 
								list := v.([]value.Value)
 | 
				
			||||||
 | 
								rValues.Insert(pe, append(list, rValue))
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								rValues.Insert(pe, []value.Value{rValue})
 | 
				
			||||||
 | 
								if _, found := lValues.Get(pe); !found {
 | 
				
			||||||
 | 
									allPEs = append(allPEs, pe)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, pe := range allPEs {
 | 
				
			||||||
 | 
							lList := []value.Value(nil)
 | 
				
			||||||
 | 
							if l, ok := lValues.Get(pe); ok {
 | 
				
			||||||
 | 
								lList = l.([]value.Value)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							rList := []value.Value(nil)
 | 
				
			||||||
 | 
							if l, ok := rValues.Get(pe); ok {
 | 
				
			||||||
 | 
								rList = l.([]value.Value)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							switch {
 | 
				
			||||||
 | 
							case len(lList) == 0 && len(rList) == 0:
 | 
				
			||||||
 | 
								// We shouldn't be here anyway.
 | 
				
			||||||
 | 
								return
 | 
				
			||||||
 | 
							// Normal use-case:
 | 
				
			||||||
 | 
							// We have no duplicates for this PE, compare items one-to-one.
 | 
				
			||||||
 | 
							case len(lList) <= 1 && len(rList) <= 1:
 | 
				
			||||||
 | 
								lValue := value.Value(nil)
 | 
				
			||||||
 | 
								if len(lList) != 0 {
 | 
				
			||||||
 | 
									lValue = lList[0]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								rValue := value.Value(nil)
 | 
				
			||||||
 | 
								if len(rList) != 0 {
 | 
				
			||||||
 | 
									rValue = rList[0]
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								errs = append(errs, w.compareListItem(t, pe, lValue, rValue)...)
 | 
				
			||||||
 | 
							// Duplicates before & after use-case:
 | 
				
			||||||
 | 
							// Compare the duplicates lists as if they were atomic, mark modified if they changed.
 | 
				
			||||||
 | 
							case len(lList) >= 2 && len(rList) >= 2:
 | 
				
			||||||
 | 
								listEqual := func(lList, rList []value.Value) bool {
 | 
				
			||||||
 | 
									if len(lList) != len(rList) {
 | 
				
			||||||
 | 
										return false
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									for i := range lList {
 | 
				
			||||||
 | 
										if !value.Equals(lList[i], rList[i]) {
 | 
				
			||||||
 | 
											return false
 | 
				
			||||||
 | 
										}
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									return true
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								if !listEqual(lList, rList) {
 | 
				
			||||||
 | 
									w.comparison.Modified.Insert(append(w.path, pe))
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							// Duplicates before & not anymore use-case:
 | 
				
			||||||
 | 
							// Rcursively add new non-duplicate items, Remove duplicate marker,
 | 
				
			||||||
 | 
							case len(lList) >= 2:
 | 
				
			||||||
 | 
								if len(rList) != 0 {
 | 
				
			||||||
 | 
									errs = append(errs, w.compareListItem(t, pe, nil, rList[0])...)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								w.comparison.Removed.Insert(append(w.path, pe))
 | 
				
			||||||
 | 
							// New duplicates use-case:
 | 
				
			||||||
 | 
							// Recursively remove old non-duplicate items, add duplicate marker.
 | 
				
			||||||
 | 
							case len(rList) >= 2:
 | 
				
			||||||
 | 
								if len(lList) != 0 {
 | 
				
			||||||
 | 
									errs = append(errs, w.compareListItem(t, pe, lList[0], nil)...)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								w.comparison.Added.Insert(append(w.path, pe))
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) indexListPathElements(t *schema.List, list value.List) ([]fieldpath.PathElement, fieldpath.PathElementValueMap, ValidationErrors) {
 | 
				
			||||||
 | 
						var errs ValidationErrors
 | 
				
			||||||
 | 
						length := 0
 | 
				
			||||||
 | 
						if list != nil {
 | 
				
			||||||
 | 
							length = list.Length()
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						observed := fieldpath.MakePathElementValueMap(length)
 | 
				
			||||||
 | 
						pes := make([]fieldpath.PathElement, 0, length)
 | 
				
			||||||
 | 
						for i := 0; i < length; i++ {
 | 
				
			||||||
 | 
							child := list.At(i)
 | 
				
			||||||
 | 
							pe, err := listItemToPathElement(w.allocator, w.schema, t, child)
 | 
				
			||||||
 | 
							if err != nil {
 | 
				
			||||||
 | 
								errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
				
			||||||
 | 
								// If we can't construct the path element, we can't
 | 
				
			||||||
 | 
								// even report errors deeper in the schema, so bail on
 | 
				
			||||||
 | 
								// this element.
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							// Ignore repeated occurences of `pe`.
 | 
				
			||||||
 | 
							if _, found := observed.Get(pe); found {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							observed.Insert(pe, child)
 | 
				
			||||||
 | 
							pes = append(pes, pe)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return pes, observed, errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) compareListItem(t *schema.List, pe fieldpath.PathElement, lChild, rChild value.Value) ValidationErrors {
 | 
				
			||||||
 | 
						w2 := w.prepareDescent(pe, t.ElementType, w.comparison)
 | 
				
			||||||
 | 
						w2.lhs = lChild
 | 
				
			||||||
 | 
						w2.rhs = rChild
 | 
				
			||||||
 | 
						errs := w2.compare(pe.String)
 | 
				
			||||||
 | 
						w.finishDescent(w2)
 | 
				
			||||||
 | 
						return errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) derefList(prefix string, v value.Value) (value.List, ValidationErrors) {
 | 
				
			||||||
 | 
						if v == nil {
 | 
				
			||||||
 | 
							return nil, nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						l, err := listValue(w.allocator, v)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return nil, errorf("%v: %v", prefix, err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return l, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) doList(t *schema.List) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						lhs, _ := w.derefList("lhs: ", w.lhs)
 | 
				
			||||||
 | 
						if lhs != nil {
 | 
				
			||||||
 | 
							defer w.allocator.Free(lhs)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rhs, _ := w.derefList("rhs: ", w.rhs)
 | 
				
			||||||
 | 
						if rhs != nil {
 | 
				
			||||||
 | 
							defer w.allocator.Free(rhs)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If both lhs and rhs are empty/null, treat it as a
 | 
				
			||||||
 | 
						// leaf: this helps preserve the empty/null
 | 
				
			||||||
 | 
						// distinction.
 | 
				
			||||||
 | 
						emptyPromoteToLeaf := (lhs == nil || lhs.Length() == 0) && (rhs == nil || rhs.Length() == 0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if t.ElementRelationship == schema.Atomic || emptyPromoteToLeaf {
 | 
				
			||||||
 | 
							w.doLeaf()
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if lhs == nil && rhs == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errs = w.visitListItems(t, lhs, rhs)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) visitMapItem(t *schema.Map, out map[string]interface{}, key string, lhs, rhs value.Value) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						fieldType := t.ElementType
 | 
				
			||||||
 | 
						if sf, ok := t.FindField(key); ok {
 | 
				
			||||||
 | 
							fieldType = sf.Type
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						pe := fieldpath.PathElement{FieldName: &key}
 | 
				
			||||||
 | 
						w2 := w.prepareDescent(pe, fieldType, w.comparison)
 | 
				
			||||||
 | 
						w2.lhs = lhs
 | 
				
			||||||
 | 
						w2.rhs = rhs
 | 
				
			||||||
 | 
						errs = append(errs, w2.compare(pe.String)...)
 | 
				
			||||||
 | 
						w.finishDescent(w2)
 | 
				
			||||||
 | 
						return errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) visitMapItems(t *schema.Map, lhs, rhs value.Map) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						out := map[string]interface{}{}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						value.MapZipUsing(w.allocator, lhs, rhs, value.Unordered, func(key string, lhsValue, rhsValue value.Value) bool {
 | 
				
			||||||
 | 
							errs = append(errs, w.visitMapItem(t, out, key, lhsValue, rhsValue)...)
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (w *compareWalker) doMap(t *schema.Map) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						lhs, _ := w.derefMap("lhs: ", w.lhs)
 | 
				
			||||||
 | 
						if lhs != nil {
 | 
				
			||||||
 | 
							defer w.allocator.Free(lhs)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						rhs, _ := w.derefMap("rhs: ", w.rhs)
 | 
				
			||||||
 | 
						if rhs != nil {
 | 
				
			||||||
 | 
							defer w.allocator.Free(rhs)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						// If both lhs and rhs are empty/null, treat it as a
 | 
				
			||||||
 | 
						// leaf: this helps preserve the empty/null
 | 
				
			||||||
 | 
						// distinction.
 | 
				
			||||||
 | 
						emptyPromoteToLeaf := (lhs == nil || lhs.Empty()) && (rhs == nil || rhs.Empty())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if t.ElementRelationship == schema.Atomic || emptyPromoteToLeaf {
 | 
				
			||||||
 | 
							w.doLeaf()
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if lhs == nil && rhs == nil {
 | 
				
			||||||
 | 
							return nil
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						errs = append(errs, w.visitMapItems(t, lhs, rhs)...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return errs
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										23
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/helpers.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -197,7 +197,7 @@ func getAssociativeKeyDefault(s *schema.Schema, list *schema.List, fieldName str
 | 
				
			|||||||
	return field.Default, nil
 | 
						return field.Default, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func keyedAssociativeListItemToPathElement(a value.Allocator, s *schema.Schema, list *schema.List, index int, child value.Value) (fieldpath.PathElement, error) {
 | 
					func keyedAssociativeListItemToPathElement(a value.Allocator, s *schema.Schema, list *schema.List, child value.Value) (fieldpath.PathElement, error) {
 | 
				
			||||||
	pe := fieldpath.PathElement{}
 | 
						pe := fieldpath.PathElement{}
 | 
				
			||||||
	if child.IsNull() {
 | 
						if child.IsNull() {
 | 
				
			||||||
		// null entries are illegal.
 | 
							// null entries are illegal.
 | 
				
			||||||
@@ -225,7 +225,7 @@ func keyedAssociativeListItemToPathElement(a value.Allocator, s *schema.Schema,
 | 
				
			|||||||
	return pe, nil
 | 
						return pe, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func setItemToPathElement(list *schema.List, index int, child value.Value) (fieldpath.PathElement, error) {
 | 
					func setItemToPathElement(child value.Value) (fieldpath.PathElement, error) {
 | 
				
			||||||
	pe := fieldpath.PathElement{}
 | 
						pe := fieldpath.PathElement{}
 | 
				
			||||||
	switch {
 | 
						switch {
 | 
				
			||||||
	case child.IsMap():
 | 
						case child.IsMap():
 | 
				
			||||||
@@ -245,16 +245,15 @@ func setItemToPathElement(list *schema.List, index int, child value.Value) (fiel
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func listItemToPathElement(a value.Allocator, s *schema.Schema, list *schema.List, index int, child value.Value) (fieldpath.PathElement, error) {
 | 
					func listItemToPathElement(a value.Allocator, s *schema.Schema, list *schema.List, child value.Value) (fieldpath.PathElement, error) {
 | 
				
			||||||
	if list.ElementRelationship == schema.Associative {
 | 
						if list.ElementRelationship != schema.Associative {
 | 
				
			||||||
		if len(list.Keys) > 0 {
 | 
							return fieldpath.PathElement{}, errors.New("invalid indexing of non-associative list")
 | 
				
			||||||
			return keyedAssociativeListItemToPathElement(a, s, list, index, child)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		// If there's no keys, then we must be a set of primitives.
 | 
					 | 
				
			||||||
		return setItemToPathElement(list, index, child)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Use the index as a key for atomic lists.
 | 
						if len(list.Keys) > 0 {
 | 
				
			||||||
	return fieldpath.PathElement{Index: &index}, nil
 | 
							return keyedAssociativeListItemToPathElement(a, s, list, child)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If there's no keys, then we must be a set of primitives.
 | 
				
			||||||
 | 
						return setItemToPathElement(child)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										50
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/merge.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -180,14 +180,18 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	out := make([]interface{}, 0, outLen)
 | 
						out := make([]interface{}, 0, outLen)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	rhsOrder, observedRHS, rhsErrs := w.indexListPathElements(t, rhs)
 | 
						rhsPEs, observedRHS, rhsErrs := w.indexListPathElements(t, rhs, false)
 | 
				
			||||||
	errs = append(errs, rhsErrs...)
 | 
						errs = append(errs, rhsErrs...)
 | 
				
			||||||
	lhsOrder, observedLHS, lhsErrs := w.indexListPathElements(t, lhs)
 | 
						lhsPEs, observedLHS, lhsErrs := w.indexListPathElements(t, lhs, true)
 | 
				
			||||||
	errs = append(errs, lhsErrs...)
 | 
						errs = append(errs, lhsErrs...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if len(errs) != 0 {
 | 
				
			||||||
 | 
							return errs
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	sharedOrder := make([]*fieldpath.PathElement, 0, rLen)
 | 
						sharedOrder := make([]*fieldpath.PathElement, 0, rLen)
 | 
				
			||||||
	for i := range rhsOrder {
 | 
						for i := range rhsPEs {
 | 
				
			||||||
		pe := &rhsOrder[i]
 | 
							pe := &rhsPEs[i]
 | 
				
			||||||
		if _, ok := observedLHS.Get(*pe); ok {
 | 
							if _, ok := observedLHS.Get(*pe); ok {
 | 
				
			||||||
			sharedOrder = append(sharedOrder, pe)
 | 
								sharedOrder = append(sharedOrder, pe)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
@@ -199,13 +203,15 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
 | 
				
			|||||||
		sharedOrder = sharedOrder[1:]
 | 
							sharedOrder = sharedOrder[1:]
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	lLen, rLen = len(lhsOrder), len(rhsOrder)
 | 
						mergedRHS := fieldpath.MakePathElementMap(len(rhsPEs))
 | 
				
			||||||
 | 
						lLen, rLen = len(lhsPEs), len(rhsPEs)
 | 
				
			||||||
	for lI, rI := 0, 0; lI < lLen || rI < rLen; {
 | 
						for lI, rI := 0, 0; lI < lLen || rI < rLen; {
 | 
				
			||||||
		if lI < lLen && rI < rLen {
 | 
							if lI < lLen && rI < rLen {
 | 
				
			||||||
			pe := lhsOrder[lI]
 | 
								pe := lhsPEs[lI]
 | 
				
			||||||
			if pe.Equals(rhsOrder[rI]) {
 | 
								if pe.Equals(rhsPEs[rI]) {
 | 
				
			||||||
				// merge LHS & RHS items
 | 
									// merge LHS & RHS items
 | 
				
			||||||
				lChild, _ := observedLHS.Get(pe)
 | 
									mergedRHS.Insert(pe, struct{}{})
 | 
				
			||||||
 | 
									lChild, _ := observedLHS.Get(pe) // may be nil if the PE is duplicaated.
 | 
				
			||||||
				rChild, _ := observedRHS.Get(pe)
 | 
									rChild, _ := observedRHS.Get(pe)
 | 
				
			||||||
				mergeOut, errs := w.mergeListItem(t, pe, lChild, rChild)
 | 
									mergeOut, errs := w.mergeListItem(t, pe, lChild, rChild)
 | 
				
			||||||
				errs = append(errs, errs...)
 | 
									errs = append(errs, errs...)
 | 
				
			||||||
@@ -222,17 +228,17 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if _, ok := observedRHS.Get(pe); ok && nextShared != nil && !nextShared.Equals(lhsOrder[lI]) {
 | 
								if _, ok := observedRHS.Get(pe); ok && nextShared != nil && !nextShared.Equals(lhsPEs[lI]) {
 | 
				
			||||||
				// shared item, but not the one we want in this round
 | 
									// shared item, but not the one we want in this round
 | 
				
			||||||
				lI++
 | 
									lI++
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if lI < lLen {
 | 
							if lI < lLen {
 | 
				
			||||||
			pe := lhsOrder[lI]
 | 
								pe := lhsPEs[lI]
 | 
				
			||||||
			if _, ok := observedRHS.Get(pe); !ok {
 | 
								if _, ok := observedRHS.Get(pe); !ok {
 | 
				
			||||||
				// take LHS item
 | 
									// take LHS item using At to make sure we get the right item (observed may not contain the right item).
 | 
				
			||||||
				lChild, _ := observedLHS.Get(pe)
 | 
									lChild := lhs.AtUsing(w.allocator, lI)
 | 
				
			||||||
				mergeOut, errs := w.mergeListItem(t, pe, lChild, nil)
 | 
									mergeOut, errs := w.mergeListItem(t, pe, lChild, nil)
 | 
				
			||||||
				errs = append(errs, errs...)
 | 
									errs = append(errs, errs...)
 | 
				
			||||||
				if mergeOut != nil {
 | 
									if mergeOut != nil {
 | 
				
			||||||
@@ -240,12 +246,16 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				lI++
 | 
									lI++
 | 
				
			||||||
				continue
 | 
									continue
 | 
				
			||||||
 | 
								} else if _, ok := mergedRHS.Get(pe); ok {
 | 
				
			||||||
 | 
									// we've already merged it with RHS, we don't want to duplicate it, skip it.
 | 
				
			||||||
 | 
									lI++
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if rI < rLen {
 | 
							if rI < rLen {
 | 
				
			||||||
			// Take the RHS item, merge with matching LHS item if possible
 | 
								// Take the RHS item, merge with matching LHS item if possible
 | 
				
			||||||
			pe := rhsOrder[rI]
 | 
								pe := rhsPEs[rI]
 | 
				
			||||||
			lChild, _ := observedLHS.Get(pe) // may be nil
 | 
								mergedRHS.Insert(pe, struct{}{})
 | 
				
			||||||
 | 
								lChild, _ := observedLHS.Get(pe) // may be nil if absent or duplicaated.
 | 
				
			||||||
			rChild, _ := observedRHS.Get(pe)
 | 
								rChild, _ := observedRHS.Get(pe)
 | 
				
			||||||
			mergeOut, errs := w.mergeListItem(t, pe, lChild, rChild)
 | 
								mergeOut, errs := w.mergeListItem(t, pe, lChild, rChild)
 | 
				
			||||||
			errs = append(errs, errs...)
 | 
								errs = append(errs, errs...)
 | 
				
			||||||
@@ -272,7 +282,7 @@ func (w *mergingWalker) visitListItems(t *schema.List, lhs, rhs value.List) (err
 | 
				
			|||||||
	return errs
 | 
						return errs
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (w *mergingWalker) indexListPathElements(t *schema.List, list value.List) ([]fieldpath.PathElement, fieldpath.PathElementValueMap, ValidationErrors) {
 | 
					func (w *mergingWalker) indexListPathElements(t *schema.List, list value.List, allowDuplicates bool) ([]fieldpath.PathElement, fieldpath.PathElementValueMap, ValidationErrors) {
 | 
				
			||||||
	var errs ValidationErrors
 | 
						var errs ValidationErrors
 | 
				
			||||||
	length := 0
 | 
						length := 0
 | 
				
			||||||
	if list != nil {
 | 
						if list != nil {
 | 
				
			||||||
@@ -282,7 +292,7 @@ func (w *mergingWalker) indexListPathElements(t *schema.List, list value.List) (
 | 
				
			|||||||
	pes := make([]fieldpath.PathElement, 0, length)
 | 
						pes := make([]fieldpath.PathElement, 0, length)
 | 
				
			||||||
	for i := 0; i < length; i++ {
 | 
						for i := 0; i < length; i++ {
 | 
				
			||||||
		child := list.At(i)
 | 
							child := list.At(i)
 | 
				
			||||||
		pe, err := listItemToPathElement(w.allocator, w.schema, t, i, child)
 | 
							pe, err := listItemToPathElement(w.allocator, w.schema, t, child)
 | 
				
			||||||
		if err != nil {
 | 
							if err != nil {
 | 
				
			||||||
			errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
								errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
				
			||||||
			// If we can't construct the path element, we can't
 | 
								// If we can't construct the path element, we can't
 | 
				
			||||||
@@ -290,11 +300,15 @@ func (w *mergingWalker) indexListPathElements(t *schema.List, list value.List) (
 | 
				
			|||||||
			// this element.
 | 
								// this element.
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if _, found := observed.Get(pe); found {
 | 
							if _, found := observed.Get(pe); found && !allowDuplicates {
 | 
				
			||||||
			errs = append(errs, errorf("duplicate entries for key %v", pe.String())...)
 | 
								errs = append(errs, errorf("duplicate entries for key %v", pe.String())...)
 | 
				
			||||||
			continue
 | 
								continue
 | 
				
			||||||
 | 
							} else if !found {
 | 
				
			||||||
 | 
								observed.Insert(pe, child)
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								// Duplicated items are not merged with the new value, make them nil.
 | 
				
			||||||
 | 
								observed.Insert(pe, value.NewValueInterface(nil))
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		observed.Insert(pe, child)
 | 
					 | 
				
			||||||
		pes = append(pes, pe)
 | 
							pes = append(pes, pe)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return pes, observed, errs
 | 
						return pes, observed, errs
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										12
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										12
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/parser.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -93,13 +93,13 @@ func (p ParseableType) IsValid() bool {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
// FromYAML parses a yaml string into an object with the current schema
 | 
					// FromYAML parses a yaml string into an object with the current schema
 | 
				
			||||||
// and the type "typename" or an error if validation fails.
 | 
					// and the type "typename" or an error if validation fails.
 | 
				
			||||||
func (p ParseableType) FromYAML(object YAMLObject) (*TypedValue, error) {
 | 
					func (p ParseableType) FromYAML(object YAMLObject, opts ...ValidationOptions) (*TypedValue, error) {
 | 
				
			||||||
	var v interface{}
 | 
						var v interface{}
 | 
				
			||||||
	err := yaml.Unmarshal([]byte(object), &v)
 | 
						err := yaml.Unmarshal([]byte(object), &v)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return AsTyped(value.NewValueInterface(v), p.Schema, p.TypeRef)
 | 
						return AsTyped(value.NewValueInterface(v), p.Schema, p.TypeRef, opts...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FromUnstructured converts a go "interface{}" type, typically an
 | 
					// FromUnstructured converts a go "interface{}" type, typically an
 | 
				
			||||||
@@ -108,8 +108,8 @@ func (p ParseableType) FromYAML(object YAMLObject) (*TypedValue, error) {
 | 
				
			|||||||
// The provided interface{} must be one of: map[string]interface{},
 | 
					// The provided interface{} must be one of: map[string]interface{},
 | 
				
			||||||
// map[interface{}]interface{}, []interface{}, int types, float types,
 | 
					// map[interface{}]interface{}, []interface{}, int types, float types,
 | 
				
			||||||
// string or boolean. Nested interface{} must also be one of these types.
 | 
					// string or boolean. Nested interface{} must also be one of these types.
 | 
				
			||||||
func (p ParseableType) FromUnstructured(in interface{}) (*TypedValue, error) {
 | 
					func (p ParseableType) FromUnstructured(in interface{}, opts ...ValidationOptions) (*TypedValue, error) {
 | 
				
			||||||
	return AsTyped(value.NewValueInterface(in), p.Schema, p.TypeRef)
 | 
						return AsTyped(value.NewValueInterface(in), p.Schema, p.TypeRef, opts...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// FromStructured converts a go "interface{}" type, typically an structured object in
 | 
					// FromStructured converts a go "interface{}" type, typically an structured object in
 | 
				
			||||||
@@ -117,12 +117,12 @@ func (p ParseableType) FromUnstructured(in interface{}) (*TypedValue, error) {
 | 
				
			|||||||
// schema validation. The provided "interface{}" value must be a pointer so that the
 | 
					// schema validation. The provided "interface{}" value must be a pointer so that the
 | 
				
			||||||
// value can be modified via reflection. The provided "interface{}" may contain structs
 | 
					// value can be modified via reflection. The provided "interface{}" may contain structs
 | 
				
			||||||
// and types that are converted to Values by the jsonMarshaler interface.
 | 
					// and types that are converted to Values by the jsonMarshaler interface.
 | 
				
			||||||
func (p ParseableType) FromStructured(in interface{}) (*TypedValue, error) {
 | 
					func (p ParseableType) FromStructured(in interface{}, opts ...ValidationOptions) (*TypedValue, error) {
 | 
				
			||||||
	v, err := value.NewValueReflect(in)
 | 
						v, err := value.NewValueReflect(in)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		return nil, fmt.Errorf("error creating struct value reflector: %v", err)
 | 
							return nil, fmt.Errorf("error creating struct value reflector: %v", err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return AsTyped(v, p.Schema, p.TypeRef)
 | 
						return AsTyped(v, p.Schema, p.TypeRef, opts...)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// DeducedParseableType is a ParseableType that deduces the type from
 | 
					// DeducedParseableType is a ParseableType that deduces the type from
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										4
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/remove.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/remove.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -74,9 +74,9 @@ func (w *removingWalker) doList(t *schema.List) (errs ValidationErrors) {
 | 
				
			|||||||
	iter := l.RangeUsing(w.allocator)
 | 
						iter := l.RangeUsing(w.allocator)
 | 
				
			||||||
	defer w.allocator.Free(iter)
 | 
						defer w.allocator.Free(iter)
 | 
				
			||||||
	for iter.Next() {
 | 
						for iter.Next() {
 | 
				
			||||||
		i, item := iter.Item()
 | 
							_, item := iter.Item()
 | 
				
			||||||
		// Ignore error because we have already validated this list
 | 
							// Ignore error because we have already validated this list
 | 
				
			||||||
		pe, _ := listItemToPathElement(w.allocator, w.schema, t, i, item)
 | 
							pe, _ := listItemToPathElement(w.allocator, w.schema, t, item)
 | 
				
			||||||
		path, _ := fieldpath.MakePath(pe)
 | 
							path, _ := fieldpath.MakePath(pe)
 | 
				
			||||||
		// save items on the path when we shouldExtract
 | 
							// save items on the path when we shouldExtract
 | 
				
			||||||
		// but ignore them when we are removing (i.e. !w.shouldExtract)
 | 
							// but ignore them when we are removing (i.e. !w.shouldExtract)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										24
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/tofieldset.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/tofieldset.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -94,9 +94,31 @@ func (v *toFieldSetWalker) doScalar(t *schema.Scalar) ValidationErrors {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func (v *toFieldSetWalker) visitListItems(t *schema.List, list value.List) (errs ValidationErrors) {
 | 
					func (v *toFieldSetWalker) visitListItems(t *schema.List, list value.List) (errs ValidationErrors) {
 | 
				
			||||||
 | 
						// Keeps track of the PEs we've seen
 | 
				
			||||||
 | 
						seen := fieldpath.MakePathElementSet(list.Length())
 | 
				
			||||||
 | 
						// Keeps tracks of the PEs we've counted as duplicates
 | 
				
			||||||
 | 
						duplicates := fieldpath.MakePathElementSet(list.Length())
 | 
				
			||||||
	for i := 0; i < list.Length(); i++ {
 | 
						for i := 0; i < list.Length(); i++ {
 | 
				
			||||||
		child := list.At(i)
 | 
							child := list.At(i)
 | 
				
			||||||
		pe, _ := listItemToPathElement(v.allocator, v.schema, t, i, child)
 | 
							pe, _ := listItemToPathElement(v.allocator, v.schema, t, child)
 | 
				
			||||||
 | 
							if seen.Has(pe) {
 | 
				
			||||||
 | 
								if duplicates.Has(pe) {
 | 
				
			||||||
 | 
									// do nothing
 | 
				
			||||||
 | 
								} else {
 | 
				
			||||||
 | 
									v.set.Insert(append(v.path, pe))
 | 
				
			||||||
 | 
									duplicates.Insert(pe)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								seen.Insert(pe)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for i := 0; i < list.Length(); i++ {
 | 
				
			||||||
 | 
							child := list.At(i)
 | 
				
			||||||
 | 
							pe, _ := listItemToPathElement(v.allocator, v.schema, t, child)
 | 
				
			||||||
 | 
							if duplicates.Has(pe) {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
		v2 := v.prepareDescent(pe, t.ElementType)
 | 
							v2 := v.prepareDescent(pe, t.ElementType)
 | 
				
			||||||
		v2.value = child
 | 
							v2.value = child
 | 
				
			||||||
		errs = append(errs, v2.toFieldSet()...)
 | 
							errs = append(errs, v2.toFieldSet()...)
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										184
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										184
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/typed.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -17,8 +17,6 @@ limitations under the License.
 | 
				
			|||||||
package typed
 | 
					package typed
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
	"sync"
 | 
						"sync"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/fieldpath"
 | 
				
			||||||
@@ -26,16 +24,24 @@ import (
 | 
				
			|||||||
	"sigs.k8s.io/structured-merge-diff/v4/value"
 | 
						"sigs.k8s.io/structured-merge-diff/v4/value"
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// ValidationOptions is the list of all the options available when running the validation.
 | 
				
			||||||
 | 
					type ValidationOptions int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const (
 | 
				
			||||||
 | 
						// AllowDuplicates means that sets and associative lists can have duplicate similar items.
 | 
				
			||||||
 | 
						AllowDuplicates ValidationOptions = iota
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// AsTyped accepts a value and a type and returns a TypedValue. 'v' must have
 | 
					// AsTyped accepts a value and a type and returns a TypedValue. 'v' must have
 | 
				
			||||||
// type 'typeName' in the schema. An error is returned if the v doesn't conform
 | 
					// type 'typeName' in the schema. An error is returned if the v doesn't conform
 | 
				
			||||||
// to the schema.
 | 
					// to the schema.
 | 
				
			||||||
func AsTyped(v value.Value, s *schema.Schema, typeRef schema.TypeRef) (*TypedValue, error) {
 | 
					func AsTyped(v value.Value, s *schema.Schema, typeRef schema.TypeRef, opts ...ValidationOptions) (*TypedValue, error) {
 | 
				
			||||||
	tv := &TypedValue{
 | 
						tv := &TypedValue{
 | 
				
			||||||
		value:   v,
 | 
							value:   v,
 | 
				
			||||||
		typeRef: typeRef,
 | 
							typeRef: typeRef,
 | 
				
			||||||
		schema:  s,
 | 
							schema:  s,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if err := tv.Validate(); err != nil {
 | 
						if err := tv.Validate(opts...); err != nil {
 | 
				
			||||||
		return nil, err
 | 
							return nil, err
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return tv, nil
 | 
						return tv, nil
 | 
				
			||||||
@@ -81,8 +87,14 @@ func (tv TypedValue) Schema() *schema.Schema {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate returns an error with a list of every spec violation.
 | 
					// Validate returns an error with a list of every spec violation.
 | 
				
			||||||
func (tv TypedValue) Validate() error {
 | 
					func (tv TypedValue) Validate(opts ...ValidationOptions) error {
 | 
				
			||||||
	w := tv.walker()
 | 
						w := tv.walker()
 | 
				
			||||||
 | 
						for _, opt := range opts {
 | 
				
			||||||
 | 
							switch opt {
 | 
				
			||||||
 | 
							case AllowDuplicates:
 | 
				
			||||||
 | 
								w.allowDuplicates = true
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
	defer w.finished()
 | 
						defer w.finished()
 | 
				
			||||||
	if errs := w.validate(nil); len(errs) != 0 {
 | 
						if errs := w.validate(nil); len(errs) != 0 {
 | 
				
			||||||
		return errs
 | 
							return errs
 | 
				
			||||||
@@ -117,6 +129,10 @@ func (tv TypedValue) Merge(pso *TypedValue) (*TypedValue, error) {
 | 
				
			|||||||
	return merge(&tv, pso, ruleKeepRHS, nil)
 | 
						return merge(&tv, pso, ruleKeepRHS, nil)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var cmpwPool = sync.Pool{
 | 
				
			||||||
 | 
						New: func() interface{} { return &compareWalker{} },
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Compare compares the two objects. See the comments on the `Comparison`
 | 
					// Compare compares the two objects. See the comments on the `Comparison`
 | 
				
			||||||
// struct for details on the return value.
 | 
					// struct for details on the return value.
 | 
				
			||||||
//
 | 
					//
 | 
				
			||||||
@@ -124,34 +140,44 @@ func (tv TypedValue) Merge(pso *TypedValue) (*TypedValue, error) {
 | 
				
			|||||||
// match), or an error will be returned. Validation errors will be returned if
 | 
					// match), or an error will be returned. Validation errors will be returned if
 | 
				
			||||||
// the objects don't conform to the schema.
 | 
					// the objects don't conform to the schema.
 | 
				
			||||||
func (tv TypedValue) Compare(rhs *TypedValue) (c *Comparison, err error) {
 | 
					func (tv TypedValue) Compare(rhs *TypedValue) (c *Comparison, err error) {
 | 
				
			||||||
	c = &Comparison{
 | 
						lhs := tv
 | 
				
			||||||
 | 
						if lhs.schema != rhs.schema {
 | 
				
			||||||
 | 
							return nil, errorf("expected objects with types from the same schema")
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if !lhs.typeRef.Equals(&rhs.typeRef) {
 | 
				
			||||||
 | 
							return nil, errorf("expected objects of the same type, but got %v and %v", lhs.typeRef, rhs.typeRef)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmpw := cmpwPool.Get().(*compareWalker)
 | 
				
			||||||
 | 
						defer func() {
 | 
				
			||||||
 | 
							cmpw.lhs = nil
 | 
				
			||||||
 | 
							cmpw.rhs = nil
 | 
				
			||||||
 | 
							cmpw.schema = nil
 | 
				
			||||||
 | 
							cmpw.typeRef = schema.TypeRef{}
 | 
				
			||||||
 | 
							cmpw.comparison = nil
 | 
				
			||||||
 | 
							cmpw.inLeaf = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cmpwPool.Put(cmpw)
 | 
				
			||||||
 | 
						}()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cmpw.lhs = lhs.value
 | 
				
			||||||
 | 
						cmpw.rhs = rhs.value
 | 
				
			||||||
 | 
						cmpw.schema = lhs.schema
 | 
				
			||||||
 | 
						cmpw.typeRef = lhs.typeRef
 | 
				
			||||||
 | 
						cmpw.comparison = &Comparison{
 | 
				
			||||||
		Removed:  fieldpath.NewSet(),
 | 
							Removed:  fieldpath.NewSet(),
 | 
				
			||||||
		Modified: fieldpath.NewSet(),
 | 
							Modified: fieldpath.NewSet(),
 | 
				
			||||||
		Added:    fieldpath.NewSet(),
 | 
							Added:    fieldpath.NewSet(),
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	a := value.NewFreelistAllocator()
 | 
						if cmpw.allocator == nil {
 | 
				
			||||||
	_, err = merge(&tv, rhs, func(w *mergingWalker) {
 | 
							cmpw.allocator = value.NewFreelistAllocator()
 | 
				
			||||||
		if w.lhs == nil {
 | 
					 | 
				
			||||||
			c.Added.Insert(w.path)
 | 
					 | 
				
			||||||
		} else if w.rhs == nil {
 | 
					 | 
				
			||||||
			c.Removed.Insert(w.path)
 | 
					 | 
				
			||||||
		} else if !value.EqualsUsing(a, w.rhs, w.lhs) {
 | 
					 | 
				
			||||||
			// TODO: Equality is not sufficient for this.
 | 
					 | 
				
			||||||
			// Need to implement equality check on the value type.
 | 
					 | 
				
			||||||
			c.Modified.Insert(w.path)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}, func(w *mergingWalker) {
 | 
					 | 
				
			||||||
		if w.lhs == nil {
 | 
					 | 
				
			||||||
			c.Added.Insert(w.path)
 | 
					 | 
				
			||||||
		} else if w.rhs == nil {
 | 
					 | 
				
			||||||
			c.Removed.Insert(w.path)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return c, nil
 | 
						errs := cmpw.compare(nil)
 | 
				
			||||||
 | 
						if len(errs) > 0 {
 | 
				
			||||||
 | 
							return nil, errs
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return cmpw.comparison, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// RemoveItems removes each provided list or map item from the value.
 | 
					// RemoveItems removes each provided list or map item from the value.
 | 
				
			||||||
@@ -166,63 +192,6 @@ func (tv TypedValue) ExtractItems(items *fieldpath.Set) *TypedValue {
 | 
				
			|||||||
	return &tv
 | 
						return &tv
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// NormalizeUnions takes the new object and normalizes the union:
 | 
					 | 
				
			||||||
// - If discriminator changed to non-nil, and a new field has been added
 | 
					 | 
				
			||||||
// that doesn't match, an error is returned,
 | 
					 | 
				
			||||||
// - If discriminator hasn't changed and two fields or more are set, an
 | 
					 | 
				
			||||||
// error is returned,
 | 
					 | 
				
			||||||
// - If discriminator changed to non-nil, all other fields but the
 | 
					 | 
				
			||||||
// discriminated one will be cleared,
 | 
					 | 
				
			||||||
// - Otherwise, If only one field is left, update discriminator to that value.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Please note: union behavior isn't finalized yet and this is still experimental.
 | 
					 | 
				
			||||||
func (tv TypedValue) NormalizeUnions(new *TypedValue) (*TypedValue, error) {
 | 
					 | 
				
			||||||
	var errs ValidationErrors
 | 
					 | 
				
			||||||
	var normalizeFn = func(w *mergingWalker) {
 | 
					 | 
				
			||||||
		if w.rhs != nil {
 | 
					 | 
				
			||||||
			v := w.rhs.Unstructured()
 | 
					 | 
				
			||||||
			w.out = &v
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if err := normalizeUnions(w); err != nil {
 | 
					 | 
				
			||||||
			errs = append(errs, errorf(err.Error())...)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	out, mergeErrs := merge(&tv, new, func(w *mergingWalker) {}, normalizeFn)
 | 
					 | 
				
			||||||
	if mergeErrs != nil {
 | 
					 | 
				
			||||||
		errs = append(errs, mergeErrs.(ValidationErrors)...)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if len(errs) > 0 {
 | 
					 | 
				
			||||||
		return nil, errs
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return out, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// NormalizeUnionsApply specifically normalize unions on apply. It
 | 
					 | 
				
			||||||
// validates that the applied union is correct (there should be no
 | 
					 | 
				
			||||||
// ambiguity there), and clear the fields according to the sent intent.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// Please note: union behavior isn't finalized yet and this is still experimental.
 | 
					 | 
				
			||||||
func (tv TypedValue) NormalizeUnionsApply(new *TypedValue) (*TypedValue, error) {
 | 
					 | 
				
			||||||
	var errs ValidationErrors
 | 
					 | 
				
			||||||
	var normalizeFn = func(w *mergingWalker) {
 | 
					 | 
				
			||||||
		if w.rhs != nil {
 | 
					 | 
				
			||||||
			v := w.rhs.Unstructured()
 | 
					 | 
				
			||||||
			w.out = &v
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if err := normalizeUnionsApply(w); err != nil {
 | 
					 | 
				
			||||||
			errs = append(errs, errorf(err.Error())...)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	out, mergeErrs := merge(&tv, new, func(w *mergingWalker) {}, normalizeFn)
 | 
					 | 
				
			||||||
	if mergeErrs != nil {
 | 
					 | 
				
			||||||
		errs = append(errs, mergeErrs.(ValidationErrors)...)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if len(errs) > 0 {
 | 
					 | 
				
			||||||
		return nil, errs
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return out, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (tv TypedValue) Empty() *TypedValue {
 | 
					func (tv TypedValue) Empty() *TypedValue {
 | 
				
			||||||
	tv.value = value.NewValueInterface(nil)
 | 
						tv.value = value.NewValueInterface(nil)
 | 
				
			||||||
	return &tv
 | 
						return &tv
 | 
				
			||||||
@@ -278,50 +247,3 @@ func merge(lhs, rhs *TypedValue, rule, postRule mergeRule) (*TypedValue, error)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	return out, nil
 | 
						return out, nil
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					 | 
				
			||||||
// Comparison is the return value of a TypedValue.Compare() operation.
 | 
					 | 
				
			||||||
//
 | 
					 | 
				
			||||||
// No field will appear in more than one of the three fieldsets. If all of the
 | 
					 | 
				
			||||||
// fieldsets are empty, then the objects must have been equal.
 | 
					 | 
				
			||||||
type Comparison struct {
 | 
					 | 
				
			||||||
	// Removed contains any fields removed by rhs (the right-hand-side
 | 
					 | 
				
			||||||
	// object in the comparison).
 | 
					 | 
				
			||||||
	Removed *fieldpath.Set
 | 
					 | 
				
			||||||
	// Modified contains fields present in both objects but different.
 | 
					 | 
				
			||||||
	Modified *fieldpath.Set
 | 
					 | 
				
			||||||
	// Added contains any fields added by rhs.
 | 
					 | 
				
			||||||
	Added *fieldpath.Set
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IsSame returns true if the comparison returned no changes (the two
 | 
					 | 
				
			||||||
// compared objects are similar).
 | 
					 | 
				
			||||||
func (c *Comparison) IsSame() bool {
 | 
					 | 
				
			||||||
	return c.Removed.Empty() && c.Modified.Empty() && c.Added.Empty()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// String returns a human readable version of the comparison.
 | 
					 | 
				
			||||||
func (c *Comparison) String() string {
 | 
					 | 
				
			||||||
	bld := strings.Builder{}
 | 
					 | 
				
			||||||
	if !c.Modified.Empty() {
 | 
					 | 
				
			||||||
		bld.WriteString(fmt.Sprintf("- Modified Fields:\n%v\n", c.Modified))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !c.Added.Empty() {
 | 
					 | 
				
			||||||
		bld.WriteString(fmt.Sprintf("- Added Fields:\n%v\n", c.Added))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !c.Removed.Empty() {
 | 
					 | 
				
			||||||
		bld.WriteString(fmt.Sprintf("- Removed Fields:\n%v\n", c.Removed))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return bld.String()
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ExcludeFields fields from the compare recursively removes the fields
 | 
					 | 
				
			||||||
// from the entire comparison
 | 
					 | 
				
			||||||
func (c *Comparison) ExcludeFields(fields *fieldpath.Set) *Comparison {
 | 
					 | 
				
			||||||
	if fields == nil || fields.Empty() {
 | 
					 | 
				
			||||||
		return c
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	c.Removed = c.Removed.RecursiveDifference(fields)
 | 
					 | 
				
			||||||
	c.Modified = c.Modified.RecursiveDifference(fields)
 | 
					 | 
				
			||||||
	c.Added = c.Added.RecursiveDifference(fields)
 | 
					 | 
				
			||||||
	return c
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										276
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/union.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										276
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/union.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -1,276 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
Copyright 2019 The Kubernetes Authors.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Licensed under the Apache License, Version 2.0 (the "License");
 | 
					 | 
				
			||||||
you may not use this file except in compliance with the License.
 | 
					 | 
				
			||||||
You may obtain a copy of the License at
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    http://www.apache.org/licenses/LICENSE-2.0
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Unless required by applicable law or agreed to in writing, software
 | 
					 | 
				
			||||||
distributed under the License is distributed on an "AS IS" BASIS,
 | 
					 | 
				
			||||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					 | 
				
			||||||
See the License for the specific language governing permissions and
 | 
					 | 
				
			||||||
limitations under the License.
 | 
					 | 
				
			||||||
*/
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
package typed
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/schema"
 | 
					 | 
				
			||||||
	"sigs.k8s.io/structured-merge-diff/v4/value"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func normalizeUnions(w *mergingWalker) error {
 | 
					 | 
				
			||||||
	atom, found := w.schema.Resolve(w.typeRef)
 | 
					 | 
				
			||||||
	if !found {
 | 
					 | 
				
			||||||
		panic(fmt.Sprintf("Unable to resolve schema in normalize union: %v/%v", w.schema, w.typeRef))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Unions can only be in structures, and the struct must not have been removed
 | 
					 | 
				
			||||||
	if atom.Map == nil || w.out == nil {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var old value.Map
 | 
					 | 
				
			||||||
	if w.lhs != nil && !w.lhs.IsNull() {
 | 
					 | 
				
			||||||
		old = w.lhs.AsMap()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for _, union := range atom.Map.Unions {
 | 
					 | 
				
			||||||
		if err := newUnion(&union).Normalize(old, w.rhs.AsMap(), value.NewValueInterface(*w.out).AsMap()); err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func normalizeUnionsApply(w *mergingWalker) error {
 | 
					 | 
				
			||||||
	atom, found := w.schema.Resolve(w.typeRef)
 | 
					 | 
				
			||||||
	if !found {
 | 
					 | 
				
			||||||
		panic(fmt.Sprintf("Unable to resolve schema in normalize union: %v/%v", w.schema, w.typeRef))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Unions can only be in structures, and the struct must not have been removed
 | 
					 | 
				
			||||||
	if atom.Map == nil || w.out == nil {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var old value.Map
 | 
					 | 
				
			||||||
	if w.lhs != nil && !w.lhs.IsNull() {
 | 
					 | 
				
			||||||
		old = w.lhs.AsMap()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for _, union := range atom.Map.Unions {
 | 
					 | 
				
			||||||
		out := value.NewValueInterface(*w.out)
 | 
					 | 
				
			||||||
		if err := newUnion(&union).NormalizeApply(old, w.rhs.AsMap(), out.AsMap()); err != nil {
 | 
					 | 
				
			||||||
			return err
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		*w.out = out.Unstructured()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type discriminated string
 | 
					 | 
				
			||||||
type field string
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type discriminatedNames struct {
 | 
					 | 
				
			||||||
	f2d map[field]discriminated
 | 
					 | 
				
			||||||
	d2f map[discriminated]field
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func newDiscriminatedName(f2d map[field]discriminated) discriminatedNames {
 | 
					 | 
				
			||||||
	d2f := map[discriminated]field{}
 | 
					 | 
				
			||||||
	for key, value := range f2d {
 | 
					 | 
				
			||||||
		d2f[value] = key
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return discriminatedNames{
 | 
					 | 
				
			||||||
		f2d: f2d,
 | 
					 | 
				
			||||||
		d2f: d2f,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (dn discriminatedNames) toField(d discriminated) field {
 | 
					 | 
				
			||||||
	if f, ok := dn.d2f[d]; ok {
 | 
					 | 
				
			||||||
		return f
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return field(d)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (dn discriminatedNames) toDiscriminated(f field) discriminated {
 | 
					 | 
				
			||||||
	if d, ok := dn.f2d[f]; ok {
 | 
					 | 
				
			||||||
		return d
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return discriminated(f)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type discriminator struct {
 | 
					 | 
				
			||||||
	name string
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (d *discriminator) Set(m value.Map, v discriminated) {
 | 
					 | 
				
			||||||
	if d == nil {
 | 
					 | 
				
			||||||
		return
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	m.Set(d.name, value.NewValueInterface(string(v)))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (d *discriminator) Get(m value.Map) discriminated {
 | 
					 | 
				
			||||||
	if d == nil || m == nil {
 | 
					 | 
				
			||||||
		return ""
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	val, ok := m.Get(d.name)
 | 
					 | 
				
			||||||
	if !ok {
 | 
					 | 
				
			||||||
		return ""
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if !val.IsString() {
 | 
					 | 
				
			||||||
		return ""
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return discriminated(val.AsString())
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type fieldsSet map[field]struct{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// newFieldsSet returns a map of the fields that are part of the union and are set
 | 
					 | 
				
			||||||
// in the given map.
 | 
					 | 
				
			||||||
func newFieldsSet(m value.Map, fields []field) fieldsSet {
 | 
					 | 
				
			||||||
	if m == nil {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	set := fieldsSet{}
 | 
					 | 
				
			||||||
	for _, f := range fields {
 | 
					 | 
				
			||||||
		if subField, ok := m.Get(string(f)); ok && !subField.IsNull() {
 | 
					 | 
				
			||||||
			set.Add(f)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return set
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) Add(f field) {
 | 
					 | 
				
			||||||
	if fs == nil {
 | 
					 | 
				
			||||||
		fs = map[field]struct{}{}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	fs[f] = struct{}{}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) One() *field {
 | 
					 | 
				
			||||||
	for f := range fs {
 | 
					 | 
				
			||||||
		return &f
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) Has(f field) bool {
 | 
					 | 
				
			||||||
	_, ok := fs[f]
 | 
					 | 
				
			||||||
	return ok
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) List() []field {
 | 
					 | 
				
			||||||
	fields := []field{}
 | 
					 | 
				
			||||||
	for f := range fs {
 | 
					 | 
				
			||||||
		fields = append(fields, f)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return fields
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) Difference(o fieldsSet) fieldsSet {
 | 
					 | 
				
			||||||
	n := fieldsSet{}
 | 
					 | 
				
			||||||
	for f := range fs {
 | 
					 | 
				
			||||||
		if !o.Has(f) {
 | 
					 | 
				
			||||||
			n.Add(f)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return n
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (fs fieldsSet) String() string {
 | 
					 | 
				
			||||||
	s := []string{}
 | 
					 | 
				
			||||||
	for k := range fs {
 | 
					 | 
				
			||||||
		s = append(s, string(k))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return strings.Join(s, ", ")
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type union struct {
 | 
					 | 
				
			||||||
	deduceInvalidDiscriminator bool
 | 
					 | 
				
			||||||
	d                          *discriminator
 | 
					 | 
				
			||||||
	dn                         discriminatedNames
 | 
					 | 
				
			||||||
	f                          []field
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func newUnion(su *schema.Union) *union {
 | 
					 | 
				
			||||||
	u := &union{}
 | 
					 | 
				
			||||||
	if su.Discriminator != nil {
 | 
					 | 
				
			||||||
		u.d = &discriminator{name: *su.Discriminator}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	f2d := map[field]discriminated{}
 | 
					 | 
				
			||||||
	for _, f := range su.Fields {
 | 
					 | 
				
			||||||
		u.f = append(u.f, field(f.FieldName))
 | 
					 | 
				
			||||||
		f2d[field(f.FieldName)] = discriminated(f.DiscriminatorValue)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	u.dn = newDiscriminatedName(f2d)
 | 
					 | 
				
			||||||
	u.deduceInvalidDiscriminator = su.DeduceInvalidDiscriminator
 | 
					 | 
				
			||||||
	return u
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// clear removes all the fields in map that are part of the union, but
 | 
					 | 
				
			||||||
// the one we decided to keep.
 | 
					 | 
				
			||||||
func (u *union) clear(m value.Map, f field) {
 | 
					 | 
				
			||||||
	for _, fieldName := range u.f {
 | 
					 | 
				
			||||||
		if field(fieldName) != f {
 | 
					 | 
				
			||||||
			m.Delete(string(fieldName))
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (u *union) Normalize(old, new, out value.Map) error {
 | 
					 | 
				
			||||||
	os := newFieldsSet(old, u.f)
 | 
					 | 
				
			||||||
	ns := newFieldsSet(new, u.f)
 | 
					 | 
				
			||||||
	diff := ns.Difference(os)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if u.d.Get(old) != u.d.Get(new) && u.d.Get(new) != "" {
 | 
					 | 
				
			||||||
		if len(diff) == 1 && u.d.Get(new) != u.dn.toDiscriminated(*diff.One()) {
 | 
					 | 
				
			||||||
			return fmt.Errorf("discriminator (%v) and field changed (%v) don't match", u.d.Get(new), diff.One())
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		if len(diff) > 1 {
 | 
					 | 
				
			||||||
			return fmt.Errorf("multiple new fields added: %v", diff)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		u.clear(out, u.dn.toField(u.d.Get(new)))
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(ns) > 1 {
 | 
					 | 
				
			||||||
		return fmt.Errorf("multiple fields set without discriminator change: %v", ns)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Set discriminiator if it needs to be deduced.
 | 
					 | 
				
			||||||
	if u.deduceInvalidDiscriminator && len(ns) == 1 {
 | 
					 | 
				
			||||||
		u.d.Set(out, u.dn.toDiscriminated(*ns.One()))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (u *union) NormalizeApply(applied, merged, out value.Map) error {
 | 
					 | 
				
			||||||
	as := newFieldsSet(applied, u.f)
 | 
					 | 
				
			||||||
	if len(as) > 1 {
 | 
					 | 
				
			||||||
		return fmt.Errorf("more than one field of union applied: %v", as)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if len(as) == 0 {
 | 
					 | 
				
			||||||
		// None is set, just leave.
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// We have exactly one, discriminiator must match if set
 | 
					 | 
				
			||||||
	if u.d.Get(applied) != "" && u.d.Get(applied) != u.dn.toDiscriminated(*as.One()) {
 | 
					 | 
				
			||||||
		return fmt.Errorf("applied discriminator (%v) doesn't match applied field (%v)", u.d.Get(applied), *as.One())
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Update discriminiator if needed
 | 
					 | 
				
			||||||
	if u.deduceInvalidDiscriminator {
 | 
					 | 
				
			||||||
		u.d.Set(out, u.dn.toDiscriminated(*as.One()))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	// Clear others fields.
 | 
					 | 
				
			||||||
	u.clear(out, *as.One())
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
							
								
								
									
										8
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								vendor/sigs.k8s.io/structured-merge-diff/v4/typed/validate.go
									
									
									
										generated
									
									
										vendored
									
									
								
							@@ -33,6 +33,7 @@ func (tv TypedValue) walker() *validatingObjectWalker {
 | 
				
			|||||||
	v.value = tv.value
 | 
						v.value = tv.value
 | 
				
			||||||
	v.schema = tv.schema
 | 
						v.schema = tv.schema
 | 
				
			||||||
	v.typeRef = tv.typeRef
 | 
						v.typeRef = tv.typeRef
 | 
				
			||||||
 | 
						v.allowDuplicates = false
 | 
				
			||||||
	if v.allocator == nil {
 | 
						if v.allocator == nil {
 | 
				
			||||||
		v.allocator = value.NewFreelistAllocator()
 | 
							v.allocator = value.NewFreelistAllocator()
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
@@ -49,6 +50,9 @@ type validatingObjectWalker struct {
 | 
				
			|||||||
	value   value.Value
 | 
						value   value.Value
 | 
				
			||||||
	schema  *schema.Schema
 | 
						schema  *schema.Schema
 | 
				
			||||||
	typeRef schema.TypeRef
 | 
						typeRef schema.TypeRef
 | 
				
			||||||
 | 
						// If set to true, duplicates will be allowed in
 | 
				
			||||||
 | 
						// associativeLists/sets.
 | 
				
			||||||
 | 
						allowDuplicates bool
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// Allocate only as many walkers as needed for the depth by storing them here.
 | 
						// Allocate only as many walkers as needed for the depth by storing them here.
 | 
				
			||||||
	spareWalkers *[]*validatingObjectWalker
 | 
						spareWalkers *[]*validatingObjectWalker
 | 
				
			||||||
@@ -129,7 +133,7 @@ func (v *validatingObjectWalker) visitListItems(t *schema.List, list value.List)
 | 
				
			|||||||
			pe.Index = &i
 | 
								pe.Index = &i
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			var err error
 | 
								var err error
 | 
				
			||||||
			pe, err = listItemToPathElement(v.allocator, v.schema, t, i, child)
 | 
								pe, err = listItemToPathElement(v.allocator, v.schema, t, child)
 | 
				
			||||||
			if err != nil {
 | 
								if err != nil {
 | 
				
			||||||
				errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
									errs = append(errs, errorf("element %v: %v", i, err.Error())...)
 | 
				
			||||||
				// If we can't construct the path element, we can't
 | 
									// If we can't construct the path element, we can't
 | 
				
			||||||
@@ -137,7 +141,7 @@ func (v *validatingObjectWalker) visitListItems(t *schema.List, list value.List)
 | 
				
			|||||||
				// this element.
 | 
									// this element.
 | 
				
			||||||
				return
 | 
									return
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			if observedKeys.Has(pe) {
 | 
								if observedKeys.Has(pe) && !v.allowDuplicates {
 | 
				
			||||||
				errs = append(errs, errorf("duplicate entries for key %v", pe.String())...)
 | 
									errs = append(errs, errorf("duplicate entries for key %v", pe.String())...)
 | 
				
			||||||
			}
 | 
								}
 | 
				
			||||||
			observedKeys.Insert(pe)
 | 
								observedKeys.Insert(pe)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user