@@ -55,6 +55,10 @@ type NamespaceCache struct {
5555 sync.RWMutex
5656
5757 log logr.Logger
58+ // Provide a namespace specifically to listen to.
59+ // Provide empty string to listen to all namespaces except kube-system and kube-public.
60+ watchNamespace string
61+
5862 // Namespace informer
5963 informer k8scache.SharedInformer
6064 // namespaceInfos maps namespaces names to their known namespaceInfo
@@ -63,7 +67,7 @@ type NamespaceCache struct {
6367
6468// NewNamespaceCache makes a new NamespaceCache from a
6569// kubernetes.Interface and a logr.Logger
66- func NewNamespaceCache (clientset kubernetes.Interface , log logr.Logger ) * NamespaceCache {
70+ func NewNamespaceCache (clientset kubernetes.Interface , log logr.Logger , watchNamespace string ) * NamespaceCache {
6771 sharedInformer := informersv1 .NewNamespaceInformer (
6872 clientset ,
6973 informerResyncPeriod ,
@@ -72,40 +76,44 @@ func NewNamespaceCache(clientset kubernetes.Interface, log logr.Logger) *Namespa
7276 return & NamespaceCache {
7377 informer : sharedInformer ,
7478 log : log .WithName ("cache.namespace" ),
79+ watchNamespace : watchNamespace ,
7580 namespaceInfos : make (map [string ]* namespaceInfo ),
7681 }
7782}
7883
79- // isIgnoredNamespace returns true if an object is of type corev1.Namespace
80- // and it metadata name is one of 'ack-system', 'kube-system' or 'kube-public'
81- func isIgnoredNamespace (raw interface {}) bool {
84+ // Check if the provided namespace should be listened to or not
85+ func isWatchNamespace (raw interface {}, watchNamespace string ) bool {
8286 object , ok := raw .(* corev1.Namespace )
83- return ok &&
84- (object .ObjectMeta .Name == "ack-system" ||
85- object .ObjectMeta .Name == "kube-system" ||
86- object .ObjectMeta .Name == "kube-public" )
87+ if ! ok {
88+ return false
89+ }
90+
91+ if watchNamespace != "" {
92+ return watchNamespace == object .ObjectMeta .Name
93+ }
94+ return object .ObjectMeta .Name != "kube-system" && object .ObjectMeta .Name != "kube-public"
8795}
8896
8997// Run adds event handler functions to the SharedInformer and
9098// runs the informer to begin processing items.
9199func (c * NamespaceCache ) Run (stopCh <- chan struct {}) {
92100 c .informer .AddEventHandler (k8scache.ResourceEventHandlerFuncs {
93101 AddFunc : func (obj interface {}) {
94- if ! isIgnoredNamespace (obj ) {
102+ if isWatchNamespace (obj , c . watchNamespace ) {
95103 ns := obj .(* corev1.Namespace )
96104 c .setNamespaceInfoFromK8sObject (ns )
97105 c .log .V (1 ).Info ("created namespace" , "name" , ns .ObjectMeta .Name )
98106 }
99107 },
100108 UpdateFunc : func (orig , desired interface {}) {
101- if ! isIgnoredNamespace (desired ) {
109+ if isWatchNamespace (desired , c . watchNamespace ) {
102110 ns := desired .(* corev1.Namespace )
103111 c .setNamespaceInfoFromK8sObject (ns )
104112 c .log .V (1 ).Info ("updated namespace" , "name" , ns .ObjectMeta .Name )
105113 }
106114 },
107115 DeleteFunc : func (obj interface {}) {
108- if ! isIgnoredNamespace (obj ) {
116+ if isWatchNamespace (obj , c . watchNamespace ) {
109117 ns := obj .(* corev1.Namespace )
110118 c .deleteNamespaceInfo (ns .ObjectMeta .Name )
111119 c .log .V (1 ).Info ("deleted namespace" , "name" , ns .ObjectMeta .Name )
0 commit comments