Skip to content

Commit 44773a6

Browse files
authored
Merge pull request #345 from vatesfr/fix/issue-338-ignoring-destroy_cloud_config_vdi_after_boot
fix issue when ignoring destroy_cloud_config_vdi_after_boot
2 parents 3de56c4 + 8aee390 commit 44773a6

File tree

2 files changed

+84
-2
lines changed

2 files changed

+84
-2
lines changed

xoa/resource_xenorchestra_vm.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,10 @@ func resourceVm() *schema.Resource {
7474
func vmDestroyCloudConfigCustomizeDiff(ctx context.Context, diff *schema.ResourceDiff, v interface{}) error {
7575
destroyCloudConfig := diff.Get("destroy_cloud_config_vdi_after_boot").(bool)
7676
powerState := diff.Get("power_state").(string)
77+
powerStateChanged := diff.HasChange("power_state")
7778

78-
if destroyCloudConfig && powerState != client.RunningPowerState {
79-
return errors.New(fmt.Sprintf("power_state must be `%s` when destroy_cloud_config_vdi_after_boot set to `true`", client.RunningPowerState))
79+
if powerStateChanged && destroyCloudConfig && powerState != client.RunningPowerState {
80+
return fmt.Errorf("power_state must be `%s` when destroy_cloud_config_vdi_after_boot set to `true`", client.RunningPowerState)
8081
}
8182
return nil
8283
}

xoa/resource_xenorchestra_vm_test.go

+81
Original file line numberDiff line numberDiff line change
@@ -358,6 +358,51 @@ func TestAccXenorchestraVm_destroyCloudConfigRequiresRunningVm(t *testing.T) {
358358
})
359359
}
360360

361+
func TestAccXenorchestraVm_destroyCloudConfigRequiresRunningVmExceptIgnoring(t *testing.T) {
362+
resourceName := "xenorchestra_vm.bar"
363+
vmName := fmt.Sprintf("%s - %s", accTestPrefix, t.Name())
364+
stopVm := func() {
365+
c, err := client.NewClient(client.GetConfigFromEnv())
366+
if err != nil {
367+
t.Fatalf("failed to create client with error: %v", err)
368+
}
369+
370+
vm, err := c.GetVm(client.Vm{
371+
NameLabel: vmName,
372+
})
373+
374+
if err != nil {
375+
t.Fatalf("failed to find VM with error: %v", err)
376+
}
377+
378+
err = c.HaltVm(vm.Id)
379+
if err != nil {
380+
t.Fatalf("failed to delete VM with error: %v", err)
381+
}
382+
}
383+
resource.ParallelTest(t, resource.TestCase{
384+
PreCheck: func() { testAccPreCheck(t) },
385+
Providers: testAccProviders,
386+
CheckDestroy: testAccCheckXenorchestraVmDestroy,
387+
Steps: []resource.TestStep{
388+
{
389+
Config: testAccVmConfigWithDestroyCloudConfigAfterBootIgnoringChanges(vmName, client.RunningPowerState),
390+
Check: resource.ComposeAggregateTestCheckFunc(
391+
testAccVmExists(resourceName),
392+
resource.TestCheckResourceAttrSet(resourceName, "id"),
393+
resource.TestCheckResourceAttr(resourceName, "power_state", client.RunningPowerState),
394+
resource.TestCheckResourceAttr(resourceName, "destroy_cloud_config_vdi_after_boot", "true")),
395+
},
396+
{
397+
PreConfig: stopVm,
398+
Config: testAccVmConfigWithDestroyCloudConfigAfterBootIgnoringChanges(vmName, client.RunningPowerState),
399+
ExpectNonEmptyPlan: false,
400+
PlanOnly: true,
401+
},
402+
},
403+
})
404+
}
405+
361406
func TestAccXenorchestraVm_createWithPowerStateChanges(t *testing.T) {
362407
resourceName := "xenorchestra_vm.bar"
363408
vmName := fmt.Sprintf("%s - %s", accTestPrefix, t.Name())
@@ -2231,6 +2276,42 @@ resource "xenorchestra_vm" "bar" {
22312276
`, accDefaultNetwork.NameLabel, accTestPool.Id, vmName, powerState, accDefaultSr.Id)
22322277
}
22332278

2279+
func testAccVmConfigWithDestroyCloudConfigAfterBootIgnoringChanges(vmName string, powerState string) string {
2280+
return testAccCloudConfigConfig(fmt.Sprintf("vm-template-%s", vmName), "template") + testAccTemplateConfig() + fmt.Sprintf(`
2281+
data "xenorchestra_network" "network" {
2282+
name_label = "%s"
2283+
pool_id = "%s"
2284+
}
2285+
2286+
resource "xenorchestra_vm" "bar" {
2287+
memory_max = 4295000000
2288+
cpus = 1
2289+
cloud_config = xenorchestra_cloud_config.bar.template
2290+
name_label = "%s"
2291+
name_description = "description"
2292+
template = data.xenorchestra_template.template.id
2293+
destroy_cloud_config_vdi_after_boot = true
2294+
network {
2295+
network_id = data.xenorchestra_network.network.id
2296+
expected_ip_cidr = "0.0.0.0/0"
2297+
}
2298+
power_state = "%s"
2299+
2300+
disk {
2301+
sr_id = "%s"
2302+
name_label = "disk 1"
2303+
size = 10001317888
2304+
}
2305+
2306+
lifecycle {
2307+
ignore_changes = [
2308+
power_state
2309+
]
2310+
}
2311+
}
2312+
`, accDefaultNetwork.NameLabel, accTestPool.Id, vmName, powerState, accDefaultSr.Id)
2313+
}
2314+
22342315
func testAccVmConfigPXEBoot(vmName string) string {
22352316
return testAccCloudConfigConfig(fmt.Sprintf("vm-template-%s", vmName), "template") + testAccNonDefaultTemplateConfig(disklessTestTemplate.NameLabel) + fmt.Sprintf(`
22362317
data "xenorchestra_network" "network" {

0 commit comments

Comments
 (0)