diff --git a/api/internal/mqs/kq/ScheduleCloud.go b/api/internal/mqs/kq/ScheduleCloud.go index 7b0cbe20..d696cf5c 100644 --- a/api/internal/mqs/kq/ScheduleCloud.go +++ b/api/internal/mqs/kq/ScheduleCloud.go @@ -1,12 +1,18 @@ package kq import ( + "bytes" "context" "encoding/json" "github.com/zeromicro/go-zero/core/logx" "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/svc" "gitlink.org.cn/jcce-pcm/pcm-coordinator/api/internal/types" - "gitlink.org.cn/jcce-pcm/utils/tool" + "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" ) /* @@ -25,6 +31,41 @@ func NewScheduleCloudMq(ctx context.Context, svcCtx *svc.ServiceContext) *Schedu } } +func 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", + ServiceName: "kubeNative", + } + } + return cloud +} + func (l *ScheduleCloudMq) Consume(_, val string) error { var task *types.TaskInfo json.Unmarshal([]byte(val), &task) @@ -33,7 +74,7 @@ func (l *ScheduleCloudMq) Consume(_, val string) error { if err != nil { return err } - cloud := tool.UnMarshalK8sStruct(string(bytes), task.TaskId) + cloud := UnMarshalK8sStruct(string(bytes), task.TaskId) cloud.YamlString = string(bytes) // 存储数据 tx := l.svcCtx.DbEngin.Create(&cloud) diff --git a/go.mod b/go.mod index 859b8653..197855c0 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/Masterminds/squirrel v1.5.4 github.com/aws/aws-sdk-go v1.44.300 github.com/docker/docker v24.0.4+incompatible + github.com/go-redis/redis v6.15.9+incompatible github.com/go-sql-driver/mysql v1.7.1 github.com/jinzhu/copier v0.3.5 github.com/pkg/errors v0.9.1