Skip to content

Commit 9a0f4b7

Browse files
authored
Merge pull request #563 from bpickard22/hostname-standard
Host name determination from k8s api
2 parents 4524799 + a443e51 commit 9a0f4b7

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

pkg/storage/kubernetes/ipam.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -355,16 +355,22 @@ func NormalizeIP(ip net.IP, networkName string) string {
355355
return normalizedIP
356356
}
357357

358-
// TODO: what's the best way to discover the node name? this should work in both controller pod and whereabouts host process
359-
func getNodeName() (string, error) {
358+
// getNodeName prefers an OS env var of NODENAME, or, uses a file named ./nodename in the whereabouts configuration path.
359+
func getNodeName(ipam *KubernetesIPAM) (string, error) {
360+
360361
envName := os.Getenv("NODENAME")
361362
if envName != "" {
362363
return strings.TrimSpace(envName), nil
363364
}
364-
file, err := os.Open("/etc/hostname")
365+
366+
nodeNamePath := fmt.Sprintf("%s/%s", ipam.Config.ConfigurationPath, "nodename")
367+
file, err := os.Open(nodeNamePath)
365368
if err != nil {
366-
logging.Errorf("Error opening file /etc/hostname: %v", err)
367-
return "", err
369+
file, err = os.Open("/etc/hostname")
370+
if err != nil {
371+
logging.Errorf("Could not determine nodename and could not open /etc/hostname: %v", err)
372+
return "", err
373+
}
368374
}
369375
defer file.Close()
370376

@@ -395,7 +401,7 @@ func newLeaderElector(ctx context.Context, clientset kubernetes.Interface, names
395401
leaseName := "whereabouts"
396402
if ipamConf.Config.NodeSliceSize != "" {
397403
// we lock per IP Pool so just use the pool name for the lease name
398-
hostname, err := getNodeName()
404+
hostname, err := getNodeName(ipamConf)
399405
if err != nil {
400406
logging.Errorf("Failed to create leader elector: %v", err)
401407
return nil, leaderOK, deposed
@@ -580,7 +586,7 @@ func IPManagementKubernetesUpdate(ctx context.Context, mode int, ipam *Kubernete
580586
}
581587
poolIdentifier := PoolIdentifier{IpRange: ipRange.Range, NetworkName: ipamConf.NetworkName}
582588
if ipamConf.NodeSliceSize != "" {
583-
hostname, err := getNodeName()
589+
hostname, err := getNodeName(ipam)
584590
if err != nil {
585591
logging.Errorf("Failed to get node hostname: %v", err)
586592
return newips, err

0 commit comments

Comments
 (0)