mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-08-22 19:38:35 +00:00
Add datastore_id argument to initialization block for VM resources
This commit is contained in:
parent
433201e91b
commit
aec59ef607
@ -7,6 +7,7 @@ ENHANCEMENTS:
|
||||
* resource/virtual_environment_container: Add `template` argument
|
||||
* resource/virtual_environment_vm: Add `audio_device` argument
|
||||
* resource/virtual_environment_vm: Add `clone` argument
|
||||
* resource/virtual_environment_vm: Add `initialization.datastore_id` argument
|
||||
* resource/virtual_environment_vm: Add `serial_device` argument
|
||||
* resource/virtual_environment_vm: Add `template` argument
|
||||
|
||||
|
@ -185,6 +185,7 @@ output "ubuntu_vm_public_key" {
|
||||
* `write` - (Optional) The maximum write speed in megabytes per second.
|
||||
* `write_burstable` - (Optional) The maximum burstable write speed in megabytes per second.
|
||||
* `initialization` - (Optional) The cloud-init configuration (conflicts with `cdrom`).
|
||||
* `datastore_id` - (Optional) The identifier for the datastore to create the cloud-init disk in (defaults to `local-lvm`).
|
||||
* `dns` - (Optional) The DNS configuration.
|
||||
* `domain` - (Optional) The DNS search domain.
|
||||
* `server` - (Optional) The DNS server.
|
||||
|
@ -11,6 +11,8 @@ resource "proxmox_virtual_environment_vm" "example_template" {
|
||||
}
|
||||
|
||||
initialization {
|
||||
datastore_id = "${element(data.proxmox_virtual_environment_datastores.example.datastore_ids, index(data.proxmox_virtual_environment_datastores.example.datastore_ids, "local-lvm"))}"
|
||||
|
||||
dns {
|
||||
server = "1.1.1.1"
|
||||
}
|
||||
|
@ -43,6 +43,7 @@ const (
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedReadBurstable = 0
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedWrite = 0
|
||||
dvResourceVirtualEnvironmentVMDiskSpeedWriteBurstable = 0
|
||||
dvResourceVirtualEnvironmentVMInitializationDatastoreID = "local-lvm"
|
||||
dvResourceVirtualEnvironmentVMInitializationDNSDomain = ""
|
||||
dvResourceVirtualEnvironmentVMInitializationDNSServer = ""
|
||||
dvResourceVirtualEnvironmentVMInitializationIPConfigIPv4Address = ""
|
||||
@ -114,6 +115,7 @@ const (
|
||||
mkResourceVirtualEnvironmentVMDiskSpeedWrite = "write"
|
||||
mkResourceVirtualEnvironmentVMDiskSpeedWriteBurstable = "write_burstable"
|
||||
mkResourceVirtualEnvironmentVMInitialization = "initialization"
|
||||
mkResourceVirtualEnvironmentVMInitializationDatastoreID = "datastore_id"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNS = "dns"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSDomain = "domain"
|
||||
mkResourceVirtualEnvironmentVMInitializationDNSServer = "server"
|
||||
@ -506,6 +508,13 @@ func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||
},
|
||||
Elem: &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
mkResourceVirtualEnvironmentVMInitializationDatastoreID: {
|
||||
Type: schema.TypeString,
|
||||
Description: "The datastore id",
|
||||
Optional: true,
|
||||
ForceNew: true,
|
||||
Default: dvResourceVirtualEnvironmentVMInitializationDatastoreID,
|
||||
},
|
||||
mkResourceVirtualEnvironmentVMInitializationDNS: {
|
||||
Type: schema.TypeList,
|
||||
Description: "The DNS configuration",
|
||||
@ -1124,8 +1133,11 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
|
||||
}
|
||||
|
||||
if len(initialization) > 0 {
|
||||
initializationBlock := initialization[0].(map[string]interface{})
|
||||
initializationDatastoreID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationDatastoreID].(string)
|
||||
|
||||
cdromEnabled := true
|
||||
cdromFileID := "local-lvm:cloudinit"
|
||||
cdromFileID := fmt.Sprintf("%s:cloudinit", initializationDatastoreID)
|
||||
cdromMedia := "cdrom"
|
||||
|
||||
updateBody.IDEDevices = proxmox.CustomStorageDevices{
|
||||
@ -1141,6 +1153,14 @@ func resourceVirtualEnvironmentVMCreateClone(d *schema.ResourceData, m interface
|
||||
Media: &cdromMedia,
|
||||
},
|
||||
}
|
||||
|
||||
initializationConfig, err := resourceVirtualEnvironmentVMGetCloudInitConfig(d, m)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
updateBody.CloudInitConfig = initializationConfig
|
||||
}
|
||||
|
||||
if keyboardLayout != dvResourceVirtualEnvironmentVMKeyboardLayout {
|
||||
@ -1308,8 +1328,12 @@ func resourceVirtualEnvironmentVMCreateCustom(d *schema.ResourceData, m interfac
|
||||
}
|
||||
|
||||
if initializationConfig != nil {
|
||||
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
||||
initializationBlock := initialization[0].(map[string]interface{})
|
||||
initializationDatastoreID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationDatastoreID].(string)
|
||||
|
||||
cdromEnabled = true
|
||||
cdromFileID = "local-lvm:cloudinit"
|
||||
cdromFileID = fmt.Sprintf("%s:cloudinit", initializationDatastoreID)
|
||||
}
|
||||
|
||||
keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string)
|
||||
@ -2319,6 +2343,15 @@ func resourceVirtualEnvironmentVMReadCustom(d *schema.ResourceData, m interface{
|
||||
// Compare the initialization configuration to the one stored in the state.
|
||||
initialization := map[string]interface{}{}
|
||||
|
||||
if vmConfig.IDEDevice2 != nil {
|
||||
if *vmConfig.IDEDevice2.Media == "cdrom" {
|
||||
if strings.Contains(vmConfig.IDEDevice2.FileVolume, fmt.Sprintf("vm-%d-cloudinit", vmID)) {
|
||||
fileVolumeParts := strings.Split(vmConfig.IDEDevice2.FileVolume, ":")
|
||||
initialization[mkResourceVirtualEnvironmentVMInitializationDatastoreID] = fileVolumeParts[0]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if vmConfig.CloudInitDNSDomain != nil || vmConfig.CloudInitDNSServer != nil {
|
||||
initializationDNS := map[string]interface{}{}
|
||||
|
||||
@ -3053,11 +3086,15 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
||||
updateBody.CloudInitConfig = initializationConfig
|
||||
|
||||
if updateBody.CloudInitConfig != nil {
|
||||
initialization := d.Get(mkResourceVirtualEnvironmentVMInitialization).([]interface{})
|
||||
initializationBlock := initialization[0].(map[string]interface{})
|
||||
initializationDatastoreID := initializationBlock[mkResourceVirtualEnvironmentVMInitializationDatastoreID].(string)
|
||||
|
||||
cdromMedia := "cdrom"
|
||||
|
||||
updateBody.IDEDevices[2] = proxmox.CustomStorageDevice{
|
||||
Enabled: true,
|
||||
FileVolume: "local-lvm:cloudinit",
|
||||
FileVolume: fmt.Sprintf("%s:cloudinit", initializationDatastoreID),
|
||||
Media: &cdromMedia,
|
||||
}
|
||||
|
||||
|
@ -197,12 +197,14 @@ func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
||||
initializationSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMInitialization)
|
||||
|
||||
testOptionalArguments(t, initializationSchema, []string{
|
||||
mkResourceVirtualEnvironmentVMInitializationDatastoreID,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNS,
|
||||
mkResourceVirtualEnvironmentVMInitializationIPConfig,
|
||||
mkResourceVirtualEnvironmentVMInitializationUserAccount,
|
||||
})
|
||||
|
||||
testValueTypes(t, initializationSchema, map[string]schema.ValueType{
|
||||
mkResourceVirtualEnvironmentVMInitializationDatastoreID: schema.TypeString,
|
||||
mkResourceVirtualEnvironmentVMInitializationDNS: schema.TypeList,
|
||||
mkResourceVirtualEnvironmentVMInitializationIPConfig: schema.TypeList,
|
||||
mkResourceVirtualEnvironmentVMInitializationUserAccount: schema.TypeList,
|
||||
|
Loading…
Reference in New Issue
Block a user