Skip to content

Commit 7ab6314

Browse files
committed
chore: introduce a commong klog handling for cmd/nfd-*
Signed-off-by: AhmedGrati <[email protected]>
1 parent 2e6a202 commit 7ab6314

File tree

7 files changed

+88
-103
lines changed

7 files changed

+88
-103
lines changed

cmd/nfd-master/main.go

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,10 @@ import (
2020
"flag"
2121
"fmt"
2222
"os"
23-
"strings"
2423
"time"
2524

2625
"k8s.io/klog/v2"
26+
klogutils "sigs.k8s.io/node-feature-discovery/pkg/utils/klog"
2727

2828
master "sigs.k8s.io/node-feature-discovery/pkg/nfd-master"
2929
"sigs.k8s.io/node-feature-discovery/pkg/utils"
@@ -154,7 +154,7 @@ func initFlags(flagset *flag.FlagSet) (*master.Args, *master.ConfigOverrideArgs)
154154
flagset.BoolVar(&args.EnableLeaderElection, "enable-leader-election", false,
155155
"Enables a leader election. Enable this when running more than one replica on nfd master.")
156156

157-
initKlogFlags(flagset, args)
157+
args.Klog = klogutils.InitKlogFlags(flagset)
158158

159159
overrides := &master.ConfigOverrideArgs{
160160
LabelWhiteList: &utils.RegexpVal{},
@@ -184,24 +184,3 @@ func initFlags(flagset *flag.FlagSet) (*master.Args, *master.ConfigOverrideArgs)
184184

185185
return args, overrides
186186
}
187-
188-
func initKlogFlags(flagset *flag.FlagSet, args *master.Args) {
189-
args.Klog = make(map[string]*utils.KlogFlagVal)
190-
191-
flags := flag.NewFlagSet("klog flags", flag.ContinueOnError)
192-
//flags.SetOutput(ioutil.Discard)
193-
klog.InitFlags(flags)
194-
flags.VisitAll(func(f *flag.Flag) {
195-
name := klogConfigOptName(f.Name)
196-
args.Klog[name] = utils.NewKlogFlagVal(f)
197-
flagset.Var(args.Klog[name], f.Name, f.Usage)
198-
})
199-
}
200-
201-
func klogConfigOptName(flagName string) string {
202-
split := strings.Split(flagName, "_")
203-
for i, v := range split[1:] {
204-
split[i+1] = strings.ToUpper(v[0:1]) + v[1:]
205-
}
206-
return strings.Join(split, "")
207-
}

cmd/nfd-worker/main.go

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import (
2020
"flag"
2121
"fmt"
2222
"os"
23-
"strings"
2423

2524
"k8s.io/klog/v2"
25+
klogutils "sigs.k8s.io/node-feature-discovery/pkg/utils/klog"
2626

2727
worker "sigs.k8s.io/node-feature-discovery/pkg/nfd-worker"
2828
"sigs.k8s.io/node-feature-discovery/pkg/utils"
@@ -143,7 +143,7 @@ func initFlags(flagset *flag.FlagSet) (*worker.Args, *worker.ConfigOverrideArgs)
143143
"Hostname expected from server certificate, useful in testing."+
144144
" DEPRECATED: will be removed in a future release along with the deprecated gRPC API.")
145145

146-
initKlogFlags(flagset, args)
146+
args.Klog = klogutils.InitKlogFlags(flagset)
147147

148148
// Flags overlapping with config file options
149149
overrides := &worker.ConfigOverrideArgs{
@@ -161,24 +161,3 @@ func initFlags(flagset *flag.FlagSet) (*worker.Args, *worker.ConfigOverrideArgs)
161161

162162
return args, overrides
163163
}
164-
165-
func initKlogFlags(flagset *flag.FlagSet, args *worker.Args) {
166-
args.Klog = make(map[string]*utils.KlogFlagVal)
167-
168-
flags := flag.NewFlagSet("klog flags", flag.ContinueOnError)
169-
//flags.SetOutput(ioutil.Discard)
170-
klog.InitFlags(flags)
171-
flags.VisitAll(func(f *flag.Flag) {
172-
name := klogConfigOptName(f.Name)
173-
args.Klog[name] = utils.NewKlogFlagVal(f)
174-
flagset.Var(args.Klog[name], f.Name, f.Usage)
175-
})
176-
}
177-
178-
func klogConfigOptName(flagName string) string {
179-
split := strings.Split(flagName, "_")
180-
for i, v := range split[1:] {
181-
split[i+1] = strings.ToUpper(v[0:1]) + v[1:]
182-
}
183-
return strings.Join(split, "")
184-
}

cmd/nfd-worker/main_test.go

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -55,19 +55,3 @@ func TestParseArgs(t *testing.T) {
5555
})
5656
})
5757
}
58-
59-
func TestKlogConfigOptName(t *testing.T) {
60-
Convey("When converting names of klog command line flags", t, func() {
61-
tcs := map[string]string{
62-
"": "",
63-
"a": "a",
64-
"an_arg": "anArg",
65-
"arg_with_many_parts": "argWithManyParts",
66-
}
67-
Convey("resulting config option names should be as expected", func() {
68-
for input, expected := range tcs {
69-
So(klogConfigOptName(input), ShouldEqual, expected)
70-
}
71-
})
72-
})
73-
}

