diff --git a/pkg/blockstorage/azure/azuredisk.go b/pkg/blockstorage/azure/azuredisk.go index c5051b26ee..cbe190a727 100644 --- a/pkg/blockstorage/azure/azuredisk.go +++ b/pkg/blockstorage/azure/azuredisk.go @@ -328,7 +328,15 @@ func (s *AdStorage) SnapshotCreate(ctx context.Context, volume blockstorage.Volu } func (s *AdStorage) SnapshotCreateWaitForCompletion(ctx context.Context, snap *blockstorage.Snapshot) error { - return nil + err := poll.Wait(ctx, func(ctx context.Context) (bool, error) { + snapshot, err := s.SnapshotGet(ctx, snap.ID) + if err == nil && snapshot.ProvisioningState == string(azcompute.ProvisioningStateSucceeded) { + return true, nil + } + + return false, nil + }) + return err } const ( @@ -440,14 +448,15 @@ func (s *AdStorage) snapshotParse(ctx context.Context, snap azcompute.Snapshot) tags = azto.StringMap(snap.Tags) } return &blockstorage.Snapshot{ - Encrypted: encrypted, - ID: azto.String(snap.ID), - Region: azto.String(snap.Location), - SizeInBytes: azto.Int64(snap.SnapshotProperties.DiskSizeBytes), - Tags: blockstorage.MapToKeyValue(tags), - Type: s.Type(), - Volume: vol, - CreationTime: blockstorage.TimeStamp(snapCreationTime.ToTime()), + Encrypted: encrypted, + ID: azto.String(snap.ID), + Region: azto.String(snap.Location), + SizeInBytes: azto.Int64(snap.SnapshotProperties.DiskSizeBytes), + Tags: blockstorage.MapToKeyValue(tags), + Type: s.Type(), + Volume: vol, + CreationTime: blockstorage.TimeStamp(snapCreationTime.ToTime()), + ProvisioningState: *snap.ProvisioningState, } } diff --git a/pkg/blockstorage/models.go b/pkg/blockstorage/models.go index f17a681a7f..e48d11a9eb 100644 --- a/pkg/blockstorage/models.go +++ b/pkg/blockstorage/models.go @@ -88,6 +88,9 @@ type Snapshot struct { // volume Volume *Volume + + // ProvisioningState is snapshot's provisioning state. + ProvisioningState string } // TimeStamp Time stamp for an event related to an object, for example when the object was created.