From 0a7b58eba8b2b343c9713996b75bb6eab647a2af Mon Sep 17 00:00:00 2001 From: zhangwei <894646498@qq.com> Date: Wed, 3 Jan 2024 17:25:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0k8s=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E8=BD=AC=E6=8D=A2=E5=B7=A5=E5=85=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/util/helper/unstructured.go | 48 +++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 pkg/util/helper/unstructured.go diff --git a/pkg/util/helper/unstructured.go b/pkg/util/helper/unstructured.go new file mode 100644 index 0000000..6461fb4 --- /dev/null +++ b/pkg/util/helper/unstructured.go @@ -0,0 +1,48 @@ +package helper + +import ( + "fmt" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + "k8s.io/apimachinery/pkg/runtime" +) + +// ConvertToTypedObject converts an unstructured object to typed. +func ConvertToTypedObject(in, out interface{}) error { + if in == nil || out == nil { + return fmt.Errorf("convert objects should not be nil") + } + + switch v := in.(type) { + case *unstructured.Unstructured: + return runtime.DefaultUnstructuredConverter.FromUnstructured(v.UnstructuredContent(), out) + case map[string]interface{}: + return runtime.DefaultUnstructuredConverter.FromUnstructured(v, out) + default: + return fmt.Errorf("convert object must be pointer of unstructured or map[string]interface{}") + } +} + +// ApplyReplica applies the Replica value for the specific field. +func ApplyReplica(workload *unstructured.Unstructured, desireReplica int64, field string) error { + _, ok, err := unstructured.NestedInt64(workload.Object, "spec", field) + if err != nil { + return err + } + if ok { + err := unstructured.SetNestedField(workload.Object, desireReplica, "spec", field) + if err != nil { + return err + } + } + return nil +} + +// ToUnstructured converts a typed object to an unstructured object. +func ToUnstructured(obj interface{}) (*unstructured.Unstructured, error) { + uncastObj, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) + if err != nil { + return nil, err + } + return &unstructured.Unstructured{Object: uncastObj}, nil +}