pkg/nfd-master/nfd-master.go

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ import (
4848
"k8s.io/client-go/tools/leaderelection/resourcelock"
4949
"k8s.io/klog/v2"
5050
controller "k8s.io/kubernetes/pkg/controller"
51+
klogutils "sigs.k8s.io/node-feature-discovery/pkg/utils/klog"
52+
5153
taintutils "k8s.io/kubernetes/pkg/util/taints"
5254
"sigs.k8s.io/yaml"
5355

@@ -78,7 +80,7 @@ type NFDConfig struct {
7880
ResyncPeriod utils.DurationVal
7981
LeaderElection LeaderElectionConfig
8082
NfdApiParallelism int
81-
Klog map[string]string
83+
Klog klogutils.KlogConfigOpts
8284
}
8385

8486
// LeaderElectionConfig contains the configuration for leader election
@@ -1169,28 +1171,6 @@ func (m *nfdMaster) createExtendedResourcePatches(n *corev1.Node, extendedResour
11691171
return patches
11701172
}
11711173

1172-
func (m *nfdMaster) configureKlog(c *NFDConfig) error {
1173-
// Handle klog
1174-
for k, a := range m.args.Klog {
1175-
if !a.IsSetFromCmdline() {
1176-
v, ok := c.Klog[k]
1177-
if !ok {
1178-
v = a.DefValue()
1179-
}
1180-
if err := a.SetFromConfig(v); err != nil {
1181-
return fmt.Errorf("failed to set logger option klog.%s = %v: %v", k, v, err)
1182-
}
1183-
}
1184-
}
1185-
for k := range c.Klog {
1186-
if _, ok := m.args.Klog[k]; !ok {
1187-
klog.InfoS("unknown logger option in config", "optionName", k)
1188-
}
1189-
}
1190-
1191-
return nil
1192-
}
1193-
11941174
// Parse configuration options
11951175
func (m *nfdMaster) configure(filepath string, overrides string) error {
11961176
// Create a new default config
@@ -1250,7 +1230,7 @@ func (m *nfdMaster) configure(filepath string, overrides string) error {
12501230

12511231
m.config = c
12521232

1253-
if err := m.configureKlog(c); err != nil {
1233+
if err := klogutils.MergeKlogConfiguration(m.args.Klog, c.Klog); err != nil {
12541234
return err
12551235
}
12561236

pkg/nfd-worker/nfd-worker.go

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ import (
3535
"k8s.io/apimachinery/pkg/api/errors"
3636
"k8s.io/apimachinery/pkg/util/validation"
3737
"k8s.io/klog/v2"
38+
klogutils "sigs.k8s.io/node-feature-discovery/pkg/utils/klog"
3839
"sigs.k8s.io/yaml"
3940

4041
apiequality "k8s.io/apimachinery/pkg/api/equality"
@@ -74,7 +75,7 @@ type NFDConfig struct {
7475
}
7576

7677
type coreConfig struct {
77-
Klog map[string]string
78+
Klog klogutils.KlogConfigOpts
7879
LabelWhiteList utils.RegexpVal
7980
NoPublish bool
8081
FeatureSources []string
@@ -377,21 +378,9 @@ func (c *coreConfig) sanitize() {
377378

378379
func (w *nfdWorker) configureCore(c coreConfig) error {
379380
// Handle klog
380-
for k, a := range w.args.Klog {
381-
if !a.IsSetFromCmdline() {
382-
v, ok := c.Klog[k]
383-
if !ok {
384-
v = a.DefValue()
385-
}
386-
if err := a.SetFromConfig(v); err != nil {
387-
return fmt.Errorf("failed to set logger option klog.%s = %v: %v", k, v, err)
388-
}
389-
}
390-
}
391-
for k := range c.Klog {
392-
if _, ok := w.args.Klog[k]; !ok {
393-
klog.InfoS("unknown logger option in config", "optionName", k)
394-
}
381+
err := klogutils.MergeKlogConfiguration(w.args.Klog, c.Klog)
382+
if err != nil {
383+
return err
395384
}
396385

397386
// Determine enabled feature sources

pkg/utils/klog/klog.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
/*
2+
Copyright 2023 The Kubernetes Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package klog
18+
19+
import (
20+
"flag"
21+
"fmt"
22+
"strings"
23+
24+
"k8s.io/klog/v2"
25+
"sigs.k8s.io/node-feature-discovery/pkg/utils"
26+
)
27+
28+
// KlogConfigOpts defines klog configuration options
29+
type KlogConfigOpts map[string]string
30+
31+
// InitKlogFlags function is responsible for initializing klog flags.
32+
func InitKlogFlags(flagset *flag.FlagSet) map[string]*utils.KlogFlagVal {
33+
klogFlags := make(map[string]*utils.KlogFlagVal)
34+
35+
flags := flag.NewFlagSet("klog flags", flag.ContinueOnError)
36+
klog.InitFlags(flags)
37+
flags.VisitAll(func(f *flag.Flag) {
38+
name := klogConfigOptName(f.Name)
39+
klogFlags[name] = utils.NewKlogFlagVal(f)
40+
flagset.Var(klogFlags[name], f.Name, f.Usage)
41+
})
42+
43+
return klogFlags
44+
}
45+
46+
// MergeKlogConfiguration merges klog command line flags to klog configuration file options
47+
func MergeKlogConfiguration(klogArgs map[string]*utils.KlogFlagVal, klogConfig KlogConfigOpts) error {
48+
for k, a := range klogArgs {
49+
if !a.IsSetFromCmdline() {
50+
v, ok := klogConfig[k]
51+
if !ok {
52+
v = a.DefValue()
53+
}
54+
if err := a.SetFromConfig(v); err != nil {
55+
return fmt.Errorf("failed to set logger option klog.%s = %v: %v", k, v, err)
56+
}
57+
}
58+
}
59+
for k := range klogConfig {
60+
if _, ok := klogArgs[k]; !ok {
61+
klog.InfoS("unknown logger option in config", "optionName", k)
62+
}
63+
}
64+
65+
return nil
66+
}
67+
68+
func klogConfigOptName(flagName string) string {
69+
split := strings.Split(flagName, "_")
70+
for i, v := range split[1:] {
71+
split[i+1] = strings.ToUpper(v[0:1]) + v[1:]
72+
}
73+
return strings.Join(split, "")
74+
}

cmd/nfd-master/main_test.go renamed to pkg/utils/klog/klog_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package main
17+
package klog
1818

1919
import (
2020
"testing"

0 commit comments

Comments
 (0)