From e55515350e61ca47ea3ca2d1fff6a9dac3ab3b0b Mon Sep 17 00:00:00 2001 From: ThisIsClark Date: Wed, 21 Aug 2019 15:49:44 +0800 Subject: [PATCH 1/2] Do not allow two profiles have same name --- install/devsds/lib/opensds.sh | 4 ++-- pkg/db/drivers/etcd/etcd.go | 26 +++++++++++++++++++++----- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/install/devsds/lib/opensds.sh b/install/devsds/lib/opensds.sh index 9e552a1f8..b48ac9ca5 100755 --- a/install/devsds/lib/opensds.sh +++ b/install/devsds/lib/opensds.sh @@ -83,8 +83,8 @@ osds::opensds::install(){ export OPENSDS_AUTH_STRATEGY=$OPENSDS_AUTH_STRATEGY export OPENSDS_ENDPOINT=http://localhost:50040 - build/out/bin/osdsctl profile create '{"name": "default", "description": "default policy", "storageType": "block"}' - build/out/bin/osdsctl profile create '{"name": "default", "description": "default policy", "storageType": "file", "provisioningProperties":{"ioConnectivity": {"accessProtocol": "NFS"},"DataStorage":{"StorageAccessCapability":["Read","Write","Execute"]}}}' + build/out/bin/osdsctl profile create '{"name": "default_block", "description": "default policy", "storageType": "block"}' + build/out/bin/osdsctl profile create '{"name": "default_file", "description": "default policy", "storageType": "file", "provisioningProperties":{"ioConnectivity": {"accessProtocol": "NFS"},"DataStorage":{"StorageAccessCapability":["Read","Write","Execute"]}}}' if [ $? == 0 ]; then osds::echo_summary devsds installed successfully !! diff --git a/pkg/db/drivers/etcd/etcd.go b/pkg/db/drivers/etcd/etcd.go index e372ae18f..ca4c78122 100644 --- a/pkg/db/drivers/etcd/etcd.go +++ b/pkg/db/drivers/etcd/etcd.go @@ -1434,8 +1434,8 @@ func (c *Client) CreateProfile(ctx *c.Context, prf *model.ProfileSpec) (*model.P prf.CreatedAt = time.Now().Format(constants.TimeFormat) } - // profile name must be unique with the same storage type. - if _, err := c.getProfileByName(ctx, prf.Name, prf.StorageType); err == nil { + // profile name must be unique. + if _, err := c.getProfileByName(ctx, prf.Name); err == nil { return nil, fmt.Errorf("the profile name '%s' already exists", prf.Name) } @@ -1476,7 +1476,23 @@ func (c *Client) GetProfile(ctx *c.Context, prfID string) (*model.ProfileSpec, e return prf, nil } -func (c *Client) getProfileByName(ctx *c.Context, name, storageType string) (*model.ProfileSpec, error) { +func (c *Client) getProfileByName(ctx *c.Context, name string) (*model.ProfileSpec, error) { + profiles, err := c.ListProfiles(ctx) + if err != nil { + log.Error("List profile failed: ", err) + return nil, err + } + + for _, profile := range profiles { + if profile.Name == name { + return profile, nil + } + } + var msg = fmt.Sprintf("can't find profile(name: %s)", name) + return nil, model.NewNotFoundError(msg) +} + +func (c *Client) getProfileByNameAndType(ctx *c.Context, name, storageType string) (*model.ProfileSpec, error) { profiles, err := c.ListProfiles(ctx) if err != nil { log.Error("List profile failed: ", err) @@ -1494,12 +1510,12 @@ func (c *Client) getProfileByName(ctx *c.Context, name, storageType string) (*mo // GetDefaultProfile func (c *Client) GetDefaultProfile(ctx *c.Context) (*model.ProfileSpec, error) { - return c.getProfileByName(ctx, "default", "block") + return c.getProfileByNameAndType(ctx, "default", "block") } // GetDefaultProfileFileShare func (c *Client) GetDefaultProfileFileShare(ctx *c.Context) (*model.ProfileSpec, error) { - return c.getProfileByName(ctx, "default", "file") + return c.getProfileByNameAndType(ctx, "default", "file") } // ListProfiles From 4df90cb0e5af50d6daacb32b588919bdb10a89ad Mon Sep 17 00:00:00 2001 From: ThisIsClark Date: Thu, 22 Aug 2019 17:02:37 +0800 Subject: [PATCH 2/2] Use const string instead of magic string --- pkg/db/drivers/etcd/etcd.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/pkg/db/drivers/etcd/etcd.go b/pkg/db/drivers/etcd/etcd.go index ca4c78122..1a4833e62 100644 --- a/pkg/db/drivers/etcd/etcd.go +++ b/pkg/db/drivers/etcd/etcd.go @@ -40,10 +40,14 @@ import ( ) const ( - defaultLimit = 50 - defaultOffset = 0 - defaultSortDir = "desc" - defaultSortKey = "ID" + defaultLimit = 50 + defaultOffset = 0 + defaultSortDir = "desc" + defaultSortKey = "ID" + defaultBlockProfileName = "default_block" + defaultFileProfileName = "default_file" + typeBlock = "block" + typeFile = "file" ) var validKey = []string{"limit", "offset", "sortDir", "sortKey"} @@ -1510,12 +1514,12 @@ func (c *Client) getProfileByNameAndType(ctx *c.Context, name, storageType strin // GetDefaultProfile func (c *Client) GetDefaultProfile(ctx *c.Context) (*model.ProfileSpec, error) { - return c.getProfileByNameAndType(ctx, "default", "block") + return c.getProfileByNameAndType(ctx, defaultBlockProfileName, typeBlock) } // GetDefaultProfileFileShare func (c *Client) GetDefaultProfileFileShare(ctx *c.Context) (*model.ProfileSpec, error) { - return c.getProfileByNameAndType(ctx, "default", "file") + return c.getProfileByNameAndType(ctx, defaultFileProfileName, typeFile) } // ListProfiles