@@ -11,15 +11,65 @@ import (
11
11
"github.com/icinga/icinga-kubernetes/pkg/sync"
12
12
"github.com/okzk/sdnotify"
13
13
"github.com/pkg/errors"
14
+ "github.com/spf13/pflag"
14
15
"golang.org/x/sync/errgroup"
16
+ kmetav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
15
17
kinformers "k8s.io/client-go/informers"
16
18
"k8s.io/client-go/kubernetes"
17
19
kclientcmd "k8s.io/client-go/tools/clientcmd"
20
+ "reflect"
21
+ "strconv"
18
22
)
19
23
20
24
func main () {
21
- kconfig , err := kclientcmd .NewNonInteractiveDeferredLoadingClientConfig (
22
- kclientcmd .NewDefaultClientConfigLoadingRules (), & kclientcmd.ConfigOverrides {}).ClientConfig ()
25
+ flags := internal.Flags {}
26
+
27
+ fv := reflect .ValueOf (& flags ).Elem ()
28
+ ft := reflect .TypeOf (flags )
29
+
30
+ for i := 0 ; i < ft .NumField (); i ++ {
31
+ fieldType := ft .Field (i )
32
+ fieldValue := fv .Field (i )
33
+
34
+ long := fieldType .Tag .Get ("long" )
35
+ short := fieldType .Tag .Get ("short" )
36
+ value := fieldType .Tag .Get ("default" )
37
+ usage := fieldType .Tag .Get ("description" )
38
+
39
+ switch fieldValue .Kind () {
40
+ case reflect .String :
41
+ ref := fv .Field (i ).Addr ().Interface ().(* string )
42
+ pflag .StringVarP (ref , long , short , value , usage )
43
+ case reflect .Int :
44
+ ref := fv .Field (i ).Addr ().Interface ().(* int )
45
+
46
+ value , err := strconv .Atoi (value )
47
+ if err != nil {
48
+ logging .Fatal (errors .Wrap (err , "can't convert flag default value to integer" ))
49
+ }
50
+
51
+ pflag .IntVarP (ref , long , short , value , usage )
52
+ case reflect .Bool :
53
+ ref := fv .Field (i ).Addr ().Interface ().(* bool )
54
+
55
+ value , err := strconv .ParseBool (value )
56
+ if err != nil {
57
+ logging .Fatal (errors .Wrap (err , "can't convert flag default value to bool" ))
58
+ }
59
+
60
+ pflag .BoolVarP (ref , long , short , value , usage )
61
+ }
62
+ }
63
+
64
+ kconfigOverrides := & kclientcmd.ConfigOverrides {}
65
+ kclientcmd .BindOverrideFlags (kconfigOverrides , pflag .CommandLine , kclientcmd .RecommendedConfigOverrideFlags ("" ))
66
+
67
+ kclientconfig := kclientcmd .NewNonInteractiveDeferredLoadingClientConfig (
68
+ kclientcmd .NewDefaultClientConfigLoadingRules (), kconfigOverrides )
69
+
70
+ pflag .Parse ()
71
+
72
+ kconfig , err := kclientconfig .ClientConfig ()
23
73
if err != nil {
24
74
logging .Fatal (errors .Wrap (err , "can't configure Kubernetes client" ))
25
75
}
@@ -29,9 +79,11 @@ func main() {
29
79
logging .Fatal (errors .Wrap (err , "can't create Kubernetes client" ))
30
80
}
31
81
32
- flags , err := config . ParseFlags [internal. Flags ] ()
82
+ namespace , overridden , err := kclientconfig . Namespace ()
33
83
if err != nil {
34
- logging .Fatal (errors .Wrap (err , "can't parse flags" ))
84
+ logging .Fatal (errors .Wrap (err , "can't get namespace from CLI" ))
85
+ } else if ! overridden {
86
+ namespace = kmetav1 .NamespaceAll
35
87
}
36
88
37
89
cfg , err := config.FromYAMLFile [internal.Config ](flags .Config )
@@ -66,26 +118,26 @@ func main() {
66
118
}
67
119
}
68
120
69
- informers := kinformers .NewSharedInformerFactory (k , 0 )
121
+ informers := kinformers .NewSharedInformerFactoryWithOptions (k , 0 , kinformers . WithNamespace ( namespace ) )
70
122
71
123
g , ctx := errgroup .WithContext (ctx )
72
124
73
125
g .Go (func () error {
74
126
return sync .NewSync (
75
127
db , schema .NewNode , informers .Core ().V1 ().Nodes ().Informer (), logs .GetChildLogger ("Nodes" ),
76
- ).Run (ctx )
128
+ ).Run (ctx , namespace )
77
129
})
78
130
79
131
g .Go (func () error {
80
132
return sync .NewSync (
81
133
db , schema .NewNamespace , informers .Core ().V1 ().Namespaces ().Informer (), logs .GetChildLogger ("Namespaces" ),
82
- ).Run (ctx )
134
+ ).Run (ctx , namespace )
83
135
})
84
136
85
137
g .Go (func () error {
86
138
return sync .NewSync (
87
139
db , schema .NewPod , informers .Core ().V1 ().Pods ().Informer (), logs .GetChildLogger ("Pods" ),
88
- ).Run (ctx )
140
+ ).Run (ctx , namespace )
89
141
})
90
142
91
143
if err := g .Wait (); err != nil {
0 commit comments