Skip to content

Commit 5d54746

Browse files
Merge pull request #805 from salasberryfin/bump_capi_v1.12.2
feat: bump to capi v1.12.2
2 parents e45fd0d + e460204 commit 5d54746

File tree

12 files changed

+259
-141
lines changed

12 files changed

+259
-141
lines changed

bootstrap/internal/controllers/rke2config_scope.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import (
2828
"sigs.k8s.io/controller-runtime/pkg/log"
2929

3030
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
31-
exputil "sigs.k8s.io/cluster-api/exp/util"
3231
"sigs.k8s.io/cluster-api/util"
3332

3433
bootstrapv1 "github.com/rancher/cluster-api-provider-rke2/bootstrap/api/v1beta2"
@@ -84,7 +83,7 @@ func NewScope(ctx context.Context, req ctrl.Request, client client.Client) (*Sco
8483
clusterName = machine.Spec.ClusterName
8584
}
8685

87-
machinePool, err := exputil.GetOwnerMachinePool(ctx, client, config.ObjectMeta)
86+
machinePool, err := util.GetOwnerMachinePool(ctx, client, config.ObjectMeta)
8887
if err != nil {
8988
return nil, fmt.Errorf("fetching MachinePool owner: %w", err)
9089
}

controlplane/internal/controllers/lifecycle_hook_test.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
3131
"sigs.k8s.io/cluster-api/controllers/clustercache"
3232
"sigs.k8s.io/cluster-api/controllers/remote"
33+
"sigs.k8s.io/cluster-api/util/cache"
3334
"sigs.k8s.io/cluster-api/util/collections"
3435
"sigs.k8s.io/cluster-api/util/kubeconfig"
3536
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -212,9 +213,14 @@ var _ = Describe("Lifecycle Hooks", Ordered, func() {
212213
ref))).To(Succeed())
213214

214215
r = &RKE2ControlPlaneReconciler{
215-
Client: testEnv.GetClient(),
216-
Scheme: testEnv.GetScheme(),
217-
managementCluster: &rke2.Management{Client: testEnv.GetClient(), SecretCachingClient: testEnv.GetClient()},
216+
Client: testEnv.GetClient(),
217+
Scheme: testEnv.GetScheme(),
218+
managementCluster: &rke2.Management{
219+
Client: testEnv.GetClient(),
220+
SecretCachingClient: testEnv.GetClient(),
221+
ClusterCache: clusterCache,
222+
ClientCertCache: cache.New[rke2.ClientCertEntry](24 * time.Hour),
223+
},
218224
managementClusterUncached: &rke2.Management{Client: testEnv.GetClient()},
219225
}
220226
})

controlplane/internal/controllers/rke2controlplane_controller.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ import (
4949
"sigs.k8s.io/cluster-api/controllers/remote"
5050
"sigs.k8s.io/cluster-api/util"
5151
"sigs.k8s.io/cluster-api/util/annotations"
52+
"sigs.k8s.io/cluster-api/util/cache"
5253
"sigs.k8s.io/cluster-api/util/certs"
5354
"sigs.k8s.io/cluster-api/util/collections"
5455
"sigs.k8s.io/cluster-api/util/conditions"
@@ -79,6 +80,9 @@ const (
7980

8081
// DefaultRequeueTime is the default requeue time for the controller.
8182
DefaultRequeueTime = 20 * time.Second
83+
84+
// certCacheTtl is the default TTL for cached certificates.
85+
certCacheTtl = 24 * time.Hour
8286
)
8387

8488
// RKE2ControlPlaneReconciler reconciles a RKE2ControlPlane object.
@@ -345,6 +349,7 @@ func (r *RKE2ControlPlaneReconciler) SetupWithManager(
345349
Client: r.Client,
346350
SecretCachingClient: r.SecretCachingClient,
347351
ClusterCache: clusterCache,
352+
ClientCertCache: cache.New[rke2.ClientCertEntry](certCacheTtl),
348353
}
349354
}
350355

@@ -480,7 +485,7 @@ func (r *RKE2ControlPlaneReconciler) reconcileNormal(
480485
return ctrl.Result{}, err
481486
}
482487

