Skip to content

Commit a2d62a5

Browse files
committed
Don't use util.CreateOrUpdate for ClusterImageSets
When updating this causes an error like: ``` 2025-04-02T18:57:32Z ERROR failed creating ClusterImageSet {"controller": "clusterdeployment", "controllerGroup": "hive.openshift.io", "controllerKind": "ClusterDeployment", "ClusterDeployment": {"name":"test-multinode","namespace":"test-capi"}, "namespace": "test-capi", "name": "test-multinode", "reconcileID": "18ea3061-27ad-4efb-ab87-f9f859a301d9", "error": "clusterimagesets.hive.openshift.io \"test-multinode\" is invalid: metadata.resourceVersion: Invalid value: 0x0: must be specified for an update"} github.com/openshift-assisted/cluster-api-agent/controlplane/internal/controller.(*ClusterDeploymentReconciler).ensureAgentClusterInstall /workspace/controlplane/internal/controller/clusterdeployment_controller.go:114 github.com/openshift-assisted/cluster-api-agent/controlplane/internal/controller.(*ClusterDeploymentReconciler).Reconcile /workspace/controlplane/internal/controller/clusterdeployment_controller.go:91 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Reconcile /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.6/pkg/internal/controller/controller.go:116 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).reconcileHandler /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.6/pkg/internal/controller/controller.go:303 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).processNextWorkItem /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.6/pkg/internal/controller/controller.go:263 sigs.k8s.io/controller-runtime/pkg/internal/controller.(*Controller[...]).Start.func2.2 /go/pkg/mod/sigs.k8s.io/controller-runtime@v0.19.6/pkg/internal/controller/controller.go:224 ```
1 parent 37b4864 commit a2d62a5

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

controlplane/internal/controller/clusterdeployment_controller.go

+14-11
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import (
4343
capiutil "sigs.k8s.io/cluster-api/util"
4444
ctrl "sigs.k8s.io/controller-runtime"
4545
"sigs.k8s.io/controller-runtime/pkg/client"
46+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
4647
"sigs.k8s.io/controller-runtime/pkg/handler"
4748
)
4849

@@ -108,15 +109,13 @@ func (r *ClusterDeploymentReconciler) ensureAgentClusterInstall(
108109
if err != nil {
109110
return ctrl.Result{}, err
110111
}
111-
imageSet := computeClusterImageSet(clusterDeployment.Name, getReleaseImage(oacp, arch))
112-
err = util.CreateOrUpdate(ctx, r.Client, imageSet)
113-
if err != nil {
112+
if err = ensureClusterImageSet(ctx, r.Client, clusterDeployment.Name, getReleaseImage(oacp, arch)); err != nil {
114113
log.Error(err, "failed creating ClusterImageSet")
115114
return ctrl.Result{}, err
116115
}
117116

118117
workerNodes := r.getWorkerNodesCount(ctx, cluster)
119-
aci, err := r.computeAgentClusterInstall(ctx, clusterDeployment, oacp, imageSet, cluster, workerNodes)
118+
aci, err := r.computeAgentClusterInstall(ctx, clusterDeployment, oacp, clusterDeployment.Name, cluster, workerNodes)
120119
if err != nil {
121120
return ctrl.Result{}, err
122121
}
@@ -172,22 +171,26 @@ func (r *ClusterDeploymentReconciler) updateClusterDeploymentRef(
172171
return r.Client.Update(ctx, cd)
173172
}
174173

175-
func computeClusterImageSet(imageSetName string, releaseImage string) *hivev1.ClusterImageSet {
176-
return &hivev1.ClusterImageSet{
174+
func ensureClusterImageSet(ctx context.Context, c client.Client, imageSetName string, releaseImage string) error {
175+
imageSet := &hivev1.ClusterImageSet{
177176
ObjectMeta: metav1.ObjectMeta{
178177
Name: imageSetName,
179178
},
180-
Spec: hivev1.ClusterImageSetSpec{
181-
ReleaseImage: releaseImage,
182-
},
183179
}
180+
181+
_, err := controllerutil.CreateOrUpdate(ctx, c, imageSet, func() error {
182+
imageSet.Spec.ReleaseImage = releaseImage
183+
return nil
184+
})
185+
186+
return err
184187
}
185188

186189
func (r *ClusterDeploymentReconciler) computeAgentClusterInstall(
187190
ctx context.Context,
188191
clusterDeployment *hivev1.ClusterDeployment,
189192
acp controlplanev1alpha2.OpenshiftAssistedControlPlane,
190-
imageSet *hivev1.ClusterImageSet,
193+
imageSetName string,
191194
cluster *clusterv1.Cluster,
192195
workerReplicas int,
193196
) (*hiveext.AgentClusterInstall, error) {
@@ -239,7 +242,7 @@ func (r *ClusterDeploymentReconciler) computeAgentClusterInstall(
239242
MastersSchedulable: acp.Spec.Config.MastersSchedulable,
240243
Proxy: acp.Spec.Config.Proxy,
241244
SSHPublicKey: acp.Spec.Config.SSHAuthorizedKey,
242-
ImageSetRef: &hivev1.ClusterImageSetReference{Name: imageSet.Name},
245+
ImageSetRef: &hivev1.ClusterImageSetReference{Name: imageSetName},
243246
Networking: hiveext.Networking{
244247
ClusterNetwork: clusterNetwork,
245248
ServiceNetwork: serviceNetwork,

0 commit comments

Comments
 (0)