@@ -28,8 +28,11 @@ import (
2828
2929 "github.com/go-logr/logr"
3030 "github.com/pkg/errors"
31+ corev1 "k8s.io/api/core/v1"
32+ apimachinerytypes "k8s.io/apimachinery/pkg/types"
3133 "k8s.io/apimachinery/pkg/util/wait"
3234 ctrl "sigs.k8s.io/controller-runtime"
35+ "sigs.k8s.io/controller-runtime/pkg/client"
3336 "sigs.k8s.io/kind/pkg/apis/config/v1alpha4"
3437 "sigs.k8s.io/kind/pkg/cluster/constants"
3538
@@ -42,6 +45,7 @@ import (
4245 "sigs.k8s.io/cluster-api/test/infrastructure/docker/internal/provisioning/cloudinit"
4346 "sigs.k8s.io/cluster-api/test/infrastructure/docker/internal/provisioning/ignition"
4447 clusterapicontainer "sigs.k8s.io/cluster-api/util/container"
48+ "sigs.k8s.io/cluster-api/util/patch"
4549)
4650
4751const (
@@ -381,7 +385,7 @@ func (m *Machine) CheckForBootstrapSuccess(ctx context.Context) error {
381385}
382386
383387// SetNodeProviderID sets the docker provider ID for the kubernetes node.
384- func (m * Machine ) SetNodeProviderID (ctx context.Context ) error {
388+ func (m * Machine ) SetNodeProviderID (ctx context.Context , c client. Client ) error {
385389 log := ctrl .LoggerFrom (ctx )
386390
387391 kubectlNode , err := m .getKubectlNode (ctx )
@@ -392,20 +396,21 @@ func (m *Machine) SetNodeProviderID(ctx context.Context) error {
392396 return errors .Wrapf (ContainerNotRunningError {Name : kubectlNode .Name }, "unable to set NodeProviderID" )
393397 }
394398
399+ node := & corev1.Node {}
400+ if err = c .Get (ctx , apimachinerytypes.NamespacedName {Name : m .ContainerName ()}, node ); err != nil {
401+ return errors .Wrap (err , "failed to retrieve node" )
402+ }
403+
395404 log .Info ("Setting Kubernetes node providerID" )
396- patch := fmt .Sprintf (`{"spec": {"providerID": %q}}` , m .ProviderID ())
397- cmd := kubectlNode .Commander .Command (
398- "kubectl" ,
399- "--kubeconfig" , "/etc/kubernetes/kubelet.conf" ,
400- "patch" ,
401- "node" , m .ContainerName (),
402- "--patch" , patch ,
403- )
404- lines , err := cmd .RunLoggingOutputOnFail (ctx )
405+
406+ patchHelper , err := patch .NewHelper (node , c )
405407 if err != nil {
406- for _ , line := range lines {
407- log .Info (line )
408- }
408+ return err
409+ }
410+
411+ node .Spec .ProviderID = m .ProviderID ()
412+
413+ if err = patchHelper .Patch (ctx , node ); err != nil {
409414 return errors .Wrap (err , "failed update providerID" )
410415 }
411416
0 commit comments