1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-28 02:37:11 +00:00

nfd-master: make nodeName non-global

This commit is contained in:
Markus Lehtonen 2021-02-03 19:15:00 +02:00
parent b146508e64
commit cdca6d667a
2 changed files with 24 additions and 17 deletions

View file

@ -41,10 +41,6 @@ const (
mockNodeName = "mock-node"
)
func init() {
nodeName = mockNodeName
}
func newMockNode() *api.Node {
n := api.Node{}
n.Name = mockNodeName
@ -54,6 +50,14 @@ func newMockNode() *api.Node {
return &n
}
func newMockMaster(apihelper apihelper.APIHelpers) *nfdMaster {
return &nfdMaster{
nodeName: mockNodeName,
args: Args{LabelWhiteList: regexp.MustCompile("")},
apihelper: apihelper,
}
}
func TestUpdateNodeFeatures(t *testing.T) {
Convey("When I update the node using fake client", t, func() {
fakeFeatureLabels := map[string]string{LabelNs + "/source-feature.1": "1", LabelNs + "/source-feature.2": "2", LabelNs + "/source-feature.3": "val3"}
@ -159,6 +163,7 @@ func TestUpdateNodeFeatures(t *testing.T) {
func TestUpdateMasterNode(t *testing.T) {
Convey("When updating the nfd-master node", t, func() {
mockHelper := &apihelper.MockAPIHelpers{}
mockMaster := newMockMaster(mockHelper)
mockClient := &k8sclient.Clientset{}
mockNode := newMockNode()
Convey("When update operation succeeds", func() {
@ -167,7 +172,7 @@ func TestUpdateMasterNode(t *testing.T) {
mockHelper.On("GetClient").Return(mockClient, nil)
mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, nil)
mockHelper.On("PatchNode", mockClient, mockNodeName, mock.MatchedBy(jsonPatchMatcher(expectedPatches))).Return(nil)
err := updateMasterNode(mockHelper)
err := mockMaster.updateMasterNode()
Convey("No error should be returned", func() {
So(err, ShouldBeNil)
})
@ -176,7 +181,7 @@ func TestUpdateMasterNode(t *testing.T) {
mockErr := errors.New("mock-error")
Convey("When getting API client fails", func() {
mockHelper.On("GetClient").Return(mockClient, mockErr)
err := updateMasterNode(mockHelper)
err := mockMaster.updateMasterNode()
Convey("An error should be returned", func() {
So(err, ShouldEqual, mockErr)
})
@ -185,7 +190,7 @@ func TestUpdateMasterNode(t *testing.T) {
Convey("When getting API node object fails", func() {
mockHelper.On("GetClient").Return(mockClient, nil)
mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, mockErr)
err := updateMasterNode(mockHelper)
err := mockMaster.updateMasterNode()
Convey("An error should be returned", func() {
So(err, ShouldEqual, mockErr)
})
@ -195,7 +200,7 @@ func TestUpdateMasterNode(t *testing.T) {
mockHelper.On("GetClient").Return(mockClient, nil)
mockHelper.On("GetNode", mockClient, mockNodeName).Return(mockNode, nil)
mockHelper.On("PatchNode", mockClient, mockNodeName, mock.Anything).Return(mockErr)
err := updateMasterNode(mockHelper)
err := mockMaster.updateMasterNode()
Convey("An error should be returned", func() {
So(err, ShouldEqual, mockErr)
})
@ -282,9 +287,9 @@ func TestSetLabels(t *testing.T) {
const workerName = "mock-worker"
const workerVer = "0.1-test"
mockHelper := &apihelper.MockAPIHelpers{}
mockMaster := newMockMaster(mockHelper)
mockClient := &k8sclient.Clientset{}
mockNode := newMockNode()
mockMaster := nfdMaster{args: Args{LabelWhiteList: regexp.MustCompile("")}, apihelper: mockHelper}
mockCtx := context.Background()
// In the gRPC request the label names may omit the default ns
mockLabels := map[string]string{"feature-1": "1", "feature-2": "val-2", "feature-3": "3"}

View file

@ -59,7 +59,6 @@ const (
var (
stdoutLogger = log.New(os.Stdout, "", log.LstdFlags)
stderrLogger = log.New(os.Stderr, "", log.LstdFlags)
nodeName = os.Getenv("NODE_NAME")
)
// Labels are a Kubernetes representation of discovered features.
@ -94,6 +93,7 @@ type NfdMaster interface {
type nfdMaster struct {
args Args
nodeName string
server *grpc.Server
ready chan bool
apihelper apihelper.APIHelpers
@ -101,7 +101,9 @@ type nfdMaster struct {
// Create new NfdMaster server instance.
func NewNfdMaster(args Args) (NfdMaster, error) {
nfd := &nfdMaster{args: args, ready: make(chan bool, 1)}
nfd := &nfdMaster{args: args,
nodeName: os.Getenv("NODE_NAME"),
ready: make(chan bool, 1)}
// Check TLS related args
if args.CertFile != "" || args.KeyFile != "" || args.CaFile != "" {
@ -126,14 +128,14 @@ func NewNfdMaster(args Args) (NfdMaster, error) {
// is called.
func (m *nfdMaster) Run() error {
stdoutLogger.Printf("Node Feature Discovery Master %s", version.Get())
stdoutLogger.Printf("NodeName: '%s'", nodeName)
stdoutLogger.Printf("NodeName: '%s'", m.nodeName)
if m.args.Prune {
return m.prune()
}
if !m.args.NoPublish {
err := updateMasterNode(m.apihelper)
err := m.updateMasterNode()
if err != nil {
return fmt.Errorf("failed to update master node: %v", err)
}
@ -241,19 +243,19 @@ func (m *nfdMaster) prune() error {
}
// Advertise NFD master information
func updateMasterNode(helper apihelper.APIHelpers) error {
cli, err := helper.GetClient()
func (m *nfdMaster) updateMasterNode() error {
cli, err := m.apihelper.GetClient()
if err != nil {
return err
}
node, err := helper.GetNode(cli, nodeName)
node, err := m.apihelper.GetNode(cli, m.nodeName)
if err != nil {
return err
}
// Advertise NFD version as an annotation
p := createPatches(nil, node.Annotations, Annotations{masterVersionAnnotation: version.Get()}, "/metadata/annotations")
err = helper.PatchNode(cli, node.Name, p)
err = m.apihelper.PatchNode(cli, node.Name, p)
if err != nil {
stderrLogger.Printf("failed to patch node annotations: %v", err)
return err