Skip to content

Commit f79e913

Browse files
authored
Merge pull request #566 from scydas/kube-state-metrics-namespaces
#546 add kube state metrics namespace command
2 parents 291a80c + 8f2e6aa commit f79e913

File tree

2 files changed

+72
-7
lines changed

2 files changed

+72
-7
lines changed

pkg/kube_state_metrics/metrics_store.go

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
88
"k8s.io/apimachinery/pkg/runtime"
99
"k8s.io/apimachinery/pkg/runtime/schema"
10+
"k8s.io/apimachinery/pkg/util/sets"
1011
"k8s.io/klog/v2"
1112
"k8s.io/kube-state-metrics/v2/pkg/allowdenylist"
1213
"k8s.io/kube-state-metrics/v2/pkg/metric"
@@ -49,20 +50,43 @@ func (config *MetricsStoreBuilderConfig) New() (*MetricsStoreBuilder, error) {
4950
return nil, nil
5051
}
5152

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+
5274
filter, err := NewFamilyGeneratorFilter(config)
5375
if err != nil {
5476
return nil, err
5577
}
5678
return &MetricsStoreBuilder{
5779
familyGeneratorFilter: filter,
5880
resources: config.Resources,
81+
match: match,
5982
}, nil
6083
}
6184

6285
type MetricsStoreBuilder struct {
6386
familyGeneratorFilter generator.FamilyGeneratorFilter
6487

6588
resources options.ResourceSet
89+
match func(obj interface{}) (bool, error)
6690
}
6791

6892
func (builder *MetricsStoreBuilder) GetMetricStore(cluster string, resource schema.GroupVersionResource) *MetricsStore {
@@ -123,6 +147,7 @@ func (builder *MetricsStoreBuilder) GetMetricStore(cluster string, resource sche
123147
return &MetricsStore{
124148
MetricsStore: storage,
125149
convertor: convertor,
150+
match: builder.match,
126151
}
127152
}
128153

@@ -173,9 +198,20 @@ type MetricsStore struct {
173198
*metricsstore.MetricsStore
174199

175200
convertor func(obj interface{}) (interface{}, error)
201+
match func(obj interface{}) (bool, error)
176202
}
177203

178204
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+
179215
obj, err := store.convertor(obj)
180216
if err != nil {
181217
return err
@@ -185,6 +221,16 @@ func (store *MetricsStore) Add(obj interface{}) error {
185221
}
186222

187223
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+
188234
obj, err := store.convertor(obj)
189235
if err != nil {
190236
return err
@@ -194,12 +240,31 @@ func (store *MetricsStore) Update(obj interface{}) error {
194240
}
195241

196242
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+
197253
return store.MetricsStore.Delete(obj)
198254
}
199255

200256
func (store *MetricsStore) Replace(list []interface{}, rv string) error {
201257
objs := make([]interface{}, 0, len(list))
202258
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+
}
203268
o, err := store.convertor(obj)
204269
if err != nil {
205270
return err

pkg/kube_state_metrics/options.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ func NewOptions() *Options {
4545
MetricDenylist: options.MetricSet{},
4646
MetricOptInList: options.MetricSet{},
4747

48-
Resources: defaultResources,
49-
Namespaces: options.DefaultNamespaces,
48+
Resources: defaultResources,
5049
}
5150
}
5251

@@ -79,11 +78,12 @@ func (o *Options) MetricsStoreBuilderConfig() *MetricsStoreBuilderConfig {
7978
return nil
8079
}
8180
return &MetricsStoreBuilderConfig{
82-
MetricAllowlist: o.MetricAllowlist,
83-
MetricDenylist: o.MetricDenylist,
84-
MetricOptInList: o.MetricOptInList,
85-
Resources: o.Resources,
86-
Namespaces: o.Namespaces,
81+
MetricAllowlist: o.MetricAllowlist,
82+
MetricDenylist: o.MetricDenylist,
83+
MetricOptInList: o.MetricOptInList,
84+
Resources: o.Resources,
85+
Namespaces: o.Namespaces,
86+
NamespacesDenylist: o.NamespacesDenylist,
8787
}
8888
}
8989

0 commit comments

Comments
 (0)