mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-07-01 19:12:59 +00:00
Add disk argument to container resource
This commit is contained in:
parent
1c96dc1803
commit
a9616648dc
@ -2,6 +2,7 @@
|
||||
|
||||
ENHANCEMENTS:
|
||||
|
||||
* resource/virtual_environment_container: Add `disk` argument
|
||||
* resource/virtual_environment_vm: Add `audio_device` argument
|
||||
* resource/virtual_environment_vm: Add `serial_device` argument
|
||||
|
||||
|
@ -304,6 +304,8 @@ This data source doesn't accept arguments.
|
||||
* `cores` - (Optional) The number of CPU cores (defaults to `1`)
|
||||
* `units` - (Optional) The CPU units (defaults to `1024`)
|
||||
* `description` - (Optional) The description
|
||||
* `disk` - (Optional) A disk
|
||||
* `datastore_id` - (Optional) The ID of the datastore to create the disk in (defaults to `local-lvm`)
|
||||
* `initialization` - (Optional) The initialization configuration
|
||||
* `dns` - (Optional) The DNS configuration
|
||||
* `domain` - (Optional) The DNS search domain
|
||||
|
@ -31,13 +31,6 @@ const (
|
||||
dvResourceVirtualEnvironmentContainerCPUUnits = 1024
|
||||
dvResourceVirtualEnvironmentContainerDescription = ""
|
||||
dvResourceVirtualEnvironmentContainerDiskDatastoreID = "local-lvm"
|
||||
dvResourceVirtualEnvironmentContainerDiskFileFormat = "qcow2"
|
||||
dvResourceVirtualEnvironmentContainerDiskFileID = ""
|
||||
dvResourceVirtualEnvironmentContainerDiskSize = 8
|
||||
dvResourceVirtualEnvironmentContainerDiskSpeedRead = 0
|
||||
dvResourceVirtualEnvironmentContainerDiskSpeedReadBurstable = 0
|
||||
dvResourceVirtualEnvironmentContainerDiskSpeedWrite = 0
|
||||
dvResourceVirtualEnvironmentContainerDiskSpeedWriteBurstable = 0
|
||||
dvResourceVirtualEnvironmentContainerMemoryDedicated = 512
|
||||
dvResourceVirtualEnvironmentContainerMemorySwap = 0
|
||||
dvResourceVirtualEnvironmentContainerNetworkInterfaceBridge = "vmbr0"
|
||||
@ -59,6 +52,8 @@ const (
|
||||
mkResourceVirtualEnvironmentContainerCPUCores = "cores"
|
||||
mkResourceVirtualEnvironmentContainerCPUUnits = "units"
|
||||
mkResourceVirtualEnvironmentContainerDescription = "description"
|
||||
mkResourceVirtualEnvironmentContainerDisk = "disk"
|
||||
mkResourceVirtualEnvironmentContainerDiskDatastoreID = "datastore_id"
|
||||
mkResourceVirtualEnvironmentContainerInitialization = "initialization"
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
||||
@ -184,6 +179,32 @@ func resourceVirtualEnvironmentContainer() *schema.Resource {
|
||||
Optional: true,
|
||||
Default: dvResourceVirtualEnvironmentContainerDescription,
|
||||
},
|
||||
mkResourceVirtualEnvironmentContainerDisk: &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
Description: "The disks",
|
||||
Optional: true,
|
||||
ForceNew: true,
|
||||
DefaultFunc: func() (interface{}, error) {
|
||||
return []interface{}{
|
||||
map[string]interface{}{
|
||||
mkResourceVirtualEnvironmentVMDiskDatastoreID: dvResourceVirtualEnvironmentContainerDiskDatastoreID,
|
||||
},
|
||||
}, nil
|
||||
},
|
||||
Elem: &schema.Resource{
|
||||
Schema: map[string]*schema.Schema{
|
||||
mkResourceVirtualEnvironmentContainerDiskDatastoreID: {
|
||||
Type: schema.TypeString,
|
||||
Description: "The datastore id",
|
||||
Optional: true,
|
||||
ForceNew: true,
|
||||
Default: dvResourceVirtualEnvironmentContainerDiskDatastoreID,
|
||||
},
|
||||
},
|
||||
},
|
||||
MaxItems: 1,
|
||||
MinItems: 0,
|
||||
},
|
||||
mkResourceVirtualEnvironmentContainerInitialization: &schema.Schema{
|
||||
Type: schema.TypeList,
|
||||
Description: "The initialization configuration",
|
||||
@ -511,6 +532,14 @@ func resourceVirtualEnvironmentContainerCreate(d *schema.ResourceData, m interfa
|
||||
|
||||
description := d.Get(mkResourceVirtualEnvironmentContainerDescription).(string)
|
||||
|
||||
diskBlock, err := getSchemaBlock(resource, d, m, []string{mkResourceVirtualEnvironmentContainerDisk}, 0, true)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
diskDatastoreID := diskBlock[mkResourceVirtualEnvironmentContainerDiskDatastoreID].(string)
|
||||
|
||||
initialization := d.Get(mkResourceVirtualEnvironmentContainerInitialization).([]interface{})
|
||||
initializationDNSDomain := dvResourceVirtualEnvironmentContainerInitializationDNSDomain
|
||||
initializationDNSServer := dvResourceVirtualEnvironmentContainerInitializationDNSServer
|
||||
@ -666,15 +695,13 @@ func resourceVirtualEnvironmentContainerCreate(d *schema.ResourceData, m interfa
|
||||
}
|
||||
|
||||
// Attempt to create the resource using the retrieved values.
|
||||
datastoreID := "local-lvm"
|
||||
|
||||
body := proxmox.VirtualEnvironmentContainerCreateRequestBody{
|
||||
ConsoleEnabled: &consoleEnabled,
|
||||
ConsoleMode: &consoleMode,
|
||||
CPUArchitecture: &cpuArchitecture,
|
||||
CPUCores: &cpuCores,
|
||||
CPUUnits: &cpuUnits,
|
||||
DatastoreID: &datastoreID,
|
||||
DatastoreID: &diskDatastoreID,
|
||||
DedicatedMemory: &memoryDedicated,
|
||||
NetworkInterfaces: networkInterfaceArray,
|
||||
OSTemplateFileVolume: &operatingSystemTemplateFileID,
|
||||
@ -901,6 +928,25 @@ func resourceVirtualEnvironmentContainerRead(d *schema.ResourceData, m interface
|
||||
d.Set(mkResourceVirtualEnvironmentContainerCPU, []interface{}{cpu})
|
||||
}
|
||||
|
||||
// Compare the disk configuration to the one stored in the state.
|
||||
disk := map[string]interface{}{}
|
||||
|
||||
if containerConfig.RootFS != nil {
|
||||
volumeParts := strings.Split(containerConfig.RootFS.Volume, ":")
|
||||
|
||||
disk[mkResourceVirtualEnvironmentContainerDiskDatastoreID] = volumeParts[0]
|
||||
} else {
|
||||
// Default value of "storage" is "local" according to the API documentation.
|
||||
disk[mkResourceVirtualEnvironmentContainerDiskDatastoreID] = "local"
|
||||
}
|
||||
|
||||
currentDisk := d.Get(mkResourceVirtualEnvironmentContainerDisk).([]interface{})
|
||||
|
||||
if len(currentDisk) > 0 ||
|
||||
disk[mkResourceVirtualEnvironmentContainerDiskDatastoreID] != dvResourceVirtualEnvironmentContainerDiskDatastoreID {
|
||||
d.Set(mkResourceVirtualEnvironmentContainerDiskDatastoreID, []interface{}{disk})
|
||||
}
|
||||
|
||||
// Compare the memory configuration to the one stored in the state.
|
||||
memory := map[string]interface{}{}
|
||||
|
||||
|
@ -31,6 +31,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
||||
testOptionalArguments(t, s, []string{
|
||||
mkResourceVirtualEnvironmentContainerCPU,
|
||||
mkResourceVirtualEnvironmentContainerDescription,
|
||||
mkResourceVirtualEnvironmentContainerDisk,
|
||||
mkResourceVirtualEnvironmentContainerInitialization,
|
||||
mkResourceVirtualEnvironmentContainerMemory,
|
||||
mkResourceVirtualEnvironmentContainerPoolID,
|
||||
@ -41,6 +42,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
||||
testSchemaValueTypes(t, s, []string{
|
||||
mkResourceVirtualEnvironmentContainerCPU,
|
||||
mkResourceVirtualEnvironmentContainerDescription,
|
||||
mkResourceVirtualEnvironmentContainerDisk,
|
||||
mkResourceVirtualEnvironmentContainerInitialization,
|
||||
mkResourceVirtualEnvironmentContainerMemory,
|
||||
mkResourceVirtualEnvironmentContainerOperatingSystem,
|
||||
@ -53,6 +55,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
||||
schema.TypeList,
|
||||
schema.TypeList,
|
||||
schema.TypeList,
|
||||
schema.TypeList,
|
||||
schema.TypeString,
|
||||
schema.TypeBool,
|
||||
schema.TypeInt,
|
||||
@ -76,6 +79,18 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
||||
schema.TypeInt,
|
||||
})
|
||||
|
||||
diskSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerDisk)
|
||||
|
||||
testOptionalArguments(t, diskSchema, []string{
|
||||
mkResourceVirtualEnvironmentContainerDiskDatastoreID,
|
||||
})
|
||||
|
||||
testSchemaValueTypes(t, diskSchema, []string{
|
||||
mkResourceVirtualEnvironmentContainerDiskDatastoreID,
|
||||
}, []schema.ValueType{
|
||||
schema.TypeString,
|
||||
})
|
||||
|
||||
initializationSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerInitialization)
|
||||
|
||||
testOptionalArguments(t, initializationSchema, []string{
|
||||
|
Loading…
Reference in New Issue
Block a user