Skip to content

Commit 885fd17

Browse files
committed
enable kubeadm feature flags mutation
1 parent 39d2a34 commit 885fd17

11 files changed

+213
-109
lines changed

controlplane/kubeadm/internal/controllers/controller_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1279,7 +1279,8 @@ dns:
12791279
type: CoreDNS
12801280
imageRepository: registry.k8s.io
12811281
kind: ClusterConfiguration
1282-
kubernetesVersion: metav1.16.1`,
1282+
kubernetesVersion: metav1.16.1
1283+
`,
12831284
},
12841285
}
12851286
g.Expect(env.Create(ctx, kubeadmCM)).To(Succeed())

controlplane/kubeadm/internal/controllers/fakes_test.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,11 +108,11 @@ func (f fakeWorkloadCluster) ReconcileKubeletRBACBinding(_ context.Context, _ se
108108
return nil
109109
}
110110

111-
func (f fakeWorkloadCluster) UpdateKubernetesVersionInKubeadmConfigMap(_ context.Context, _ semver.Version) error {
111+
func (f fakeWorkloadCluster) UpdateKubernetesVersionInKubeadmConfigMap(semver.Version) func(*bootstrapv1.ClusterConfiguration) {
112112
return nil
113113
}
114114

115-
func (f fakeWorkloadCluster) UpdateEtcdVersionInKubeadmConfigMap(_ context.Context, _, _ string, _ semver.Version) error {
115+
func (f fakeWorkloadCluster) UpdateEtcdLocalInKubeadmConfigMap(*bootstrapv1.LocalEtcd) func(*bootstrapv1.ClusterConfiguration) {
116116
return nil
117117
}
118118

@@ -132,13 +132,17 @@ func (f fakeWorkloadCluster) EtcdMembers(_ context.Context) ([]string, error) {
132132
return f.EtcdMembersResult, nil
133133
}
134134

135+
func (f fakeWorkloadCluster) UpdateClusterConfiguration(context.Context, semver.Version, ...func(*bootstrapv1.ClusterConfiguration)) error {
136+
return nil
137+
}
138+
135139
type fakeMigrator struct {
136140
migrateCalled bool
137141
migrateErr error
138142
migratedCorefile string
139143
}
140144

141-
func (m *fakeMigrator) Migrate(_, _, _ string, _ bool) (string, error) {
145+
func (m *fakeMigrator) Migrate(string, string, string, bool) (string, error) {
142146
m.migrateCalled = true
143147
if m.migrateErr != nil {
144148
return "", m.migrateErr

controlplane/kubeadm/internal/controllers/upgrade.go

Lines changed: 21 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"github.com/pkg/errors"
2424
ctrl "sigs.k8s.io/controller-runtime"
2525

26+
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"
2627
controlplanev1 "sigs.k8s.io/cluster-api/controlplane/kubeadm/api/v1beta1"
2728
"sigs.k8s.io/cluster-api/controlplane/kubeadm/internal"
2829
"sigs.k8s.io/cluster-api/util"
@@ -73,9 +74,8 @@ func (r *KubeadmControlPlaneReconciler) upgradeControlPlane(
7374
return ctrl.Result{}, errors.Wrap(err, "failed to set cluster-admin ClusterRoleBinding for kubeadm")
7475
}
7576

76-
if err := workloadCluster.UpdateKubernetesVersionInKubeadmConfigMap(ctx, parsedVersion); err != nil {
77-
return ctrl.Result{}, errors.Wrap(err, "failed to update the kubernetes version in the kubeadm config map")
78-
}
77+
kubeadmCMMutators := make([]func(*bootstrapv1.ClusterConfiguration), 0)
78+
kubeadmCMMutators = append(kubeadmCMMutators, workloadCluster.UpdateKubernetesVersionInKubeadmConfigMap(parsedVersion))
7979

8080
if controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration != nil {
8181
// We intentionally only parse major/minor/patch so that the subsequent code
@@ -84,38 +84,30 @@ func (r *KubeadmControlPlaneReconciler) upgradeControlPlane(
8484
if err != nil {
8585
return ctrl.Result{}, errors.Wrapf(err, "failed to parse kubernetes version %q", controlPlane.KCP.Spec.Version)
8686
}
87+
8788
// Get the imageRepository or the correct value if nothing is set and a migration is necessary.
8889
imageRepository := internal.ImageRepositoryFromClusterConfig(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration, parsedVersionTolerant)
8990

90-
if err := workloadCluster.UpdateImageRepositoryInKubeadmConfigMap(ctx, imageRepository, parsedVersion); err != nil {
91-
return ctrl.Result{}, errors.Wrap(err, "failed to update the image repository in the kubeadm config map")
92-
}
93-
}
94-
95-
if controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration != nil && controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local != nil {
96-
meta := controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local.ImageMeta
97-
if err := workloadCluster.UpdateEtcdVersionInKubeadmConfigMap(ctx, meta.ImageRepository, meta.ImageTag, parsedVersion); err != nil {
98-
return ctrl.Result{}, errors.Wrap(err, "failed to update the etcd version in the kubeadm config map")
99-
}
100-
101-
extraArgs := controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local.ExtraArgs
102-
if err := workloadCluster.UpdateEtcdExtraArgsInKubeadmConfigMap(ctx, extraArgs, parsedVersion); err != nil {
103-
return ctrl.Result{}, errors.Wrap(err, "failed to update the etcd extra args in the kubeadm config map")
91+
kubeadmCMMutators = append(kubeadmCMMutators,
92+
workloadCluster.UpdateImageRepositoryInKubeadmConfigMap(imageRepository),
93+
workloadCluster.UpdateFeatureGatesInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.FeatureGates),
94+
workloadCluster.UpdateAPIServerInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.APIServer),
95+
workloadCluster.UpdateControllerManagerInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.ControllerManager),
96+
workloadCluster.UpdateSchedulerInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Scheduler))
97+
98+
// Etcd local and external are mutually exclusive and they cannot be switched, once set.
99+
if controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local != nil {
100+
kubeadmCMMutators = append(kubeadmCMMutators,
101+
workloadCluster.UpdateEtcdLocalInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.Local))
102+
} else {
103+
kubeadmCMMutators = append(kubeadmCMMutators,
104+
workloadCluster.UpdateEtcdExternalInKubeadmConfigMap(controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Etcd.External))
104105
}
105106
}
106107

107-
if controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration != nil {
108-
if err := workloadCluster.UpdateAPIServerInKubeadmConfigMap(ctx, controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.APIServer, parsedVersion); err != nil {
109-
return ctrl.Result{}, errors.Wrap(err, "failed to update api server in the kubeadm config map")
110-
}
111-
112-
if err := workloadCluster.UpdateControllerManagerInKubeadmConfigMap(ctx, controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.ControllerManager, parsedVersion); err != nil {
113-
return ctrl.Result{}, errors.Wrap(err, "failed to update controller manager in the kubeadm config map")
114-
}
115-
116-
if err := workloadCluster.UpdateSchedulerInKubeadmConfigMap(ctx, controlPlane.KCP.Spec.KubeadmConfigSpec.ClusterConfiguration.Scheduler, parsedVersion); err != nil {
117-
return ctrl.Result{}, errors.Wrap(err, "failed to update scheduler in the kubeadm config map")
118-
}
108+
// collectively update Kubeadm config map
109+
if err = workloadCluster.UpdateClusterConfiguration(ctx, parsedVersion, kubeadmCMMutators...); err != nil {
110+
return ctrl.Result{}, err
119111
}
120112

121113
if err := workloadCluster.UpdateKubeletConfigMap(ctx, parsedVersion); err != nil {

controlplane/kubeadm/internal/webhooks/kubeadm_control_plane.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ const (
150150
ntp = "ntp"
151151
ignition = "ignition"
152152
diskSetup = "diskSetup"
153+
featureGates = "featureGates"
153154
)
154155

155156
const minimumCertificatesExpiryDays = 7
@@ -176,6 +177,8 @@ func (webhook *KubeadmControlPlane) ValidateUpdate(_ context.Context, oldObj, ne
176177
{spec, kubeadmConfigSpec, clusterConfiguration, "dns", "imageRepository"},
177178
{spec, kubeadmConfigSpec, clusterConfiguration, "dns", "imageTag"},
178179
{spec, kubeadmConfigSpec, clusterConfiguration, "imageRepository"},
180+
{spec, kubeadmConfigSpec, clusterConfiguration, featureGates},
181+
{spec, kubeadmConfigSpec, clusterConfiguration, featureGates, "*"},
179182
{spec, kubeadmConfigSpec, clusterConfiguration, apiServer},
180183
{spec, kubeadmConfigSpec, clusterConfiguration, apiServer, "*"},
181184
{spec, kubeadmConfigSpec, clusterConfiguration, controllerManager},

controlplane/kubeadm/internal/webhooks/kubeadm_control_plane_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -886,8 +886,8 @@ func TestKubeadmControlPlaneValidateUpdate(t *testing.T) {
886886
kcp: imageRepository,
887887
},
888888
{
889-
name: "should fail when making a change to the cluster config's featureGates",
890-
expectErr: true,
889+
name: "should succeed when making a change to the cluster config's featureGates",
890+
expectErr: false,
891891
before: before,
892892
kcp: featureGates,
893893
},

controlplane/kubeadm/internal/workload_cluster.go

Lines changed: 40 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -105,13 +105,14 @@ type WorkloadCluster interface {
105105
// Upgrade related tasks.
106106
ReconcileKubeletRBACBinding(ctx context.Context, version semver.Version) error
107107
ReconcileKubeletRBACRole(ctx context.Context, version semver.Version) error
108-
UpdateKubernetesVersionInKubeadmConfigMap(ctx context.Context, version semver.Version) error
109-
UpdateImageRepositoryInKubeadmConfigMap(ctx context.Context, imageRepository string, version semver.Version) error
110-
UpdateEtcdVersionInKubeadmConfigMap(ctx context.Context, imageRepository, imageTag string, version semver.Version) error
111-
UpdateEtcdExtraArgsInKubeadmConfigMap(ctx context.Context, extraArgs map[string]string, version semver.Version) error
112-
UpdateAPIServerInKubeadmConfigMap(ctx context.Context, apiServer bootstrapv1.APIServer, version semver.Version) error
113-
UpdateControllerManagerInKubeadmConfigMap(ctx context.Context, controllerManager bootstrapv1.ControlPlaneComponent, version semver.Version) error
114-
UpdateSchedulerInKubeadmConfigMap(ctx context.Context, scheduler bootstrapv1.ControlPlaneComponent, version semver.Version) error
108+
UpdateKubernetesVersionInKubeadmConfigMap(version semver.Version) func(*bootstrapv1.ClusterConfiguration)
109+
UpdateImageRepositoryInKubeadmConfigMap(imageRepository string) func(*bootstrapv1.ClusterConfiguration)
110+
UpdateFeatureGatesInKubeadmConfigMap(featureGates map[string]bool) func(*bootstrapv1.ClusterConfiguration)
111+
UpdateEtcdLocalInKubeadmConfigMap(localEtcd *bootstrapv1.LocalEtcd) func(*bootstrapv1.ClusterConfiguration)
112+
UpdateEtcdExternalInKubeadmConfigMap(externalEtcd *bootstrapv1.ExternalEtcd) func(*bootstrapv1.ClusterConfiguration)
113+
UpdateAPIServerInKubeadmConfigMap(apiServer bootstrapv1.APIServer) func(*bootstrapv1.ClusterConfiguration)
114+
UpdateControllerManagerInKubeadmConfigMap(controllerManager bootstrapv1.ControlPlaneComponent) func(*bootstrapv1.ClusterConfiguration)
115+
UpdateSchedulerInKubeadmConfigMap(scheduler bootstrapv1.ControlPlaneComponent) func(*bootstrapv1.ClusterConfiguration)
115116
UpdateKubeletConfigMap(ctx context.Context, version semver.Version) error
116117
UpdateKubeProxyImageInfo(ctx context.Context, kcp *controlplanev1.KubeadmControlPlane, version semver.Version) error
117118
UpdateCoreDNS(ctx context.Context, kcp *controlplanev1.KubeadmControlPlane, version semver.Version) error
@@ -121,6 +122,7 @@ type WorkloadCluster interface {
121122
ForwardEtcdLeadership(ctx context.Context, machine *clusterv1.Machine, leaderCandidate *clusterv1.Machine) error
122123
AllowBootstrapTokensToGetNodes(ctx context.Context) error
123124
AllowClusterAdminPermissions(ctx context.Context, version semver.Version) error
125+
UpdateClusterConfiguration(ctx context.Context, version semver.Version, mutators ...func(*bootstrapv1.ClusterConfiguration)) error
124126

125127
// State recovery tasks.
126128
ReconcileEtcdMembers(ctx context.Context, nodeNames []string, version semver.Version) ([]string, error)
@@ -173,20 +175,30 @@ func (w *Workload) getConfigMap(ctx context.Context, configMap ctrlclient.Object
173175
}
174176

175177
// UpdateImageRepositoryInKubeadmConfigMap updates the image repository in the kubeadm config map.
176-
func (w *Workload) UpdateImageRepositoryInKubeadmConfigMap(ctx context.Context, imageRepository string, version semver.Version) error {
177-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
178+
func (w *Workload) UpdateImageRepositoryInKubeadmConfigMap(imageRepository string) func(*bootstrapv1.ClusterConfiguration) {
179+
return func(c *bootstrapv1.ClusterConfiguration) {
178180
if imageRepository == "" {
179181
return
180182
}
183+
181184
c.ImageRepository = imageRepository
182-
}, version)
185+
}
186+
}
187+
188+
// UpdateFeatureGatesInKubeadmConfigMap updates the feature gates in the kubeadm config map.
189+
func (w *Workload) UpdateFeatureGatesInKubeadmConfigMap(featureGates map[string]bool) func(*bootstrapv1.ClusterConfiguration) {
190+
return func(c *bootstrapv1.ClusterConfiguration) {
191+
// Even if featureGates is nil, reset it to ClusterConfiguration
192+
// to override any previously set feature gates.
193+
c.FeatureGates = featureGates
194+
}
183195
}
184196

185197
// UpdateKubernetesVersionInKubeadmConfigMap updates the kubernetes version in the kubeadm config map.
186-
func (w *Workload) UpdateKubernetesVersionInKubeadmConfigMap(ctx context.Context, version semver.Version) error {
187-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
198+
func (w *Workload) UpdateKubernetesVersionInKubeadmConfigMap(version semver.Version) func(*bootstrapv1.ClusterConfiguration) {
199+
return func(c *bootstrapv1.ClusterConfiguration) {
188200
c.KubernetesVersion = fmt.Sprintf("v%s", version.String())
189-
}, version)
201+
}
190202
}
191203

192204
// UpdateKubeletConfigMap will create a new kubelet-config-1.x config map for a new version of the kubelet.
@@ -270,24 +282,24 @@ func (w *Workload) UpdateKubeletConfigMap(ctx context.Context, version semver.Ve
270282
}
271283

272284
// UpdateAPIServerInKubeadmConfigMap updates api server configuration in kubeadm config map.
273-
func (w *Workload) UpdateAPIServerInKubeadmConfigMap(ctx context.Context, apiServer bootstrapv1.APIServer, version semver.Version) error {
274-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
285+
func (w *Workload) UpdateAPIServerInKubeadmConfigMap(apiServer bootstrapv1.APIServer) func(*bootstrapv1.ClusterConfiguration) {
286+
return func(c *bootstrapv1.ClusterConfiguration) {
275287
c.APIServer = apiServer
276-
}, version)
288+
}
277289
}
278290

279291
// UpdateControllerManagerInKubeadmConfigMap updates controller manager configuration in kubeadm config map.
280-
func (w *Workload) UpdateControllerManagerInKubeadmConfigMap(ctx context.Context, controllerManager bootstrapv1.ControlPlaneComponent, version semver.Version) error {
281-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
292+
func (w *Workload) UpdateControllerManagerInKubeadmConfigMap(controllerManager bootstrapv1.ControlPlaneComponent) func(*bootstrapv1.ClusterConfiguration) {
293+
return func(c *bootstrapv1.ClusterConfiguration) {
282294
c.ControllerManager = controllerManager
283-
}, version)
295+
}
284296
}
285297

286298
// UpdateSchedulerInKubeadmConfigMap updates scheduler configuration in kubeadm config map.
287-
func (w *Workload) UpdateSchedulerInKubeadmConfigMap(ctx context.Context, scheduler bootstrapv1.ControlPlaneComponent, version semver.Version) error {
288-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
299+
func (w *Workload) UpdateSchedulerInKubeadmConfigMap(scheduler bootstrapv1.ControlPlaneComponent) func(*bootstrapv1.ClusterConfiguration) {
300+
return func(c *bootstrapv1.ClusterConfiguration) {
289301
c.Scheduler = scheduler
290-
}, version)
302+
}
291303
}
292304

293305
// RemoveMachineFromKubeadmConfigMap removes the entry for the machine from the kubeadm configmap.
@@ -350,11 +362,11 @@ func (w *Workload) updateClusterStatus(ctx context.Context, mutator func(status
350362
})
351363
}
352364

353-
// updateClusterConfiguration gets the ClusterConfiguration kubeadm-config ConfigMap, converts it to the
365+
// UpdateClusterConfiguration gets the ClusterConfiguration kubeadm-config ConfigMap, converts it to the
354366
// Cluster API representation, and then applies a mutation func; if changes are detected, the
355367
// data are converted back into the Kubeadm API version in use for the target Kubernetes version and the
356368
// kubeadm-config ConfigMap updated.
357-
func (w *Workload) updateClusterConfiguration(ctx context.Context, mutator func(*bootstrapv1.ClusterConfiguration), version semver.Version) error {
369+
func (w *Workload) UpdateClusterConfiguration(ctx context.Context, version semver.Version, mutators ...func(*bootstrapv1.ClusterConfiguration)) error {
358370
return retry.RetryOnConflict(retry.DefaultBackoff, func() error {
359371
key := ctrlclient.ObjectKey{Name: kubeadmConfigKey, Namespace: metav1.NamespaceSystem}
360372
configMap, err := w.getConfigMap(ctx, key)
@@ -373,7 +385,9 @@ func (w *Workload) updateClusterConfiguration(ctx context.Context, mutator func(
373385
}
374386

375387
updatedObj := currentObj.DeepCopy()
376-
mutator(updatedObj)
388+
for i := range mutators {
389+
mutators[i](updatedObj)
390+
}
377391

378392
if !reflect.DeepEqual(currentObj, updatedObj) {
379393
updatedData, err := kubeadmtypes.MarshalClusterConfigurationForVersion(updatedObj, version)
@@ -382,7 +396,7 @@ func (w *Workload) updateClusterConfiguration(ctx context.Context, mutator func(
382396
}
383397
configMap.Data[clusterConfigurationKey] = updatedData
384398
if err := w.Client.Update(ctx, configMap); err != nil {
385-
return errors.Wrap(err, "failed to upgrade the kubeadmConfigMap")
399+
return errors.Wrap(err, "failed to upgrade cluster configuration in the kubeadmConfigMap")
386400
}
387401
}
388402
return nil

controlplane/kubeadm/internal/workload_cluster_coredns.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@ func (w *Workload) UpdateCoreDNS(ctx context.Context, kcp *controlplanev1.Kubead
145145
}
146146

147147
// Perform the upgrade.
148-
if err := w.updateCoreDNSImageInfoInKubeadmConfigMap(ctx, &clusterConfig.DNS, version); err != nil {
148+
if err := w.UpdateClusterConfiguration(ctx, version, w.updateCoreDNSImageInfoInKubeadmConfigMap(&clusterConfig.DNS)); err != nil {
149149
return err
150150
}
151151
if err := w.updateCoreDNSCorefile(ctx, info); err != nil {
@@ -270,11 +270,11 @@ func (w *Workload) updateCoreDNSDeployment(ctx context.Context, info *coreDNSInf
270270
}
271271

272272
// updateCoreDNSImageInfoInKubeadmConfigMap updates the kubernetes version in the kubeadm config map.
273-
func (w *Workload) updateCoreDNSImageInfoInKubeadmConfigMap(ctx context.Context, dns *bootstrapv1.DNS, version semver.Version) error {
274-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
273+
func (w *Workload) updateCoreDNSImageInfoInKubeadmConfigMap(dns *bootstrapv1.DNS) func(*bootstrapv1.ClusterConfiguration) {
274+
return func(c *bootstrapv1.ClusterConfiguration) {
275275
c.DNS.ImageRepository = dns.ImageRepository
276276
c.DNS.ImageTag = dns.ImageTag
277-
}, version)
277+
}
278278
}
279279

280280
// updateCoreDNSClusterRole updates the CoreDNS ClusterRole when necessary.

controlplane/kubeadm/internal/workload_cluster_coredns_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1451,7 +1451,7 @@ func TestUpdateCoreDNSImageInfoInKubeadmConfigMap(t *testing.T) {
14511451
w := &Workload{
14521452
Client: fakeClient,
14531453
}
1454-
err := w.updateCoreDNSImageInfoInKubeadmConfigMap(ctx, &tt.newDNS, semver.MustParse("1.19.1"))
1454+
err := w.UpdateClusterConfiguration(ctx, semver.MustParse("1.19.1"), w.updateCoreDNSImageInfoInKubeadmConfigMap(&tt.newDNS))
14551455
g.Expect(err).ToNot(HaveOccurred())
14561456

14571457
var actualConfig corev1.ConfigMap

controlplane/kubeadm/internal/workload_cluster_etcd.go

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -92,23 +92,22 @@ loopmembers:
9292
return removedMembers, errs
9393
}
9494

95-
// UpdateEtcdVersionInKubeadmConfigMap sets the imageRepository or the imageTag or both in the kubeadm config map.
96-
func (w *Workload) UpdateEtcdVersionInKubeadmConfigMap(ctx context.Context, imageRepository, imageTag string, version semver.Version) error {
97-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
95+
// UpdateEtcdLocalInKubeadmConfigMap sets etcd local configuration in the kubeadm config map.
96+
func (w *Workload) UpdateEtcdLocalInKubeadmConfigMap(etcdLocal *bootstrapv1.LocalEtcd) func(*bootstrapv1.ClusterConfiguration) {
97+
return func(c *bootstrapv1.ClusterConfiguration) {
9898
if c.Etcd.Local != nil {
99-
c.Etcd.Local.ImageRepository = imageRepository
100-
c.Etcd.Local.ImageTag = imageTag
99+
c.Etcd.Local = etcdLocal
101100
}
102-
}, version)
101+
}
103102
}
104103

105-
// UpdateEtcdExtraArgsInKubeadmConfigMap sets extraArgs in the kubeadm config map.
106-
func (w *Workload) UpdateEtcdExtraArgsInKubeadmConfigMap(ctx context.Context, extraArgs map[string]string, version semver.Version) error {
107-
return w.updateClusterConfiguration(ctx, func(c *bootstrapv1.ClusterConfiguration) {
108-
if c.Etcd.Local != nil {
109-
c.Etcd.Local.ExtraArgs = extraArgs
104+
// UpdateEtcdExternalInKubeadmConfigMap sets etcd external configuration in the kubeadm config map.
105+
func (w *Workload) UpdateEtcdExternalInKubeadmConfigMap(etcdExternal *bootstrapv1.ExternalEtcd) func(*bootstrapv1.ClusterConfiguration) {
106+
return func(c *bootstrapv1.ClusterConfiguration) {
107+
if c.Etcd.External != nil {
108+
c.Etcd.External = etcdExternal
110109
}
111-
}, version)
110+
}
112111
}
113112

114113
// RemoveEtcdMemberForMachine removes the etcd member from the target cluster's etcd cluster.

0 commit comments

Comments
 (0)