@@ -3,6 +3,8 @@ package bootstrap
33import (
44 "context"
55 "fmt"
6+ corev1 "k8s.io/api/core/v1"
7+ "net"
68 "time"
79
810 apierrors "k8s.io/apimachinery/pkg/api/errors"
@@ -66,21 +68,53 @@ func (p *ProviderIDController) Reconcile(ctx context.Context, req ctrl.Request)
6668 return ctrl.Result {}, fmt .Errorf ("can't get kube client for cluster %s/%s: %w. may not be created yet" , machine .Namespace , machine .Spec .ClusterName , err )
6769 }
6870
69- nodes , err := childClient .CoreV1 ().Nodes ().List (ctx , metav1.ListOptions {
70- LabelSelector : fmt .Sprintf ("%s=%s" , machineNameNodeLabel , machine .GetName ()),
71- })
72- if err != nil || len (nodes .Items ) == 0 {
71+ nodes , err := childClient .CoreV1 ().Nodes ().List (ctx , metav1.ListOptions {})
72+ if err != nil {
73+ return ctrl.Result {}, fmt .Errorf ("failed to list nodes in cluster %s/%s: %w" , cluster .Namespace , cluster .Name , err )
74+ }
75+
76+ var node * corev1.Node
77+ for _ , n := range nodes .Items {
78+ if n .Spec .ProviderID == * machine .Spec .ProviderID {
79+ // ProviderID is already set on the node
80+ return ctrl.Result {}, nil
81+ }
82+
83+ // If node name matches machine name, we have found our node
84+ if n .Name == machine .GetName () {
85+ node = & n
86+ break
87+ }
88+
89+ // Check k0smotron.io/machine-name node label
90+ if val , ok := n .Labels [machineNameNodeLabel ]; ok && val == machine .GetName () {
91+ node = & n
92+ break
93+ }
94+
95+ // Check node addresses against machine addresses
96+ for _ , addr := range machine .Status .Addresses {
97+ for _ , nodeAddr := range n .Status .Addresses {
98+ if addr .Address == nodeAddr .Address && ! net .ParseIP (nodeAddr .Address ).IsLoopback () {
99+ node = & n
100+ break
101+ }
102+ }
103+ }
104+ }
105+
106+ if node == nil {
73107 log .Info ("waiting for node to be available for machine " + machine .Name )
74108 return ctrl.Result {Requeue : true , RequeueAfter : time .Second * 10 }, nil
75109 }
76110
77- node := nodes .Items [0 ]
78111 if node .Spec .ProviderID == "" {
79112 node .Spec .ProviderID = * machine .Spec .ProviderID
113+ node .Labels [machineNameNodeLabel ] = machine .GetName ()
80114 err = retry .OnError (retry .DefaultBackoff , func (err error ) bool {
81115 return true
82116 }, func () error {
83- _ , upErr := childClient .CoreV1 ().Nodes ().Update (context .Background (), & node , metav1.UpdateOptions {})
117+ _ , upErr := childClient .CoreV1 ().Nodes ().Update (context .Background (), node , metav1.UpdateOptions {})
84118 return upErr
85119 })
86120
0 commit comments