diff --git a/docs/resources/virtual_environment_vm.md b/docs/resources/virtual_environment_vm.md index e61501c9..fa5e3ea3 100644 --- a/docs/resources/virtual_environment_vm.md +++ b/docs/resources/virtual_environment_vm.md @@ -224,6 +224,8 @@ output "ubuntu_vm_public_key" { * `keys` - (Optional) The SSH keys. * `password` - (Optional) The SSH password. * `username` - (Optional) The SSH username. + * `network_data_file_id` - (Optional) The identifier for a file containing network configuration data passed to the + VM via cloud-init (conflicts with `ip_config`). * `user_data_file_id` - (Optional) The identifier for a file containing custom user data (conflicts with `user_account`). * `vendor_data_file_id` - (Optional) The identifier for a file containing all vendor data passed to the VM via cloud-init. diff --git a/proxmox/virtual_environment_vm_types.go b/proxmox/virtual_environment_vm_types.go index c0fcd5eb..8c00fce5 100644 --- a/proxmox/virtual_environment_vm_types.go +++ b/proxmox/virtual_environment_vm_types.go @@ -1310,7 +1310,7 @@ func (r *CustomCloudInitFiles) UnmarshalJSON(b []byte) error { case "meta": r.MetaVolume = &v[1] case "network": - r.MetaVolume = &v[1] + r.NetworkVolume = &v[1] case "user": r.UserVolume = &v[1] case "vendor": diff --git a/proxmoxtf/resource_virtual_environment_vm.go b/proxmoxtf/resource_virtual_environment_vm.go index 3e508923..2be65f2e 100644 --- a/proxmoxtf/resource_virtual_environment_vm.go +++ b/proxmoxtf/resource_virtual_environment_vm.go @@ -76,6 +76,7 @@ const ( dvResourceVirtualEnvironmentVMInitializationUserAccountPassword = "" dvResourceVirtualEnvironmentVMInitializationUserDataFileID = "" dvResourceVirtualEnvironmentVMInitializationVendorDataFileID = "" + dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID = "" dvResourceVirtualEnvironmentVMInitializationType = "" dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us" dvResourceVirtualEnvironmentVMMachineType = "" @@ -183,6 +184,7 @@ const ( mkResourceVirtualEnvironmentVMInitializationUserAccountUsername = "username" mkResourceVirtualEnvironmentVMInitializationUserDataFileID = "user_data_file_id" mkResourceVirtualEnvironmentVMInitializationVendorDataFileID = "vendor_data_file_id" + mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID = "network_data_file_id" mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses" mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses" mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout" @@ -782,6 +784,14 @@ func resourceVirtualEnvironmentVM() *schema.Resource { Default: dvResourceVirtualEnvironmentVMInitializationVendorDataFileID, ValidateDiagFunc: getFileIDValidator(), }, + mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID: { + Type: schema.TypeString, + Description: "The ID of a file containing network config", + Optional: true, + ForceNew: true, + Default: dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID, + ValidateDiagFunc: getFileIDValidator(), + }, mkResourceVirtualEnvironmentVMInitializationType: { Type: schema.TypeString, Description: "The cloud-init configuration format", @@ -2315,6 +2325,15 @@ func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData) (*pr initializationConfig.Files.VendorVolume = &initializationVendorDataFileID } + initializationNetworkDataFileID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID].(string) + + if initializationNetworkDataFileID != "" { + if initializationConfig.Files == nil { + initializationConfig.Files = &proxmox.CustomCloudInitFiles{} + } + initializationConfig.Files.NetworkVolume = &initializationNetworkDataFileID + } + initializationType := initializationBlock[mkResourceVirtualEnvironmentVMInitializationType].(string) if initializationType != "" { @@ -3183,9 +3202,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou } else { initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = "" } + if vmConfig.CloudInitFiles.NetworkVolume != nil { + initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = *vmConfig.CloudInitFiles.NetworkVolume + } else { + initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = "" + } } else if len(initialization) > 0 { initialization[mkResourceVirtualEnvironmentVMInitializationUserDataFileID] = "" initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = "" + initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = "" } if vmConfig.CloudInitType != nil {