summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/device.go15
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/devicetwin.go4
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/go.mod2
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/go.sum4
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/common/configmaptype.go3
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/global/global.go4
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver/device.go34
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/callback.go12
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/restapi.go12
-rw-r--r--staging/src/github.com/kubeedge/mapper-framework/pkg/util/parse/grpc.go12
10 files changed, 64 insertions, 38 deletions
diff --git a/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/device.go b/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/device.go
index 081b48185..692806843 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/device.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/device.go
@@ -124,6 +124,7 @@ func dataHandler(ctx context.Context, dev *driver.CustomizedDev) {
// handle twin
twinData := &TwinData{
DeviceName: dev.Instance.Name,
+ DeviceNamespace: dev.Instance.Namespace,
Client: dev.CustomizedClient,
Name: twin.PropertyName,
Type: twin.ObservedDesired.Metadata.Type,
@@ -289,7 +290,7 @@ func (d *DevPanel) UpdateDev(model *common.DeviceModel, device *common.DeviceIns
// start new device
d.devices[device.ID] = new(driver.CustomizedDev)
d.devices[device.ID].Instance = *device
- d.models[device.ID] = *model
+ d.models[model.ID] = *model
ctx, cancelFunc := context.WithCancel(context.Background())
d.deviceMuxs[device.ID] = cancelFunc
@@ -409,26 +410,26 @@ func (d *DevPanel) stopDev(dev *driver.CustomizedDev, id string) error {
}
// GetModel if the model exists, return device model
-func (d *DevPanel) GetModel(modelName string) (common.DeviceModel, error) {
+func (d *DevPanel) GetModel(modelID string) (common.DeviceModel, error) {
d.serviceMutex.Lock()
defer d.serviceMutex.Unlock()
- if model, ok := d.models[modelName]; ok {
+ if model, ok := d.models[modelID]; ok {
return model, nil
}
- return common.DeviceModel{}, fmt.Errorf("deviceModel %s not found", modelName)
+ return common.DeviceModel{}, fmt.Errorf("deviceModel %s not found", modelID)
}
// UpdateModel update device model
func (d *DevPanel) UpdateModel(model *common.DeviceModel) {
d.serviceMutex.Lock()
- d.models[model.Name] = *model
+ d.models[model.ID] = *model
d.serviceMutex.Unlock()
}
// RemoveModel remove device model
-func (d *DevPanel) RemoveModel(modelName string) {
+func (d *DevPanel) RemoveModel(modelID string) {
d.serviceMutex.Lock()
- delete(d.models, modelName)
+ delete(d.models, modelID)
d.serviceMutex.Unlock()
}
diff --git a/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/devicetwin.go b/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/devicetwin.go
index 154614472..da90628f4 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/devicetwin.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/_template/mapper/device/devicetwin.go
@@ -18,6 +18,7 @@ import (
type TwinData struct {
DeviceName string
+ DeviceNamespace string
Client *driver.CustomizedClient
Name string
Type string
@@ -75,7 +76,8 @@ func (td *TwinData) PushToEdgeCore() {
twins := parse.ConvMsgTwinToGrpc(msg.Twin)
var rdsr = &dmiapi.ReportDeviceStatusRequest{
- DeviceName: td.DeviceName,
+ DeviceName: td.DeviceName,
+ DeviceNamespace: td.DeviceNamespace,
ReportedDevice: &dmiapi.DeviceStatus{
Twins: twins,
//State: "OK",
diff --git a/staging/src/github.com/kubeedge/mapper-framework/go.mod b/staging/src/github.com/kubeedge/mapper-framework/go.mod
index aa4cac129..84b0d95fd 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/go.mod
+++ b/staging/src/github.com/kubeedge/mapper-framework/go.mod
@@ -6,7 +6,7 @@ require (
github.com/avast/retry-go v3.0.0+incompatible
github.com/golang/protobuf v1.5.3
github.com/gorilla/mux v1.8.0
- github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240110111122-c44efa2389b9
+ github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240118080528-4237f6f6805e
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace
golang.org/x/net v0.17.0 // indirect
google.golang.org/grpc v1.53.0
diff --git a/staging/src/github.com/kubeedge/mapper-framework/go.sum b/staging/src/github.com/kubeedge/mapper-framework/go.sum
index d6af2920c..123b25773 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/go.sum
+++ b/staging/src/github.com/kubeedge/mapper-framework/go.sum
@@ -16,8 +16,8 @@ github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORN
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240110111122-c44efa2389b9 h1:vVjy6eJGzKZyAdW2L2E8fi2DDz4w4Bn+1pwXgC/v2W8=
-github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240110111122-c44efa2389b9/go.mod h1:3f9VoRV6ar6yAOrjRYySlYBoSG3n4BEi/PitT2uoUm4=
+github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240118080528-4237f6f6805e h1:SQD/Z9/z75tQpnZKGs179ugFywJH2tj0bAKlDh0M9Gs=
+github.com/kubeedge/kubeedge v1.15.0-beta.0.0.20240118080528-4237f6f6805e/go.mod h1:NbL/UWB68wuY5itB/0jMtDyI04Q+Iw2CJshOQz/WJS4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace h1:9PNP1jnUjRhfmGMlkXHjYPishpcw4jpSt/V/xYY3FMA=
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/common/configmaptype.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/common/configmaptype.go
index bfdd0dad6..8e1582126 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/common/configmaptype.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/common/configmaptype.go
@@ -29,6 +29,7 @@ type DeviceProfile struct {
type DeviceInstance struct {
ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
+ Namespace string `json:"namespace,omitempty"`
ProtocolName string `json:"protocol,omitempty"`
PProtocol ProtocolConfig
Model string `json:"model,omitempty"`
@@ -38,7 +39,9 @@ type DeviceInstance struct {
// DeviceModel is structure to store deviceModel in deviceProfile.json in configmap.
type DeviceModel struct {
+ ID string `json:"id,omitempty"`
Name string `json:"name,omitempty"`
+ Namespace string `json:"namespace,omitempty"`
Description string `json:"description,omitempty"`
Properties []ModelProperty `json:"properties,omitempty"`
}
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/global/global.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/global/global.go
index 457d2770b..f79222d06 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/global/global.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/global/global.go
@@ -22,11 +22,11 @@ type DevPanel interface {
// RemoveDevice stop device and remove device
RemoveDevice(deviceID string) error
// GetModel get model's info
- GetModel(modelName string) (common.DeviceModel, error)
+ GetModel(modelID string) (common.DeviceModel, error)
// UpdateModel update model in map only
UpdateModel(model *common.DeviceModel)
// RemoveModel remove model in map only
- RemoveModel(modelName string)
+ RemoveModel(modelID string)
// GetTwinResult get device's property value and datatype
GetTwinResult(deviceID string, twinName string) (string, string, error)
}
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver/device.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver/device.go
index fa69a9e52..8db5cd6a4 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver/device.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/grpcserver/device.go
@@ -21,16 +21,18 @@ func (s *Server) RegisterDevice(_ context.Context, request *dmiapi.RegisterDevic
if device == nil {
return nil, errors.New("device is nil")
}
- if _, err := s.devPanel.GetDevice(device.Name); err == nil {
+ deviceID := parse.GetResourceID(device.Namespace, device.Name)
+ if _, err := s.devPanel.GetDevice(deviceID); err == nil {
// The device has been registered
return &dmiapi.RegisterDeviceResponse{DeviceName: device.Name}, nil
}
var model common.DeviceModel
var err error
+ modelID := parse.GetResourceID(device.Namespace, device.Spec.DeviceModelReference)
err = retry.Do(
func() error {
- model, err = s.devPanel.GetModel(device.Spec.DeviceModelReference)
+ model, err = s.devPanel.GetModel(modelID)
return err
},
retry.Delay(1*time.Second),
@@ -38,11 +40,11 @@ func (s *Server) RegisterDevice(_ context.Context, request *dmiapi.RegisterDevic
retry.DelayType(retry.FixedDelay),
)
if err != nil {
- return nil, fmt.Errorf("deviceModel %s not found, err: %s", device.Spec.DeviceModelReference, err)
+ return nil, fmt.Errorf("deviceModel %s in %s namespace not found, err: %s", device.Spec.DeviceModelReference, device.Namespace, err)
}
protocol, err := parse.BuildProtocolFromGrpc(device)
if err != nil {
- return nil, fmt.Errorf("parse device %s protocol failed, err: %s", device.Name, err)
+ return nil, fmt.Errorf("parse device %s protocol in %s namespace failed, err: %s", device.Name, device.Namespace, err)
}
klog.Infof("model: %+v", model)
deviceInstance, err := parse.GetDeviceFromGrpc(device, &model)
@@ -61,8 +63,9 @@ func (s *Server) RemoveDevice(_ context.Context, request *dmiapi.RemoveDeviceReq
if request.GetDeviceName() == "" {
return nil, errors.New("device name is nil")
}
+ deviceID := parse.GetResourceID(request.GetDeviceNamespace(), request.GetDeviceName())
- return &dmiapi.RemoveDeviceResponse{}, s.devPanel.RemoveDevice(request.GetDeviceName())
+ return &dmiapi.RemoveDeviceResponse{}, s.devPanel.RemoveDevice(deviceID)
}
func (s *Server) UpdateDevice(_ context.Context, request *dmiapi.UpdateDeviceRequest) (*dmiapi.UpdateDeviceResponse, error) {
@@ -72,19 +75,19 @@ func (s *Server) UpdateDevice(_ context.Context, request *dmiapi.UpdateDeviceReq
return nil, errors.New("device is nil")
}
- model, err := s.devPanel.GetModel(device.Spec.DeviceModelReference)
+ modelID := parse.GetResourceID(device.GetNamespace(), device.Spec.DeviceModelReference)
+ model, err := s.devPanel.GetModel(modelID)
if err != nil {
- return nil, fmt.Errorf("deviceModel %s not found, err: %s", device.Spec.DeviceModelReference, err)
+ return nil, fmt.Errorf("deviceModel %s in %s namespace not found, err: %s", device.Spec.DeviceModelReference, device.GetNamespace(), err)
}
+ klog.V(3).Infof("model: %+v", model)
protocol, err := parse.BuildProtocolFromGrpc(device)
if err != nil {
return nil, fmt.Errorf("parse device %s protocol failed, err: %s", device.Name, err)
}
-
- klog.V(3).Infof("model: %+v", model)
deviceInstance, err := parse.GetDeviceFromGrpc(device, &model)
if err != nil {
- return nil, fmt.Errorf("parse device %s instance failed, err: %s", device.Name, err)
+ return nil, fmt.Errorf("parse device %s instance in %s namespace failed, err: %s", device.Name, device.Namespace, err)
}
deviceInstance.PProtocol = protocol
@@ -114,7 +117,8 @@ func (s *Server) UpdateDeviceModel(_ context.Context, request *dmiapi.UpdateDevi
if deviceModel == nil {
return nil, errors.New("deviceModel is nil")
}
- if _, err := s.devPanel.GetModel(deviceModel.Name); err != nil {
+ modelID := parse.GetResourceID(deviceModel.Namespace, deviceModel.Name)
+ if _, err := s.devPanel.GetModel(modelID); err != nil {
return nil, fmt.Errorf("update deviceModel %s failed, not existed", deviceModel.Name)
}
@@ -126,8 +130,8 @@ func (s *Server) UpdateDeviceModel(_ context.Context, request *dmiapi.UpdateDevi
}
func (s *Server) RemoveDeviceModel(_ context.Context, request *dmiapi.RemoveDeviceModelRequest) (*dmiapi.RemoveDeviceModelResponse, error) {
- s.devPanel.RemoveModel(request.ModelName)
-
+ modelID := parse.GetResourceID(request.ModelNamespace, request.ModelName)
+ s.devPanel.RemoveModel(modelID)
return &dmiapi.RemoveDeviceModelResponse{}, nil
}
@@ -135,8 +139,8 @@ func (s *Server) GetDevice(_ context.Context, request *dmiapi.GetDeviceRequest)
if request.GetDeviceName() == "" {
return nil, errors.New("device name is nil")
}
-
- device, err := s.devPanel.GetDevice(request.GetDeviceName())
+ deviceID := parse.GetResourceID(request.GetDeviceNamespace(), request.GetDeviceName())
+ device, err := s.devPanel.GetDevice(deviceID)
if err != nil {
return nil, err
}
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/callback.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/callback.go
index ed4151a39..ac9d90308 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/callback.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/callback.go
@@ -7,6 +7,7 @@ import (
"strings"
"github.com/kubeedge/mapper-framework/pkg/common"
+ "github.com/kubeedge/mapper-framework/pkg/util/parse"
)
func (rs *RestServer) Ping(writer http.ResponseWriter, request *http.Request) {
@@ -19,9 +20,11 @@ func (rs *RestServer) Ping(writer http.ResponseWriter, request *http.Request) {
func (rs *RestServer) DeviceRead(writer http.ResponseWriter, request *http.Request) {
urlItem := strings.Split(request.URL.Path, "/")
+ deviceNamespace := urlItem[len(urlItem)-3]
deviceName := urlItem[len(urlItem)-2]
propertyName := urlItem[len(urlItem)-1]
- res, dataType, err := rs.devPanel.GetTwinResult(urlItem[len(urlItem)-2], urlItem[len(urlItem)-1])
+ deviceID := parse.GetResourceID(deviceNamespace, deviceName)
+ res, dataType, err := rs.devPanel.GetTwinResult(deviceID, propertyName)
if err != nil {
http.Error(writer, fmt.Sprintf("Get device data error: %v", err), http.StatusInternalServerError)
} else {
@@ -40,8 +43,10 @@ func (rs *RestServer) DeviceRead(writer http.ResponseWriter, request *http.Reque
func (rs *RestServer) MetaGetModel(writer http.ResponseWriter, request *http.Request) {
urlItem := strings.Split(request.URL.Path, "/")
+ deviceNamespace := urlItem[len(urlItem)-2]
deviceName := urlItem[len(urlItem)-1]
- device, err := rs.devPanel.GetDevice(deviceName)
+ deviceID := parse.GetResourceID(deviceNamespace, deviceName)
+ device, err := rs.devPanel.GetDevice(deviceID)
if err != nil {
http.Error(writer, fmt.Sprintf("Get device error: %v", err), http.StatusInternalServerError)
return
@@ -55,7 +60,8 @@ func (rs *RestServer) MetaGetModel(writer http.ResponseWriter, request *http.Req
if instance.IsValid() {
instance, ok := instance.Interface().(common.DeviceInstance)
if ok {
- model, err := rs.devPanel.GetModel(instance.Model)
+ modelID := parse.GetResourceID(instance.Namespace, instance.Model)
+ model, err := rs.devPanel.GetModel(modelID)
if err != nil {
http.Error(writer, fmt.Sprintf("Get device model error: %v", err), http.StatusInternalServerError)
}
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/restapi.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/restapi.go
index c379d570b..92fc0e80c 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/restapi.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/httpserver/restapi.go
@@ -13,23 +13,25 @@ const (
// APIDeviceRoute to build device RESTful API
APIDeviceRoute = APIBase + "/device"
// APIDeviceReadRoute API that read device's property
- APIDeviceReadRoute = APIDeviceRoute + "/" + DeviceID + "/" + PropertyName
+ APIDeviceReadRoute = APIDeviceRoute + "/" + DeviceNamespace + "/" + DeviceName + "/" + PropertyName
// APIMetaRoute to build meta RESTful API
APIMetaRoute = APIBase + "/meta"
// APIMetaGetModelRoute API that get device model by device id
- APIMetaGetModelRoute = APIMetaRoute + "/model" + "/" + DeviceID
+ APIMetaGetModelRoute = APIMetaRoute + "/model" + "/" + DeviceNamespace + "/" + DeviceName
// APIDataBaseRoute to build database RESTful API
APIDataBaseRoute = APIBase + "/database"
// APIDataBaseGetDataByID API that get data by device id
- APIDataBaseGetDataByID = APIDataBaseRoute + "/" + DeviceID
+ APIDataBaseGetDataByID = APIDataBaseRoute + "/" + DeviceNamespace + "/" + DeviceName
)
// API field pattern
const (
- // DeviceID pattern for deviceID
- DeviceID = "{id}"
+ // DeviceName pattern for deviceName
+ DeviceName = "{name}"
+ // DeviceNamespace pattern for deviceNamespace
+ DeviceNamespace = "{namespace}"
// PropertyName pattern for property
PropertyName = "{property}"
)
diff --git a/staging/src/github.com/kubeedge/mapper-framework/pkg/util/parse/grpc.go b/staging/src/github.com/kubeedge/mapper-framework/pkg/util/parse/grpc.go
index a1d1b9917..90c1a9876 100644
--- a/staging/src/github.com/kubeedge/mapper-framework/pkg/util/parse/grpc.go
+++ b/staging/src/github.com/kubeedge/mapper-framework/pkg/util/parse/grpc.go
@@ -198,7 +198,9 @@ func buildPropertiesFromGrpc(device *dmiapi.Device) []common.DeviceProperty {
func GetDeviceModelFromGrpc(model *dmiapi.DeviceModel) common.DeviceModel {
cur := common.DeviceModel{
- Name: model.GetName(),
+ ID: GetResourceID(model.GetNamespace(), model.GetName()),
+ Name: model.GetName(),
+ Namespace: model.GetNamespace(),
}
if model.GetSpec() == nil || len(model.GetSpec().GetProperties()) == 0 {
return cur
@@ -226,8 +228,9 @@ func GetDeviceFromGrpc(device *dmiapi.Device, commonModel *common.DeviceModel) (
return nil, err
}
instance := &common.DeviceInstance{
- ID: device.GetName(),
+ ID: GetResourceID(device.GetNamespace(), device.GetName()),
Name: device.GetName(),
+ Namespace: device.GetNamespace(),
ProtocolName: protocolName + "-" + device.GetName(),
Model: device.GetSpec().GetDeviceModelReference(),
Twins: buildTwinsFromGrpc(device),
@@ -258,3 +261,8 @@ func GetDeviceFromGrpc(device *dmiapi.Device, commonModel *common.DeviceModel) (
klog.V(2).Infof("final instance data from grpc = %v", instance)
return instance, nil
}
+
+// GetResourceID return resource ID
+func GetResourceID(namespace, name string) string {
+ return namespace + "/" + name
+}