Skip to content

Commit c02d6fb

Browse files
authored
cluster: if not found via OwnerReference, look for Cluster via standard label cluster.x-k8s.io/cluster-name on TinkerbellCluster (#501)
- if found via label, set actual OwnerReference - this is done by using CAPI-core's util.GetClusterFromMetadata() - this makes using CAPT in mixed-infrastructure Clusters much easier
2 parents bccc1fa + 7700b08 commit c02d6fb

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

controller/cluster/tinkerbellcluster.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,14 +127,34 @@ func (tcr *TinkerbellClusterReconciler) newReconcileContext(ctx context.Context,
127127
}
128128

129129
if cluster == nil {
130-
crc.log.Info("OwnerCluster is not set yet.")
130+
crc.log.Info("OwnerCluster is not set yet; trying by label")
131+
cluster, err = findClusterOwnerByLabelAndAdopt(crc)
132+
if err != nil {
133+
return nil, fmt.Errorf("getting by-label owner cluster: %w", err)
134+
}
131135
}
132136

133137
crc.cluster = cluster
134138

135139
return crc, nil
136140
}
137141

142+
func findClusterOwnerByLabelAndAdopt(crc *clusterReconcileContext) (*clusterv1.Cluster, error) {
143+
clusterByLabel, err := util.GetClusterFromMetadata(crc.ctx, crc.client, crc.tinkerbellCluster.ObjectMeta)
144+
if err == nil && clusterByLabel != nil {
145+
crc.log.Info("Cluster found by label, setting as owner reference")
146+
// "Set" the owner reference so that future reconciliations don't have to do this again.
147+
if err := ctrl.SetControllerReference(clusterByLabel, crc.tinkerbellCluster, crc.client.Scheme()); err != nil {
148+
return nil, fmt.Errorf("setting owner reference: %w", err)
149+
}
150+
if err := crc.patchHelper.Patch(crc.ctx, crc.tinkerbellCluster); err != nil {
151+
return nil, fmt.Errorf("patching TinkerbellCluster with owner reference: %w", err)
152+
}
153+
crc.log.Info("Owner reference set via label lookup")
154+
}
155+
return clusterByLabel, nil
156+
}
157+
138158
// clusterReconcileContext implements ReconcileContext by reconciling TinkerbellCluster object.
139159
type clusterReconcileContext struct {
140160
ctx context.Context

0 commit comments

Comments
 (0)