mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-10 15:55:01 +00:00
feat(vm): Add cloud-init network-config support (#197)
* feat: Add cloud-init network-config support * add documentation entry * fix re-apply use case Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
parent
60a68184cf
commit
79a2101933
@ -224,6 +224,8 @@ output "ubuntu_vm_public_key" {
|
|||||||
* `keys` - (Optional) The SSH keys.
|
* `keys` - (Optional) The SSH keys.
|
||||||
* `password` - (Optional) The SSH password.
|
* `password` - (Optional) The SSH password.
|
||||||
* `username` - (Optional) The SSH username.
|
* `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
|
* `user_data_file_id` - (Optional) The identifier for a file containing custom user data (conflicts
|
||||||
with `user_account`).
|
with `user_account`).
|
||||||
* `vendor_data_file_id` - (Optional) The identifier for a file containing all vendor data passed to the VM via cloud-init.
|
* `vendor_data_file_id` - (Optional) The identifier for a file containing all vendor data passed to the VM via cloud-init.
|
||||||
|
@ -1310,7 +1310,7 @@ func (r *CustomCloudInitFiles) UnmarshalJSON(b []byte) error {
|
|||||||
case "meta":
|
case "meta":
|
||||||
r.MetaVolume = &v[1]
|
r.MetaVolume = &v[1]
|
||||||
case "network":
|
case "network":
|
||||||
r.MetaVolume = &v[1]
|
r.NetworkVolume = &v[1]
|
||||||
case "user":
|
case "user":
|
||||||
r.UserVolume = &v[1]
|
r.UserVolume = &v[1]
|
||||||
case "vendor":
|
case "vendor":
|
||||||
|
@ -76,6 +76,7 @@ const (
|
|||||||
dvResourceVirtualEnvironmentVMInitializationUserAccountPassword = ""
|
dvResourceVirtualEnvironmentVMInitializationUserAccountPassword = ""
|
||||||
dvResourceVirtualEnvironmentVMInitializationUserDataFileID = ""
|
dvResourceVirtualEnvironmentVMInitializationUserDataFileID = ""
|
||||||
dvResourceVirtualEnvironmentVMInitializationVendorDataFileID = ""
|
dvResourceVirtualEnvironmentVMInitializationVendorDataFileID = ""
|
||||||
|
dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID = ""
|
||||||
dvResourceVirtualEnvironmentVMInitializationType = ""
|
dvResourceVirtualEnvironmentVMInitializationType = ""
|
||||||
dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us"
|
dvResourceVirtualEnvironmentVMKeyboardLayout = "en-us"
|
||||||
dvResourceVirtualEnvironmentVMMachineType = ""
|
dvResourceVirtualEnvironmentVMMachineType = ""
|
||||||
@ -183,6 +184,7 @@ const (
|
|||||||
mkResourceVirtualEnvironmentVMInitializationUserAccountUsername = "username"
|
mkResourceVirtualEnvironmentVMInitializationUserAccountUsername = "username"
|
||||||
mkResourceVirtualEnvironmentVMInitializationUserDataFileID = "user_data_file_id"
|
mkResourceVirtualEnvironmentVMInitializationUserDataFileID = "user_data_file_id"
|
||||||
mkResourceVirtualEnvironmentVMInitializationVendorDataFileID = "vendor_data_file_id"
|
mkResourceVirtualEnvironmentVMInitializationVendorDataFileID = "vendor_data_file_id"
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID = "network_data_file_id"
|
||||||
mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses"
|
mkResourceVirtualEnvironmentVMIPv4Addresses = "ipv4_addresses"
|
||||||
mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses"
|
mkResourceVirtualEnvironmentVMIPv6Addresses = "ipv6_addresses"
|
||||||
mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout"
|
mkResourceVirtualEnvironmentVMKeyboardLayout = "keyboard_layout"
|
||||||
@ -782,6 +784,14 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
|||||||
Default: dvResourceVirtualEnvironmentVMInitializationVendorDataFileID,
|
Default: dvResourceVirtualEnvironmentVMInitializationVendorDataFileID,
|
||||||
ValidateDiagFunc: getFileIDValidator(),
|
ValidateDiagFunc: getFileIDValidator(),
|
||||||
},
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Description: "The ID of a file containing network config",
|
||||||
|
Optional: true,
|
||||||
|
ForceNew: true,
|
||||||
|
Default: dvResourceVirtualEnvironmentVMInitializationNetworkDataFileID,
|
||||||
|
ValidateDiagFunc: getFileIDValidator(),
|
||||||
|
},
|
||||||
mkResourceVirtualEnvironmentVMInitializationType: {
|
mkResourceVirtualEnvironmentVMInitializationType: {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Description: "The cloud-init configuration format",
|
Description: "The cloud-init configuration format",
|
||||||
@ -2315,6 +2325,15 @@ func resourceVirtualEnvironmentVMGetCloudInitConfig(d *schema.ResourceData) (*pr
|
|||||||
initializationConfig.Files.VendorVolume = &initializationVendorDataFileID
|
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)
|
initializationType := initializationBlock[mkResourceVirtualEnvironmentVMInitializationType].(string)
|
||||||
|
|
||||||
if initializationType != "" {
|
if initializationType != "" {
|
||||||
@ -3183,9 +3202,15 @@ func resourceVirtualEnvironmentVMReadCustom(ctx context.Context, d *schema.Resou
|
|||||||
} else {
|
} else {
|
||||||
initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = ""
|
initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = ""
|
||||||
}
|
}
|
||||||
|
if vmConfig.CloudInitFiles.NetworkVolume != nil {
|
||||||
|
initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = *vmConfig.CloudInitFiles.NetworkVolume
|
||||||
|
} else {
|
||||||
|
initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = ""
|
||||||
|
}
|
||||||
} else if len(initialization) > 0 {
|
} else if len(initialization) > 0 {
|
||||||
initialization[mkResourceVirtualEnvironmentVMInitializationUserDataFileID] = ""
|
initialization[mkResourceVirtualEnvironmentVMInitializationUserDataFileID] = ""
|
||||||
initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = ""
|
initialization[mkResourceVirtualEnvironmentVMInitializationVendorDataFileID] = ""
|
||||||
|
initialization[mkResourceVirtualEnvironmentVMInitializationNetworkDataFileID] = ""
|
||||||
}
|
}
|
||||||
|
|
||||||
if vmConfig.CloudInitType != nil {
|
if vmConfig.CloudInitType != nil {
|
||||||
|
Loading…
Reference in New Issue
Block a user