diff options
| author | wbc6080 <wangbincheng4@huawei.com> | 2023-12-22 16:02:13 +0800 |
|---|---|---|
| committer | wbc6080 <wangbincheng4@huawei.com> | 2024-01-08 14:20:40 +0800 |
| commit | 7ff72309d19f9f2fb535c1523fefdaaee4d70c03 (patch) | |
| tree | 6fb53b465ed5ff628c5543f36df225afaf68e7ac /cloud | |
| parent | Merge pull request #5238 from wbc6080/update-generate.sh (diff) | |
| download | kubeedge-7ff72309d19f9f2fb535c1523fefdaaee4d70c03.tar.gz | |
fix namespace problem in cloudcore
Signed-off-by: wbc6080 <wangbincheng4@huawei.com>
Diffstat (limited to 'cloud')
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 +} |
