mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-04 12:32:59 +00:00
Continued work on VM resource
This commit is contained in:
parent
11524b88ee
commit
b039380f2a
@ -740,57 +740,12 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
|
|||||||
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
|
cpuSockets := cpuBlock[mkResourceVirtualEnvironmentVMCPUSockets].(int)
|
||||||
|
|
||||||
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string)
|
description := d.Get(mkResourceVirtualEnvironmentVMDescription).(string)
|
||||||
disk := d.Get(mkResourceVirtualEnvironmentVMDisk).([]interface{})
|
diskDeviceObjects, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, m)
|
||||||
scsiDevices := make(proxmox.CustomStorageDevices, len(disk))
|
|
||||||
|
|
||||||
for i, diskEntry := range disk {
|
|
||||||
diskDevice := proxmox.CustomStorageDevice{
|
|
||||||
Enabled: true,
|
|
||||||
}
|
|
||||||
|
|
||||||
block := diskEntry.(map[string]interface{})
|
|
||||||
datastoreID, _ := block[mkResourceVirtualEnvironmentVMDiskDatastoreID].(string)
|
|
||||||
fileID, _ := block[mkResourceVirtualEnvironmentVMDiskFileID].(string)
|
|
||||||
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
|
||||||
|
|
||||||
speedBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false)
|
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if fileID != "" {
|
|
||||||
diskDevice.Enabled = false
|
|
||||||
} else {
|
|
||||||
diskDevice.FileVolume = fmt.Sprintf("%s:%d", datastoreID, size)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(speedBlock) > 0 {
|
|
||||||
speedLimitRead := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedRead].(int)
|
|
||||||
speedLimitReadBurstable := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedReadBurstable].(int)
|
|
||||||
speedLimitWrite := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedWrite].(int)
|
|
||||||
speedLimitWriteBurstable := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedWriteBurstable].(int)
|
|
||||||
|
|
||||||
if speedLimitRead > 0 {
|
|
||||||
diskDevice.MaxReadSpeedMbps = &speedLimitRead
|
|
||||||
}
|
|
||||||
|
|
||||||
if speedLimitReadBurstable > 0 {
|
|
||||||
diskDevice.BurstableReadSpeedMbps = &speedLimitReadBurstable
|
|
||||||
}
|
|
||||||
|
|
||||||
if speedLimitWrite > 0 {
|
|
||||||
diskDevice.MaxWriteSpeedMbps = &speedLimitWrite
|
|
||||||
}
|
|
||||||
|
|
||||||
if speedLimitWriteBurstable > 0 {
|
|
||||||
diskDevice.BurstableWriteSpeedMbps = &speedLimitWriteBurstable
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
scsiDevices[i] = diskDevice
|
|
||||||
}
|
|
||||||
|
|
||||||
keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string)
|
keyboardLayout := d.Get(mkResourceVirtualEnvironmentVMKeyboardLayout).(string)
|
||||||
memoryBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true)
|
memoryBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true)
|
||||||
|
|
||||||
@ -879,7 +834,7 @@ func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) e
|
|||||||
NetworkDevices: networkDeviceObjects,
|
NetworkDevices: networkDeviceObjects,
|
||||||
OSType: &osType,
|
OSType: &osType,
|
||||||
PoolID: &poolID,
|
PoolID: &poolID,
|
||||||
SCSIDevices: scsiDevices,
|
SCSIDevices: diskDeviceObjects,
|
||||||
SCSIHardware: &scsiHardware,
|
SCSIHardware: &scsiHardware,
|
||||||
SerialDevices: []string{"socket"},
|
SerialDevices: []string{"socket"},
|
||||||
SharedMemory: memorySharedObject,
|
SharedMemory: memorySharedObject,
|
||||||
@ -1176,6 +1131,62 @@ func resourceVirtualEnvironmentVMGetCloudConfig(d *schema.ResourceData, m interf
|
|||||||
return cloudInitConfig, nil
|
return cloudInitConfig, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVMGetDiskDeviceObjects(d *schema.ResourceData, m interface{}) (proxmox.CustomStorageDevices, error) {
|
||||||
|
diskDevice := d.Get(mkResourceVirtualEnvironmentVMDisk).([]interface{})
|
||||||
|
diskDeviceObjects := make(proxmox.CustomStorageDevices, len(diskDevice))
|
||||||
|
resource := resourceVirtualEnvironmentVM()
|
||||||
|
|
||||||
|
for i, diskEntry := range diskDevice {
|
||||||
|
diskDevice := proxmox.CustomStorageDevice{
|
||||||
|
Enabled: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
block := diskEntry.(map[string]interface{})
|
||||||
|
datastoreID, _ := block[mkResourceVirtualEnvironmentVMDiskDatastoreID].(string)
|
||||||
|
fileID, _ := block[mkResourceVirtualEnvironmentVMDiskFileID].(string)
|
||||||
|
size, _ := block[mkResourceVirtualEnvironmentVMDiskSize].(int)
|
||||||
|
|
||||||
|
speedBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMDisk, mkResourceVirtualEnvironmentVMDiskSpeed}, 0, false)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return diskDeviceObjects, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if fileID != "" {
|
||||||
|
diskDevice.Enabled = false
|
||||||
|
} else {
|
||||||
|
diskDevice.FileVolume = fmt.Sprintf("%s:%d", datastoreID, size)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(speedBlock) > 0 {
|
||||||
|
speedLimitRead := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedRead].(int)
|
||||||
|
speedLimitReadBurstable := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedReadBurstable].(int)
|
||||||
|
speedLimitWrite := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedWrite].(int)
|
||||||
|
speedLimitWriteBurstable := speedBlock[mkResourceVirtualEnvironmentVMDiskSpeedWriteBurstable].(int)
|
||||||
|
|
||||||
|
if speedLimitRead > 0 {
|
||||||
|
diskDevice.MaxReadSpeedMbps = &speedLimitRead
|
||||||
|
}
|
||||||
|
|
||||||
|
if speedLimitReadBurstable > 0 {
|
||||||
|
diskDevice.BurstableReadSpeedMbps = &speedLimitReadBurstable
|
||||||
|
}
|
||||||
|
|
||||||
|
if speedLimitWrite > 0 {
|
||||||
|
diskDevice.MaxWriteSpeedMbps = &speedLimitWrite
|
||||||
|
}
|
||||||
|
|
||||||
|
if speedLimitWriteBurstable > 0 {
|
||||||
|
diskDevice.BurstableWriteSpeedMbps = &speedLimitWriteBurstable
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diskDeviceObjects[i] = diskDevice
|
||||||
|
}
|
||||||
|
|
||||||
|
return diskDeviceObjects, nil
|
||||||
|
}
|
||||||
|
|
||||||
func resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d *schema.ResourceData, m interface{}) (proxmox.CustomNetworkDevices, error) {
|
func resourceVirtualEnvironmentVMGetNetworkDeviceObjects(d *schema.ResourceData, m interface{}) (proxmox.CustomNetworkDevices, error) {
|
||||||
networkDevice := d.Get(mkResourceVirtualEnvironmentVMNetworkDevice).([]interface{})
|
networkDevice := d.Get(mkResourceVirtualEnvironmentVMNetworkDevice).([]interface{})
|
||||||
networkDeviceObjects := make(proxmox.CustomNetworkDevices, len(networkDevice))
|
networkDeviceObjects := make(proxmox.CustomNetworkDevices, len(networkDevice))
|
||||||
@ -1862,6 +1873,48 @@ func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) e
|
|||||||
rebootRequired = true
|
rebootRequired = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Prepare the new disk device configuration.
|
||||||
|
if d.HasChange(mkResourceVirtualEnvironmentVMDisk) {
|
||||||
|
diskDeviceObjects, err := resourceVirtualEnvironmentVMGetDiskDeviceObjects(d, m)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
scsiDevices := []*proxmox.CustomStorageDevice{
|
||||||
|
vmConfig.SCSIDevice0,
|
||||||
|
vmConfig.SCSIDevice1,
|
||||||
|
vmConfig.SCSIDevice2,
|
||||||
|
vmConfig.SCSIDevice3,
|
||||||
|
vmConfig.SCSIDevice4,
|
||||||
|
vmConfig.SCSIDevice5,
|
||||||
|
vmConfig.SCSIDevice6,
|
||||||
|
vmConfig.SCSIDevice7,
|
||||||
|
vmConfig.SCSIDevice8,
|
||||||
|
vmConfig.SCSIDevice9,
|
||||||
|
vmConfig.SCSIDevice10,
|
||||||
|
vmConfig.SCSIDevice11,
|
||||||
|
vmConfig.SCSIDevice12,
|
||||||
|
vmConfig.SCSIDevice13,
|
||||||
|
}
|
||||||
|
|
||||||
|
body.SCSIDevices = make(proxmox.CustomStorageDevices, len(diskDeviceObjects))
|
||||||
|
|
||||||
|
for di, do := range diskDeviceObjects {
|
||||||
|
if scsiDevices[di] == nil {
|
||||||
|
return fmt.Errorf("Missing SCSI device %d (scsi%d)", di, di)
|
||||||
|
}
|
||||||
|
|
||||||
|
body.SCSIDevices[di] = *scsiDevices[di]
|
||||||
|
body.SCSIDevices[di].BurstableReadSpeedMbps = do.BurstableReadSpeedMbps
|
||||||
|
body.SCSIDevices[di].BurstableWriteSpeedMbps = do.BurstableWriteSpeedMbps
|
||||||
|
body.SCSIDevices[di].MaxReadSpeedMbps = do.MaxReadSpeedMbps
|
||||||
|
body.SCSIDevices[di].MaxWriteSpeedMbps = do.MaxWriteSpeedMbps
|
||||||
|
}
|
||||||
|
|
||||||
|
rebootRequired = true
|
||||||
|
}
|
||||||
|
|
||||||
// Prepare the new memory configuration.
|
// Prepare the new memory configuration.
|
||||||
if d.HasChange(mkResourceVirtualEnvironmentVMMemory) {
|
if d.HasChange(mkResourceVirtualEnvironmentVMMemory) {
|
||||||
memoryBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true)
|
memoryBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentVMMemory}, 0, true)
|
||||||
|
Loading…
Reference in New Issue
Block a user