mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-08-22 19:38:35 +00:00
Continued work on VM support
This commit is contained in:
parent
fdad166b6a
commit
b5c91c08f8
@ -7,6 +7,7 @@ package proxmox
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -60,16 +61,6 @@ type CustomEFIDisk struct {
|
|||||||
Format *string `json:"format,omitempty" url:"format,omitempty"`
|
Format *string `json:"format,omitempty" url:"format,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CustomIDEDevice handles QEMU IDE device parameters.
|
|
||||||
type CustomIDEDevice struct {
|
|
||||||
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
|
||||||
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
|
||||||
FileVolume string `json:"file" url:"file"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CustomIDEDevices handles QEMU IDE device parameters.
|
|
||||||
type CustomIDEDevices []CustomIDEDevice
|
|
||||||
|
|
||||||
// CustomNetworkDevice handles QEMU network device parameters.
|
// CustomNetworkDevice handles QEMU network device parameters.
|
||||||
type CustomNetworkDevice struct {
|
type CustomNetworkDevice struct {
|
||||||
Model string `json:"model" url:"model"`
|
Model string `json:"model" url:"model"`
|
||||||
@ -80,7 +71,7 @@ type CustomNetworkDevice struct {
|
|||||||
Queues *int `json:"queues,omitempty" url:"queues,omitempty"`
|
Queues *int `json:"queues,omitempty" url:"queues,omitempty"`
|
||||||
RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"`
|
RateLimit *float64 `json:"rate,omitempty" url:"rate,omitempty"`
|
||||||
Tag *int `json:"tag,omitempty" url:"tag,omitempty"`
|
Tag *int `json:"tag,omitempty" url:"tag,omitempty"`
|
||||||
Trunks []string `json:"trunks,omitempty" url:"trunks,omitempty"`
|
Trunks []int `json:"trunks,omitempty" url:"trunks,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// CustomNetworkDevices handles QEMU network device parameters.
|
// CustomNetworkDevices handles QEMU network device parameters.
|
||||||
@ -110,26 +101,6 @@ type CustomPCIDevice struct {
|
|||||||
// CustomPCIDevices handles QEMU host PCI device mapping parameters.
|
// CustomPCIDevices handles QEMU host PCI device mapping parameters.
|
||||||
type CustomPCIDevices []CustomPCIDevice
|
type CustomPCIDevices []CustomPCIDevice
|
||||||
|
|
||||||
// CustomSATADevice handles QEMU SATA device parameters.
|
|
||||||
type CustomSATADevice struct {
|
|
||||||
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
|
||||||
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
|
||||||
FileVolume string `json:"file" url:"file"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CustomSATADevices handles QEMU SATA device parameters.
|
|
||||||
type CustomSATADevices []CustomSATADevice
|
|
||||||
|
|
||||||
// CustomSCSIDevice handles QEMU SCSI device parameters.
|
|
||||||
type CustomSCSIDevice struct {
|
|
||||||
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
|
||||||
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
|
||||||
FileVolume string `json:"file" url:"file"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// CustomSCSIDevices handles QEMU SCSI device parameters.
|
|
||||||
type CustomSCSIDevices []CustomSCSIDevice
|
|
||||||
|
|
||||||
// CustomSerialDevices handles QEMU serial device parameters.
|
// CustomSerialDevices handles QEMU serial device parameters.
|
||||||
type CustomSerialDevices []string
|
type CustomSerialDevices []string
|
||||||
|
|
||||||
@ -164,6 +135,17 @@ type CustomStartupOrder struct {
|
|||||||
Up *int `json:"up,omitempty" url:"up,omitempty"`
|
Up *int `json:"up,omitempty" url:"up,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CustomStorageDevice handles QEMU SATA device parameters.
|
||||||
|
type CustomStorageDevice struct {
|
||||||
|
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
||||||
|
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
||||||
|
Enabled bool `json:"-" url:"-"`
|
||||||
|
FileVolume string `json:"file" url:"file"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CustomStorageDevices handles QEMU SATA device parameters.
|
||||||
|
type CustomStorageDevices []CustomStorageDevice
|
||||||
|
|
||||||
// CustomUSBDevice handles QEMU USB device parameters.
|
// CustomUSBDevice handles QEMU USB device parameters.
|
||||||
type CustomUSBDevice struct {
|
type CustomUSBDevice struct {
|
||||||
HostDevice string `json:"host" url:"host"`
|
HostDevice string `json:"host" url:"host"`
|
||||||
@ -183,6 +165,7 @@ type CustomVGADevice struct {
|
|||||||
type CustomVirtualIODevice struct {
|
type CustomVirtualIODevice struct {
|
||||||
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
AIO *string `json:"aio,omitempty" url:"aio,omitempty"`
|
||||||
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
BackupEnabled *CustomBool `json:"backup,omitempty" url:"backup,omitempty,int"`
|
||||||
|
Enabled bool `json:"-" url:"-"`
|
||||||
FileVolume string `json:"file" url:"file"`
|
FileVolume string `json:"file" url:"file"`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,14 +182,13 @@ type CustomWatchdogDevice struct {
|
|||||||
type VirtualEnvironmentVMCreateRequestBody struct {
|
type VirtualEnvironmentVMCreateRequestBody struct {
|
||||||
ACPI *CustomBool `json:"acpi,omitempty" url:"acpi,omitempty,int"`
|
ACPI *CustomBool `json:"acpi,omitempty" url:"acpi,omitempty,int"`
|
||||||
Agent *CustomAgent `json:"agent,omitempty" url:"agent,omitempty"`
|
Agent *CustomAgent `json:"agent,omitempty" url:"agent,omitempty"`
|
||||||
AllocatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"`
|
|
||||||
AllowReboot *CustomBool `json:"reboot,omitempty" url:"reboot,omitempty,int"`
|
AllowReboot *CustomBool `json:"reboot,omitempty" url:"reboot,omitempty,int"`
|
||||||
AudioDevice *CustomAudioDevice `json:"audio0,omitempty" url:"audio0,omitempty"`
|
AudioDevice *CustomAudioDevice `json:"audio0,omitempty" url:"audio0,omitempty"`
|
||||||
Autostart *CustomBool `json:"autostart,omitempty" url:"autostart,omitempty,int"`
|
Autostart *CustomBool `json:"autostart,omitempty" url:"autostart,omitempty,int"`
|
||||||
BackupFile *string `json:"archive,omitempty" url:"archive,omitempty"`
|
BackupFile *string `json:"archive,omitempty" url:"archive,omitempty"`
|
||||||
BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"`
|
BandwidthLimit *int `json:"bwlimit,omitempty" url:"bwlimit,omitempty"`
|
||||||
BIOS *string `json:"bios,omitempty" url:"bios,omitempty"`
|
BIOS *string `json:"bios,omitempty" url:"bios,omitempty"`
|
||||||
BootDiskID *string `json:"bootdisk,omitempty" url:"bootdisk,omitempty"`
|
BootDisk *string `json:"bootdisk,omitempty" url:"bootdisk,omitempty"`
|
||||||
BootOrder *string `json:"boot,omitempty" url:"boot,omitempty"`
|
BootOrder *string `json:"boot,omitempty" url:"boot,omitempty"`
|
||||||
CDROM *string `json:"cdrom,omitempty" url:"cdrom,omitempty"`
|
CDROM *string `json:"cdrom,omitempty" url:"cdrom,omitempty"`
|
||||||
CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty" url:"cloudinit,omitempty"`
|
CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty" url:"cloudinit,omitempty"`
|
||||||
@ -215,6 +197,7 @@ type VirtualEnvironmentVMCreateRequestBody struct {
|
|||||||
CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"`
|
CPULimit *int `json:"cpulimit,omitempty" url:"cpulimit,omitempty"`
|
||||||
CPUSockets *int `json:"sockets,omitempty" url:"sockets,omitempty"`
|
CPUSockets *int `json:"sockets,omitempty" url:"sockets,omitempty"`
|
||||||
CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"`
|
CPUUnits *int `json:"cpuunits,omitempty" url:"cpuunits,omitempty"`
|
||||||
|
DedicatedMemory *int `json:"memory,omitempty" url:"memory,omitempty"`
|
||||||
DeletionProtection *CustomBool `json:"protection,omitempty" url:"force,omitempty,int"`
|
DeletionProtection *CustomBool `json:"protection,omitempty" url:"force,omitempty,int"`
|
||||||
Description *string `json:"description,omitempty" url:"description,omitempty"`
|
Description *string `json:"description,omitempty" url:"description,omitempty"`
|
||||||
EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty" url:"efidisk0,omitempty"`
|
EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty" url:"efidisk0,omitempty"`
|
||||||
@ -224,7 +207,7 @@ type VirtualEnvironmentVMCreateRequestBody struct {
|
|||||||
HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"`
|
HookScript *string `json:"hookscript,omitempty" url:"hookscript,omitempty"`
|
||||||
Hotplug CustomCommaSeparatedList `json:"hotplug,omitempty" url:"hotplug,omitempty,comma"`
|
Hotplug CustomCommaSeparatedList `json:"hotplug,omitempty" url:"hotplug,omitempty,comma"`
|
||||||
Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"`
|
Hugepages *string `json:"hugepages,omitempty" url:"hugepages,omitempty"`
|
||||||
IDEDevices CustomIDEDevices `json:"ide,omitempty" url:"ide,omitempty"`
|
IDEDevices CustomStorageDevices `json:"ide,omitempty" url:"ide,omitempty"`
|
||||||
KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"`
|
KeyboardLayout *string `json:"keyboard,omitempty" url:"keyboard,omitempty"`
|
||||||
KVMArguments CustomLineBreakSeparatedList `json:"args,omitempty" url:"args,omitempty,space"`
|
KVMArguments CustomLineBreakSeparatedList `json:"args,omitempty" url:"args,omitempty,space"`
|
||||||
KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"`
|
KVMEnabled *CustomBool `json:"kvm,omitempty" url:"kvm,omitempty,int"`
|
||||||
@ -241,8 +224,8 @@ type VirtualEnvironmentVMCreateRequestBody struct {
|
|||||||
Overwrite *CustomBool `json:"force,omitempty" url:"force,omitempty,int"`
|
Overwrite *CustomBool `json:"force,omitempty" url:"force,omitempty,int"`
|
||||||
PCIDevices CustomPCIDevices `json:"hostpci,omitempty" url:"hostpci,omitempty"`
|
PCIDevices CustomPCIDevices `json:"hostpci,omitempty" url:"hostpci,omitempty"`
|
||||||
Revert *string `json:"revert,omitempty" url:"revert,omitempty"`
|
Revert *string `json:"revert,omitempty" url:"revert,omitempty"`
|
||||||
SATADevices CustomSATADevices `json:"sata,omitempty" url:"sata,omitempty"`
|
SATADevices CustomStorageDevices `json:"sata,omitempty" url:"sata,omitempty"`
|
||||||
SCSIDevices CustomSCSIDevices `json:"scsi,omitempty" url:"sata,omitempty"`
|
SCSIDevices CustomStorageDevices `json:"scsi,omitempty" url:"sata,omitempty"`
|
||||||
SCSIHardware *string `json:"scsihw,omitempty" url:"scsihw,omitempty"`
|
SCSIHardware *string `json:"scsihw,omitempty" url:"scsihw,omitempty"`
|
||||||
SerialDevices CustomSerialDevices `json:"serial,omitempty" url:"serial,omitempty"`
|
SerialDevices CustomSerialDevices `json:"serial,omitempty" url:"serial,omitempty"`
|
||||||
SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty" url:"ivshmem,omitempty"`
|
SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty" url:"ivshmem,omitempty"`
|
||||||
@ -274,14 +257,13 @@ type VirtualEnvironmentVMGetResponseBody struct {
|
|||||||
type VirtualEnvironmentVMGetResponseData struct {
|
type VirtualEnvironmentVMGetResponseData struct {
|
||||||
ACPI *CustomBool `json:"acpi,omitempty"`
|
ACPI *CustomBool `json:"acpi,omitempty"`
|
||||||
Agent *CustomAgent `json:"agent,omitempty"`
|
Agent *CustomAgent `json:"agent,omitempty"`
|
||||||
AllocatedMemory *int `json:"memory,omitempty"`
|
|
||||||
AllowReboot *CustomBool `json:"reboot,omitempty"`
|
AllowReboot *CustomBool `json:"reboot,omitempty"`
|
||||||
AudioDevice *CustomAudioDevice `json:"audio0,omitempty"`
|
AudioDevice *CustomAudioDevice `json:"audio0,omitempty"`
|
||||||
Autostart *CustomBool `json:"autostart,omitempty"`
|
Autostart *CustomBool `json:"autostart,omitempty"`
|
||||||
BackupFile *string `json:"archive,omitempty"`
|
BackupFile *string `json:"archive,omitempty"`
|
||||||
BandwidthLimit *int `json:"bwlimit,omitempty"`
|
BandwidthLimit *int `json:"bwlimit,omitempty"`
|
||||||
BIOS *string `json:"bios,omitempty"`
|
BIOS *string `json:"bios,omitempty"`
|
||||||
BootDiskID *string `json:"bootdisk,omitempty"`
|
BootDisk *string `json:"bootdisk,omitempty"`
|
||||||
BootOrder *string `json:"boot,omitempty"`
|
BootOrder *string `json:"boot,omitempty"`
|
||||||
CDROM *string `json:"cdrom,omitempty"`
|
CDROM *string `json:"cdrom,omitempty"`
|
||||||
CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty"`
|
CloudInitConfig *CustomCloudInitConfig `json:"cloudinit,omitempty"`
|
||||||
@ -290,6 +272,7 @@ type VirtualEnvironmentVMGetResponseData struct {
|
|||||||
CPULimit *int `json:"cpulimit,omitempty"`
|
CPULimit *int `json:"cpulimit,omitempty"`
|
||||||
CPUSockets *int `json:"sockets,omitempty"`
|
CPUSockets *int `json:"sockets,omitempty"`
|
||||||
CPUUnits *int `json:"cpuunits,omitempty"`
|
CPUUnits *int `json:"cpuunits,omitempty"`
|
||||||
|
DedicatedMemory *int `json:"memory,omitempty"`
|
||||||
DeletionProtection *CustomBool `json:"protection,omitempty"`
|
DeletionProtection *CustomBool `json:"protection,omitempty"`
|
||||||
Description *string `json:"description,omitempty"`
|
Description *string `json:"description,omitempty"`
|
||||||
EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty"`
|
EFIDisk *CustomEFIDisk `json:"efidisk0,omitempty"`
|
||||||
@ -299,7 +282,7 @@ type VirtualEnvironmentVMGetResponseData struct {
|
|||||||
HookScript *string `json:"hookscript,omitempty"`
|
HookScript *string `json:"hookscript,omitempty"`
|
||||||
Hotplug *CustomCommaSeparatedList `json:"hotplug,omitempty"`
|
Hotplug *CustomCommaSeparatedList `json:"hotplug,omitempty"`
|
||||||
Hugepages *string `json:"hugepages,omitempty"`
|
Hugepages *string `json:"hugepages,omitempty"`
|
||||||
IDEDevices *CustomIDEDevices `json:"ide,omitempty"`
|
IDEDevices *CustomStorageDevices `json:"ide,omitempty"`
|
||||||
KeyboardLayout *string `json:"keyboard,omitempty"`
|
KeyboardLayout *string `json:"keyboard,omitempty"`
|
||||||
KVMArguments *CustomLineBreakSeparatedList `json:"args,omitempty"`
|
KVMArguments *CustomLineBreakSeparatedList `json:"args,omitempty"`
|
||||||
KVMEnabled *CustomBool `json:"kvm,omitempty"`
|
KVMEnabled *CustomBool `json:"kvm,omitempty"`
|
||||||
@ -316,8 +299,8 @@ type VirtualEnvironmentVMGetResponseData struct {
|
|||||||
Overwrite *CustomBool `json:"force,omitempty"`
|
Overwrite *CustomBool `json:"force,omitempty"`
|
||||||
PCIDevices *CustomPCIDevices `json:"hostpci,omitempty"`
|
PCIDevices *CustomPCIDevices `json:"hostpci,omitempty"`
|
||||||
Revert *string `json:"revert,omitempty"`
|
Revert *string `json:"revert,omitempty"`
|
||||||
SATADevices *CustomSATADevices `json:"sata,omitempty"`
|
SATADevices *CustomStorageDevices `json:"sata,omitempty"`
|
||||||
SCSIDevices *CustomSCSIDevices `json:"scsi,omitempty"`
|
SCSIDevices *CustomStorageDevices `json:"scsi,omitempty"`
|
||||||
SCSIHardware *string `json:"scsihw,omitempty"`
|
SCSIHardware *string `json:"scsihw,omitempty"`
|
||||||
SerialDevices *CustomSerialDevices `json:"serial,omitempty"`
|
SerialDevices *CustomSerialDevices `json:"serial,omitempty"`
|
||||||
SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty"`
|
SharedMemory *CustomSharedMemory `json:"ivshmem,omitempty"`
|
||||||
@ -477,38 +460,6 @@ func (r CustomEFIDisk) EncodeValues(key string, v *url.Values) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// EncodeValues converts a CustomIDEDevice struct to a URL vlaue.
|
|
||||||
func (r CustomIDEDevice) EncodeValues(key string, v *url.Values) error {
|
|
||||||
values := []string{
|
|
||||||
fmt.Sprintf("file=%s", r.FileVolume),
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.AIO != nil {
|
|
||||||
values = append(values, fmt.Sprintf("aio=%s", *r.AIO))
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.BackupEnabled != nil {
|
|
||||||
if *r.BackupEnabled {
|
|
||||||
values = append(values, "backup=1")
|
|
||||||
} else {
|
|
||||||
values = append(values, "backup=0")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
v.Add(key, strings.Join(values, ","))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomIDEDevices array to multiple URL values.
|
|
||||||
func (r CustomIDEDevices) EncodeValues(key string, v *url.Values) error {
|
|
||||||
for i, d := range r {
|
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomNetworkDevice struct to a URL vlaue.
|
// EncodeValues converts a CustomNetworkDevice struct to a URL vlaue.
|
||||||
func (r CustomNetworkDevice) EncodeValues(key string, v *url.Values) error {
|
func (r CustomNetworkDevice) EncodeValues(key string, v *url.Values) error {
|
||||||
values := []string{
|
values := []string{
|
||||||
@ -552,7 +503,13 @@ func (r CustomNetworkDevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if len(r.Trunks) > 0 {
|
if len(r.Trunks) > 0 {
|
||||||
values = append(values, fmt.Sprintf("trunks=%s", strings.Join(r.Trunks, ";")))
|
trunks := make([]string, len(r.Trunks))
|
||||||
|
|
||||||
|
for i, v := range r.Trunks {
|
||||||
|
trunks[i] = strconv.Itoa(v)
|
||||||
|
}
|
||||||
|
|
||||||
|
values = append(values, fmt.Sprintf("trunks=%s", strings.Join(trunks, ";")))
|
||||||
}
|
}
|
||||||
|
|
||||||
v.Add(key, strings.Join(values, ","))
|
v.Add(key, strings.Join(values, ","))
|
||||||
@ -563,7 +520,7 @@ func (r CustomNetworkDevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomNetworkDevices array to multiple URL values.
|
// EncodeValues converts a CustomNetworkDevices array to multiple URL values.
|
||||||
func (r CustomNetworkDevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomNetworkDevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -595,7 +552,7 @@ func (r CustomNUMADevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomNUMADevices array to multiple URL values.
|
// EncodeValues converts a CustomNUMADevices array to multiple URL values.
|
||||||
func (r CustomNUMADevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomNUMADevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -647,71 +604,7 @@ func (r CustomPCIDevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomPCIDevices array to multiple URL values.
|
// EncodeValues converts a CustomPCIDevices array to multiple URL values.
|
||||||
func (r CustomPCIDevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomPCIDevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomSATADevice struct to a URL vlaue.
|
|
||||||
func (r CustomSATADevice) EncodeValues(key string, v *url.Values) error {
|
|
||||||
values := []string{
|
|
||||||
fmt.Sprintf("file=%s", r.FileVolume),
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.AIO != nil {
|
|
||||||
values = append(values, fmt.Sprintf("aio=%s", *r.AIO))
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.BackupEnabled != nil {
|
|
||||||
if *r.BackupEnabled {
|
|
||||||
values = append(values, "backup=1")
|
|
||||||
} else {
|
|
||||||
values = append(values, "backup=0")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
v.Add(key, strings.Join(values, ","))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomSATADevices array to multiple URL values.
|
|
||||||
func (r CustomSATADevices) EncodeValues(key string, v *url.Values) error {
|
|
||||||
for i, d := range r {
|
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomSCSIDevice struct to a URL vlaue.
|
|
||||||
func (r CustomSCSIDevice) EncodeValues(key string, v *url.Values) error {
|
|
||||||
values := []string{
|
|
||||||
fmt.Sprintf("file=%s", r.FileVolume),
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.AIO != nil {
|
|
||||||
values = append(values, fmt.Sprintf("aio=%s", *r.AIO))
|
|
||||||
}
|
|
||||||
|
|
||||||
if r.BackupEnabled != nil {
|
|
||||||
if *r.BackupEnabled {
|
|
||||||
values = append(values, "backup=1")
|
|
||||||
} else {
|
|
||||||
values = append(values, "backup=0")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
v.Add(key, strings.Join(values, ","))
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// EncodeValues converts a CustomSCSIDevices array to multiple URL values.
|
|
||||||
func (r CustomSCSIDevices) EncodeValues(key string, v *url.Values) error {
|
|
||||||
for i, d := range r {
|
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -720,7 +613,7 @@ func (r CustomSCSIDevices) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomSerialDevices array to multiple URL values.
|
// EncodeValues converts a CustomSerialDevices array to multiple URL values.
|
||||||
func (r CustomSerialDevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomSerialDevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
v.Add(fmt.Sprintf("%s[%d]", key, i), d)
|
v.Add(fmt.Sprintf("%s%d", key, i), d)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -834,6 +727,40 @@ func (r CustomStartupOrder) EncodeValues(key string, v *url.Values) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EncodeValues converts a CustomStorageDevice struct to a URL vlaue.
|
||||||
|
func (r CustomStorageDevice) EncodeValues(key string, v *url.Values) error {
|
||||||
|
values := []string{
|
||||||
|
fmt.Sprintf("file=%s", r.FileVolume),
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.AIO != nil {
|
||||||
|
values = append(values, fmt.Sprintf("aio=%s", *r.AIO))
|
||||||
|
}
|
||||||
|
|
||||||
|
if r.BackupEnabled != nil {
|
||||||
|
if *r.BackupEnabled {
|
||||||
|
values = append(values, "backup=1")
|
||||||
|
} else {
|
||||||
|
values = append(values, "backup=0")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
v.Add(key, strings.Join(values, ","))
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncodeValues converts a CustomStorageDevices array to multiple URL values.
|
||||||
|
func (r CustomStorageDevices) EncodeValues(key string, v *url.Values) error {
|
||||||
|
for i, d := range r {
|
||||||
|
if d.Enabled {
|
||||||
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// EncodeValues converts a CustomUSBDevice struct to a URL vlaue.
|
// EncodeValues converts a CustomUSBDevice struct to a URL vlaue.
|
||||||
func (r CustomUSBDevice) EncodeValues(key string, v *url.Values) error {
|
func (r CustomUSBDevice) EncodeValues(key string, v *url.Values) error {
|
||||||
values := []string{
|
values := []string{
|
||||||
@ -856,7 +783,7 @@ func (r CustomUSBDevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomUSBDevices array to multiple URL values.
|
// EncodeValues converts a CustomUSBDevices array to multiple URL values.
|
||||||
func (r CustomUSBDevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomUSBDevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@ -903,7 +830,9 @@ func (r CustomVirtualIODevice) EncodeValues(key string, v *url.Values) error {
|
|||||||
// EncodeValues converts a CustomVirtualIODevices array to multiple URL values.
|
// EncodeValues converts a CustomVirtualIODevices array to multiple URL values.
|
||||||
func (r CustomVirtualIODevices) EncodeValues(key string, v *url.Values) error {
|
func (r CustomVirtualIODevices) EncodeValues(key string, v *url.Values) error {
|
||||||
for i, d := range r {
|
for i, d := range r {
|
||||||
d.EncodeValues(fmt.Sprintf("%s[%d]", key, i), v)
|
if d.Enabled {
|
||||||
|
d.EncodeValues(fmt.Sprintf("%s%d", key, i), v)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -236,8 +236,6 @@ func resourceVirtualEnvironmentUserRead(d *schema.ResourceData, m interface{}) e
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
d.SetId(userID)
|
|
||||||
|
|
||||||
aclParsed := make([]interface{}, 0)
|
aclParsed := make([]interface{}, 0)
|
||||||
|
|
||||||
for _, v := range acl {
|
for _, v := range acl {
|
||||||
|
335
proxmoxtf/resource_virtual_environment_vm.go
Normal file
335
proxmoxtf/resource_virtual_environment_vm.go
Normal file
@ -0,0 +1,335 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package proxmoxtf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
"github.com/hashicorp/terraform/helper/validation"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
dvResourceVirtualEnvironmentVMCPUCores = 1
|
||||||
|
dvResourceVirtualEnvironmentVMCPUSockets = 1
|
||||||
|
dvResourceVirtualEnvironmentVMDiskDatastoreID = "local-lvm"
|
||||||
|
dvResourceVirtualEnvironmentVMDiskFileID = ""
|
||||||
|
dvResourceVirtualEnvironmentVMDiskSize = 8
|
||||||
|
dvResourceVirtualEnvironmentVMMemoryDedicated = 256
|
||||||
|
dvResourceVirtualEnvironmentVMMemoryFloating = 0
|
||||||
|
dvResourceVirtualEnvironmentVMMemoryShared = 0
|
||||||
|
dvResourceVirtualEnvironmentVMName = ""
|
||||||
|
dvResourceVirtualEnvironmentVMNetworkDeviceBridge = "vmbr0"
|
||||||
|
dvResourceVirtualEnvironmentVMNetworkDeviceMACAddress = ""
|
||||||
|
dvResourceVirtualEnvironmentVMNetworkDeviceModel = "virtio"
|
||||||
|
dvResourceVirtualEnvironmentVMNetworkDeviceVLANID = -1
|
||||||
|
dvResourceVirtualEnvironmentVMVMID = -1
|
||||||
|
|
||||||
|
mkResourceVirtualEnvironmentVMCPU = "cpu"
|
||||||
|
mkResourceVirtualEnvironmentVMCPUCores = "cores"
|
||||||
|
mkResourceVirtualEnvironmentVMCPUSockets = "sockets"
|
||||||
|
mkResourceVirtualEnvironmentVMDisk = "disk"
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDatastoreID = "datastore_id"
|
||||||
|
mkResourceVirtualEnvironmentVMDiskFileID = "file_id"
|
||||||
|
mkResourceVirtualEnvironmentVMDiskSize = "size"
|
||||||
|
mkResourceVirtualEnvironmentVMMemory = "memory"
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryDedicated = "dedicated"
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryFloating = "floating"
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryShared = "shared"
|
||||||
|
mkResourceVirtualEnvironmentVMName = "name"
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDevice = "network_device"
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceBridge = "bridge"
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceMACAddress = "mac_address"
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceModel = "model"
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceVLANID = "vlan_id"
|
||||||
|
mkResourceVirtualEnvironmentVMVMID = "vm_id"
|
||||||
|
)
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVM() *schema.Resource {
|
||||||
|
return &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
mkResourceVirtualEnvironmentVMCPU: &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The CPU allocation",
|
||||||
|
Optional: true,
|
||||||
|
DefaultFunc: func() (interface{}, error) {
|
||||||
|
defaultList := make([]interface{}, 1)
|
||||||
|
defaultMap := make(map[string]interface{})
|
||||||
|
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMCPUCores] = dvResourceVirtualEnvironmentVMCPUCores
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMCPUSockets] = dvResourceVirtualEnvironmentVMCPUSockets
|
||||||
|
|
||||||
|
defaultList[0] = defaultMap
|
||||||
|
|
||||||
|
return defaultList, nil
|
||||||
|
},
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
mkResourceVirtualEnvironmentVMCPUCores: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The number of CPU cores",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMCPUCores,
|
||||||
|
ValidateFunc: validation.IntBetween(1, 2304),
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMCPUSockets: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The number of CPU sockets",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMCPUSockets,
|
||||||
|
ValidateFunc: validation.IntBetween(1, 16),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
MaxItems: 1,
|
||||||
|
MinItems: 1,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMDisk: &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The disk devices",
|
||||||
|
Optional: true,
|
||||||
|
DefaultFunc: func() (interface{}, error) {
|
||||||
|
defaultList := make([]interface{}, 1)
|
||||||
|
defaultMap := make(map[string]interface{})
|
||||||
|
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMDiskDatastoreID] = dvResourceVirtualEnvironmentVMDiskDatastoreID
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMDiskFileID] = dvResourceVirtualEnvironmentVMDiskFileID
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMDiskSize] = dvResourceVirtualEnvironmentVMDiskSize
|
||||||
|
|
||||||
|
defaultList[0] = defaultMap
|
||||||
|
|
||||||
|
return defaultList, nil
|
||||||
|
},
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDatastoreID: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The datastore id",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMDiskDatastoreID,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMDiskFileID: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The file id for a disk image",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMDiskFileID,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMDiskSize: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The disk size in gigabytes",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMDiskSize,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
MaxItems: 14,
|
||||||
|
MinItems: 1,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMMemory: &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The memory allocation",
|
||||||
|
Optional: true,
|
||||||
|
DefaultFunc: func() (interface{}, error) {
|
||||||
|
defaultList := make([]interface{}, 1)
|
||||||
|
defaultMap := make(map[string]interface{})
|
||||||
|
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMMemoryDedicated] = dvResourceVirtualEnvironmentVMMemoryDedicated
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMMemoryFloating] = dvResourceVirtualEnvironmentVMMemoryFloating
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMMemoryShared] = dvResourceVirtualEnvironmentVMMemoryShared
|
||||||
|
|
||||||
|
defaultList[0] = defaultMap
|
||||||
|
|
||||||
|
return defaultList, nil
|
||||||
|
},
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryDedicated: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The dedicated memory in megabytes",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMMemoryDedicated,
|
||||||
|
ValidateFunc: validation.IntBetween(64, 268435456),
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryFloating: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The floating memory in megabytes (balloon)",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMMemoryFloating,
|
||||||
|
ValidateFunc: validation.IntBetween(0, 268435456),
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryShared: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The shared memory in megabytes",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMMemoryShared,
|
||||||
|
ValidateFunc: validation.IntBetween(0, 268435456),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
MaxItems: 1,
|
||||||
|
MinItems: 1,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMName: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The name",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMName,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDevice: &schema.Schema{
|
||||||
|
Type: schema.TypeList,
|
||||||
|
Description: "The network devices",
|
||||||
|
Optional: true,
|
||||||
|
DefaultFunc: func() (interface{}, error) {
|
||||||
|
defaultList := make([]interface{}, 1)
|
||||||
|
defaultMap := make(map[string]interface{})
|
||||||
|
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMNetworkDeviceBridge] = dvResourceVirtualEnvironmentVMNetworkDeviceBridge
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMNetworkDeviceMACAddress] = dvResourceVirtualEnvironmentVMNetworkDeviceMACAddress
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMNetworkDeviceModel] = dvResourceVirtualEnvironmentVMNetworkDeviceModel
|
||||||
|
defaultMap[mkResourceVirtualEnvironmentVMNetworkDeviceVLANID] = dvResourceVirtualEnvironmentVMNetworkDeviceVLANID
|
||||||
|
|
||||||
|
defaultList[0] = defaultMap
|
||||||
|
|
||||||
|
return defaultList, nil
|
||||||
|
},
|
||||||
|
Elem: &schema.Resource{
|
||||||
|
Schema: map[string]*schema.Schema{
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceBridge: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The bridge",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMNetworkDeviceBridge,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceMACAddress: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The MAC address",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMNetworkDeviceMACAddress,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceModel: {
|
||||||
|
Type: schema.TypeString,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The model",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMNetworkDeviceModel,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceVLANID: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The VLAN identifier",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMNetworkDeviceVLANID,
|
||||||
|
ValidateFunc: func(i interface{}, k string) (s []string, es []error) {
|
||||||
|
min := 1
|
||||||
|
|
||||||
|
v, ok := i.(int)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
es = append(es, fmt.Errorf("expected type of %s to be int", k))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if v != -1 {
|
||||||
|
if v < min {
|
||||||
|
es = append(es, fmt.Errorf("expected %s to be at least %d, got %d", k, min, v))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
MaxItems: 8,
|
||||||
|
MinItems: 0,
|
||||||
|
},
|
||||||
|
mkResourceVirtualEnvironmentVMVMID: {
|
||||||
|
Type: schema.TypeInt,
|
||||||
|
Optional: true,
|
||||||
|
Description: "The identifier",
|
||||||
|
Default: dvResourceVirtualEnvironmentVMVMID,
|
||||||
|
ValidateFunc: func(i interface{}, k string) (s []string, es []error) {
|
||||||
|
min := 100
|
||||||
|
max := 2000000
|
||||||
|
|
||||||
|
v, ok := i.(int)
|
||||||
|
|
||||||
|
if !ok {
|
||||||
|
es = append(es, fmt.Errorf("expected type of %s to be int", k))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if v != -1 {
|
||||||
|
if v < min || v > max {
|
||||||
|
es = append(es, fmt.Errorf("expected %s to be in the range (%d - %d), got %d", k, min, max, v))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Create: resourceVirtualEnvironmentVMCreate,
|
||||||
|
Read: resourceVirtualEnvironmentVMRead,
|
||||||
|
Update: resourceVirtualEnvironmentVMUpdate,
|
||||||
|
Delete: resourceVirtualEnvironmentVMDelete,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVMCreate(d *schema.ResourceData, m interface{}) error {
|
||||||
|
/*
|
||||||
|
config := m.(providerConfiguration)
|
||||||
|
veClient, err := config.GetVEClient()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId("")
|
||||||
|
*/
|
||||||
|
|
||||||
|
return resourceVirtualEnvironmentVMRead(d, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVMRead(d *schema.ResourceData, m interface{}) error {
|
||||||
|
/*
|
||||||
|
config := m.(providerConfiguration)
|
||||||
|
veClient, err := config.GetVEClient()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVMUpdate(d *schema.ResourceData, m interface{}) error {
|
||||||
|
/*
|
||||||
|
config := m.(providerConfiguration)
|
||||||
|
veClient, err := config.GetVEClient()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
return resourceVirtualEnvironmentVMRead(d, m)
|
||||||
|
}
|
||||||
|
|
||||||
|
func resourceVirtualEnvironmentVMDelete(d *schema.ResourceData, m interface{}) error {
|
||||||
|
/*
|
||||||
|
config := m.(providerConfiguration)
|
||||||
|
veClient, err := config.GetVEClient()
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.SetId("")
|
||||||
|
*/
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
122
proxmoxtf/resource_virtual_environment_vm_test.go
Normal file
122
proxmoxtf/resource_virtual_environment_vm_test.go
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
package proxmoxtf
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/hashicorp/terraform/helper/schema"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TestResourceVirtualEnvironmentVMInstantiation tests whether the ResourceVirtualEnvironmentVM instance can be instantiated.
|
||||||
|
func TestResourceVirtualEnvironmentVMInstantiation(t *testing.T) {
|
||||||
|
s := resourceVirtualEnvironmentVM()
|
||||||
|
|
||||||
|
if s == nil {
|
||||||
|
t.Fatalf("Cannot instantiate resourceVirtualEnvironmentVM")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// TestResourceVirtualEnvironmentVMSchema tests the resourceVirtualEnvironmentVM schema.
|
||||||
|
func TestResourceVirtualEnvironmentVMSchema(t *testing.T) {
|
||||||
|
s := resourceVirtualEnvironmentVM()
|
||||||
|
|
||||||
|
testOptionalArguments(t, s, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMCPU,
|
||||||
|
mkResourceVirtualEnvironmentVMDisk,
|
||||||
|
mkResourceVirtualEnvironmentVMMemory,
|
||||||
|
mkResourceVirtualEnvironmentVMName,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDevice,
|
||||||
|
mkResourceVirtualEnvironmentVMVMID,
|
||||||
|
})
|
||||||
|
|
||||||
|
testSchemaValueTypes(t, s, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMCPU,
|
||||||
|
mkResourceVirtualEnvironmentVMDisk,
|
||||||
|
mkResourceVirtualEnvironmentVMMemory,
|
||||||
|
mkResourceVirtualEnvironmentVMName,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDevice,
|
||||||
|
mkResourceVirtualEnvironmentVMVMID,
|
||||||
|
}, []schema.ValueType{
|
||||||
|
schema.TypeList,
|
||||||
|
schema.TypeList,
|
||||||
|
schema.TypeList,
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeList,
|
||||||
|
schema.TypeInt,
|
||||||
|
})
|
||||||
|
|
||||||
|
cpuSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMCPU)
|
||||||
|
|
||||||
|
testOptionalArguments(t, cpuSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMCPUCores,
|
||||||
|
mkResourceVirtualEnvironmentVMCPUSockets,
|
||||||
|
})
|
||||||
|
|
||||||
|
testSchemaValueTypes(t, cpuSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMCPUCores,
|
||||||
|
mkResourceVirtualEnvironmentVMCPUSockets,
|
||||||
|
}, []schema.ValueType{
|
||||||
|
schema.TypeInt,
|
||||||
|
schema.TypeInt,
|
||||||
|
})
|
||||||
|
|
||||||
|
diskSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMDisk)
|
||||||
|
|
||||||
|
testOptionalArguments(t, diskSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDatastoreID,
|
||||||
|
mkResourceVirtualEnvironmentVMDiskFileID,
|
||||||
|
mkResourceVirtualEnvironmentVMDiskSize,
|
||||||
|
})
|
||||||
|
|
||||||
|
testSchemaValueTypes(t, diskSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMDiskDatastoreID,
|
||||||
|
mkResourceVirtualEnvironmentVMDiskFileID,
|
||||||
|
mkResourceVirtualEnvironmentVMDiskSize,
|
||||||
|
}, []schema.ValueType{
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeInt,
|
||||||
|
})
|
||||||
|
|
||||||
|
memorySchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMMemory)
|
||||||
|
|
||||||
|
testOptionalArguments(t, memorySchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryDedicated,
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryFloating,
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryShared,
|
||||||
|
})
|
||||||
|
|
||||||
|
testSchemaValueTypes(t, memorySchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryDedicated,
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryFloating,
|
||||||
|
mkResourceVirtualEnvironmentVMMemoryShared,
|
||||||
|
}, []schema.ValueType{
|
||||||
|
schema.TypeInt,
|
||||||
|
schema.TypeInt,
|
||||||
|
schema.TypeInt,
|
||||||
|
})
|
||||||
|
|
||||||
|
networkDeviceSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentVMNetworkDevice)
|
||||||
|
|
||||||
|
testOptionalArguments(t, networkDeviceSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceBridge,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceMACAddress,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceModel,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceVLANID,
|
||||||
|
})
|
||||||
|
|
||||||
|
testSchemaValueTypes(t, networkDeviceSchema, []string{
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceBridge,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceMACAddress,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceModel,
|
||||||
|
mkResourceVirtualEnvironmentVMNetworkDeviceVLANID,
|
||||||
|
}, []schema.ValueType{
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeString,
|
||||||
|
schema.TypeInt,
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user