0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-01 11:02:59 +00:00

Add disk argument to container resource

This commit is contained in:
Dan Petersen 2020-01-14 22:46:14 +01:00
parent 1c96dc1803
commit a9616648dc
4 changed files with 74 additions and 10 deletions

View File

@ -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

View File

@ -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

View File

@ -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{}{}

View File

@ -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{