Set DeleteBackupRequest labels if missing

When the BackupDeletionController processes a request, set the request's
backup-name and backup-uid labels if they aren't currently set.

Signed-off-by: Andy Goldstein <andy.goldstein@gmail.com>
This commit is contained in:
Andy Goldstein
2018-04-05 15:38:44 -04:00
parent ef57a44827
commit 644a75e3c1
2 changed files with 39 additions and 2 deletions

View File

@@ -133,6 +133,7 @@ func (c *backupDeletionController) processRequest(req *v1.DeleteBackupRequest) e
"backup": req.Spec.BackupName,
})
// Make sure we have the backup name
if req.Spec.BackupName == "" {
_, err := c.patchDeleteBackupRequest(req, func(r *v1.DeleteBackupRequest) {
r.Status.Phase = v1.DeleteBackupRequestPhaseProcessed
@@ -143,9 +144,13 @@ func (c *backupDeletionController) processRequest(req *v1.DeleteBackupRequest) e
var err error
// Update status to InProgress
// Update status to InProgress and set backup-name label if needed
req, err = c.patchDeleteBackupRequest(req, func(r *v1.DeleteBackupRequest) {
r.Status.Phase = v1.DeleteBackupRequestPhaseInProgress
if req.Labels[v1.BackupNameLabel] == "" {
req.Labels[v1.BackupNameLabel] = req.Spec.BackupName
}
})
if err != nil {
return err
@@ -166,6 +171,16 @@ func (c *backupDeletionController) processRequest(req *v1.DeleteBackupRequest) e
return errors.Wrap(err, "error getting Backup")
}
// Set backup-uid label if needed
if req.Labels[v1.BackupUIDLabel] == "" {
req, err = c.patchDeleteBackupRequest(req, func(r *v1.DeleteBackupRequest) {
req.Labels[v1.BackupUIDLabel] = string(backup.UID)
})
if err != nil {
return err
}
}
// If the backup includes snapshots but we don't currently have a PVProvider, we don't
// want to orphan the snapshots so skip deletion.
if c.snapshotService == nil && len(backup.Status.VolumeBackups) > 0 {

View File

@@ -334,6 +334,9 @@ func TestBackupDeletionControllerProcessRequest(t *testing.T) {
defer td.backupService.AssertExpectations(t)
// Clear out req labels to make sure the controller adds them
td.req.Labels = make(map[string]string)
td.client.PrependReactor("get", "backups", func(action core.Action) (bool, runtime.Object, error) {
return true, backup, nil
})
@@ -357,13 +360,19 @@ func TestBackupDeletionControllerProcessRequest(t *testing.T) {
v1.SchemeGroupVersion.WithResource("deletebackuprequests"),
td.req.Namespace,
td.req.Name,
[]byte(`{"status":{"phase":"InProgress"}}`),
[]byte(`{"metadata":{"labels":{"ark.heptio.com/backup-name":"foo"}},"status":{"phase":"InProgress"}}`),
),
core.NewGetAction(
v1.SchemeGroupVersion.WithResource("backups"),
td.req.Namespace,
td.req.Spec.BackupName,
),
core.NewPatchAction(
v1.SchemeGroupVersion.WithResource("deletebackuprequests"),
td.req.Namespace,
td.req.Name,
[]byte(`{"metadata":{"labels":{"ark.heptio.com/backup-uid":"uid"}}}`),
),
core.NewPatchAction(
v1.SchemeGroupVersion.WithResource("backups"),
td.req.Namespace,
@@ -412,6 +421,19 @@ func TestBackupDeletionControllerProcessRequest(t *testing.T) {
}
}
for _, a := range td.client.Actions() {
found := false
for _, e := range expectedActions {
if reflect.DeepEqual(e, a) {
found = true
break
}
}
if !found {
t.Errorf("unexpected action %#v", a)
}
}
// Make sure snapshot was deleted
assert.Equal(t, 0, td.snapshotService.SnapshotsTaken.Len())
})