1
0
Fork 0
mirror of https://github.com/kubernetes-sigs/node-feature-discovery.git synced 2025-03-28 02:37:11 +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:
Cody Roseborough 2016-10-28 14:18:04 -07:00
parent be5a271e8f
commit d940ce6e31

35
main.go
View file

@ -32,6 +32,12 @@ var (
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.
type Labels map[string]string
@ -55,7 +61,7 @@ type APIHelpers interface {
func main() {
// Assert that the version is known
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.
@ -111,29 +117,30 @@ func main() {
// compile whiteListArg regex
labelWhiteList, err := regexp.Compile(whiteListArg)
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{}
// Add the version of this discovery code as a node label
versionLabel := fmt.Sprintf("%s/%s.version", Namespace, ProgramName)
labels[versionLabel] = version
// Log version label.
log.Printf("%s = %s", versionLabel, version)
stdoutLogger.Printf("%s = %s", versionLabel, version)
// Do feature discovery from all configured sources.
for _, source := range sources {
labelsFromSource, err := getFeatureLabels(source)
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 {
// Log discovered feature.
log.Printf("%s = %s", name, value)
stdoutLogger.Printf("%s = %s", name, value)
// Skip if label doesn't match labelWhiteList
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
}
labels[name] = value
@ -145,7 +152,7 @@ func main() {
helper := APIHelpers(k8sHelpers{})
err := advertiseFeatureLabels(helper, labels)
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.
cli, err := helper.GetClient()
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
}
// Get the current node.
node, err := helper.GetNode(cli)
if err != nil {
log.Printf("failed to get node: %s", err.Error())
stderrLogger.Printf("failed to get node: %s", err.Error())
return err
}
@ -187,7 +194,7 @@ func advertiseFeatureLabels(helper APIHelpers, labels Labels) error {
// Send the updated node to the apiserver.
err = helper.UpdateNode(cli, node)
if err != nil {
log.Printf("can't update node: %s", err.Error())
stderrLogger.Printf("can't update node: %s", err.Error())
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
podName := os.Getenv(PodNameEnv)
podns := os.Getenv(PodNamespaceEnv)
log.Printf("%s: %s", PodNameEnv, podName)
log.Printf("%s: %s", PodNamespaceEnv, podns)
stdoutLogger.Printf("%s: %s", PodNameEnv, podName)
stdoutLogger.Printf("%s: %s", PodNamespaceEnv, podns)
// Get the pod object using the pod name and pod namespace
pod, err := cli.Pods(podns).Get(podName)
if err != nil {
log.Printf("can't get pods: %s", err.Error())
stderrLogger.Printf("can't get pods: %s", err.Error())
return nil, err
}
// Get the node object using the pod name and pod namespace
node, err := cli.Nodes().Get(pod.Spec.NodeName)
if err != nil {
log.Printf("can't get node: %s", err.Error())
stderrLogger.Printf("can't get node: %s", err.Error())
return nil, err
}