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