From df6c2228aaaed00f16effd70232b56e7c909208e Mon Sep 17 00:00:00 2001 From: Dom Del Nano Date: Mon, 30 Oct 2023 21:21:45 -0700 Subject: [PATCH] Remove hardcoding of VM power state strings and remove bogus values --- client/client.go | 2 +- client/vm.go | 31 ++++++++++++++++------------ xoa/internal/state/migrate.go | 3 ++- xoa/resource_xenorchestra_vm.go | 16 +++++++------- xoa/resource_xenorchestra_vm_test.go | 4 ++-- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/client/client.go b/client/client.go index 442e5015..1468bb03 100644 --- a/client/client.go +++ b/client/client.go @@ -190,7 +190,7 @@ func GetConfigFromEnv() Config { if err == nil { retryMaxTime = duration } else { - fmt.Println("[ERROR] failed to set retry mode, disabling retries\n") + fmt.Println("[ERROR] failed to set retry mode, disabling retries") } } return Config{ diff --git a/client/vm.go b/client/vm.go index db047f22..fa588a25 100644 --- a/client/vm.go +++ b/client/vm.go @@ -17,6 +17,13 @@ type allObjectResponse struct { Objects map[string]Vm `json:"-"` } +const ( + HaltedPowerState string = "Halted" + PausedPowerState string = "Paused" + RunningPowerState string = "Running" + SuspendedPowerState string = "Suspended" +) + type CPUs struct { Number int `json:"number"` Max int `json:"max"` @@ -213,7 +220,7 @@ func (c *Client) CreateVm(vmReq Vm, createTime time.Duration) (*Vm, error) { } bootAfterCreate := true - if vmReq.PowerState != "Running" { + if vmReq.PowerState != RunningPowerState { bootAfterCreate = false } @@ -430,8 +437,8 @@ func (c *Client) StartVm(id string) error { return c.waitForVmState( id, StateChangeConf{ - Pending: []string{"Halted", "Stopped"}, - Target: []string{"Running"}, + Pending: []string{HaltedPowerState}, + Target: []string{RunningPowerState}, Timeout: 2 * time.Minute, }, ) @@ -459,8 +466,8 @@ func (c *Client) HaltVm(id string) error { return c.waitForVmState( id, StateChangeConf{ - Pending: []string{"Running", "Stopped"}, - Target: []string{"Halted"}, + Pending: []string{RunningPowerState}, + Target: []string{HaltedPowerState}, Timeout: 2 * time.Minute, }, ) @@ -554,17 +561,15 @@ func (c *Client) waitForVmState(id string, stateConf StateChangeConf) error { return err } -func (c *Client) waitForModifyVm(id, desiredPowerState string, waitForIp bool, timeout time.Duration) error { +func (c *Client) waitForModifyVm(id string, desiredPowerState string, waitForIp bool, timeout time.Duration) error { if !waitForIp { var pending []string target := desiredPowerState switch desiredPowerState { - case "Running": - pending = []string{"Halted", "Stopped"} - case "Stopped": - pending = []string{"Running", "Halted"} - case "Halted": - pending = []string{"Stopped", "Running"} + case RunningPowerState: + pending = []string{HaltedPowerState} + case HaltedPowerState: + pending = []string{RunningPowerState} default: return errors.New(fmt.Sprintf("Invalid VM power state requested: %s\n", desiredPowerState)) } @@ -594,7 +599,7 @@ func (c *Client) waitForModifyVm(id, desiredPowerState string, waitForIp bool, t } l := len(vm.Addresses) - if l == 0 || vm.PowerState != "Running" { + if l == 0 || vm.PowerState != RunningPowerState { return vm, "Waiting", nil } diff --git a/xoa/internal/state/migrate.go b/xoa/internal/state/migrate.go index 54a0ece2..9a14d33d 100644 --- a/xoa/internal/state/migrate.go +++ b/xoa/internal/state/migrate.go @@ -6,6 +6,7 @@ import ( "log" "net" + "github.com/ddelnano/terraform-provider-xenorchestra/client" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema" "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) @@ -355,7 +356,7 @@ func suppressAttachedDiffWhenHalted(k, old, new string, d *schema.ResourceData) powerState := d.Get("power_state").(string) suppress = true - if powerState == "Running" { + if powerState == client.RunningPowerState { suppress = false } log.Printf("[DEBUG] VM '%s' attribute has transitioned from '%s' to '%s' when PowerState '%s'. Suppress diff: %t", k, old, new, powerState, suppress) diff --git a/xoa/resource_xenorchestra_vm.go b/xoa/resource_xenorchestra_vm.go index e0de0bfc..88c0e548 100644 --- a/xoa/resource_xenorchestra_vm.go +++ b/xoa/resource_xenorchestra_vm.go @@ -35,10 +35,10 @@ var validFirmware = []string{ } var validPowerState = []string{ - "Running", - "Halted", - "Paused", - "Suspended", + client.HaltedPowerState, + client.PausedPowerState, + client.RunningPowerState, + client.SuspendedPowerState, } var validInstallationMethods = []string{ @@ -118,7 +118,7 @@ func resourceVmSchema() map[string]*schema.Schema { Type: schema.TypeString, ValidateFunc: validation.StringInSlice(validPowerState, false), Optional: true, - Default: "Running", + Default: client.RunningPowerState, }, "installation_method": &schema.Schema{ Type: schema.TypeString, @@ -909,13 +909,13 @@ func resourceVmUpdate(d *schema.ResourceData, m interface{}) error { log.Printf("[DEBUG] powerStateChanged=%t newPowerState=%s\n", powerStateChanged, newPowerState) if haltForUpdates || powerStateChanged { switch newPowerState { - case "Running": + case client.RunningPowerState: err := c.StartVm(vmReq.Id) if err != nil { return err } - case "Halted": + case client.HaltedPowerState: if haltPerformed { // Nothing here since we are already halted } else { @@ -1375,7 +1375,7 @@ func suppressAttachedDiffWhenHalted(k, old, new string, d *schema.ResourceData) log.Printf("[DEBUG] Power state has been changed\n") } - if !ok && powerState == "Running" { + if !ok && powerState == client.RunningPowerState { suppress = false } log.Printf("[DEBUG] VM '%s' attribute has transitioned from '%s' to '%s' when PowerState '%s'. Suppress diff: %t", k, old, new, powerState, suppress) diff --git a/xoa/resource_xenorchestra_vm_test.go b/xoa/resource_xenorchestra_vm_test.go index 25f10157..b646abeb 100644 --- a/xoa/resource_xenorchestra_vm_test.go +++ b/xoa/resource_xenorchestra_vm_test.go @@ -343,8 +343,8 @@ func TestAccXenorchestraVm_createWithShorterResourceTimeout(t *testing.T) { func TestAccXenorchestraVm_createWithPowerStateChanges(t *testing.T) { resourceName := "xenorchestra_vm.bar" vmName := fmt.Sprintf("%s - %s", accTestPrefix, t.Name()) - runningPowerState := "Running" - stoppedPowerState := "Halted" + runningPowerState := client.RunningPowerState + stoppedPowerState := client.HaltedPowerState resource.ParallelTest(t, resource.TestCase{ PreCheck: func() { testAccPreCheck(t) }, Providers: testAccProviders,