summaryrefslogtreecommitdiff
path: root/edge
diff options
context:
space:
mode:
authorwbc6080 <wangbincheng4@huawei.com>2023-09-26 17:22:29 +0800
committerwbc6080 <wangbincheng4@huawei.com>2023-10-09 17:38:13 +0800
commitcffdff9ede636de3c23e357a08346c32353058aa (patch)
treec2e05590e80d1b8739a42235f0a43e0c9f9a5ec8 /edge
parentMerge pull request #5040 from Onion-of-dreamed/fix/without-mqtt-tag (diff)
downloadkubeedge-cffdff9ede636de3c23e357a08346c32353058aa.tar.gz
update to v1beta1 version
Signed-off-by: wbc6080 <wangbincheng4@huawei.com> Co-authored-by: QiQi-OvO <2763359332@qq.com>
Diffstat (limited to 'edge')
-rw-r--r--edge/pkg/devicetwin/dmiserver/server.go2
-rw-r--r--edge/pkg/devicetwin/dtcommon/util.go124
2 files changed, 126 insertions, 0 deletions
diff --git a/edge/pkg/devicetwin/dmiserver/server.go b/edge/pkg/devicetwin/dmiserver/server.go
index 0cd9f5099..689f99885 100644
--- a/edge/pkg/devicetwin/dmiserver/server.go
+++ b/edge/pkg/devicetwin/dmiserver/server.go
@@ -50,6 +50,7 @@ const (
)
type server struct {
+ pb.UnimplementedDeviceManagerServiceServer
limiter *rate.Limiter
dmiCache *DMICache
}
@@ -83,6 +84,7 @@ func (s *server) MapperRegister(ctx context.Context, in *pb.MapperRegisterReques
s.dmiCache.MapperList[in.Mapper.Name] = in.Mapper
s.dmiCache.MapperMu.Unlock()
+ dmiclient.DMIClientsImp.CreateDMIClient(in.Mapper.Protocol, string(in.Mapper.Address))
if !in.WithData {
return &pb.MapperRegisterResponse{}, nil
}
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))
+ }
+}