483-
ownedMachines := controlPlaneMachines.Filter(collections.OwnedMachines(rcp))
488+
ownedMachines := controlPlaneMachines.Filter(collections.OwnedMachines(rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()))
484489
if len(ownedMachines) != len(controlPlaneMachines) {
485490
logger.Info("Not all control plane machines are owned by this RKE2ControlPlane, refusing to operate in mixed management mode") //nolint:lll
486491

@@ -598,7 +603,7 @@ func (r *RKE2ControlPlaneReconciler) reconcileDelete(ctx context.Context,
598603
return ctrl.Result{}, err
599604
}
600605

601-
ownedMachines := allMachines.Filter(collections.OwnedMachines(rcp))
606+
ownedMachines := allMachines.Filter(collections.OwnedMachines(rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()))
602607

603608
// If no control plane machines remain, remove the finalizer
604609
if len(ownedMachines) == 0 {
@@ -741,7 +746,7 @@ func (r *RKE2ControlPlaneReconciler) reconcileKubeconfig(
741746
}
742747

743748
// only do rotation on owned secrets
744-
if !util.IsControlledBy(configSecret, rcp) {
749+
if !util.IsControlledBy(configSecret, rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()) {
745750
logger.Info("Kubeconfig Secret not controlled by RKE2ControlPlane, nothing to do")
746751

747752
return ctrl.Result{}, nil

controlplane/internal/controllers/rke2controlplane_controller_test.go

Lines changed: 59 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,15 @@ import (
2323
"k8s.io/apimachinery/pkg/types"
2424
"k8s.io/utils/ptr"
2525
clusterv1 "sigs.k8s.io/cluster-api/api/core/v1beta2"
26+
"sigs.k8s.io/cluster-api/controllers/clustercache"
27+
"sigs.k8s.io/cluster-api/controllers/remote"
28+
"sigs.k8s.io/cluster-api/util/cache"
2629
"sigs.k8s.io/cluster-api/util/certs"
2730
"sigs.k8s.io/cluster-api/util/collections"
2831
"sigs.k8s.io/cluster-api/util/conditions"
2932
"sigs.k8s.io/cluster-api/util/kubeconfig"
3033
"sigs.k8s.io/controller-runtime/pkg/client"
34+
"sigs.k8s.io/controller-runtime/pkg/controller"
3135
)
3236

3337
const (
@@ -43,6 +47,7 @@ var _ = Describe("Rotate kubeconfig cert", func() {
4347
ccaSecret *corev1.Secret
4448
kubeconfigSecret *corev1.Secret
4549
clusterKey client.ObjectKey
50+
clusterCache clustercache.ClusterCache
4651
)
4752
BeforeEach(func() {
4853
kubeconfigSecret = &corev1.Secret{}
@@ -62,6 +67,21 @@ var _ = Describe("Rotate kubeconfig cert", func() {
6267
},
6368
}
6469

70+
clusterCache, err = clustercache.SetupWithManager(ctx, testEnv.Manager, clustercache.Options{
71+
SecretClient: testEnv.GetClient(),
72+
Client: clustercache.ClientOptions{
73+
UserAgent: remote.DefaultClusterAPIUserAgent("test-controller-manager"),
74+
Cache: clustercache.ClientCacheOptions{
75+
DisableFor: []client.Object{
76+
// Don't cache ConfigMaps & Secrets.
77+
&corev1.ConfigMap{},
78+
&corev1.Secret{},
79+
},
80+
},
81+
},
82+
}, controller.Options{MaxConcurrentReconciles: 10, SkipNameValidation: ptr.To(true)})
83+
Expect(err).ToNot(HaveOccurred())
84+
6585
// Generate new Secret Cluster CA
6686
certPEM, _, err := generateCertAndKey(time.Now().Add(3650 * 24 * time.Hour)) // 10 years from now
6787
Expect(err).ShouldNot(HaveOccurred())
@@ -100,10 +120,17 @@ var _ = Describe("Rotate kubeconfig cert", func() {
100120
It("Should rotate kubeconfig secret if needed", func() {
101121
By("Creating the first kubeconfig if not existing yet")
102122
r := &RKE2ControlPlaneReconciler{
103-
Client: testEnv.GetClient(),
104-
Scheme: testEnv.GetScheme(),
105-
managementCluster: &rke2.Management{Client: testEnv.GetClient(), SecretCachingClient: testEnv.GetClient()},
106-
managementClusterUncached: &rke2.Management{Client: testEnv.GetClient()},
123+
Client: testEnv.GetClient(),
124+
Scheme: testEnv.GetScheme(),
125+
managementCluster: &rke2.Management{
126+
Client: testEnv.GetClient(),
127+
SecretCachingClient: testEnv.GetClient(),
128+
ClusterCache: clusterCache,
129+
ClientCertCache: cache.New[rke2.ClientCertEntry](24 * time.Hour),
130+
},
131+
managementClusterUncached: &rke2.Management{
132+
Client: testEnv.GetClient(),
133+
},
107134
}
108135
endpoint := clusterv1.APIEndpoint{Host: "1.2.3.4", Port: 6443}
109136

@@ -174,6 +201,7 @@ var _ = Describe("Reconcile control plane conditions", func() {
174201
machine *clusterv1.Machine
175202
machineWithRef *clusterv1.Machine
176203
config *bootstrapv1.RKE2Config
204+
clusterCache clustercache.ClusterCache
177205
)
178206

179207
BeforeEach(func() {
@@ -371,9 +399,26 @@ var _ = Describe("Reconcile control plane conditions", func() {
371399
},
372400
}
373401

402+
clusterCache, err = clustercache.SetupWithManager(ctx, testEnv.Manager, clustercache.Options{
403+
SecretClient: testEnv.GetClient(),
404+
Client: clustercache.ClientOptions{
405+
UserAgent: remote.DefaultClusterAPIUserAgent("test-controller-manager"),
406+
Cache: clustercache.ClientCacheOptions{
407+
DisableFor: []client.Object{
408+
// Don't cache ConfigMaps & Secrets.
409+
&corev1.ConfigMap{},
410+
&corev1.Secret{},
411+
},
412+
},
413+
},
414+
}, controller.Options{MaxConcurrentReconciles: 10, SkipNameValidation: ptr.To(true)})
415+
Expect(err).ToNot(HaveOccurred())
416+
374417
m := &rke2.Management{
375-
Client: testEnv,
376-
SecretCachingClient: testEnv,
418+
Client: testEnv.GetClient(),
419+
SecretCachingClient: testEnv.GetClient(),
420+
ClusterCache: clusterCache,
421+
ClientCertCache: cache.New[rke2.ClientCertEntry](24 * time.Hour),
377422
}
378423

379424
cp, err = rke2.NewControlPlane(ctx, m, testEnv.GetClient(), cluster, rcp, collections.FromMachineList(&ml))
@@ -398,9 +443,14 @@ var _ = Describe("Reconcile control plane conditions", func() {
398443

399444
It("should reconcile cp and machine conditions successfully", func() {
400445
r := &RKE2ControlPlaneReconciler{
401-
Client: testEnv.GetClient(),
402-
Scheme: testEnv.GetScheme(),
403-
managementCluster: &rke2.Management{Client: testEnv.GetClient(), SecretCachingClient: testEnv.GetClient()},
446+
Client: testEnv.GetClient(),
447+
Scheme: testEnv.GetScheme(),
448+
managementCluster: &rke2.Management{
449+
Client: testEnv.GetClient(),
450+
SecretCachingClient: testEnv.GetClient(),
451+
ClusterCache: clusterCache,
452+
ClientCertCache: cache.New[rke2.ClientCertEntry](24 * time.Hour),
453+
},
404454
managementClusterUncached: &rke2.Management{Client: testEnv.GetClient()},
405455
}
406456
_, err := r.reconcileControlPlaneConditions(ctx, cp)

controlplane/internal/controllers/scale.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,8 @@ func (r *RKE2ControlPlaneReconciler) initializeControlPlane(
5858

5959
// Perform an uncached read of all the owned machines. This check is in place to make sure
6060
// that the controller cache is not misbehaving and we end up initializing the cluster more than once.
61-
ownedMachines, err := r.managementClusterUncached.GetMachinesForCluster(ctx, cluster, collections.OwnedMachines(rcp))
61+
ownedMachines, err := r.managementClusterUncached.GetMachinesForCluster(
62+
ctx, cluster, collections.OwnedMachines(rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()))
6263
if err != nil {
6364
logger.Error(err, "failed to perform an uncached read of control plane machines for cluster")
6465

controlplane/internal/controllers/status.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func (r *RKE2ControlPlaneReconciler) updateStatus(ctx context.Context, rcp *cont
6767
ownedMachines, err := r.managementCluster.GetMachinesForCluster(
6868
ctx,
6969
cluster,
70-
collections.OwnedMachines(rcp))
70+
collections.OwnedMachines(rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()))
7171
if err != nil {
7272
return errors.Wrap(err, "failed to get list of owned machines")
7373
}
@@ -244,7 +244,7 @@ func (r *RKE2ControlPlaneReconciler) updateV1Beta1Status(ctx context.Context, rc
244244
ownedMachines, err := r.managementCluster.GetMachinesForCluster(
245245
ctx,
246246
cluster,
247-
collections.OwnedMachines(rcp))
247+
collections.OwnedMachines(rcp, controlplanev1.GroupVersion.WithKind("RKE2ControlPlane").GroupKind()))
248248
if err != nil {
249249
return errors.Wrap(err, "failed to get list of owned machines")
250250
}

go.mod

Lines changed: 39 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -14,31 +14,34 @@ require (
1414
github.com/pkg/errors v0.9.1
1515
github.com/prometheus/client_golang v1.23.2
1616
github.com/spf13/pflag v1.0.10
17-
go.etcd.io/etcd/api/v3 v3.6.4
18-
go.etcd.io/etcd/client/v3 v3.6.4
19-
go.uber.org/zap v1.27.0
17+
go.etcd.io/etcd/api/v3 v3.6.6
18+
go.etcd.io/etcd/client/v3 v3.6.6
19+
go.uber.org/zap v1.27.1
2020
google.golang.org/grpc v1.77.0
2121
gopkg.in/yaml.v3 v3.0.1
22-
k8s.io/api v0.34.1
23-
k8s.io/apiextensions-apiserver v0.34.1
24-
k8s.io/apimachinery v0.34.1
25-
k8s.io/apiserver v0.34.1
26-
k8s.io/client-go v0.34.1
22+
k8s.io/api v0.34.3
23+
k8s.io/apiextensions-apiserver v0.34.3
24+
k8s.io/apimachinery v0.34.3
25+
k8s.io/apiserver v0.34.3
26+
k8s.io/client-go v0.34.3
2727
k8s.io/klog/v2 v2.130.1
2828
k8s.io/utils v0.0.0-20250604170112-4c0f3b243397
29-
sigs.k8s.io/cluster-api v1.11.5
30-
sigs.k8s.io/cluster-api/test v1.11.5
31-
sigs.k8s.io/controller-runtime v0.22.4
29+
sigs.k8s.io/cluster-api v1.12.2
30+
sigs.k8s.io/cluster-api/test v1.12.2
31+
sigs.k8s.io/controller-runtime v0.22.5
3232
sigs.k8s.io/kind v0.31.0
3333
sigs.k8s.io/yaml v1.6.0
3434
)
3535

3636
require (
3737
al.essio.dev/pkg/shellescape v1.5.1 // indirect
3838
cel.dev/expr v0.24.0 // indirect
39+
dario.cat/mergo v1.0.1 // indirect
3940
github.com/BurntSushi/toml v1.4.0 // indirect
4041
github.com/MakeNowJust/heredoc v1.0.0 // indirect
42+
github.com/Masterminds/goutils v1.1.1 // indirect
4143
github.com/Masterminds/semver/v3 v3.4.0 // indirect
44+
github.com/Masterminds/sprig/v3 v3.3.0 // indirect
4245
github.com/Microsoft/go-winio v0.6.2 // indirect
4346
github.com/NYTimes/gziphandler v1.1.1 // indirect
4447
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
@@ -57,10 +60,10 @@ require (
5760
github.com/coreos/go-systemd/v22 v22.6.0 // indirect
5861
github.com/coreos/vcontext v0.0.0-20230201181013-d72178a18687 // indirect
5962
github.com/distribution/reference v0.6.0 // indirect
60-
github.com/docker/docker v28.3.3+incompatible // indirect
61-
github.com/docker/go-connections v0.5.0 // indirect
63+
github.com/docker/docker v28.5.2+incompatible // indirect
64+
github.com/docker/go-connections v0.6.0 // indirect
6265
github.com/docker/go-units v0.5.0 // indirect
63-
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
66+
github.com/emicklei/go-restful/v3 v3.13.0 // indirect
6467
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
6568
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
6669
github.com/fatih/color v1.18.0 // indirect
@@ -87,43 +90,51 @@ require (
8790
github.com/google/uuid v1.6.0 // indirect
8891
github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect
8992
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect
93+
github.com/huandu/xstrings v1.5.0 // indirect
9094
github.com/inconshreveable/mousetrap v1.1.0 // indirect
9195
github.com/josharian/intern v1.0.0 // indirect
9296
github.com/json-iterator/go v1.1.12 // indirect
9397
github.com/kylelemons/godebug v1.1.0 // indirect
9498
github.com/mailru/easyjson v0.7.7 // indirect
95-
github.com/mattn/go-colorable v0.1.13 // indirect
99+
github.com/mattn/go-colorable v0.1.14 // indirect
96100
github.com/mattn/go-isatty v0.0.20 // indirect
97-
github.com/mattn/go-runewidth v0.0.14 // indirect
101+
github.com/mattn/go-runewidth v0.0.16 // indirect
102+
github.com/mitchellh/copystructure v1.2.0 // indirect
103+
github.com/mitchellh/reflectwalk v1.0.2 // indirect
98104
github.com/moby/docker-image-spec v1.3.1 // indirect
99105
github.com/moby/spdystream v0.5.0 // indirect
100106
github.com/moby/sys/sequential v0.6.0 // indirect
101107
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
102108
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
103109
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
104110
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
105-
github.com/olekukonko/tablewriter v0.0.5 // indirect
111+
github.com/olekukonko/cat v0.0.0-20250911104152-50322a0618f6 // indirect
112+
github.com/olekukonko/errors v1.1.0 // indirect
113+
github.com/olekukonko/ll v0.1.1 // indirect
114+
github.com/olekukonko/tablewriter v1.0.9 // indirect
106115
github.com/opencontainers/go-digest v1.0.0 // indirect
107116
github.com/opencontainers/image-spec v1.1.1 // indirect
108117
github.com/pelletier/go-toml v1.9.5 // indirect
109-
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
118+
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
110119
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
111120
github.com/prometheus/client_model v0.6.2 // indirect
112121
github.com/prometheus/common v0.66.1 // indirect
113122
github.com/prometheus/procfs v0.16.1 // indirect
114-
github.com/rivo/uniseg v0.4.2 // indirect
115-
github.com/sagikazarmark/locafero v0.7.0 // indirect
116-
github.com/sourcegraph/conc v0.3.0 // indirect
117-
github.com/spf13/afero v1.12.0 // indirect
118-
github.com/spf13/cast v1.7.1 // indirect
119-
github.com/spf13/cobra v1.9.1 // indirect
120-
github.com/spf13/viper v1.20.1 // indirect
123+
github.com/rivo/uniseg v0.4.7 // indirect
124+
github.com/sagikazarmark/locafero v0.11.0 // indirect
125+
github.com/shopspring/decimal v1.4.0 // indirect
126+
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
127+
github.com/spf13/afero v1.15.0 // indirect
128+
github.com/spf13/cast v1.10.0 // indirect
129+
github.com/spf13/cobra v1.10.1 // indirect
130+
github.com/spf13/viper v1.21.0 // indirect
121131
github.com/stoewer/go-strcase v1.3.0 // indirect
122132
github.com/stretchr/testify v1.11.1 // indirect
123133
github.com/subosito/gotenv v1.6.0 // indirect
134+
github.com/valyala/fastjson v1.6.4 // indirect
124135
github.com/vincent-petithory/dataurl v1.0.0 // indirect
125136
github.com/x448/float16 v0.8.4 // indirect
126-
go.etcd.io/etcd/client/pkg/v3 v3.6.4 // indirect
137+
go.etcd.io/etcd/client/pkg/v3 v3.6.6 // indirect
127138
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
128139
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 // indirect
129140
go.opentelemetry.io/otel v1.38.0 // indirect
@@ -153,8 +164,8 @@ require (
153164
google.golang.org/protobuf v1.36.10 // indirect
154165
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
155166
gopkg.in/inf.v0 v0.9.1 // indirect
156-
k8s.io/cluster-bootstrap v0.33.3 // indirect
157-
k8s.io/component-base v0.34.1 // indirect
167+
k8s.io/cluster-bootstrap v0.34.2 // indirect
168+
k8s.io/component-base v0.34.3 // indirect
158169
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
159170
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 // indirect
160171
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect

0 commit comments

Comments
 (0)