Skip to content

Commit

Permalink
Common data provider node name resolution (#146)
Browse files Browse the repository at this point in the history
  • Loading branch information
jeniawhite committed May 16, 2022
1 parent d82ff2d commit 0ea2ed9
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 23 deletions.
30 changes: 17 additions & 13 deletions transformer/common_data_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@ package transformer
import (
"context"
"fmt"
"io/fs"
"os"
"strings"

"github.com/gofrs/uuid"

Expand All @@ -34,8 +31,6 @@ import (
)

const (
hostNamePath = "/etc/"
hostNameFile = "hostname"
namespace = "kube-system"
)
var uuid_namespace uuid.UUID = uuid.Must(uuid.FromString("971a1103-6b5d-4b60-ab3d-8a339a58c6c8"))
Expand All @@ -49,7 +44,7 @@ func NewCommonDataProvider(cfg config.Config) (CommonDataProvider, error) {

return CommonDataProvider{
kubeClient: KubeClient,
fsys: os.DirFS(hostNamePath),
cfg: cfg,
}, nil
}

Expand Down Expand Up @@ -81,26 +76,35 @@ func (c CommonDataProvider) getClusterId(ctx context.Context) (string, error) {
}

func (c CommonDataProvider) getNodeId(ctx context.Context) (string, error) {
hName, err := c.getHostName()
nName, err := c.getNodeName()
if err != nil {
logp.Error(fmt.Errorf("getNodeId error in getHostName: %w", err))
logp.Error(fmt.Errorf("getNodeId error in getNodeName: %w", err))
return "", err
}
n, err := c.kubeClient.CoreV1().Nodes().Get(ctx, hName, metav1.GetOptions{})
n, err := c.kubeClient.CoreV1().Nodes().Get(ctx, nName, metav1.GetOptions{})
if err != nil {
logp.Error(fmt.Errorf("getClusterId error in Nodes get: %w", err))
return "", err
}
return string(n.ObjectMeta.UID), nil
}

func (c CommonDataProvider) getHostName() (string, error) {
hName, err := fs.ReadFile(c.fsys, hostNameFile)
func (c CommonDataProvider) getNodeName() (string, error) {
nd := &kubernetes.DiscoverKubernetesNodeParams{
// TODO: Add Host capability to Config
ConfigHost: "",
Client: c.kubeClient,
IsInCluster: kubernetes.IsInCluster(c.cfg.KubeConfig),
HostUtils: &kubernetes.DefaultDiscoveryUtils{},
}

nName, err := kubernetes.DiscoverKubernetesNode(logp.L(), nd)
if err != nil {
logp.Error(fmt.Errorf("getHostName error in ReadFile: %w", err))
logp.Error(fmt.Errorf("getNodeName error in DiscoverKubernetesNode: %w", err))
return "", err
}
return strings.TrimSpace(string(hName)), nil

return nName, nil
}

func (cd CommonData) GetResourceId(id string) string {
Expand Down
14 changes: 7 additions & 7 deletions transformer/events_creator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,13 @@ package transformer
import (
"context"
"encoding/json"
"github.com/elastic/beats/v7/libbeat/logp"
"io/ioutil"
"os"
"testing"
"testing/fstest"

"github.com/elastic/beats/v7/libbeat/logp"

"github.com/elastic/cloudbeat/config"
"github.com/elastic/cloudbeat/evaluator"
"github.com/elastic/cloudbeat/resources/fetchers"
"github.com/elastic/cloudbeat/resources/fetching"
Expand Down Expand Up @@ -203,13 +204,12 @@ func (s *EventsCreatorTestSuite) TestTransformer_ProcessAggregatedResources() {

cdp := CommonDataProvider{
kubeClient: kc,
fsys: fstest.MapFS{
"hostname": {
Data: []byte("testing_node"),
},
},
cfg: config.Config{},
}

// libbeat DiscoverKubernetesNode performs a fallback to environment variable NODE_NAME
os.Setenv("NODE_NAME", "testing_node")

commonData, err := cdp.FetchCommonData(ctx)
s.NoError(err)

Expand Down
5 changes: 2 additions & 3 deletions transformer/transformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,7 @@
package transformer

import (
"io/fs"

"github.com/elastic/cloudbeat/config"
"github.com/gofrs/uuid"
"k8s.io/client-go/kubernetes"
)
Expand All @@ -35,7 +34,7 @@ type CycleMetadata struct {

type CommonDataProvider struct {
kubeClient kubernetes.Interface
fsys fs.FS
cfg config.Config
}

type CommonData struct {
Expand Down

0 comments on commit 0ea2ed9

Please sign in to comment.