7
7
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
8
8
"k8s.io/apimachinery/pkg/runtime"
9
9
"k8s.io/apimachinery/pkg/runtime/schema"
10
+ "k8s.io/apimachinery/pkg/util/sets"
10
11
"k8s.io/klog/v2"
11
12
"k8s.io/kube-state-metrics/v2/pkg/allowdenylist"
12
13
"k8s.io/kube-state-metrics/v2/pkg/metric"
@@ -49,20 +50,43 @@ func (config *MetricsStoreBuilderConfig) New() (*MetricsStoreBuilder, error) {
49
50
return nil , nil
50
51
}
51
52
53
+ var match func (interface {}) (bool , error )
54
+ if len (config .NamespacesDenylist ) != 0 {
55
+ set := sets .NewString (config .NamespacesDenylist ... )
56
+ match = func (obj interface {}) (bool , error ) {
57
+ typ , err := meta .Accessor (obj )
58
+ if err != nil {
59
+ return false , err
60
+ }
61
+ return ! set .Has (typ .GetNamespace ()), nil
62
+ }
63
+ } else if len (config .Namespaces ) != 0 {
64
+ set := sets .NewString (config .Namespaces ... )
65
+ match = func (obj interface {}) (bool , error ) {
66
+ typ , err := meta .Accessor (obj )
67
+ if err != nil {
68
+ return false , err
69
+ }
70
+ return set .Has (typ .GetNamespace ()), nil
71
+ }
72
+ }
73
+
52
74
filter , err := NewFamilyGeneratorFilter (config )
53
75
if err != nil {
54
76
return nil , err
55
77
}
56
78
return & MetricsStoreBuilder {
57
79
familyGeneratorFilter : filter ,
58
80
resources : config .Resources ,
81
+ match : match ,
59
82
}, nil
60
83
}
61
84
62
85
type MetricsStoreBuilder struct {
63
86
familyGeneratorFilter generator.FamilyGeneratorFilter
64
87
65
88
resources options.ResourceSet
89
+ match func (obj interface {}) (bool , error )
66
90
}
67
91
68
92
func (builder * MetricsStoreBuilder ) GetMetricStore (cluster string , resource schema.GroupVersionResource ) * MetricsStore {
@@ -123,6 +147,7 @@ func (builder *MetricsStoreBuilder) GetMetricStore(cluster string, resource sche
123
147
return & MetricsStore {
124
148
MetricsStore : storage ,
125
149
convertor : convertor ,
150
+ match : builder .match ,
126
151
}
127
152
}
128
153
@@ -173,9 +198,20 @@ type MetricsStore struct {
173
198
* metricsstore.MetricsStore
174
199
175
200
convertor func (obj interface {}) (interface {}, error )
201
+ match func (obj interface {}) (bool , error )
176
202
}
177
203
178
204
func (store * MetricsStore ) Add (obj interface {}) error {
205
+ if store .match != nil {
206
+ matched , err := store .match (obj )
207
+ if err != nil {
208
+ return err
209
+ }
210
+ if ! matched {
211
+ return nil
212
+ }
213
+ }
214
+
179
215
obj , err := store .convertor (obj )
180
216
if err != nil {
181
217
return err
@@ -185,6 +221,16 @@ func (store *MetricsStore) Add(obj interface{}) error {
185
221
}
186
222
187
223
func (store * MetricsStore ) Update (obj interface {}) error {
224
+ if store .match != nil {
225
+ matched , err := store .match (obj )
226
+ if err != nil {
227
+ return err
228
+ }
229
+ if ! matched {
230
+ return nil
231
+ }
232
+ }
233
+
188
234
obj , err := store .convertor (obj )
189
235
if err != nil {
190
236
return err
@@ -194,12 +240,31 @@ func (store *MetricsStore) Update(obj interface{}) error {
194
240
}
195
241
196
242
func (store * MetricsStore ) Delete (obj interface {}) error {
243
+ if store .match != nil {
244
+ matched , err := store .match (obj )
245
+ if err != nil {
246
+ return err
247
+ }
248
+ if ! matched {
249
+ return nil
250
+ }
251
+ }
252
+
197
253
return store .MetricsStore .Delete (obj )
198
254
}
199
255
200
256
func (store * MetricsStore ) Replace (list []interface {}, rv string ) error {
201
257
objs := make ([]interface {}, 0 , len (list ))
202
258
for _ , obj := range list {
259
+ if store .match != nil {
260
+ matched , err := store .match (obj )
261
+ if err != nil {
262
+ continue
263
+ }
264
+ if ! matched {
265
+ continue
266
+ }
267
+ }
203
268
o , err := store .convertor (obj )
204
269
if err != nil {
205
270
return err
0 commit comments