diff --git a/proxmoxtf/resource_virtual_environment_vm.go b/proxmoxtf/resource_virtual_environment_vm.go index a5a6ff62..01d3142b 100644 --- a/proxmoxtf/resource_virtual_environment_vm.go +++ b/proxmoxtf/resource_virtual_environment_vm.go @@ -60,6 +60,7 @@ const ( dvResourceVirtualEnvironmentVMInitializationIPConfigIPv6Gateway = "" dvResourceVirtualEnvironmentVMInitializationUserAccountPassword = "" dvResourceVirtualEnvironmentVMInitializationUserDataFileID = "" + dvResourceVirtualEnvironmentVMInitializationType = "" dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us" dvResourceVirtualEnvironmentVMMemoryDedicated = 512 dvResourceVirtualEnvironmentVMMemoryFloating = 0 @@ -140,6 +141,7 @@ const ( mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6 = "ipv6" mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Address = "address" mkResourceVirtualEnvironmentVMInitializationIPConfigIPv6Gateway = "gateway" + mkResourceVirtualEnvironmentVMInitializationType = "type" mkResourceVirtualEnvironmentVMInitializationUserAccount = "user_account" mkResourceVirtualEnvironmentVMInitializationUserAccountKeys = "keys" mkResourceVirtualEnvironmentVMInitializationUserAccountPassword = "password" @@ -706,6 +708,14 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Default: dvResourceVirtualEnvironmentVMInitializationUserDataFileID, ValidateFunc: getFileIDValidator(), }, + mkResourceVirtualEnvironmentVMInitializationType: { + Type: schema.TypeString, + Description: "The cloud-init configuration format", + Optional: true, + ForceNew: true, + Default: dvResourceVirtualEnvironmentVMInitializationType, + ValidateFunc: getCloudInitTypeValidator(), + }, }, }, MaxItems: 1, @@ -2010,6 +2020,12 @@ func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData, m in UserVolume: &initializationUserDataFileID, } } + + initializationType := initializationBlock[mkResourceVirtualEnvironmentVMInitializationType].(string) + + if initializationType != "" { + initializationConfig.Type = &initializationType + } } return initializationConfig, nil @@ -2706,6 +2722,12 @@ func resourceVirtualEnvironmentVMReadCustom(d *schema.ResourceData, m interface{ initialization[mkResourceVirtualEnvironmentVMInitializationUserDataFileID] = "" } + if vmConfig.CloudInitType != nil { + initialization[mkResourceVirtualEnvironmentVMInitializationType] = *vmConfig.CloudInitType + } else if len(initialization) > 0 { + initialization[mkResourceVirtualEnvironmentVMInitializationType] = "" + } + currentInitialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{}) if len(clone) > 0 { diff --git a/proxmoxtf/utils.go b/proxmoxtf/utils.go index 7a7ddff5..5e1024cb 100644 --- a/proxmoxtf/utils.go +++ b/proxmoxtf/utils.go @@ -472,6 +472,13 @@ func parseDiskSize(size *string) (int, error) { return diskSize, err } +func getCloudInitTypeValidator() schema.SchemaValidateFunc { + return validation.StringInSlice([]string{ + "configdrive2", + "nocloud", + }, false) +} + func testComputedAttributes(t *testing.T, s *schema.Resource, keys []string) { for _, v := range keys { if s.Schema[v] == nil {