@@ -11,7 +11,9 @@ import (
1111
1212 clusterv1beta1 "github.com/canonical/cluster-api-control-plane-provider-microk8s/api/v1beta1"
1313 "github.com/canonical/cluster-api-control-plane-provider-microk8s/pkg/clusteragent"
14+ "github.com/canonical/cluster-api-control-plane-provider-microk8s/pkg/images"
1415 "github.com/canonical/cluster-api-control-plane-provider-microk8s/pkg/token"
16+ "github.com/go-logr/logr"
1517 "golang.org/x/mod/semver"
1618
1719 "github.com/pkg/errors"
@@ -33,9 +35,8 @@ import (
3335)
3436
3537const (
36- defaultClusterAgentPort string = "25000"
37- defaultDqlitePort string = "19001"
38- defaultClusterAgentClientTimeout time.Duration = 10 * time .Second
38+ defaultClusterAgentPort string = "25000"
39+ defaultDqlitePort string = "19001"
3940)
4041
4142type errServiceUnhealthy struct {
@@ -601,7 +602,14 @@ func (r *MicroK8sControlPlaneReconciler) scaleDownControlPlane(ctx context.Conte
601602 if len (machines ) > 2 {
602603 portRemap := tcp != nil && tcp .Spec .ControlPlaneConfig .ClusterConfiguration != nil && tcp .Spec .ControlPlaneConfig .ClusterConfiguration .PortCompatibilityRemap
603604
604- if clusterAgentClient , err := getClusterAgentClient (machines , deleteMachine , portRemap ); err == nil {
605+ kubeclient , err := r .kubeconfigForCluster (ctx , cluster )
606+ if err != nil {
607+ return ctrl.Result {RequeueAfter : 5 * time .Second }, fmt .Errorf ("failed to get kubeconfig for cluster: %w" , err )
608+ }
609+
610+ defer kubeclient .Close () //nolint:errcheck
611+
612+ if clusterAgentClient , err := getClusterAgentClient (kubeclient , logger , machines , deleteMachine , portRemap ); err == nil {
605613 if err := r .removeNodeFromDqlite (ctx , clusterAgentClient , cluster , deleteMachine , portRemap ); err != nil {
606614 logger .Error (err , "failed to remove node from dqlite: %w" , "machineName" , deleteMachine .Name , "nodeName" , node .Name )
607615 }
@@ -627,7 +635,7 @@ func (r *MicroK8sControlPlaneReconciler) scaleDownControlPlane(ctx context.Conte
627635 return ctrl.Result {Requeue : true }, nil
628636}
629637
630- func getClusterAgentClient (machines []clusterv1.Machine , delMachine clusterv1.Machine , portRemap bool ) (* clusteragent.Client , error ) {
638+ func getClusterAgentClient (kubeclient * kubernetesClient , logger logr. Logger , machines []clusterv1.Machine , delMachine clusterv1.Machine , portRemap bool ) (* clusteragent.Client , error ) {
631639 opts := clusteragent.Options {
632640 // NOTE(hue): We want to pick a random machine's IP to call POST /dqlite/remove on its cluster agent endpoint.
633641 // This machine should preferably not be the <delMachine> itself, although this is not forced by Microk8s.
@@ -640,7 +648,7 @@ func getClusterAgentClient(machines []clusterv1.Machine, delMachine clusterv1.Ma
640648 port = "30000"
641649 }
642650
643- clusterAgentClient , err := clusteragent .NewClient (machines , port , defaultClusterAgentClientTimeout , opts )
651+ clusterAgentClient , err := clusteragent .NewClient (kubeclient , logger , machines , port , opts )
644652 if err != nil {
645653 return nil , fmt .Errorf ("failed to initialize cluster agent client: %w" , err )
646654 }
@@ -696,7 +704,7 @@ func createUpgradePod(ctx context.Context, kubeclient *kubernetesClient, nodeNam
696704 Containers : []corev1.Container {
697705 {
698706 Name : "upgrade" ,
699- Image : "curlimages/curl:7.87.0" ,
707+ Image : images . CurlImage ,
700708 Command : []string {
701709 "su" ,
702710 "-c" ,
0 commit comments