package scheduler import ( "bytes" "encoding/json" "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" "gitlink.org.cn/jcce-pcm/pcm-coordinator/model" "io" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" syaml "k8s.io/apimachinery/pkg/runtime/serializer/yaml" kyaml "k8s.io/apimachinery/pkg/util/yaml" ) type cloudScheduler struct { } func NewCloudScheduler() *cloudScheduler { return &cloudScheduler{} } func (cs cloudScheduler) getNewStructForDb(task *types.TaskInfo, participantIds []int64) (interface{}, error) { bytes, err := json.Marshal(task.Metadata) if err != nil { return nil, err } cloud := cs.UnMarshalK8sStruct(string(bytes), task.TaskId) cloud.YamlString = string(bytes) if len(participantIds) != 0 { cloud.ParticipantId = participantIds[0] } return cloud, nil } func (cs cloudScheduler) UnMarshalK8sStruct(yamlString string, taskId int64) model.Cloud { var cloud model.Cloud d := kyaml.NewYAMLOrJSONDecoder(bytes.NewBufferString(yamlString), 4096) var err error for { var rawObj runtime.RawExtension err = d.Decode(&rawObj) if err == io.EOF { break } if err != nil { } obj := &unstructured.Unstructured{} syaml.NewDecodingSerializer(unstructured.UnstructuredJSONScheme).Decode(rawObj.Raw, nil, obj) if err != nil { } unstructuredMap, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) if err != nil { } unstructureObj := &unstructured.Unstructured{Object: unstructuredMap} cloud = model.Cloud{ TaskId: taskId, ApiVersion: unstructureObj.GetAPIVersion(), Name: unstructureObj.GetName(), Kind: unstructureObj.GetKind(), Namespace: unstructureObj.GetNamespace(), Status: "Saved", } } return cloud }