Skip to content

Commit dc1b87c

Browse files
authored
OADP-521 1.0 cp: set controller reference after modifying objectmeta (#699)
* set controller reference after modifying objectmeta * add e2e dpa deletion test Signed-off-by: Tiger Kaovilai <[email protected]>
1 parent 2138a04 commit dc1b87c

File tree

4 files changed

+76
-14
lines changed

4 files changed

+76
-14
lines changed

controllers/restic.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,10 @@ func (r *DPAReconciler) ReconcileResticDaemonset(log logr.Logger) (bool, error)
119119
}
120120
}
121121

122-
if err := controllerutil.SetControllerReference(&dpa, ds, r.Scheme); err != nil {
122+
if _, err := r.buildResticDaemonset(&dpa, ds); err != nil {
123123
return err
124124
}
125-
if _, err := r.buildResticDaemonset(&dpa, ds); err != nil {
125+
if err := controllerutil.SetControllerReference(&dpa, ds, r.Scheme); err != nil {
126126
return err
127127
}
128128
return nil

controllers/velero.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -272,13 +272,14 @@ func (r *DPAReconciler) ReconcileVeleroDeployment(log logr.Logger) (bool, error)
272272
}
273273
}
274274

275-
// Setting controller owner reference on the velero deployment
276-
err := controllerutil.SetControllerReference(&dpa, veleroDeployment, r.Scheme)
275+
// update the Deployment template
276+
err := r.buildVeleroDeployment(veleroDeployment, &dpa)
277277
if err != nil {
278278
return err
279279
}
280-
// update the Deployment template
281-
return r.buildVeleroDeployment(veleroDeployment, &dpa)
280+
281+
// Setting controller owner reference on the velero deployment
282+
return controllerutil.SetControllerReference(&dpa, veleroDeployment, r.Scheme)
282283
})
283284

284285
if err != nil {

tests/e2e/dpa_deployment_suite_test.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,4 +632,36 @@ var _ = Describe("Configuration testing for DPA Custom Resource", func() {
632632

633633
}, genericTests,
634634
)
635+
636+
type deletionCase struct {
637+
WantError bool
638+
}
639+
DescribeTable("DPA Deletion test",
640+
func(installCase deletionCase) {
641+
log.Printf("Building dpa")
642+
err := dpaCR.Build(RESTIC)
643+
Expect(err).NotTo(HaveOccurred())
644+
log.Printf("Creating dpa")
645+
err = dpaCR.CreateOrUpdate(&dpaCR.CustomResource.Spec)
646+
Expect(err).NotTo(HaveOccurred())
647+
log.Printf("Waiting for velero pod to be running")
648+
Eventually(AreVeleroPodsRunning(namespace), timeoutMultiplier*time.Minute*3, time.Second*5).Should(BeTrue())
649+
if dpaCR.CustomResource.BackupImages() {
650+
log.Printf("Waiting for registry pods to be running")
651+
Eventually(AreRegistryDeploymentsAvailable(namespace), timeoutMultiplier*time.Minute*3, time.Second*5).Should(BeTrue())
652+
}
653+
log.Printf("Deleting dpa")
654+
err = dpaCR.Delete()
655+
if installCase.WantError {
656+
Expect(err).To(HaveOccurred())
657+
} else {
658+
Expect(err).NotTo(HaveOccurred())
659+
log.Printf("Checking no velero pods are running")
660+
Eventually(AreVeleroPodsRunning(namespace), timeoutMultiplier*time.Minute*3, time.Second*5).ShouldNot(BeTrue())
661+
log.Printf("Checking no registry deployment available")
662+
Eventually(AreRegistryDeploymentsNotAvailable(namespace), timeoutMultiplier*time.Minute*3, time.Second*5).Should(BeTrue())
663+
}
664+
},
665+
Entry("Should succeed", deletionCase{WantError: false}),
666+
)
635667
})

tests/e2e/lib/registry_helpers.go

Lines changed: 37 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,15 +14,8 @@ import (
1414
func AreRegistryDeploymentsAvailable(namespace string) wait.ConditionFunc {
1515
log.Printf("Checking for available registry deployments")
1616
return func() (bool, error) {
17-
client, err := setUpClient()
18-
if err != nil {
19-
return false, err
20-
}
21-
registryListOptions := metav1.ListOptions{
22-
LabelSelector: "app.kubernetes.io/component=Registry",
23-
}
2417
// get pods in the oadp-operator-e2e namespace with label selector
25-
deploymentList, err := client.AppsV1().Deployments(namespace).List(context.TODO(), registryListOptions)
18+
deploymentList, err := GetRegistryDeploymentList(namespace)
2619
if err != nil {
2720
return false, nil
2821
}
@@ -40,3 +33,39 @@ func AreRegistryDeploymentsAvailable(namespace string) wait.ConditionFunc {
4033
return true, nil
4134
}
4235
}
36+
37+
func GetRegistryDeploymentList(namespace string) (*appsv1.DeploymentList, error) {
38+
client, err := setUpClient()
39+
if err != nil {
40+
return nil, err
41+
}
42+
registryListOptions := metav1.ListOptions{
43+
LabelSelector: "app.kubernetes.io/component=Registry",
44+
}
45+
// get pods in the oadp-operator-e2e namespace with label selector
46+
deploymentList, err := client.AppsV1().Deployments(namespace).List(context.TODO(), registryListOptions)
47+
if err != nil {
48+
return nil, err
49+
}
50+
return deploymentList, nil
51+
}
52+
53+
func AreRegistryDeploymentsNotAvailable(namespace string) wait.ConditionFunc {
54+
log.Printf("Checking for unavailable registry deployments")
55+
return func() (bool, error) {
56+
// get pods in the oadp-operator-e2e namespace with label selector
57+
deploymentList, err := GetRegistryDeploymentList(namespace)
58+
if err != nil {
59+
return false, err
60+
}
61+
// loop until deployment status is 'Running' or timeout
62+
for _, deploymentInfo := range deploymentList.Items {
63+
for _, conditions := range deploymentInfo.Status.Conditions {
64+
if conditions.Type == appsv1.DeploymentAvailable && conditions.Status == corev1.ConditionTrue {
65+
return false, fmt.Errorf("registry deployment is still available.\nconditions: %v", deploymentInfo.Status.Conditions)
66+
}
67+
}
68+
}
69+
return true, nil
70+
}
71+
}

0 commit comments

Comments
 (0)