@@ -358,6 +358,51 @@ func TestAccXenorchestraVm_destroyCloudConfigRequiresRunningVm(t *testing.T) {
358
358
})
359
359
}
360
360
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
+
361
406
func TestAccXenorchestraVm_createWithPowerStateChanges (t * testing.T ) {
362
407
resourceName := "xenorchestra_vm.bar"
363
408
vmName := fmt .Sprintf ("%s - %s" , accTestPrefix , t .Name ())
@@ -2231,6 +2276,42 @@ resource "xenorchestra_vm" "bar" {
2231
2276
` , accDefaultNetwork .NameLabel , accTestPool .Id , vmName , powerState , accDefaultSr .Id )
2232
2277
}
2233
2278
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
+
2234
2315
func testAccVmConfigPXEBoot (vmName string ) string {
2235
2316
return testAccCloudConfigConfig (fmt .Sprintf ("vm-template-%s" , vmName ), "template" ) + testAccNonDefaultTemplateConfig (disklessTestTemplate .NameLabel ) + fmt .Sprintf (`
2236
2317
data "xenorchestra_network" "network" {
0 commit comments