diff options
| author | KubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com> | 2023-10-10 16:42:56 +0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-10-10 16:42:56 +0800 |
| commit | 952ef7a620219f6d774466e8f7c34ed2b3d482e5 (patch) | |
| tree | 4e84cf612167669955674d5d07d525b989a12c22 /edge | |
| parent | Merge pull request #4914 from wujunyi792/master (diff) | |
| parent | update README (diff) | |
| download | kubeedge-952ef7a620219f6d774466e8f7c34ed2b3d482e5.tar.gz | |
Merge pull request #5023 from wbc6080/dmi-dataplanev1.15.0-beta.0
init mapper framework
Diffstat (limited to 'edge')
| -rw-r--r-- | edge/pkg/devicetwin/dmiserver/server.go | 3 | ||||
| -rw-r--r-- | edge/pkg/devicetwin/dtcommon/util.go | 124 |
2 files changed, 126 insertions, 1 deletions
diff --git a/edge/pkg/devicetwin/dmiserver/server.go b/edge/pkg/devicetwin/dmiserver/server.go index 0cd9f5099..cfc591acb 100644 --- a/edge/pkg/devicetwin/dmiserver/server.go +++ b/edge/pkg/devicetwin/dmiserver/server.go @@ -1,5 +1,5 @@ /* -Copyright 2022 The KubeEdge Authors. +Copyright 2023 The KubeEdge Authors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -50,6 +50,7 @@ const ( ) type server struct { + pb.UnimplementedDeviceManagerServiceServer limiter *rate.Limiter dmiCache *DMICache } diff --git a/edge/pkg/devicetwin/dtcommon/util.go b/edge/pkg/devicetwin/dtcommon/util.go index eff5156aa..5445360c9 100644 --- a/edge/pkg/devicetwin/dtcommon/util.go +++ b/edge/pkg/devicetwin/dtcommon/util.go @@ -3,10 +3,14 @@ package dtcommon import ( "encoding/json" "errors" + "fmt" + "reflect" "regexp" "strconv" "strings" + "google.golang.org/protobuf/types/known/anypb" + "google.golang.org/protobuf/types/known/wrapperspb" "k8s.io/klog/v2" "github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/constants" @@ -73,6 +77,47 @@ func ConvertDevice(device *v1beta1.Device) (*pb.Device, error) { klog.Errorf("fail to unmarshal device %s with err: %v", device.Name, err) return nil, err } + if device.Spec.Protocol.ConfigData != nil { + // interface data to anypb.Any data + configAnyData := make(map[string]*anypb.Any) + for k, v := range device.Spec.Protocol.ConfigData.Data { + anyValue, err := dataToAny(v) + if err != nil { + return nil, err + } + configAnyData[k] = anyValue + } + edgeDevice.Spec.Protocol.ConfigData.Data = configAnyData + } + var edgePropertyVisitors []*pb.DeviceProperty + for i := range device.Spec.Properties { + var item *pb.DeviceProperty = new(pb.DeviceProperty) + propertyData, err := json.Marshal(device.Spec.Properties[i]) + if err != nil { + klog.Errorf("fail to marshal device %s with err: %v", device.Name, err) + return nil, err + } + err = json.Unmarshal(propertyData, item) + if err != nil { + klog.Errorf("fail to unmarshal device %s with err: %v", device.Name, err) + return nil, err + } + + if device.Spec.Properties[i].Visitors.ConfigData != nil { + configAnyData := make(map[string]*anypb.Any) + for k, v := range device.Spec.Properties[i].Visitors.ConfigData.Data { + anyValue, err := dataToAny(v) + if err != nil { + return nil, err + } + configAnyData[k] = anyValue + } + item.Visitors.ConfigData.Data = configAnyData + } + edgePropertyVisitors = append(edgePropertyVisitors, item) + } + + edgeDevice.Spec.Properties = edgePropertyVisitors edgeDevice.Name = device.Name edgeDevice.Spec.DeviceModelReference = device.Spec.DeviceModelRef.Name @@ -96,3 +141,82 @@ func ConvertDeviceModel(model *v1beta1.DeviceModel) (*pb.DeviceModel, error) { return &edgeDeviceModel, nil } + +func dataToAny(v interface{}) (*anypb.Any, error) { + switch m := v.(type) { + case string: + strWrapper := wrapperspb.String(m) + anyStr, err := anypb.New(strWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyStr, nil + case int8: + intWrapper := wrapperspb.Int32(int32(m)) + anyInt, err := anypb.New(intWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyInt, nil + case int16: + intWrapper := wrapperspb.Int32(int32(m)) + anyInt, err := anypb.New(intWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyInt, nil + case int32: + intWrapper := wrapperspb.Int32(m) + anyInt, err := anypb.New(intWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyInt, nil + case int64: + intWrapper := wrapperspb.Int64(m) + anyInt, err := anypb.New(intWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyInt, nil + case int: + intWrapper := wrapperspb.Int32(int32(m)) + anyInt, err := anypb.New(intWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyInt, nil + case float64: + floatWrapper := wrapperspb.Float(float32(m)) + anyFloat, err := anypb.New(floatWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyFloat, nil + case float32: + floatWrapper := wrapperspb.Float(float32(m)) + anyFloat, err := anypb.New(floatWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyFloat, nil + case bool: + boolWrapper := wrapperspb.Bool(m) + anyBool, err := anypb.New(boolWrapper) + if err != nil { + klog.Errorf("anypb new error: %v", err) + return nil, err + } + return anyBool, nil + default: + return nil, fmt.Errorf("%v does not support converting to any", reflect.TypeOf(v)) + } +} |
