From c2301c6a199ef92e855c33d1ec7df1dc0f377622 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Thu, 8 Oct 2020 23:52:25 -0400 Subject: [PATCH 01/11] incorporate resizePlan method for cloud server resize reboot expectation logic --- instance/cloudServerResize.go | 135 +++++++++------------------------- 1 file changed, 34 insertions(+), 101 deletions(-) diff --git a/instance/cloudServerResize.go b/instance/cloudServerResize.go index 1b3d91a..5bf93e1 100644 --- a/instance/cloudServerResize.go +++ b/instance/cloudServerResize.go @@ -20,6 +20,8 @@ import ( "errors" "fmt" + "github.com/spf13/cast" + "github.com/liquidweb/liquidweb-cli/types/api" "github.com/liquidweb/liquidweb-cli/validate" ) @@ -73,6 +75,10 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } + resizePlanArgs := map[string]interface{}{ + "uniq_id": params.UniqId, + } + resizeArgs := map[string]interface{}{ "uniq_id": params.UniqId, "skip_fs_resize": skipFsResizeInt, @@ -89,10 +95,8 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } - var ( - liveResize bool - twoRebootResize bool - ) + var privateParentUniqId string + if params.PrivateParent == "" { // non private parent resize if params.Memory != -1 || params.DiskSpace != -1 || params.Vcpu != -1 { @@ -107,27 +111,8 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s } validateFields[params.ConfigId] = "PositiveInt64" - if err = validate.Validate(validateFields); err != nil { - return - } - - // determine reboot expectation. - // resize up full: 2 reboot - // resize up quick (skip-fs-resize) 1 reboot - // resize down: 1 reboot - var configDetails apiTypes.CloudConfigDetails - if err = self.CallLwApiInto("bleed/storm/config/details", - map[string]interface{}{"id": params.ConfigId}, &configDetails); err != nil { - return - } - if configDetails.Disk >= cloudServerDetails.DiskSpace { - // disk space going up.. - if !params.SkipFsResize { - // .. and not skipping fs resize, will be 2 reboots. - twoRebootResize = true - } - } + resizePlanArgs["config_id"] = params.ConfigId } else { // private parent resize specific logic if params.Memory == -1 && params.DiskSpace == -1 && params.Vcpu == -1 { @@ -135,43 +120,11 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } - var privateParentUniqId string privateParentUniqId, err = self.DerivePrivateParentUniqId(params.PrivateParent) if err != nil { return } - var ( - diskspaceChanging bool - vcpuChanging bool - memoryChanging bool - memoryCanLive bool - vcpuCanLive bool - ) - // record what resources are changing - if params.DiskSpace != -1 { - if cloudServerDetails.DiskSpace != params.DiskSpace { - diskspaceChanging = true - } - } - if params.Vcpu != -1 { - if cloudServerDetails.Vcpu != params.Vcpu { - vcpuChanging = true - } - } - if params.Memory != -1 { - if cloudServerDetails.Memory != params.Memory { - memoryChanging = true - } - } - // allow resizes to a private parent even if its old non private parent config had exact same specs - if cloudServerDetails.ConfigId == 0 && cloudServerDetails.PrivateParent != privateParentUniqId { - if !diskspaceChanging && !vcpuChanging && !memoryChanging { - err = errors.New("private parent resize, but passed diskspace, memory, vcpu values match existing values") - return - } - } - resizeArgs["newsize"] = 0 // 0 indicates private parent resize resizeArgs["parent"] = privateParentUniqId // uniq_id of the private parent validateFields[privateParentUniqId] = "UniqId" @@ -194,64 +147,44 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s validateFields[params.Vcpu] = "PositiveInt64" } - // determine if this will be a live resize - if _, exists := resizeArgs["memory"]; exists { - if params.Memory >= cloudServerDetails.Memory { - // asking for more RAM - memoryCanLive = true - } - } - if _, exists := resizeArgs["vcpu"]; exists { - if params.Vcpu >= cloudServerDetails.Vcpu { - // asking for more vcpu - vcpuCanLive = true - } - } - - if params.Memory != -1 && params.Vcpu != -1 { - if vcpuCanLive && memoryCanLive { - liveResize = true - } - } else if memoryCanLive { - liveResize = true - } else if vcpuCanLive { - liveResize = true - } - - // if diskspace allocation changes its not currently ever done live regardless of memory, vcpu - if params.DiskSpace != -1 { - if resizeArgs["diskspace"] != cloudServerDetails.DiskSpace { - liveResize = false - } - } + resizePlanArgs["config_id"] = 0 + resizePlanArgs["private_parent"] = privateParentUniqId + resizePlanArgs["memory"] = resizeArgs["memory"] + resizePlanArgs["disk"] = resizeArgs["diskspace"] + resizePlanArgs["vcpu"] = resizeArgs["vcpu"] } if err = validate.Validate(validateFields); err != nil { return } + var expectationInter interface{} + if expectationInter, err = self.LwCliApiClient.Call("bleed/storm/server/resizePlan", resizePlanArgs); err != nil { + return + } + expectation, ok := expectationInter.(map[string]interface{}) + if !ok { + err = errors.New("bleed/storm/server/resizePlan returned an unexpected structure") + return + } + + memoryDifference := cast.ToInt(expectation["memoryDifference"]) + diskDifference := cast.ToInt(expectation["diskDifference"]) + vcpuDifference := cast.ToInt(expectation["vcpuDifference"]) + if _, err = self.LwCliApiClient.Call("bleed/server/resize", resizeArgs); err != nil { return } var b bytes.Buffer - b.WriteString(fmt.Sprintf("server resized started! You can check progress with 'cloud server status --uniq-id %s'\n\n", params.UniqId)) - if liveResize { - b.WriteString(fmt.Sprintf("\nthis resize will be performed live without downtime.\n")) - } else { - rebootExpectation := "one reboot" - if twoRebootResize { - rebootExpectation = "two reboots" - } - b.WriteString(fmt.Sprintf( - "\nexpect %s during this process. Your server will be online as the disk is copied to the destination.\n", - rebootExpectation)) + b.WriteString(fmt.Sprintf("Server resized started! You can check progress with 'cloud server status --uniq-id %s'\n\n", params.UniqId)) + b.WriteString(fmt.Sprintf("Resource changes: Memory [%d] Disk [%d] Vcpu [%d]\n", memoryDifference, diskDifference, vcpuDifference)) - if twoRebootResize { - b.WriteString(fmt.Sprintf( - "\tTIP: Avoid the second reboot by passing --skip-fs-resize. See usage for additional details.\n")) - } + if cast.ToBool(expectation["rebootRequired"]) { + b.WriteString("\nExpect a reboot during this resize.\n") + } else { + b.WriteString("\nThis resize will be performed live without downtime.\n") } result = b.String() From 8805682db150d8af35ead1b75751f2cb38ad49d2 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 01:03:09 -0400 Subject: [PATCH 02/11] add 'cloud server resize-expectation' --- cmd/cloudServerResizeExpectation.go | 172 ++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 cmd/cloudServerResizeExpectation.go diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go new file mode 100644 index 0000000..95c2d83 --- /dev/null +++ b/cmd/cloudServerResizeExpectation.go @@ -0,0 +1,172 @@ +/* +Copyright © LiquidWeb + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ +package cmd + +import ( + "errors" + "fmt" + + "github.com/spf13/cast" + "github.com/spf13/cobra" + + "github.com/liquidweb/liquidweb-cli/types/api" + "github.com/liquidweb/liquidweb-cli/utils" + "github.com/liquidweb/liquidweb-cli/validate" +) + +var cloudServerResizeExpectationCmd = &cobra.Command{ + Use: "resize-expectation", + Short: "Determine if a Cloud Server can be resized without downtime", + Long: `This command can be used to determine if a Cloud Server can be resized to the requested +config-id without downtime. + +Depending on inventory and desired config-id (configuration) the resize could either +require a reboot to complete, or be performed entirely live. The intention of this +command is to provide the user with a sane expectation ahead of making the resize +request. + +If there is no inventory available, an exception will be raised. + +Its important to note, this command will *not* make any changes to your Cloud Server. +This command is purely for information gathering. +`, + Run: func(cmd *cobra.Command, args []string) { + uniqIdFlag, _ := cmd.Flags().GetString("uniq-id") + privateParentFlag, _ := cmd.Flags().GetString("private-parent") + diskFlag, _ := cmd.Flags().GetInt64("disk") + memoryFlag, _ := cmd.Flags().GetInt64("memory") + vcpuFlag, _ := cmd.Flags().GetInt64("vcpu") + configIdFlag, _ := cmd.Flags().GetInt64("config-id") + + validateFields := map[interface{}]interface{}{ + uniqIdFlag: "UniqId", + } + + if err := validate.Validate(validateFields); err != nil { + lwCliInst.Die(err) + } + + if privateParentFlag != "" && configIdFlag != -1 { + lwCliInst.Die(errors.New("cant pass both --config-id and --private-parent flags")) + } + if privateParentFlag == "" && configIdFlag == -1 { + lwCliInst.Die(errors.New("must pass --config-id or --private-parent")) + } + + apiArgs := map[string]interface{}{ + "uniq_id": uniqIdFlag, + "config_id": configIdFlag, + } + + // if private parent, add args + if privateParentFlag != "" { + if memoryFlag <= 0 && diskFlag <= 0 && vcpuFlag <= 0 { + lwCliInst.Die(errors.New("when --private-parent , at least one of --memory --disk --vcpu are required")) + } + + privateParentUniqId, err := lwCliInst.DerivePrivateParentUniqId(privateParentFlag) + if err != nil { + lwCliInst.Die(err) + } + + var cloudServerDetails apiTypes.CloudServerDetails + if err = lwCliInst.CallLwApiInto( + "bleed/storm/server/details", + map[string]interface{}{ + "uniq_id": uniqIdFlag, + }, &cloudServerDetails); err != nil { + lwCliInst.Die(err) + } + + apiArgs["config_id"] = 0 + apiArgs["private_parent"] = privateParentUniqId + apiArgs["disk"] = cloudServerDetails.DiskSpace + apiArgs["memory"] = cloudServerDetails.Memory + apiArgs["vcpu"] = cloudServerDetails.Vcpu + + if diskFlag > 0 { + apiArgs["disk"] = diskFlag + } + if vcpuFlag > 0 { + apiArgs["vcpu"] = vcpuFlag + } + if memoryFlag > 0 { + apiArgs["memory"] = memoryFlag + } + } + + expectationInter, err := lwCliInst.LwCliApiClient.Call("bleed/storm/server/resizePlan", apiArgs) + if err != nil { + lwCliInst.Die(fmt.Errorf("ERROR: %s", err)) + } + expectation, ok := expectationInter.(map[string]interface{}) + if !ok { + lwCliInst.Die(errors.New("returned an unexpected structure")) + } + + memoryDifference := cast.ToInt(expectation["memoryDifference"]) + diskDifference := cast.ToInt(expectation["diskDifference"]) + vcpuDifference := cast.ToInt(expectation["vcpuDifference"]) + + utils.PrintGreen("Configuration is available\n\n") + + fmt.Print("Resource Changes: Disk [") + if diskDifference == 0 { + fmt.Printf("%d] ", diskDifference) + } else if diskDifference >= 0 { + utils.PrintGreen("%d] ", diskDifference) + } else { + utils.PrintRed("%d] ", diskDifference) + } + + fmt.Print("Memory [") + if memoryDifference == 0 { + fmt.Printf("%d] ", memoryDifference) + } else if memoryDifference >= 0 { + utils.PrintGreen("%d] ", memoryDifference) + } else { + utils.PrintRed("%d] ", memoryDifference) + } + + fmt.Print("Vcpu [") + if vcpuDifference == 0 { + fmt.Printf("%d]\n", vcpuDifference) + } else if vcpuDifference >= 0 { + utils.PrintGreen("%d]\n", vcpuDifference) + } else { + utils.PrintRed("%d]\n", vcpuDifference) + } + }, +} + +func init() { + cloudServerCmd.AddCommand(cloudServerResizeExpectationCmd) + + cloudServerResizeExpectationCmd.Flags().String("uniq-id", "", "uniq-id of Cloud Server") + + cloudServerResizeExpectationCmd.Flags().String("private-parent", "", + "name or uniq-id of the Private Parent (see: 'cloud private-parent list')") + cloudServerResizeExpectationCmd.Flags().Int64("disk", -1, "diskspace for the Cloud Server (when private-parent)") + cloudServerResizeExpectationCmd.Flags().Int64("memory", -1, "memory for the Cloud Server (when private-parent)") + cloudServerResizeExpectationCmd.Flags().Int64("vcpu", -1, "vcpus for the Cloud Server (when private-parent)") + + cloudServerResizeExpectationCmd.Flags().Int64("config-id", -1, + "config-id to check availability for (when !private-parent) (see: 'cloud server options --configs')") + + if err := cloudServerResizeExpectationCmd.MarkFlagRequired("uniq-id"); err != nil { + lwCliInst.Die(err) + } +} From 9f64ae155130e2533b72c66db9faf2637f48c0e9 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 01:13:04 -0400 Subject: [PATCH 03/11] add rebootRequired message --- cmd/cloudServerResizeExpectation.go | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index 95c2d83..a4c3085 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -18,6 +18,7 @@ package cmd import ( "errors" "fmt" + "os" "github.com/spf13/cast" "github.com/spf13/cobra" @@ -110,7 +111,9 @@ This command is purely for information gathering. expectationInter, err := lwCliInst.LwCliApiClient.Call("bleed/storm/server/resizePlan", apiArgs) if err != nil { - lwCliInst.Die(fmt.Errorf("ERROR: %s", err)) + utils.PrintRed("Configuration Not Available\n\n") + fmt.Printf("%s\n", err) + os.Exit(1) } expectation, ok := expectationInter.(map[string]interface{}) if !ok { @@ -120,8 +123,9 @@ This command is purely for information gathering. memoryDifference := cast.ToInt(expectation["memoryDifference"]) diskDifference := cast.ToInt(expectation["diskDifference"]) vcpuDifference := cast.ToInt(expectation["vcpuDifference"]) + rebootRequired := cast.ToBool(expectation["rebootRequired"]) - utils.PrintGreen("Configuration is available\n\n") + utils.PrintGreen("Configuration Available\n\n") fmt.Print("Resource Changes: Disk [") if diskDifference == 0 { @@ -149,6 +153,12 @@ This command is purely for information gathering. } else { utils.PrintRed("%d]\n", vcpuDifference) } + + if rebootRequired { + utils.PrintGreen("\nNo reboot required.\n") + } else { + utils.PrintYellow("\nReboot required.\n") + } }, } From c368da8828bcd910be575169099c98917dd27430 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 01:18:35 -0400 Subject: [PATCH 04/11] swap --- cmd/cloudServerResizeExpectation.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index a4c3085..1db1dc4 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -155,9 +155,9 @@ This command is purely for information gathering. } if rebootRequired { - utils.PrintGreen("\nNo reboot required.\n") - } else { utils.PrintYellow("\nReboot required.\n") + } else { + utils.PrintGreen("\nNo reboot required.\n") } }, } From 53d256c4f56995a25a9f3f4ff1029fc3ced26327 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 10:08:34 -0400 Subject: [PATCH 05/11] cast into new CloudServerResizeExpectation type --- cmd/cloudServerResizeExpectation.go | 45 ++++++++++++----------------- instance/cloudServerResize.go | 21 +++++--------- types/api/cloud.go | 23 +++++++++++++++ 3 files changed, 48 insertions(+), 41 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index 1db1dc4..cd72cc8 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -20,7 +20,6 @@ import ( "fmt" "os" - "github.com/spf13/cast" "github.com/spf13/cobra" "github.com/liquidweb/liquidweb-cli/types/api" @@ -109,52 +108,44 @@ This command is purely for information gathering. } } - expectationInter, err := lwCliInst.LwCliApiClient.Call("bleed/storm/server/resizePlan", apiArgs) + var details apiTypes.CloudServerResizeExpectation + err := lwCliInst.CallLwApiInto("bleed/storm/server/resizePlan", apiArgs, &details) if err != nil { utils.PrintRed("Configuration Not Available\n\n") fmt.Printf("%s\n", err) os.Exit(1) } - expectation, ok := expectationInter.(map[string]interface{}) - if !ok { - lwCliInst.Die(errors.New("returned an unexpected structure")) - } - - memoryDifference := cast.ToInt(expectation["memoryDifference"]) - diskDifference := cast.ToInt(expectation["diskDifference"]) - vcpuDifference := cast.ToInt(expectation["vcpuDifference"]) - rebootRequired := cast.ToBool(expectation["rebootRequired"]) utils.PrintGreen("Configuration Available\n\n") fmt.Print("Resource Changes: Disk [") - if diskDifference == 0 { - fmt.Printf("%d] ", diskDifference) - } else if diskDifference >= 0 { - utils.PrintGreen("%d] ", diskDifference) + if details.DiskDifference == 0 { + fmt.Printf("%d] ", details.DiskDifference) + } else if details.DiskDifference >= 0 { + utils.PrintGreen("%d] ", details.DiskDifference) } else { - utils.PrintRed("%d] ", diskDifference) + utils.PrintRed("%d] ", details.DiskDifference) } fmt.Print("Memory [") - if memoryDifference == 0 { - fmt.Printf("%d] ", memoryDifference) - } else if memoryDifference >= 0 { - utils.PrintGreen("%d] ", memoryDifference) + if details.MemoryDifference == 0 { + fmt.Printf("%d] ", details.MemoryDifference) + } else if details.MemoryDifference >= 0 { + utils.PrintGreen("%d] ", details.MemoryDifference) } else { - utils.PrintRed("%d] ", memoryDifference) + utils.PrintRed("%d] ", details.MemoryDifference) } fmt.Print("Vcpu [") - if vcpuDifference == 0 { - fmt.Printf("%d]\n", vcpuDifference) - } else if vcpuDifference >= 0 { - utils.PrintGreen("%d]\n", vcpuDifference) + if details.VcpuDifference == 0 { + fmt.Printf("%d]\n", details.VcpuDifference) + } else if details.VcpuDifference >= 0 { + utils.PrintGreen("%d]\n", details.VcpuDifference) } else { - utils.PrintRed("%d]\n", vcpuDifference) + utils.PrintRed("%d]\n", details.VcpuDifference) } - if rebootRequired { + if details.RebootRequired { utils.PrintYellow("\nReboot required.\n") } else { utils.PrintGreen("\nNo reboot required.\n") diff --git a/instance/cloudServerResize.go b/instance/cloudServerResize.go index 5bf93e1..44d5773 100644 --- a/instance/cloudServerResize.go +++ b/instance/cloudServerResize.go @@ -20,8 +20,6 @@ import ( "errors" "fmt" - "github.com/spf13/cast" - "github.com/liquidweb/liquidweb-cli/types/api" "github.com/liquidweb/liquidweb-cli/validate" ) @@ -158,19 +156,13 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } - var expectationInter interface{} - if expectationInter, err = self.LwCliApiClient.Call("bleed/storm/server/resizePlan", resizePlanArgs); err != nil { - return - } - expectation, ok := expectationInter.(map[string]interface{}) - if !ok { - err = errors.New("bleed/storm/server/resizePlan returned an unexpected structure") + var expectation apiTypes.CloudServerResizeExpectation + if err = self.CallLwApiInto("bleed/storm/server/resizePlan", resizePlanArgs, &expectation); err != nil { + err = fmt.Errorf("Configuration Not Available\n\n%s\n", err) return } - memoryDifference := cast.ToInt(expectation["memoryDifference"]) - diskDifference := cast.ToInt(expectation["diskDifference"]) - vcpuDifference := cast.ToInt(expectation["vcpuDifference"]) + fmt.Printf("expectation: %+v\n", expectation) if _, err = self.LwCliApiClient.Call("bleed/server/resize", resizeArgs); err != nil { return @@ -179,9 +171,10 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s var b bytes.Buffer b.WriteString(fmt.Sprintf("Server resized started! You can check progress with 'cloud server status --uniq-id %s'\n\n", params.UniqId)) - b.WriteString(fmt.Sprintf("Resource changes: Memory [%d] Disk [%d] Vcpu [%d]\n", memoryDifference, diskDifference, vcpuDifference)) + b.WriteString(fmt.Sprintf("Resource changes: Memory [%d] Disk [%d] Vcpu [%d]\n", expectation.MemoryDifference, + expectation.DiskDifference, expectation.VcpuDifference)) - if cast.ToBool(expectation["rebootRequired"]) { + if expectation.RebootRequired { b.WriteString("\nExpect a reboot during this resize.\n") } else { b.WriteString("\nThis resize will be performed live without downtime.\n") diff --git a/types/api/cloud.go b/types/api/cloud.go index 2d219bf..9e24c11 100644 --- a/types/api/cloud.go +++ b/types/api/cloud.go @@ -490,6 +490,29 @@ type CloudBlockStorageVolumeResize struct { UniqId string `json:"uniq_id" mapstructure:"uniq_id"` } +type CloudServerResizeExpectation struct { + DiskDifference int64 `json:"diskDifference" mapstructure:"diskDifference"` + MemoryDifference int64 `json:"memoryDifference" mapstructure:"memoryDifference"` + VcpuDifference int64 `json:"vcpuDifference" mapstructure:"vcpuDifference"` + RebootRequired FlexBool `json:"rebootRequired" mapstructure:"rebootRequired"` +} + +type FlexBool bool + +func (self *FlexBool) UnmarshalJSON(data []byte) error { + str := string(data) + + if str == "1" || str == "true" { + *self = true + } else if str == "0" || str == "false" { + *self = false + } else { + return fmt.Errorf("Boolean unmarshal error: invalid input %s", str) + } + + return nil +} + type CloudObjectStoreDetails struct { Accnt int64 `json:"accnt" mapstructure:"accnt"` Caps []CloudObjectStoreDetailsCapsEntry `json:"caps" mapstructure:"caps"` From 59acb874f70ca62636035d73be9866db928dd20b Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 10:18:06 -0400 Subject: [PATCH 06/11] remove leftover debug --- instance/cloudServerResize.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/instance/cloudServerResize.go b/instance/cloudServerResize.go index 44d5773..315f32a 100644 --- a/instance/cloudServerResize.go +++ b/instance/cloudServerResize.go @@ -162,8 +162,6 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } - fmt.Printf("expectation: %+v\n", expectation) - if _, err = self.LwCliApiClient.Call("bleed/server/resize", resizeArgs); err != nil { return } From 983d93d55f542aceb269c642ccafc4dcd3c377c5 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 10:39:24 -0400 Subject: [PATCH 07/11] dont bleed coloring into the ] --- cmd/cloudServerResizeExpectation.go | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index cd72cc8..dd00a8a 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -122,27 +122,33 @@ This command is purely for information gathering. if details.DiskDifference == 0 { fmt.Printf("%d] ", details.DiskDifference) } else if details.DiskDifference >= 0 { - utils.PrintGreen("%d] ", details.DiskDifference) + utils.PrintGreen("%d", details.DiskDifference) + fmt.Print("] ") } else { - utils.PrintRed("%d] ", details.DiskDifference) + utils.PrintRed("%d", details.DiskDifference) + fmt.Print("] ") } fmt.Print("Memory [") if details.MemoryDifference == 0 { fmt.Printf("%d] ", details.MemoryDifference) } else if details.MemoryDifference >= 0 { - utils.PrintGreen("%d] ", details.MemoryDifference) + utils.PrintGreen("%d", details.MemoryDifference) + fmt.Print("] ") } else { - utils.PrintRed("%d] ", details.MemoryDifference) + utils.PrintRed("%d", details.MemoryDifference) + fmt.Print("] ") } fmt.Print("Vcpu [") if details.VcpuDifference == 0 { fmt.Printf("%d]\n", details.VcpuDifference) } else if details.VcpuDifference >= 0 { - utils.PrintGreen("%d]\n", details.VcpuDifference) + utils.PrintGreen("%d", details.VcpuDifference) + fmt.Print("]\n") } else { - utils.PrintRed("%d]\n", details.VcpuDifference) + utils.PrintRed("%d", details.VcpuDifference) + fmt.Print("]\n") } if details.RebootRequired { From cb861090c6b3b818bf5a6e9e960c69ef3c29387e Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 10:54:46 -0400 Subject: [PATCH 08/11] /disk/diskspace/ to match 'cloud server resize' --- cmd/cloudServerResizeExpectation.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index dd00a8a..695344d 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -46,7 +46,7 @@ This command is purely for information gathering. Run: func(cmd *cobra.Command, args []string) { uniqIdFlag, _ := cmd.Flags().GetString("uniq-id") privateParentFlag, _ := cmd.Flags().GetString("private-parent") - diskFlag, _ := cmd.Flags().GetInt64("disk") + diskFlag, _ := cmd.Flags().GetInt64("diskspace") memoryFlag, _ := cmd.Flags().GetInt64("memory") vcpuFlag, _ := cmd.Flags().GetInt64("vcpu") configIdFlag, _ := cmd.Flags().GetInt64("config-id") @@ -166,7 +166,7 @@ func init() { cloudServerResizeExpectationCmd.Flags().String("private-parent", "", "name or uniq-id of the Private Parent (see: 'cloud private-parent list')") - cloudServerResizeExpectationCmd.Flags().Int64("disk", -1, "diskspace for the Cloud Server (when private-parent)") + cloudServerResizeExpectationCmd.Flags().Int64("diskspace", -1, "diskspace for the Cloud Server (when private-parent)") cloudServerResizeExpectationCmd.Flags().Int64("memory", -1, "memory for the Cloud Server (when private-parent)") cloudServerResizeExpectationCmd.Flags().Int64("vcpu", -1, "vcpus for the Cloud Server (when private-parent)") From 137ae543610b89bbe8c75a3d5324b3caf40840f3 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 10:59:06 -0400 Subject: [PATCH 09/11] move back down, dont need it out of this scope --- instance/cloudServerResize.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/instance/cloudServerResize.go b/instance/cloudServerResize.go index 315f32a..d8bb757 100644 --- a/instance/cloudServerResize.go +++ b/instance/cloudServerResize.go @@ -93,8 +93,6 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } - var privateParentUniqId string - if params.PrivateParent == "" { // non private parent resize if params.Memory != -1 || params.DiskSpace != -1 || params.Vcpu != -1 { @@ -118,6 +116,7 @@ func (self *Client) CloudServerResize(params *CloudServerResizeParams) (result s return } + var privateParentUniqId string privateParentUniqId, err = self.DerivePrivateParentUniqId(params.PrivateParent) if err != nil { return From 2e008c94a32435e969c9110027d6e288f4fadb05 Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Fri, 9 Oct 2020 11:02:01 -0400 Subject: [PATCH 10/11] improve variable name --- cmd/cloudServerResizeExpectation.go | 36 ++++++++++++++--------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index 695344d..c781d8b 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -108,8 +108,8 @@ This command is purely for information gathering. } } - var details apiTypes.CloudServerResizeExpectation - err := lwCliInst.CallLwApiInto("bleed/storm/server/resizePlan", apiArgs, &details) + var expectation apiTypes.CloudServerResizeExpectation + err := lwCliInst.CallLwApiInto("bleed/storm/server/resizePlan", apiArgs, &expectation) if err != nil { utils.PrintRed("Configuration Not Available\n\n") fmt.Printf("%s\n", err) @@ -119,39 +119,39 @@ This command is purely for information gathering. utils.PrintGreen("Configuration Available\n\n") fmt.Print("Resource Changes: Disk [") - if details.DiskDifference == 0 { - fmt.Printf("%d] ", details.DiskDifference) - } else if details.DiskDifference >= 0 { - utils.PrintGreen("%d", details.DiskDifference) + if expectation.DiskDifference == 0 { + fmt.Printf("%d] ", expectation.DiskDifference) + } else if expectation.DiskDifference >= 0 { + utils.PrintGreen("%d", expectation.DiskDifference) fmt.Print("] ") } else { - utils.PrintRed("%d", details.DiskDifference) + utils.PrintRed("%d", expectation.DiskDifference) fmt.Print("] ") } fmt.Print("Memory [") - if details.MemoryDifference == 0 { - fmt.Printf("%d] ", details.MemoryDifference) - } else if details.MemoryDifference >= 0 { - utils.PrintGreen("%d", details.MemoryDifference) + if expectation.MemoryDifference == 0 { + fmt.Printf("%d] ", expectation.MemoryDifference) + } else if expectation.MemoryDifference >= 0 { + utils.PrintGreen("%d", expectation.MemoryDifference) fmt.Print("] ") } else { - utils.PrintRed("%d", details.MemoryDifference) + utils.PrintRed("%d", expectation.MemoryDifference) fmt.Print("] ") } fmt.Print("Vcpu [") - if details.VcpuDifference == 0 { - fmt.Printf("%d]\n", details.VcpuDifference) - } else if details.VcpuDifference >= 0 { - utils.PrintGreen("%d", details.VcpuDifference) + if expectation.VcpuDifference == 0 { + fmt.Printf("%d]\n", expectation.VcpuDifference) + } else if expectation.VcpuDifference >= 0 { + utils.PrintGreen("%d", expectation.VcpuDifference) fmt.Print("]\n") } else { - utils.PrintRed("%d", details.VcpuDifference) + utils.PrintRed("%d", expectation.VcpuDifference) fmt.Print("]\n") } - if details.RebootRequired { + if expectation.RebootRequired { utils.PrintYellow("\nReboot required.\n") } else { utils.PrintGreen("\nNo reboot required.\n") From dc3f4ab6fa4a5c33adbd14696388fa12106860de Mon Sep 17 00:00:00 2001 From: Scott Sullivan Date: Wed, 14 Oct 2020 11:53:34 -0400 Subject: [PATCH 11/11] update return --- cmd/cloudServerResizeExpectation.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmd/cloudServerResizeExpectation.go b/cmd/cloudServerResizeExpectation.go index c781d8b..3b0c5b1 100644 --- a/cmd/cloudServerResizeExpectation.go +++ b/cmd/cloudServerResizeExpectation.go @@ -77,7 +77,7 @@ This command is purely for information gathering. lwCliInst.Die(errors.New("when --private-parent , at least one of --memory --disk --vcpu are required")) } - privateParentUniqId, err := lwCliInst.DerivePrivateParentUniqId(privateParentFlag) + privateParentUniqId, _, err := lwCliInst.DerivePrivateParentUniqId(privateParentFlag) if err != nil { lwCliInst.Die(err) }