添加k8s结构转换工具

This commit is contained in:
zhangwei 2024-01-03 17:25:37 +08:00
parent f8788096c7
commit 0a7b58eba8
1 changed files with 48 additions and 0 deletions

View File

@ -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
}