From a58310b071f2ed5018dad7ae6f1d1fc89927b14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9iy=C3=AC=20Zhang?= Date: Mon, 4 Nov 2024 13:51:39 -0800 Subject: [PATCH] switch to use snapshots.insert instead of disks.createsnapshot --- pkg/gce-cloud-provider/compute/gce-compute.go | 75 ++++++------------- 1 file changed, 23 insertions(+), 52 deletions(-) diff --git a/pkg/gce-cloud-provider/compute/gce-compute.go b/pkg/gce-cloud-provider/compute/gce-compute.go index c2c2b7603b..e2d03e914d 100644 --- a/pkg/gce-cloud-provider/compute/gce-compute.go +++ b/pkg/gce-cloud-provider/compute/gce-compute.go @@ -1264,9 +1264,8 @@ func opIsDone(op *computev1.Operation) (bool, error) { func (cloud *CloudProvider) GetInstanceOrError(ctx context.Context, instanceZone, instanceName string) (*computev1.Instance, error) { klog.V(5).Infof("Getting instance %v from zone %v", instanceName, instanceZone) - svc := cloud.service project := cloud.project - instance, err := svc.Instances.Get(project, instanceZone, instanceName).Do() + instance, err := cloud.service.Instances.Get(project, instanceZone, instanceName).Do() if err != nil { return nil, err } @@ -1275,8 +1274,7 @@ func (cloud *CloudProvider) GetInstanceOrError(ctx context.Context, instanceZone func (cloud *CloudProvider) GetSnapshot(ctx context.Context, project, snapshotName string) (*computev1.Snapshot, error) { klog.V(5).Infof("Getting snapshot %v", snapshotName) - svc := cloud.service - snapshot, err := svc.Snapshots.Get(project, snapshotName).Context(ctx).Do() + snapshot, err := cloud.service.Snapshots.Get(project, snapshotName).Context(ctx).Do() if err != nil { return nil, err } @@ -1313,15 +1311,34 @@ func (cloud *CloudProvider) CreateSnapshot(ctx context.Context, project string, if description == "" { description = "Snapshot created by GCE-PD CSI Driver" } - return cloud.createZonalDiskSnapshot(ctx, project, volKey, snapshotName, snapshotParams, description) case meta.Regional: if description == "" { description = "Regional Snapshot created by GCE-PD CSI Driver" } - return cloud.createRegionalDiskSnapshot(ctx, project, volKey, snapshotName, snapshotParams, description) default: return nil, fmt.Errorf("could not create snapshot, key was neither zonal nor regional, instead got: %v", volKey.String()) } + + snapshotToCreate := &computev1.Snapshot{ + Name: snapshotName, + StorageLocations: snapshotParams.StorageLocations, + Description: description, + Labels: snapshotParams.Labels, + SourceDisk: cloud.GetDiskSourceURI(project, volKey), + } + _, err = cloud.service.Snapshots.Insert(project, snapshotToCreate).Context(ctx).Do() + + if err != nil { + return nil, err + } + + snapshot, err := cloud.waitForSnapshotCreation(ctx, project, snapshotName) + + if err == nil { + err = cloud.attachTagsToResource(ctx, snapshotParams.ResourceTags, project, snapshot.Id, snapshotsType, "", false, resourceManagerHostSubPath) + } + + return snapshot, err } func (cloud *CloudProvider) CreateImage(ctx context.Context, project string, volKey *meta.Key, imageName string, snapshotParams common.SnapshotParameters) (*computev1.Image, error) { @@ -1497,52 +1514,6 @@ func (cloud *CloudProvider) resizeRegionalDisk(ctx context.Context, project stri return requestGb, nil } -func (cloud *CloudProvider) createZonalDiskSnapshot(ctx context.Context, project string, volKey *meta.Key, snapshotName string, snapshotParams common.SnapshotParameters, description string) (*computev1.Snapshot, error) { - snapshotToCreate := &computev1.Snapshot{ - Name: snapshotName, - StorageLocations: snapshotParams.StorageLocations, - Description: description, - Labels: snapshotParams.Labels, - } - - _, err := cloud.service.Disks.CreateSnapshot(project, volKey.Zone, volKey.Name, snapshotToCreate).Context(ctx).Do() - - if err != nil { - return nil, err - } - - snapshot, err := cloud.waitForSnapshotCreation(ctx, project, snapshotName) - - if err == nil { - err = cloud.attachTagsToResource(ctx, snapshotParams.ResourceTags, project, snapshot.Id, snapshotsType, "", false, resourceManagerHostSubPath) - } - - return snapshot, err -} - -func (cloud *CloudProvider) createRegionalDiskSnapshot(ctx context.Context, project string, volKey *meta.Key, snapshotName string, snapshotParams common.SnapshotParameters, description string) (*computev1.Snapshot, error) { - snapshotToCreate := &computev1.Snapshot{ - Name: snapshotName, - StorageLocations: snapshotParams.StorageLocations, - Description: description, - Labels: snapshotParams.Labels, - } - - _, err := cloud.service.RegionDisks.CreateSnapshot(project, volKey.Region, volKey.Name, snapshotToCreate).Context(ctx).Do() - if err != nil { - return nil, err - } - - snapshot, err := cloud.waitForSnapshotCreation(ctx, project, snapshotName) - - if err == nil { - err = cloud.attachTagsToResource(ctx, snapshotParams.ResourceTags, project, snapshot.Id, snapshotsType, "", false, resourceManagerHostSubPath) - } - - return snapshot, err - -} - func (cloud *CloudProvider) waitForSnapshotCreation(ctx context.Context, project, snapshotName string) (*computev1.Snapshot, error) { ticker := time.NewTicker(time.Second) defer ticker.Stop()