1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-13 20:30:03 +00:00

Merge pull request #1655 from marquiz/devel/master-no-publish

nfd-master: parse kubeconfig even with NoPublish set
This commit is contained in:
Kubernetes Prow Robot 2024-04-08 05:14:21 -07:00 committed by GitHub
commit 31a56acdd4
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 47 additions and 34 deletions

View file

@ -40,7 +40,6 @@ import (
fakecorev1client "k8s.io/client-go/kubernetes/typed/core/v1/fake"
clienttesting "k8s.io/client-go/testing"
"k8s.io/client-go/tools/cache"
"k8s.io/klog/v2"
nfdv1alpha1 "sigs.k8s.io/node-feature-discovery/pkg/apis/nfd/v1alpha1"
"sigs.k8s.io/node-feature-discovery/pkg/features"
@ -115,6 +114,7 @@ func newFakeMaster(opts ...NfdMasterOption) *nfdMaster {
defaultOpts := []NfdMasterOption{
withNodeName(testNodeName),
withConfig(&NFDConfig{}),
WithKubernetesClient(fakeclient.NewSimpleClientset()),
}
m, err := NewNfdMaster(append(defaultOpts, opts...)...)
if err != nil {
@ -664,6 +664,10 @@ leaderElection:
func TestDynamicConfig(t *testing.T) {
Convey("When running nfd-master", t, func() {
// Add feature gates as running nfd-master depends on that
err := features.NFDMutableFeatureGate.Add(features.DefaultNFDFeatureGates)
So(err, ShouldBeNil)
tmpDir, err := os.MkdirTemp("", "*.nfd-test")
So(err, ShouldBeNil)
defer os.RemoveAll(tmpDir)
@ -674,7 +678,7 @@ func TestDynamicConfig(t *testing.T) {
So(err, ShouldBeNil)
// Create config file
configFile := filepath.Join(configDir, "master.conf")
configFile := filepath.Clean(filepath.Join(configDir, "master.conf"))
writeConfig := func(data string) {
f, err := os.Create(configFile)
@ -685,25 +689,22 @@ func TestDynamicConfig(t *testing.T) {
So(err, ShouldBeNil)
}
writeConfig(`
klog:
v: "4"
extraLabelNs: ["added.ns.io"]
`)
noPublish := true
// Add FeatureGates flag
if err := features.NFDMutableFeatureGate.Add(features.DefaultNFDFeatureGates); err != nil {
klog.ErrorS(err, "failed to add default feature gates")
os.Exit(1)
}
_ = features.NFDMutableFeatureGate.OverrideDefault(features.NodeFeatureAPI, false)
master := newFakeMaster(WithArgs(&Args{
ConfigFile: configFile,
Overrides: ConfigOverrideArgs{
NoPublish: &noPublish,
},
}))
master := newFakeMaster(
WithArgs(&Args{ConfigFile: configFile}),
WithKubernetesClient(fakeclient.NewSimpleClientset(newTestNode())))
Convey("config file updates should take effect", func() {
go func() { _ = master.Run() }()
go func() {
Convey("nfd-master should exit gracefully", t, func() {
err = master.Run()
So(err, ShouldBeNil)
})
}()
defer master.Stop()
// Check initial config
time.Sleep(10 * time.Second)

View file

@ -194,6 +194,19 @@ func NewNfdMaster(opts ...NfdMasterOption) (NfdMaster, error) {
nfd.configFilePath = filepath.Clean(nfd.args.ConfigFile)
}
// k8sClient might've been set via opts by tests
if nfd.k8sClient == nil {
kubeconfig, err := utils.GetKubeconfig(nfd.args.Kubeconfig)
if err != nil {
return nfd, err
}
cli, err := k8sclient.NewForConfig(kubeconfig)
if err != nil {
return nfd, err
}
nfd.k8sClient = cli
}
nfd.nodeUpdaterPool = newNodeUpdaterPool(nfd)
return nfd, nil
@ -770,10 +783,6 @@ func (m *nfdMaster) nfdAPIUpdateOneNode(node *corev1.Node) error {
return objs[i].Namespace < objs[j].Namespace
})
if m.config.NoPublish {
return nil
}
klog.V(1).InfoS("processing of node initiated by NodeFeature API", "nodeName", node.Name)
features := nfdv1alpha1.NewNodeFeatureSpec()
@ -875,6 +884,11 @@ func (m *nfdMaster) refreshNodeFeatures(node *corev1.Node, labels map[string]str
taints = filterTaints(crTaints)
}
if m.config.NoPublish {
klog.V(1).InfoS("node update skipped, NoPublish=true", "nodeName", node.Name)
return nil
}
err := m.updateNodeObject(node, labels, annotations, extendedResources, taints)
if err != nil {
klog.ErrorS(err, "failed to update node", "nodeName", node.Name)
@ -1250,18 +1264,6 @@ func (m *nfdMaster) configure(filepath string, overrides string) error {
return err
}
if !c.NoPublish {
kubeconfig, err := utils.GetKubeconfig(m.args.Kubeconfig)
if err != nil {
return err
}
cli, err := k8sclient.NewForConfig(kubeconfig)
if err != nil {
return err
}
m.k8sClient = cli
}
// Pre-process DenyLabelNS into 2 lists: one for normal ns, and the other for wildcard ns
normalDeniedNs, wildcardDeniedNs := preProcessDeniedNamespaces(c.DenyLabelNs)
m.deniedNs.normal = normalDeniedNs

View file

@ -20,6 +20,7 @@ import (
"testing"
. "github.com/smartystreets/goconvey/convey"
fakeclient "k8s.io/client-go/kubernetes/fake"
m "sigs.k8s.io/node-feature-discovery/pkg/nfd-master"
)
@ -36,7 +37,13 @@ func TestNewNfdMaster(t *testing.T) {
})
})
Convey("When -config is supplied", func() {
_, err := m.NewNfdMaster(m.WithArgs(&m.Args{CertFile: "crt", KeyFile: "key", CaFile: "ca", ConfigFile: "master-config.yaml"}))
_, err := m.NewNfdMaster(
m.WithArgs(&m.Args{
CertFile: "crt",
KeyFile: "key",
CaFile: "ca",
ConfigFile: "master-config.yaml"}),
m.WithKubernetesClient(fakeclient.NewSimpleClientset()))
Convey("An error should not be returned", func() {
So(err, ShouldBeNil)
})

View file

@ -24,6 +24,7 @@ import (
"time"
. "github.com/smartystreets/goconvey/convey"
fakeclient "k8s.io/client-go/kubernetes/fake"
"k8s.io/klog/v2"
"sigs.k8s.io/node-feature-discovery/pkg/features"
@ -52,7 +53,9 @@ func setupTest(args *master.Args) testContext {
os.Exit(1)
}
_ = features.NFDMutableFeatureGate.OverrideDefault(features.NodeFeatureAPI, false)
m, err := master.NewNfdMaster(master.WithArgs(args))
m, err := master.NewNfdMaster(
master.WithArgs(args),
master.WithKubernetesClient(fakeclient.NewSimpleClientset()))
if err != nil {
fmt.Printf("Test setup failed: %v\n", err)
os.Exit(1)