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 1/2] =?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 + }) + } From cc6aff8743e5d0bfc7223e3c9c25b04bcb2f4917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Sat, 9 Mar 2019 19:11:10 +0800 Subject: [PATCH 2/2] =?UTF-8?q?openstack:=20=E4=B8=8D=E5=88=9B=E5=BB=BAfla?= =?UTF-8?q?vor,=E4=BB=85=E6=9F=A5=E6=89=BE=E5=90=88=E9=80=82=E7=9A=84?= =?UTF-8?q?=E5=A5=97=E9=A4=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/util/openstack/flavor.go | 48 ++++++------------------------------ 1 file changed, 7 insertions(+), 41 deletions(-) diff --git a/pkg/util/openstack/flavor.go b/pkg/util/openstack/flavor.go index e889f2b0bf..9c516b8fb4 100644 --- a/pkg/util/openstack/flavor.go +++ b/pkg/util/openstack/flavor.go @@ -5,7 +5,6 @@ import ( "yunion.io/x/jsonutils" "yunion.io/x/onecloud/pkg/compute/models" - "yunion.io/x/pkg/utils" ) type SFlavor struct { @@ -48,13 +47,13 @@ func (region *SRegion) syncFlavor(name string, cpu, memoryMb, diskGB int) (strin if err != nil { return "", err } - flavorNames := []string{} - for _, flavor := range flavors { - flavorName := flavor.GetName() - if len(name) > 0 && flavorName == name { - return flavor.ID, nil + if len(name) > 0 { + for _, flavor := range flavors { + flavorName := flavor.GetName() + if flavorName == name { + return flavor.ID, nil + } } - flavorNames = append(flavorNames, flavorName) } if cpu == 0 && memoryMb == 0 { @@ -66,40 +65,7 @@ func (region *SRegion) syncFlavor(name string, cpu, memoryMb, diskGB int) (strin return flavor.ID, nil } } - - if len(name) == 0 { - suffix := "" - for i := 0; i < 10; i++ { - switch cpu { - case 1: - suffix = "tiny" - case 2, 3: - suffix = "small" - case 4, 6: - suffix = "medium" - case 8: - suffix = "large" - default: - suffix = "xlarge" - } - } - for i := 0; i < 10; i++ { - flavorName := fmt.Sprintf("m%d.%s", i, suffix) - if !utils.IsInStringArray(flavorName, flavorNames) { - name = flavorName - break - } - } - if len(name) == 0 { - return "", fmt.Errorf("failed to find uniq flavor name for cpu %d memory %d", cpu, memoryMb) - } - } - - flavor, err := region.CreateFlavor(name, cpu, memoryMb, diskGB) - if err != nil { - return "", err - } - return flavor.ID, nil + return "", fmt.Errorf("failed to find right flavor(name: %s cpu: %d memory: %d)", name, cpu, memoryMb) } func (region *SRegion) CreateFlavor(name string, cpu int, memoryMb int, diskGB int) (*SFlavor, error) {