From 24f60b550ef61ac66bce13df3ee048b71fd8c8a6 Mon Sep 17 00:00:00 2001 From: Michael Bridgen Date: Mon, 20 Nov 2023 20:09:07 +0000 Subject: [PATCH] Remove dependence on kustomize/setters2 The package setters2 has been removed from kustomize: https://github.com/kubernetes-sigs/kustomize/pull/5291 This commit removes the need to import setters2, by reproducing the last link with that code, which is a minor parsing helper. I have not changed the comment explaining what was changed from the original, since it's still accurate. The parsing func is a buried detail. Signed-off-by: Michael Bridgen --- pkg/update/filter.go | 32 +++++++++++++++++++++++++++++--- pkg/update/setters.go | 6 ++++-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/pkg/update/filter.go b/pkg/update/filter.go index ffa0a5cd..14cb28b2 100644 --- a/pkg/update/filter.go +++ b/pkg/update/filter.go @@ -17,11 +17,12 @@ limitations under the License. package update import ( + "encoding/json" + "github.com/go-logr/logr" "k8s.io/kube-openapi/pkg/validation/spec" "sigs.k8s.io/kustomize/kyaml/fieldmeta" "sigs.k8s.io/kustomize/kyaml/openapi" - "sigs.k8s.io/kustomize/kyaml/setters2" "sigs.k8s.io/kustomize/kyaml/yaml" ) @@ -112,8 +113,17 @@ func accept(v visitor, object *yaml.RNode, p string, settersSchema *spec.Schema) return nil } +type setter struct { + Name string `json:"name"` + Value string `json:"value"` +} + +type extension struct { + Setter *setter `json:"setter,omitempty"` +} + // set applies the value from ext to field -func (s *SetAllCallback) set(field *yaml.RNode, ext *setters2.CliExtension, sch *spec.Schema) (bool, error) { +func (s *SetAllCallback) set(field *yaml.RNode, ext *extension, sch *spec.Schema) (bool, error) { // check full setter if ext.Setter == nil { return false, nil @@ -139,7 +149,7 @@ func (s *SetAllCallback) visitScalar(object *yaml.RNode, p string, fieldSchema * return nil } // get the openAPI for this field describing how to apply the setter - ext, err := setters2.GetExtFromSchema(fieldSchema.Schema) + ext, err := getExtFromSchema(fieldSchema.Schema) if err != nil { return err } @@ -152,3 +162,19 @@ func (s *SetAllCallback) visitScalar(object *yaml.RNode, p string, fieldSchema * _, err = s.set(object, ext, fieldSchema.Schema) return err } + +func getExtFromSchema(schema *spec.Schema) (*extension, error) { + cep := schema.VendorExtensible.Extensions[K8sCliExtensionKey] + if cep == nil { + return nil, nil + } + b, err := json.Marshal(cep) + if err != nil { + return nil, err + } + val := &extension{} + if err := json.Unmarshal(b, val); err != nil { + return nil, err + } + return val, nil +} diff --git a/pkg/update/setters.go b/pkg/update/setters.go index 3b047a99..d22209e7 100644 --- a/pkg/update/setters.go +++ b/pkg/update/setters.go @@ -29,13 +29,15 @@ import ( "sigs.k8s.io/kustomize/kyaml/kio/kioutil" "sigs.k8s.io/kustomize/kyaml/openapi" "sigs.k8s.io/kustomize/kyaml/sets" - "sigs.k8s.io/kustomize/kyaml/setters2" "sigs.k8s.io/kustomize/kyaml/yaml" imagev1_reflect "github.com/fluxcd/image-reflector-controller/api/v1beta2" ) const ( + // This is preserved from setters2 + K8sCliExtensionKey = "x-k8s-cli" + // SetterShortHand is a shorthand that can be used to mark // setters; instead of // # { "$ref": "#/definitions/ @@ -256,7 +258,7 @@ func setAll(schema *spec.Schema, tracelog logr.Logger, callback func(file, sette func setterSchema(name, value string) spec.Schema { schema := spec.StringProperty() schema.Extensions = map[string]interface{}{} - schema.Extensions.Add(setters2.K8sCliExtensionKey, map[string]interface{}{ + schema.Extensions.Add(K8sCliExtensionKey, map[string]interface{}{ "setter": map[string]string{ "name": name, "value": value,