/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ package tests import ( "fmt" "testing" "github.com/hashicorp/terraform-plugin-testing/helper/resource" ) func TestAccResourceVM(t *testing.T) { t.Parallel() te := initTestEnvironment(t) tests := []struct { name string step []resource.TestStep }{ {"multiline description", []resource.TestStep{{ Config: te.providerConfig + fmt.Sprintf(` resource "proxmox_virtual_environment_vm" "test_vm1" { node_name = "%s" started = false description = <<-EOT my description value EOT }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm1", map[string]string{ "description": "my\ndescription\nvalue", }), ), }}}, {"single line description", []resource.TestStep{{ Config: te.providerConfig + fmt.Sprintf(` resource "proxmox_virtual_environment_vm" "test_vm2" { node_name = "%s" started = false description = "my description value" }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm2", map[string]string{ "description": "my description value", }), ), }}}, {"no description", []resource.TestStep{{ Config: fmt.Sprintf(` resource "proxmox_virtual_environment_vm" "test_vm3" { node_name = "%s" started = false description = "" }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm3", map[string]string{ "description": "", }), ), }}}, { "protection", []resource.TestStep{{ Config: fmt.Sprintf(` resource "proxmox_virtual_environment_vm" "test_vm4" { node_name = "%s" started = false protection = true }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm4", map[string]string{ "protection": "true", }), ), }, { Config: fmt.Sprintf(` resource "proxmox_virtual_environment_vm" "test_vm4" { node_name = "%s" started = false protection = false }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm4", map[string]string{ "protection": "false", }), ), }}, }, { "update cpu block", []resource.TestStep{{ Config: fmt.Sprintf(`resource "proxmox_virtual_environment_vm" "test_vm5" { node_name = "%s" started = false cpu { cores = 2 } }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm5", map[string]string{ "cpu.0.sockets": "1", }), ), }, { Config: fmt.Sprintf(`resource "proxmox_virtual_environment_vm" "test_vm5" { node_name = "%s" started = false cpu { cores = 1 } }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm5", map[string]string{ "cpu.0.sockets": "1", }), ), }}, }, { "update memory block", []resource.TestStep{{ Config: fmt.Sprintf(`resource "proxmox_virtual_environment_vm" "test_vm6" { node_name = "%s" started = false memory { dedicated = 2048 } }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm6", map[string]string{ "memory.0.dedicated": "2048", }), ), }, { Config: fmt.Sprintf(`resource "proxmox_virtual_environment_vm" "test_vm6" { node_name = "%s" started = false memory { dedicated = 1024 } }`, te.nodeName), Check: resource.ComposeTestCheckFunc( testResourceAttributes("proxmox_virtual_environment_vm.test_vm6", map[string]string{ "memory.0.dedicated": "1024", }), ), }}, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { t.Parallel() resource.Test(t, resource.TestCase{ ProtoV6ProviderFactories: te.accProviders, Steps: tt.step, }) }) } } func TestAccResourceVMInitialization(t *testing.T) { te := initTestEnvironment(t) tests := []struct { name string step []resource.TestStep }{ {"initialization works with cloud-init config provided over SCSI interface", []resource.TestStep{{ Config: te.providerConfig + fmt.Sprintf(` resource "proxmox_virtual_environment_file" "cloud_config" { content_type = "snippets" datastore_id = "local" node_name = "%[1]s" source_raw { data = <