github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/cloud/pkg/synccontroller/createfailedobject.go (about) 1 package synccontroller 2 3 import ( 4 apierrors "k8s.io/apimachinery/pkg/api/errors" 5 "k8s.io/apimachinery/pkg/labels" 6 "k8s.io/klog" 7 8 beehiveContext "github.com/kubeedge/beehive/pkg/core/context" 9 "github.com/kubeedge/beehive/pkg/core/model" 10 edgemgr "github.com/kubeedge/kubeedge/cloud/pkg/edgecontroller/manager" 11 commonconst "github.com/kubeedge/kubeedge/common/constants" 12 ) 13 14 // Compare the objects in K8s with the objects that have been persisted to the edge, 15 // If the objects fail to persisted to the edge for the first time, it will be recreated here. 16 // Just focus on the pod, service, endpoint, because if the pod is passed down, and the configmap and secret 17 // cannot be found then it will be queried to the cloud. 18 func (sctl *SyncController) manageCreateFailedObject() { 19 sctl.manageCreateFailedCoreObject() 20 // TODO: checking for devices 21 // sctl.manageCreateFailedDevice() 22 } 23 24 func (sctl *SyncController) manageCreateFailedCoreObject() { 25 allPods, err := sctl.podLister.List(labels.Everything()) 26 if err != nil { 27 klog.Errorf("Filed to list all the pods: %v", err) 28 return 29 } 30 31 set := labels.Set{edgemgr.NodeRoleKey: edgemgr.NodeRoleValue} 32 selector := labels.SelectorFromSet(set) 33 allEdgeNodes, err := sctl.nodeLister.List(selector) 34 if err != nil { 35 klog.Errorf("Filed to list all the edge nodes: %v", err) 36 return 37 } 38 39 for _, pod := range allPods { 40 if !isFromEdgeNode(allEdgeNodes, pod.Spec.NodeName) { 41 continue 42 } 43 // Check whether the pod is successfully persisted to edge 44 _, err := sctl.objectSyncLister.ObjectSyncs(pod.Namespace).Get(BuildObjectSyncName(pod.Spec.NodeName, string(pod.UID))) 45 if err != nil && apierrors.IsNotFound(err) { 46 msg := buildEdgeControllerMessage(pod.Spec.NodeName, pod.Namespace, model.ResourceTypePod, pod.Name, model.InsertOperation, pod) 47 beehiveContext.Send(commonconst.DefaultContextSendModuleName, *msg) 48 } 49 50 // TODO: add send check for service and endpoint 51 /* 52 services, err := sctl.serviceLister.GetPodServices(pod) 53 if err != nil { 54 klog.Errorf("Filed to list all the services for pod %s: %v", pod.Name, err) 55 } 56 57 for _, svc := range services { 58 // Check whether the service related to pod is successfully persisted to edge 59 _, err := sctl.objectSyncLister.ObjectSyncs(svc.Namespace).Get(buildObjectSyncName(pod.Spec.NodeName, string(svc.UID))) 60 if err != nil && apierrors.IsNotFound(err) { 61 msg := buildEdgeControllerMessage(pod.Spec.NodeName, svc.Namespace, commonconst.ResourceTypeService, svc.Name, model.InsertOperation, svc) 62 beehiveContext.Send(commonconst.DefaultContextSendModuleName, *msg) 63 } 64 65 selector := labels.SelectorFromSet(svc.Spec.Selector) 66 endpoints, err := sctl.endpointLister.Endpoints(svc.Namespace).List(selector) 67 if err != nil { 68 klog.Errorf("Filed to list all the endpoints for svc %s: %v", svc.Name, err) 69 } 70 71 for _, endpoint := range endpoints { 72 // Check whether the endpoint related to service is successfully persisted to edge 73 _, err := sctl.objectSyncLister.ObjectSyncs(endpoint.Namespace).Get(buildObjectSyncName(pod.Spec.NodeName, string(endpoint.UID))) 74 if err != nil && apierrors.IsNotFound(err) { 75 msg := buildEdgeControllerMessage(pod.Spec.NodeName, endpoint.Namespace, commonconst.ResourceTypeEndpoints, endpoint.Name, model.InsertOperation, endpoint) 76 beehiveContext.Send(commonconst.DefaultContextSendModuleName, *msg) 77 } 78 } 79 } 80 */ 81 } 82 } 83 84 func (sctl *SyncController) manageCreateFailedDevice() { 85 allDevices, err := sctl.deviceLister.List(labels.Everything()) 86 if err != nil { 87 klog.Errorf("Filed to list all the devices: %v", err) 88 return 89 } 90 91 for _, device := range allDevices { 92 // Check whether the device is successfully persisted to edge 93 // TODO: refactor the nodeselector of the device 94 nodeName := device.Spec.NodeSelector.NodeSelectorTerms[0].MatchExpressions[0].Values[0] 95 _, err := sctl.objectSyncLister.ObjectSyncs(device.Namespace).Get(BuildObjectSyncName(nodeName, string(device.UID))) 96 if err != nil && apierrors.IsNotFound(err) { 97 msg := buildEdgeControllerMessage(nodeName, device.Namespace, commonconst.ResourceTypeService, device.Name, model.InsertOperation, device) 98 beehiveContext.Send(commonconst.DefaultContextSendModuleName, *msg) 99 } 100 } 101 }