Skip to content

Commit

Permalink
Merge pull request #74 from linkernetworks/hwchiu/VX-154
Browse files Browse the repository at this point in the history
Check the volume before deleting the storage
  • Loading branch information
Hung-Wei Chiu authored Jul 10, 2018
2 parents e28bf30 + f3459ff commit 92d1323
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
16 changes: 15 additions & 1 deletion src/storageprovider/nfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,12 @@ import (

"github.com/linkernetworks/vortex/src/entity"
"github.com/linkernetworks/vortex/src/serviceprovider"
"gopkg.in/mgo.v2/bson"

appsv1 "k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
storagev1 "k8s.io/api/storage/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
// "gopkg.in/mgo.v2/bson"
)

const NFS_PROVISIONER_PREFIX = "nfs-provisioner-"
Expand Down Expand Up @@ -119,6 +120,19 @@ func (nfs NFSStorageProvider) CreateStorage(sp *serviceprovider.Container, stora
func (nfs NFSStorageProvider) DeleteStorage(sp *serviceprovider.Container, storage *entity.Storage) error {
deployName := NFS_PROVISIONER_PREFIX + storage.ID.Hex()
storageName := NFS_STORAGECLASS_PREFIX + storage.ID.Hex()

//If the storage is used by some volume, we can't delete it.
q := bson.M{"storageName": storage.Name}
session := sp.Mongo.NewSession()
defer session.Close()

count, err := session.Count(entity.VolumeCollectionName, q)
if err != nil {
return err
} else if count > 0 {
return fmt.Errorf("The StorageName %s can't be deleted, since there're some volume still use it", storage.Name)
}

//Delete StorageClass
if err := sp.KubeCtl.DeleteStorageClass(storageName); err != nil {
return err
Expand Down
39 changes: 38 additions & 1 deletion src/storageprovider/nfs_test.go
Original file line number Diff line number Diff line change
@@ -1,16 +1,24 @@
package storageprovider

import (
"math/rand"
"testing"
"time"

//"github.com/linkernetworks/mongo"
"github.com/linkernetworks/vortex/src/config"
"github.com/linkernetworks/vortex/src/entity"
"github.com/linkernetworks/vortex/src/serviceprovider"
"github.com/moby/moby/pkg/namesgenerator"
"github.com/stretchr/testify/suite"

"gopkg.in/mgo.v2/bson"
)

func init() {
rand.Seed(time.Now().UnixNano())
}

type StorageTestSuite struct {
suite.Suite
sp *serviceprovider.Container
Expand Down Expand Up @@ -52,7 +60,6 @@ func (suite *StorageTestSuite) TestGetStorageClass() {

storageClass := getStorageClass(bson.NewObjectId().Hex(), bson.NewObjectId().Hex(), storage)
suite.NotNil(storageClass)

}

func (suite *StorageTestSuite) TestValidateBeforeCreating() {
Expand Down Expand Up @@ -124,6 +131,36 @@ func (suite *StorageTestSuite) TestDeleteStorage() {
suite.Error(err)
}

func (suite *StorageTestSuite) TestDeleteStorageFail() {
storage := &entity.Storage{
ID: bson.NewObjectId(),
Type: entity.NFSStorageType,
NFS: &entity.NFSStorage{
IP: "1.2.3.4",
PATH: "/exports",
},
Name: namesgenerator.GetRandomName(0),
}

volume := entity.Volume{
ID: bson.NewObjectId(),
StorageName: storage.Name,
}

session := suite.sp.Mongo.NewSession()
defer session.Close()

session.Insert(entity.VolumeCollectionName, volume)
defer session.Remove(entity.VolumeCollectionName, "_id", volume.ID)

sp, err := GetStorageProvider(storage)
suite.NoError(err)
sp = sp.(NFSStorageProvider)

err = sp.DeleteStorage(suite.sp, storage)
suite.Error(err)
}

func (suite *StorageTestSuite) TestValidateBeforeCreatingFail() {
testCases := []struct {
caseName string
Expand Down

0 comments on commit 92d1323

Please sign in to comment.