mirror of
https://github.com/kubernetes-sigs/node-feature-discovery.git
synced 2025-03-30 19:54:46 +00:00
Fixes #21: Splits label/version output to stdout
Adds loggers for stdout/stderr and outputs labels and the version to stdout.
This commit is contained in:
parent
be5a271e8f
commit
d940ce6e31
1 changed files with 21 additions and 14 deletions
35
main.go
35
main.go
|
@ -32,6 +32,12 @@ var (
|
||||||
prefix = fmt.Sprintf("%s/nfd", Namespace)
|
prefix = fmt.Sprintf("%s/nfd", Namespace)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// package loggers
|
||||||
|
var (
|
||||||
|
stdoutLogger = log.New(os.Stdout, "", log.LstdFlags)
|
||||||
|
stderrLogger = log.New(os.Stderr, "", log.LstdFlags)
|
||||||
|
)
|
||||||
|
|
||||||
// Labels are a Kubernetes representation of discovered features.
|
// Labels are a Kubernetes representation of discovered features.
|
||||||
type Labels map[string]string
|
type Labels map[string]string
|
||||||
|
|
||||||
|
@ -55,7 +61,7 @@ type APIHelpers interface {
|
||||||
func main() {
|
func main() {
|
||||||
// Assert that the version is known
|
// Assert that the version is known
|
||||||
if version == "" {
|
if version == "" {
|
||||||
log.Fatalf("main.version not set! Set -ldflags \"-X main.version `git describe --tags --dirty --always`\" during build or run.")
|
stderrLogger.Fatalf("main.version not set! Set -ldflags \"-X main.version `git describe --tags --dirty --always`\" during build or run.")
|
||||||
}
|
}
|
||||||
|
|
||||||
usage := fmt.Sprintf(`%s.
|
usage := fmt.Sprintf(`%s.
|
||||||
|
@ -111,29 +117,30 @@ func main() {
|
||||||
// compile whiteListArg regex
|
// compile whiteListArg regex
|
||||||
labelWhiteList, err := regexp.Compile(whiteListArg)
|
labelWhiteList, err := regexp.Compile(whiteListArg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("Error parsing whitelist regex (%s): %s", whiteListArg, err)
|
stderrLogger.Fatalf("Error parsing whitelist regex (%s): %s", whiteListArg, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
labels := Labels{}
|
labels := Labels{}
|
||||||
// Add the version of this discovery code as a node label
|
// Add the version of this discovery code as a node label
|
||||||
versionLabel := fmt.Sprintf("%s/%s.version", Namespace, ProgramName)
|
versionLabel := fmt.Sprintf("%s/%s.version", Namespace, ProgramName)
|
||||||
labels[versionLabel] = version
|
labels[versionLabel] = version
|
||||||
|
|
||||||
// Log version label.
|
// Log version label.
|
||||||
log.Printf("%s = %s", versionLabel, version)
|
stdoutLogger.Printf("%s = %s", versionLabel, version)
|
||||||
|
|
||||||
// Do feature discovery from all configured sources.
|
// Do feature discovery from all configured sources.
|
||||||
for _, source := range sources {
|
for _, source := range sources {
|
||||||
labelsFromSource, err := getFeatureLabels(source)
|
labelsFromSource, err := getFeatureLabels(source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("discovery failed for source [%s]: %s", source.Name(), err.Error())
|
stderrLogger.Fatalf("discovery failed for source [%s]: %s", source.Name(), err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, value := range labelsFromSource {
|
for name, value := range labelsFromSource {
|
||||||
// Log discovered feature.
|
// Log discovered feature.
|
||||||
log.Printf("%s = %s", name, value)
|
stdoutLogger.Printf("%s = %s", name, value)
|
||||||
// Skip if label doesn't match labelWhiteList
|
// Skip if label doesn't match labelWhiteList
|
||||||
if !labelWhiteList.Match([]byte(name)) {
|
if !labelWhiteList.Match([]byte(name)) {
|
||||||
log.Printf("%s does not match the whitelist (%s) and will not be published.", name, whiteListArg)
|
stderrLogger.Printf("%s does not match the whitelist (%s) and will not be published.", name, whiteListArg)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
labels[name] = value
|
labels[name] = value
|
||||||
|
@ -145,7 +152,7 @@ func main() {
|
||||||
helper := APIHelpers(k8sHelpers{})
|
helper := APIHelpers(k8sHelpers{})
|
||||||
err := advertiseFeatureLabels(helper, labels)
|
err := advertiseFeatureLabels(helper, labels)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("failed to advertise labels: %s", err.Error())
|
stderrLogger.Fatalf("failed to advertise labels: %s", err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -170,14 +177,14 @@ func advertiseFeatureLabels(helper APIHelpers, labels Labels) error {
|
||||||
// Set up K8S client.
|
// Set up K8S client.
|
||||||
cli, err := helper.GetClient()
|
cli, err := helper.GetClient()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("can't get kubernetes client: %s", err.Error())
|
stderrLogger.Printf("can't get kubernetes client: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the current node.
|
// Get the current node.
|
||||||
node, err := helper.GetNode(cli)
|
node, err := helper.GetNode(cli)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("failed to get node: %s", err.Error())
|
stderrLogger.Printf("failed to get node: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -187,7 +194,7 @@ func advertiseFeatureLabels(helper APIHelpers, labels Labels) error {
|
||||||
// Send the updated node to the apiserver.
|
// Send the updated node to the apiserver.
|
||||||
err = helper.UpdateNode(cli, node)
|
err = helper.UpdateNode(cli, node)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("can't update node: %s", err.Error())
|
stderrLogger.Printf("can't update node: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -211,20 +218,20 @@ func (h k8sHelpers) GetNode(cli *client.Client) (*api.Node, error) {
|
||||||
// Get the pod name and pod namespace from the env variables
|
// Get the pod name and pod namespace from the env variables
|
||||||
podName := os.Getenv(PodNameEnv)
|
podName := os.Getenv(PodNameEnv)
|
||||||
podns := os.Getenv(PodNamespaceEnv)
|
podns := os.Getenv(PodNamespaceEnv)
|
||||||
log.Printf("%s: %s", PodNameEnv, podName)
|
stdoutLogger.Printf("%s: %s", PodNameEnv, podName)
|
||||||
log.Printf("%s: %s", PodNamespaceEnv, podns)
|
stdoutLogger.Printf("%s: %s", PodNamespaceEnv, podns)
|
||||||
|
|
||||||
// Get the pod object using the pod name and pod namespace
|
// Get the pod object using the pod name and pod namespace
|
||||||
pod, err := cli.Pods(podns).Get(podName)
|
pod, err := cli.Pods(podns).Get(podName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("can't get pods: %s", err.Error())
|
stderrLogger.Printf("can't get pods: %s", err.Error())
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the node object using the pod name and pod namespace
|
// Get the node object using the pod name and pod namespace
|
||||||
node, err := cli.Nodes().Get(pod.Spec.NodeName)
|
node, err := cli.Nodes().Get(pod.Spec.NodeName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("can't get node: %s", err.Error())
|
stderrLogger.Printf("can't get node: %s", err.Error())
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue