Skip to content

Commit

Permalink
switch to use snapshots.insert instead of disks.createsnapshot
Browse files Browse the repository at this point in the history
  • Loading branch information
leiyiz committed Nov 5, 2024
1 parent e3f0d26 commit a58310b
Showing 1 changed file with 23 additions and 52 deletions.
75 changes: 23 additions & 52 deletions pkg/gce-cloud-provider/compute/gce-compute.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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()
Expand Down

0 comments on commit a58310b

Please sign in to comment.