From bddf33140a590c4c3d49c96c7be86344891cc43e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Fri, 8 Mar 2019 12:39:47 +0800 Subject: [PATCH] =?UTF-8?q?=E9=81=BF=E5=85=8D=E5=88=9B=E5=BB=BAflavor?= =?UTF-8?q?=E6=97=B6=E9=87=8D=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/util/openstack/flavor.go | 26 +++++++++++++++----------- pkg/util/openstack/shell/flavor.go | 11 +++++++++++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/pkg/util/openstack/flavor.go b/pkg/util/openstack/flavor.go index 8835499aba..e889f2b0bf 100644 --- a/pkg/util/openstack/flavor.go +++ b/pkg/util/openstack/flavor.go @@ -4,8 +4,8 @@ import ( "fmt" "yunion.io/x/jsonutils" - "yunion.io/x/onecloud/pkg/cloudprovider" "yunion.io/x/onecloud/pkg/compute/models" + "yunion.io/x/pkg/utils" ) type SFlavor struct { @@ -39,17 +39,22 @@ func (region *SRegion) GetFlavor(flavorId string) (*SFlavor, error) { return flavor, resp.Unmarshal(flavor, "flavor") } +func (region *SRegion) SyncFlavor(name string, cpu, memoryMb, diskGB int) (string, error) { + return region.syncFlavor(name, cpu, memoryMb, diskGB) +} + func (region *SRegion) syncFlavor(name string, cpu, memoryMb, diskGB int) (string, error) { flavors, err := region.GetFlavors() if err != nil { return "", err } - if len(name) > 0 { - for _, flavor := range flavors { - if flavor.GetName() == name { - return flavor.ID, nil - } + flavorNames := []string{} + for _, flavor := range flavors { + flavorName := flavor.GetName() + if len(name) > 0 && flavorName == name { + return flavor.ID, nil } + flavorNames = append(flavorNames, flavorName) } if cpu == 0 && memoryMb == 0 { @@ -79,11 +84,10 @@ func (region *SRegion) syncFlavor(name string, cpu, memoryMb, diskGB int) (strin } } for i := 0; i < 10; i++ { - if _, err := region.GetFlavor(fmt.Sprintf("m%d.%s", i, suffix)); err != nil { - if err == cloudprovider.ErrNotFound { - name = fmt.Sprintf("m%d.%s", i, suffix) - break - } + flavorName := fmt.Sprintf("m%d.%s", i, suffix) + if !utils.IsInStringArray(flavorName, flavorNames) { + name = flavorName + break } } if len(name) == 0 { diff --git a/pkg/util/openstack/shell/flavor.go b/pkg/util/openstack/shell/flavor.go index dc83807c5f..15e0da2da1 100644 --- a/pkg/util/openstack/shell/flavor.go +++ b/pkg/util/openstack/shell/flavor.go @@ -1,6 +1,8 @@ package shell import ( + "fmt" + "yunion.io/x/onecloud/pkg/util/openstack" "yunion.io/x/onecloud/pkg/util/shellutils" ) @@ -50,4 +52,13 @@ func init() { return nil }) + shellutils.R(&FlavorCreateOptions{}, "flavor-sync", "Sync flavor", func(cli *openstack.SRegion, args *FlavorCreateOptions) error { + flavorId, err := cli.SyncFlavor(args.NAME, args.CPU, args.MEMORY_MB, args.DISK) + if err != nil { + return err + } + fmt.Println(flavorId) + return nil + }) + }