summaryrefslogtreecommitdiff
path: root/cloud
diff options
context:
space:
mode:
authorKubeEdge Bot <48982446+kubeedge-bot@users.noreply.github.com>2024-01-17 14:27:27 +0800
committerGitHub <noreply@github.com>2024-01-17 14:27:27 +0800
commit438aab894a4892ab609567e2cefb825bddea33e0 (patch)
treef6d62cfbca93ec784211fa76137a0cdc7171749b /cloud
parentMerge pull request #5234 from luomengY/compatible_selinux_install_edgecore (diff)
parentchange the way to generate resource ID (diff)
downloadkubeedge-438aab894a4892ab609567e2cefb825bddea33e0.tar.gz
Merge pull request #5329 from wbc6080/fix-device-namespace-incloud
fix namespace problem in cloudcore
Diffstat (limited to 'cloud')
-rw-r--r--cloud/pkg/devicecontroller/controller/downstream.go31
-rw-r--r--cloud/pkg/devicecontroller/controller/upstream.go2
-rw-r--r--cloud/pkg/devicecontroller/manager/common.go5
-rw-r--r--cloud/pkg/devicecontroller/manager/device.go2
-rw-r--r--cloud/pkg/devicecontroller/manager/devicemodel.go2
5 files changed, 28 insertions, 14 deletions
diff --git a/cloud/pkg/devicecontroller/controller/downstream.go b/cloud/pkg/devicecontroller/controller/downstream.go
index 107787048..f087fd567 100644
--- a/cloud/pkg/devicecontroller/controller/downstream.go
+++ b/cloud/pkg/devicecontroller/controller/downstream.go
@@ -80,19 +80,22 @@ func (dc *DownstreamController) syncDeviceModel() {
// deviceModelAdded is function to process addition of new deviceModel in apiserver
func (dc *DownstreamController) deviceModelAdded(deviceModel *v1beta1.DeviceModel) {
// nothing to do when deviceModel added, only add in map
- dc.deviceModelManager.DeviceModel.Store(deviceModel.Name, deviceModel)
+ deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name)
+ dc.deviceModelManager.DeviceModel.Store(deviceModelID, deviceModel)
}
// deviceModelUpdated is function to process updated deviceModel
func (dc *DownstreamController) deviceModelUpdated(deviceModel *v1beta1.DeviceModel) {
// nothing to do when deviceModel updated, only add in map
- dc.deviceModelManager.DeviceModel.Store(deviceModel.Name, deviceModel)
+ deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name)
+ dc.deviceModelManager.DeviceModel.Store(deviceModelID, deviceModel)
}
// deviceModelDeleted is function to process deleted deviceModel
func (dc *DownstreamController) deviceModelDeleted(deviceModel *v1beta1.DeviceModel) {
// TODO: Need to use finalizer like method to delete all devices referring to this model. Need to come up with a design.
- dc.deviceModelManager.DeviceModel.Delete(deviceModel.Name)
+ deviceModelID := manager.GetResourceID(deviceModel.Namespace, deviceModel.Name)
+ dc.deviceModelManager.DeviceModel.Delete(deviceModelID)
}
// syncDevice is used to get device events from informer
@@ -124,7 +127,8 @@ func (dc *DownstreamController) syncDevice() {
// deviceAdded creates a device, adds in deviceManagers map, send a message to edge node if node selector is present.
func (dc *DownstreamController) deviceAdded(device *v1beta1.Device) {
- dc.deviceManager.Device.Store(device.Name, device)
+ deviceID := manager.GetResourceID(device.Namespace, device.Name)
+ dc.deviceManager.Device.Store(deviceID, device)
if device.Spec.NodeName != "" {
edgeDevice := createDevice(device)
msg := model.NewMessage("")
@@ -159,7 +163,7 @@ func (dc *DownstreamController) deviceAdded(device *v1beta1.Device) {
func createDevice(device *v1beta1.Device) types.Device {
edgeDevice := types.Device{
// ID and name can be used as ID as we are using CRD and name(key in ETCD) will always be unique
- ID: device.Name,
+ ID: manager.GetResourceID(device.Namespace, device.Name),
Name: device.Name,
}
@@ -176,9 +180,10 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool {
var res bool
targetNode := device.Spec.NodeName
modelName := device.Spec.DeviceModelRef.Name
+ deviceID := manager.GetResourceID(device.Namespace, device.Name)
// To find another device in deviceMap that uses the same deviceModel with exclude current device
deviceMap.Range(func(k, v interface{}) bool {
- if k == device.Name {
+ if k == deviceID {
return true
}
deviceItem, ok := v.(*v1beta1.Device)
@@ -188,7 +193,8 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool {
if deviceItem.Spec.NodeName == "" {
return true
}
- if deviceItem.Spec.NodeName == targetNode && deviceItem.Spec.DeviceModelRef.Name == modelName {
+ if deviceItem.Spec.NodeName == targetNode && deviceItem.Namespace == device.Namespace &&
+ deviceItem.Spec.DeviceModelRef.Name == modelName {
res = true
return false
}
@@ -201,8 +207,9 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool {
// If NodeName is updated, call add device for newNode, deleteDevice for old Node.
// If Spec is updated, send update message to edge
func (dc *DownstreamController) deviceUpdated(device *v1beta1.Device) {
- value, ok := dc.deviceManager.Device.Load(device.Name)
- dc.deviceManager.Device.Store(device.Name, device)
+ deviceID := manager.GetResourceID(device.Namespace, device.Name)
+ value, ok := dc.deviceManager.Device.Load(deviceID)
+ dc.deviceManager.Device.Store(deviceID, device)
if ok {
cachedDevice := value.(*v1beta1.Device)
if isDeviceUpdated(cachedDevice, device) {
@@ -237,7 +244,8 @@ func isDeviceUpdated(oldTwin *v1beta1.Device, newTwin *v1beta1.Device) bool {
// deviceDeleted send a deleted message to the edgeNode and deletes the device from the deviceManager.Device map
func (dc *DownstreamController) deviceDeleted(device *v1beta1.Device) {
- dc.deviceManager.Device.Delete(device.Name)
+ deviceID := manager.GetResourceID(device.Namespace, device.Name)
+ dc.deviceManager.Device.Delete(deviceID)
if device.Spec.NodeName != "" {
edgeDevice := createDevice(device)
@@ -310,11 +318,12 @@ func (dc *DownstreamController) sendDeviceModelMsg(device *v1beta1.Device, opera
if device == nil || device.Spec.DeviceModelRef == nil {
return
}
+ deviceModelID := manager.GetResourceID(device.Namespace, device.Spec.DeviceModelRef.Name)
var edgeDeviceModel any
var ok bool
err := retry.Do(
func() error {
- edgeDeviceModel, ok = dc.deviceModelManager.DeviceModel.Load(device.Spec.DeviceModelRef.Name)
+ edgeDeviceModel, ok = dc.deviceModelManager.DeviceModel.Load(deviceModelID)
if !ok {
return fmt.Errorf("not found device model for device: %s, operation: %s", device.Name, operation)
}
diff --git a/cloud/pkg/devicecontroller/controller/upstream.go b/cloud/pkg/devicecontroller/controller/upstream.go
index 66de580aa..46fea8db2 100644
--- a/cloud/pkg/devicecontroller/controller/upstream.go
+++ b/cloud/pkg/devicecontroller/controller/upstream.go
@@ -174,7 +174,7 @@ func (uc *UpstreamController) updateDeviceStatus() {
klog.Errorf("Failed to marshal device status %v", deviceStatus)
continue
}
- err = uc.crdClient.DevicesV1beta1().RESTClient().Patch(MergePatchType).Namespace(cacheDevice.Namespace).Resource(ResourceTypeDevices).Name(deviceID).Body(body).Do(context.Background()).Error()
+ err = uc.crdClient.DevicesV1beta1().RESTClient().Patch(MergePatchType).Namespace(cacheDevice.Namespace).Resource(ResourceTypeDevices).Name(cacheDevice.Name).Body(body).Do(context.Background()).Error()
if err != nil {
klog.Errorf("Failed to patch device status %v of device %v in namespace %v, err: %v", deviceStatus, deviceID, cacheDevice.Namespace, err)
continue
diff --git a/cloud/pkg/devicecontroller/manager/common.go b/cloud/pkg/devicecontroller/manager/common.go
index 3954a0704..80bff1e95 100644
--- a/cloud/pkg/devicecontroller/manager/common.go
+++ b/cloud/pkg/devicecontroller/manager/common.go
@@ -44,3 +44,8 @@ func (c *CommonResourceEventHandler) OnDelete(obj interface{}) {
func NewCommonResourceEventHandler(events chan watch.Event) *CommonResourceEventHandler {
return &CommonResourceEventHandler{events: events}
}
+
+// GetResourceID return resource ID
+func GetResourceID(namespace, name string) string {
+ return namespace + "/" + name
+}
diff --git a/cloud/pkg/devicecontroller/manager/device.go b/cloud/pkg/devicecontroller/manager/device.go
index 9f004e174..b4b7d3f55 100644
--- a/cloud/pkg/devicecontroller/manager/device.go
+++ b/cloud/pkg/devicecontroller/manager/device.go
@@ -14,7 +14,7 @@ type DeviceManager struct {
// events from watch kubernetes api server
events chan watch.Event
- // Device, key is device.Name, value is *v1beta1.Device{}
+ // Device, key is device.Namespace+"/"+device.Name, value is *v1beta1.Device{}
Device sync.Map
}
diff --git a/cloud/pkg/devicecontroller/manager/devicemodel.go b/cloud/pkg/devicecontroller/manager/devicemodel.go
index cd3ebd14d..a960cc576 100644
--- a/cloud/pkg/devicecontroller/manager/devicemodel.go
+++ b/cloud/pkg/devicecontroller/manager/devicemodel.go
@@ -14,7 +14,7 @@ type DeviceModelManager struct {
// events from watch kubernetes api server
events chan watch.Event
- // DeviceModel, key is DeviceModel.Name, value is *v1alpha2.DeviceModel{}
+ // DeviceModel, key is DeviceModel.Namespace+"/"+deviceModel.Name, value is *v1beta1.DeviceModel{}
DeviceModel sync.Map
}