Skip to content

Commit 8f5c959

Browse files
authored
full sync when namespace labels change (#917)
1 parent 12674d5 commit 8f5c959

File tree

2 files changed

+60
-51
lines changed

2 files changed

+60
-51
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package netpol
2+
3+
import (
4+
"github.com/golang/glog"
5+
api "k8s.io/api/core/v1"
6+
"k8s.io/client-go/tools/cache"
7+
"reflect"
8+
)
9+
10+
func (npc *NetworkPolicyController) newNamespaceEventHandler() cache.ResourceEventHandler {
11+
return cache.ResourceEventHandlerFuncs{
12+
AddFunc: func(obj interface{}) {
13+
npc.handleNamespaceAdd(obj.(*api.Namespace))
14+
},
15+
UpdateFunc: func(oldObj, newObj interface{}) {
16+
npc.handleNamespaceUpdate(oldObj.(*api.Namespace), newObj.(*api.Namespace))
17+
},
18+
DeleteFunc: func(obj interface{}) {
19+
switch obj := obj.(type) {
20+
case *api.Namespace:
21+
npc.handleNamespaceDelete(obj)
22+
return
23+
case cache.DeletedFinalStateUnknown:
24+
if namespace, ok := obj.Obj.(*api.Namespace); ok {
25+
npc.handleNamespaceDelete(namespace)
26+
return
27+
}
28+
default:
29+
glog.Errorf("unexpected object type: %v", obj)
30+
}
31+
},
32+
}
33+
}
34+
35+
func (npc *NetworkPolicyController) handleNamespaceAdd(obj *api.Namespace) {
36+
if npc.v1NetworkPolicy && obj.Labels == nil {
37+
return
38+
}
39+
glog.V(2).Infof("Received update for namespace: %s", obj.Name)
40+
41+
npc.RequestFullSync()
42+
}
43+
44+
func (npc *NetworkPolicyController) handleNamespaceUpdate(oldObj, newObj *api.Namespace) {
45+
if npc.v1NetworkPolicy && reflect.DeepEqual(oldObj.Labels, newObj.Labels) {
46+
return
47+
}
48+
glog.V(2).Infof("Received update for namespace: %s", newObj.Name)
49+
50+
npc.RequestFullSync()
51+
}
52+
53+
func (npc *NetworkPolicyController) handleNamespaceDelete(obj *api.Namespace) {
54+
if npc.v1NetworkPolicy && obj.Labels == nil {
55+
return
56+
}
57+
glog.V(2).Infof("Received namespace: %s delete event", obj.Name)
58+
59+
npc.RequestFullSync()
60+
}

pkg/controllers/netpol/network_policy_controller.go

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -195,18 +195,6 @@ func (npc *NetworkPolicyController) OnNetworkPolicyUpdate(obj interface{}) {
195195
npc.RequestFullSync()
196196
}
197197

198-
// OnNamespaceUpdate handles updates to namespace from kubernetes api server
199-
func (npc *NetworkPolicyController) OnNamespaceUpdate(obj interface{}) {
200-
namespace := obj.(*api.Namespace)
201-
// namespace (and annotations on it) has no significance in GA ver of network policy
202-
if npc.v1NetworkPolicy {
203-
return
204-
}
205-
glog.V(2).Infof("Received update for namespace: %s", namespace.Name)
206-
207-
npc.RequestFullSync()
208-
}
209-
210198
// RequestFullSync allows the request of a full network policy sync without blocking the callee
211199
func (npc *NetworkPolicyController) RequestFullSync() {
212200
select {
@@ -1663,23 +1651,6 @@ func (npc *NetworkPolicyController) newPodEventHandler() cache.ResourceEventHand
16631651
}
16641652
}
16651653

1666-
func (npc *NetworkPolicyController) newNamespaceEventHandler() cache.ResourceEventHandler {
1667-
return cache.ResourceEventHandlerFuncs{
1668-
AddFunc: func(obj interface{}) {
1669-
npc.OnNamespaceUpdate(obj)
1670-
1671-
},
1672-
UpdateFunc: func(oldObj, newObj interface{}) {
1673-
npc.OnNamespaceUpdate(newObj)
1674-
1675-
},
1676-
DeleteFunc: func(obj interface{}) {
1677-
npc.handleNamespaceDelete(obj)
1678-
1679-
},
1680-
}
1681-
}
1682-
16831654
func (npc *NetworkPolicyController) newNetworkPolicyEventHandler() cache.ResourceEventHandler {
16841655
return cache.ResourceEventHandlerFuncs{
16851656
AddFunc: func(obj interface{}) {
@@ -1714,28 +1685,6 @@ func (npc *NetworkPolicyController) handlePodDelete(obj interface{}) {
17141685
npc.RequestFullSync()
17151686
}
17161687

1717-
func (npc *NetworkPolicyController) handleNamespaceDelete(obj interface{}) {
1718-
namespace, ok := obj.(*api.Namespace)
1719-
if !ok {
1720-
tombstone, ok := obj.(cache.DeletedFinalStateUnknown)
1721-
if !ok {
1722-
glog.Errorf("unexpected object type: %v", obj)
1723-
return
1724-
}
1725-
if namespace, ok = tombstone.Obj.(*api.Namespace); !ok {
1726-
glog.Errorf("unexpected object type: %v", obj)
1727-
return
1728-
}
1729-
}
1730-
// namespace (and annotations on it) has no significance in GA ver of network policy
1731-
if npc.v1NetworkPolicy {
1732-
return
1733-
}
1734-
glog.V(2).Infof("Received namespace: %s delete event", namespace.Name)
1735-
1736-
npc.RequestFullSync()
1737-
}
1738-
17391688
func (npc *NetworkPolicyController) handleNetworkPolicyDelete(obj interface{}) {
17401689
netpol, ok := obj.(*networking.NetworkPolicy)
17411690
if !ok {

0 commit comments

Comments
 (0)