From d95d0a750f3decc4b975183df7e1a13c7436a852 Mon Sep 17 00:00:00 2001 From: zhucan Date: Thu, 23 May 2019 16:29:30 +0800 Subject: [PATCH] Need to check VolumeContentSource if creating volume from snapshot --- pkg/controller/controller.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/pkg/controller/controller.go b/pkg/controller/controller.go index 88ae3ffecf..de47936358 100644 --- a/pkg/controller/controller.go +++ b/pkg/controller/controller.go @@ -509,6 +509,26 @@ func (p *csiProvisioner) Provision(options controller.ProvisionOptions) (*v1.Per return nil, capErr } + if needSnapshotSupport { + contentSource := rep.GetVolume().ContentSource + if contentSource == nil { + sourceErr := fmt.Errorf("created volume contentsource missing") + delReq := &csi.DeleteVolumeRequest{ + VolumeId: rep.GetVolume().GetVolumeId(), + } + delReq.Secrets = provisionerCredentials + ctx, cancel := context.WithTimeout(context.Background(), p.timeout) + defer cancel() + _, err := p.csiClient.DeleteVolume(ctx, delReq) + if err != nil { + sourceErr = fmt.Errorf("%v. Cleanup of volume %s failed, volume is orphaned: %v", sourceErr, pvName, err) + } + return nil, sourceErr + } + + klog.Infof("created volume %s from snapshot %s is successful", pvName, contentSource.GetSnapshot().SnapshotId) + } + pv := &v1.PersistentVolume{ ObjectMeta: metav1.ObjectMeta{ Name: pvName,