summaryrefslogtreecommitdiff
path: root/cloud/pkg
diff options
context:
space:
mode:
authorwbc6080 <wangbincheng4@huawei.com>2023-12-22 16:02:13 +0800
committerwbc6080 <wangbincheng4@huawei.com>2024-01-08 14:20:40 +0800
commit7ff72309d19f9f2fb535c1523fefdaaee4d70c03 (patch)
tree6fb53b465ed5ff628c5543f36df225afaf68e7ac /cloud/pkg
parentMerge pull request #5238 from wbc6080/update-generate.sh (diff)
downloadkubeedge-7ff72309d19f9f2fb535c1523fefdaaee4d70c03.tar.gz
fix namespace problem in cloudcore
Signed-off-by: wbc6080 <wangbincheng4@huawei.com>
Diffstat (limited to 'cloud/pkg')
-rw-r--r--cloud/pkg/devicecontroller/controller/downstream.go23
-rw-r--r--cloud/pkg/devicecontroller/controller/upstream.go2
-rw-r--r--cloud/pkg/devicecontroller/manager/device.go8
-rw-r--r--cloud/pkg/devicecontroller/manager/devicemodel.go8
4 files changed, 27 insertions, 14 deletions
diff --git a/cloud/pkg/devicecontroller/controller/downstream.go b/cloud/pkg/devicecontroller/controller/downstream.go
index 107787048..7dd66f329 100644
--- a/cloud/pkg/devicecontroller/controller/downstream.go
+++ b/cloud/pkg/devicecontroller/controller/downstream.go
@@ -80,19 +80,19 @@ 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)
+ dc.deviceModelManager.DeviceModel.Store(manager.GetDeviceModelID(deviceModel), 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)
+ dc.deviceModelManager.DeviceModel.Store(manager.GetDeviceModelID(deviceModel), 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)
+ dc.deviceModelManager.DeviceModel.Delete(manager.GetDeviceModelID(deviceModel))
}
// syncDevice is used to get device events from informer
@@ -124,7 +124,7 @@ 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)
+ dc.deviceManager.Device.Store(manager.GetDeviceID(device), device)
if device.Spec.NodeName != "" {
edgeDevice := createDevice(device)
msg := model.NewMessage("")
@@ -159,7 +159,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.GetDeviceID(device),
Name: device.Name,
}
@@ -178,7 +178,7 @@ func isExistModel(deviceMap *sync.Map, device *v1beta1.Device) bool {
modelName := device.Spec.DeviceModelRef.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 == manager.GetDeviceID(device) {
return true
}
deviceItem, ok := v.(*v1beta1.Device)
@@ -188,7 +188,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 +202,8 @@ 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)
+ value, ok := dc.deviceManager.Device.Load(manager.GetDeviceID(device))
+ dc.deviceManager.Device.Store(manager.GetDeviceID(device), device)
if ok {
cachedDevice := value.(*v1beta1.Device)
if isDeviceUpdated(cachedDevice, device) {
@@ -237,7 +238,7 @@ 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)
+ dc.deviceManager.Device.Delete(manager.GetDeviceID(device))
if device.Spec.NodeName != "" {
edgeDevice := createDevice(device)
@@ -314,7 +315,7 @@ func (dc *DownstreamController) sendDeviceModelMsg(device *v1beta1.Device, opera
var ok bool
err := retry.Do(
func() error {
- edgeDeviceModel, ok = dc.deviceModelManager.DeviceModel.Load(device.Spec.DeviceModelRef.Name)
+ edgeDeviceModel, ok = dc.deviceModelManager.DeviceModel.Load(device.Namespace + "-" + device.Spec.DeviceModelRef.Name)
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/device.go b/cloud/pkg/devicecontroller/manager/device.go
index 9f004e174..8a8375c9d 100644
--- a/cloud/pkg/devicecontroller/manager/device.go
+++ b/cloud/pkg/devicecontroller/manager/device.go
@@ -7,6 +7,7 @@ import (
"k8s.io/client-go/tools/cache"
"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/config"
+ "github.com/kubeedge/kubeedge/pkg/apis/devices/v1beta1"
)
// DeviceManager is a manager watch device change event
@@ -14,7 +15,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
}
@@ -34,3 +35,8 @@ func NewDeviceManager(si cache.SharedIndexInformer) (*DeviceManager, error) {
return &DeviceManager{events: events}, nil
}
+
+// GetDeviceID return device ID
+func GetDeviceID(device *v1beta1.Device) string {
+ return device.Namespace + "-" + device.Name
+}
diff --git a/cloud/pkg/devicecontroller/manager/devicemodel.go b/cloud/pkg/devicecontroller/manager/devicemodel.go
index cd3ebd14d..1e771f2ff 100644
--- a/cloud/pkg/devicecontroller/manager/devicemodel.go
+++ b/cloud/pkg/devicecontroller/manager/devicemodel.go
@@ -7,6 +7,7 @@ import (
"k8s.io/client-go/tools/cache"
"github.com/kubeedge/kubeedge/cloud/pkg/devicecontroller/config"
+ "github.com/kubeedge/kubeedge/pkg/apis/devices/v1beta1"
)
// DeviceModelManager is a manager watch DeviceModel change event
@@ -14,7 +15,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
}
@@ -34,3 +35,8 @@ func NewDeviceModelManager(si cache.SharedIndexInformer) (*DeviceModelManager, e
return &DeviceModelManager{events: events}, nil
}
+
+// GetDeviceModelID return device model ID
+func GetDeviceModelID(deviceModel *v1beta1.DeviceModel) string {
+ return deviceModel.Namespace + "-" + deviceModel.Name
+}