Skip to content

Commit ea06974

Browse files
carboninopenshift-merge-bot[bot]
authored andcommitted
Add backup label for BMH and DataImage
1 parent bfda1b6 commit ea06974

2 files changed

Lines changed: 128 additions & 0 deletions

File tree

controllers/imageclusterinstall_controller.go

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -774,6 +774,7 @@ func (r *ImageClusterInstallReconciler) ensureBMHDataImage(
774774
if err != nil {
775775
return dataImage, ctrl.Result{}, fmt.Errorf("failed to set controller reference for dataImage due to %w", err)
776776
}
777+
setBackupLabel(dataImage)
777778

778779
err = r.Create(ctx, dataImage)
779780
if err != nil {
@@ -905,6 +906,32 @@ func (r *ImageClusterInstallReconciler) labelSecretForBackup(ctx context.Context
905906
return nil
906907
}
907908

909+
func (r *ImageClusterInstallReconciler) labelBMHForBackup(ctx context.Context, bmhRef *v1alpha1.BareMetalHostReference) error {
910+
bmh, err := r.getBMH(ctx, bmhRef)
911+
if err != nil {
912+
return err
913+
}
914+
915+
patch := client.MergeFrom(bmh.DeepCopy())
916+
if setBackupLabel(bmh) {
917+
return r.Patch(ctx, bmh, patch)
918+
}
919+
return nil
920+
}
921+
922+
func (r *ImageClusterInstallReconciler) labelDataImageForBackup(ctx context.Context, bmhRef *v1alpha1.BareMetalHostReference) error {
923+
dataImage, err := r.getDataImage(ctx, bmhRef.Namespace, bmhRef.Name)
924+
if err != nil {
925+
return err
926+
}
927+
928+
patch := client.MergeFrom(dataImage.DeepCopy())
929+
if setBackupLabel(dataImage) {
930+
return r.Patch(ctx, dataImage, patch)
931+
}
932+
return nil
933+
}
934+
908935
func (r *ImageClusterInstallReconciler) labelReferencedObjectsForBackup(ctx context.Context, log logrus.FieldLogger, ici *v1alpha1.ImageClusterInstall, cd *hivev1.ClusterDeployment) {
909936
if ici.Spec.ClusterMetadata != nil {
910937
kubeconfigKey := types.NamespacedName{Name: ici.Spec.ClusterMetadata.AdminKubeconfigSecretRef.Name, Namespace: ici.Namespace}
@@ -939,6 +966,16 @@ func (r *ImageClusterInstallReconciler) labelReferencedObjectsForBackup(ctx cont
939966
log.WithError(err).Errorf("failed to label Secret %s for backup", psKey)
940967
}
941968
}
969+
970+
if ici.Spec.BareMetalHostRef != nil {
971+
if err := r.labelBMHForBackup(ctx, ici.Spec.BareMetalHostRef); err != nil {
972+
log.WithError(err).Errorf("failed to label BMH %s/%s for backup", ici.Spec.BareMetalHostRef.Namespace, ici.Spec.BareMetalHostRef.Name)
973+
}
974+
975+
if err := r.labelDataImageForBackup(ctx, ici.Spec.BareMetalHostRef); err != nil {
976+
log.WithError(err).Errorf("failed to label DataImage %s/%s for backup", ici.Spec.BareMetalHostRef.Namespace, ici.Spec.BareMetalHostRef.Name)
977+
}
978+
}
942979
}
943980

944981
func (r *ImageClusterInstallReconciler) configDirs(ici *v1alpha1.ImageClusterInstall) (string, string, error) {

controllers/imageclusterinstall_controller_test.go

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2116,6 +2116,97 @@ var _ = Describe("Reconcile", func() {
21162116
}
21172117
})
21182118

2119+
It("labels BMH and DataImage for backup", func() {
2120+
bmh := bmhInState(bmh_v1alpha1.StateAvailable)
2121+
bmh.Spec.Online = true
2122+
bmh.Spec.ExternallyProvisioned = false
2123+
Expect(c.Create(ctx, bmh)).To(Succeed())
2124+
2125+
clusterInstall.Spec.BareMetalHostRef = &v1alpha1.BareMetalHostReference{
2126+
Name: bmh.Name,
2127+
Namespace: bmh.Namespace,
2128+
}
2129+
Expect(c.Create(ctx, clusterInstall)).To(Succeed())
2130+
clusterDeployment.Spec.ClusterName = "test"
2131+
clusterDeployment.Spec.BaseDomain = "example.com"
2132+
Expect(c.Create(ctx, clusterDeployment)).To(Succeed())
2133+
2134+
// Create DataImage beforehand so it exists when backup labeling happens
2135+
dataImage := &bmh_v1alpha1.DataImage{
2136+
ObjectMeta: metav1.ObjectMeta{
2137+
Name: bmh.Name,
2138+
Namespace: bmh.Namespace,
2139+
},
2140+
Spec: bmh_v1alpha1.DataImageSpec{
2141+
URL: imageURL(),
2142+
},
2143+
}
2144+
Expect(c.Create(ctx, dataImage)).To(Succeed())
2145+
2146+
key := types.NamespacedName{
2147+
Namespace: clusterInstallNamespace,
2148+
Name: clusterInstallName,
2149+
}
2150+
installerSuccess()
2151+
res, err := r.Reconcile(ctx, ctrl.Request{NamespacedName: key})
2152+
Expect(err).NotTo(HaveOccurred())
2153+
Expect(res).To(Equal(ctrl.Result{}))
2154+
2155+
// Verify BMH has backup label
2156+
bmhKey := types.NamespacedName{
2157+
Namespace: bmh.Namespace,
2158+
Name: bmh.Name,
2159+
}
2160+
testBMH := &bmh_v1alpha1.BareMetalHost{}
2161+
Expect(c.Get(ctx, bmhKey, testBMH)).To(Succeed())
2162+
Expect(testBMH.GetLabels()).To(HaveKeyWithValue(backupLabel, backupLabelValue), "BMH %s/%s missing backup label", testBMH.Namespace, testBMH.Name)
2163+
2164+
// Verify DataImage has backup label
2165+
testDataImage := &bmh_v1alpha1.DataImage{}
2166+
Expect(c.Get(ctx, bmhKey, testDataImage)).To(Succeed())
2167+
Expect(testDataImage.GetLabels()).To(HaveKeyWithValue(backupLabel, backupLabelValue), "DataImage %s/%s missing backup label", testDataImage.Namespace, testDataImage.Name)
2168+
})
2169+
2170+
It("labels newly created DataImage for backup", func() {
2171+
bmh := bmhInState(bmh_v1alpha1.StateAvailable)
2172+
bmh.Spec.Online = true
2173+
bmh.Spec.ExternallyProvisioned = false
2174+
Expect(c.Create(ctx, bmh)).To(Succeed())
2175+
2176+
clusterInstall.Spec.BareMetalHostRef = &v1alpha1.BareMetalHostReference{
2177+
Name: bmh.Name,
2178+
Namespace: bmh.Namespace,
2179+
}
2180+
Expect(c.Create(ctx, clusterInstall)).To(Succeed())
2181+
clusterDeployment.Spec.ClusterName = "test"
2182+
clusterDeployment.Spec.BaseDomain = "example.com"
2183+
Expect(c.Create(ctx, clusterDeployment)).To(Succeed())
2184+
2185+
key := types.NamespacedName{
2186+
Namespace: clusterInstallNamespace,
2187+
Name: clusterInstallName,
2188+
}
2189+
installerSuccess()
2190+
// First reconcile creates the DataImage
2191+
res, err := r.Reconcile(ctx, ctrl.Request{NamespacedName: key})
2192+
Expect(err).NotTo(HaveOccurred())
2193+
Expect(res).To(Equal(ctrl.Result{}))
2194+
2195+
// Verify BMH has backup label
2196+
bmhKey := types.NamespacedName{
2197+
Namespace: bmh.Namespace,
2198+
Name: bmh.Name,
2199+
}
2200+
testBMH := &bmh_v1alpha1.BareMetalHost{}
2201+
Expect(c.Get(ctx, bmhKey, testBMH)).To(Succeed())
2202+
Expect(testBMH.GetLabels()).To(HaveKeyWithValue(backupLabel, backupLabelValue), "BMH %s/%s missing backup label", testBMH.Namespace, testBMH.Name)
2203+
2204+
// Verify newly created DataImage has backup label
2205+
testDataImage := &bmh_v1alpha1.DataImage{}
2206+
Expect(c.Get(ctx, bmhKey, testDataImage)).To(Succeed())
2207+
Expect(testDataImage.GetLabels()).To(HaveKeyWithValue(backupLabel, backupLabelValue), "DataImage %s/%s missing backup label", testDataImage.Namespace, testDataImage.Name)
2208+
})
2209+
21192210
Context("when the cluster identity secrets exist", func() {
21202211
createSecret := func(name string, data map[string][]byte) {
21212212
s := corev1.Secret{

0 commit comments

Comments
 (0)