mirror of
https://github.com/vmware-tanzu/velero.git
synced 2026-01-08 14:21:18 +00:00
get backup name from restore spec when handling restore DownloadRequests
Signed-off-by: Steve Kriss <steve@heptio.com>
This commit is contained in:
@@ -47,6 +47,8 @@ type downloadRequestController struct {
|
||||
downloadRequestClient arkv1client.DownloadRequestsGetter
|
||||
downloadRequestLister listers.DownloadRequestLister
|
||||
downloadRequestListerSynced cache.InformerSynced
|
||||
restoreLister listers.RestoreLister
|
||||
restoreListerSynced cache.InformerSynced
|
||||
backupService cloudprovider.BackupService
|
||||
bucket string
|
||||
syncHandler func(key string) error
|
||||
@@ -59,6 +61,7 @@ type downloadRequestController struct {
|
||||
func NewDownloadRequestController(
|
||||
downloadRequestClient arkv1client.DownloadRequestsGetter,
|
||||
downloadRequestInformer informers.DownloadRequestInformer,
|
||||
restoreInformer informers.RestoreInformer,
|
||||
backupService cloudprovider.BackupService,
|
||||
bucket string,
|
||||
logger logrus.FieldLogger,
|
||||
@@ -67,6 +70,8 @@ func NewDownloadRequestController(
|
||||
downloadRequestClient: downloadRequestClient,
|
||||
downloadRequestLister: downloadRequestInformer.Lister(),
|
||||
downloadRequestListerSynced: downloadRequestInformer.Informer().HasSynced,
|
||||
restoreLister: restoreInformer.Lister(),
|
||||
restoreListerSynced: restoreInformer.Informer().HasSynced,
|
||||
backupService: backupService,
|
||||
bucket: bucket,
|
||||
queue: workqueue.NewNamedRateLimitingQueue(workqueue.DefaultControllerRateLimiter(), "downloadrequest"),
|
||||
@@ -118,7 +123,7 @@ func (c *downloadRequestController) Run(ctx context.Context, numWorkers int) err
|
||||
defer c.logger.Info("Shutting down DownloadRequestController")
|
||||
|
||||
c.logger.Info("Waiting for caches to sync")
|
||||
if !cache.WaitForCacheSync(ctx.Done(), c.downloadRequestListerSynced) {
|
||||
if !cache.WaitForCacheSync(ctx.Done(), c.downloadRequestListerSynced, c.restoreListerSynced) {
|
||||
return errors.New("timed out waiting for caches to sync")
|
||||
}
|
||||
c.logger.Info("Caches are synced")
|
||||
@@ -214,8 +219,24 @@ const signedURLTTL = 10 * time.Minute
|
||||
func (c *downloadRequestController) generatePreSignedURL(downloadRequest *v1.DownloadRequest) error {
|
||||
update := downloadRequest.DeepCopy()
|
||||
|
||||
var err error
|
||||
update.Status.DownloadURL, err = c.backupService.CreateSignedURL(downloadRequest.Spec.Target, c.bucket, signedURLTTL)
|
||||
var (
|
||||
directory string
|
||||
err error
|
||||
)
|
||||
|
||||
switch downloadRequest.Spec.Target.Kind {
|
||||
case v1.DownloadTargetKindRestoreLog, v1.DownloadTargetKindRestoreResults:
|
||||
restore, err := c.restoreLister.Restores(downloadRequest.Namespace).Get(downloadRequest.Spec.Target.Name)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "error getting Restore")
|
||||
}
|
||||
|
||||
directory = restore.Spec.BackupName
|
||||
default:
|
||||
directory = downloadRequest.Spec.Target.Name
|
||||
}
|
||||
|
||||
update.Status.DownloadURL, err = c.backupService.CreateSignedURL(downloadRequest.Spec.Target, c.bucket, directory, signedURLTTL)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -41,7 +41,9 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
phase v1.DownloadRequestPhase
|
||||
targetKind v1.DownloadTargetKind
|
||||
targetName string
|
||||
restore *v1.Restore
|
||||
expectedError string
|
||||
expectedDir string
|
||||
expectedPhase v1.DownloadRequestPhase
|
||||
expectedURL string
|
||||
}{
|
||||
@@ -60,6 +62,7 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
phase: "",
|
||||
targetKind: v1.DownloadTargetKindBackupLog,
|
||||
targetName: "backup1",
|
||||
expectedDir: "backup1",
|
||||
expectedPhase: v1.DownloadRequestPhaseProcessed,
|
||||
expectedURL: "signedURL",
|
||||
},
|
||||
@@ -69,6 +72,7 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
phase: v1.DownloadRequestPhaseNew,
|
||||
targetKind: v1.DownloadTargetKindBackupLog,
|
||||
targetName: "backup1",
|
||||
expectedDir: "backup1",
|
||||
expectedPhase: v1.DownloadRequestPhaseProcessed,
|
||||
expectedURL: "signedURL",
|
||||
},
|
||||
@@ -78,6 +82,8 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
phase: "",
|
||||
targetKind: v1.DownloadTargetKindRestoreLog,
|
||||
targetName: "backup1-20170912150214",
|
||||
restore: arktest.NewTestRestore(v1.DefaultNamespace, "backup1-20170912150214", v1.RestorePhaseCompleted).WithBackup("backup1").Restore,
|
||||
expectedDir: "backup1",
|
||||
expectedPhase: v1.DownloadRequestPhaseProcessed,
|
||||
expectedURL: "signedURL",
|
||||
},
|
||||
@@ -87,6 +93,8 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
phase: v1.DownloadRequestPhaseNew,
|
||||
targetKind: v1.DownloadTargetKindRestoreLog,
|
||||
targetName: "backup1-20170912150214",
|
||||
restore: arktest.NewTestRestore(v1.DefaultNamespace, "backup1-20170912150214", v1.RestorePhaseCompleted).WithBackup("backup1").Restore,
|
||||
expectedDir: "backup1",
|
||||
expectedPhase: v1.DownloadRequestPhaseProcessed,
|
||||
expectedURL: "signedURL",
|
||||
},
|
||||
@@ -98,6 +106,7 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
client = fake.NewSimpleClientset()
|
||||
sharedInformers = informers.NewSharedInformerFactory(client, 0)
|
||||
downloadRequestsInformer = sharedInformers.Ark().V1().DownloadRequests()
|
||||
restoresInformer = sharedInformers.Ark().V1().Restores()
|
||||
backupService = &arktest.BackupService{}
|
||||
logger = arktest.NewLogger()
|
||||
)
|
||||
@@ -106,6 +115,7 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
c := NewDownloadRequestController(
|
||||
client.ArkV1(),
|
||||
downloadRequestsInformer,
|
||||
restoresInformer,
|
||||
backupService,
|
||||
"bucket",
|
||||
logger,
|
||||
@@ -130,7 +140,11 @@ func TestProcessDownloadRequest(t *testing.T) {
|
||||
}
|
||||
downloadRequestsInformer.Informer().GetStore().Add(downloadRequest)
|
||||
|
||||
backupService.On("CreateSignedURL", target, "bucket", 10*time.Minute).Return("signedURL", nil)
|
||||
if tc.restore != nil {
|
||||
restoresInformer.Informer().GetStore().Add(tc.restore)
|
||||
}
|
||||
|
||||
backupService.On("CreateSignedURL", target, "bucket", tc.expectedDir, 10*time.Minute).Return("signedURL", nil)
|
||||
}
|
||||
|
||||
// method under test
|
||||
|
||||
Reference in New Issue
Block a user