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:
|
ENHANCEMENTS:
|
||||||
|
|
||||||
|
* resource/virtual_environment_container: Add `disk` argument
|
||||||
* resource/virtual_environment_vm: Add `audio_device` argument
|
* resource/virtual_environment_vm: Add `audio_device` argument
|
||||||
* resource/virtual_environment_vm: Add `serial_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`)
|
* `cores` - (Optional) The number of CPU cores (defaults to `1`)
|
||||||
* `units` - (Optional) The CPU units (defaults to `1024`)
|
* `units` - (Optional) The CPU units (defaults to `1024`)
|
||||||
* `description` - (Optional) The description
|
* `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
|
* `initialization` - (Optional) The initialization configuration
|
||||||
* `dns` - (Optional) The DNS configuration
|
* `dns` - (Optional) The DNS configuration
|
||||||
* `domain` - (Optional) The DNS search domain
|
* `domain` - (Optional) The DNS search domain
|
||||||
|
@ -31,13 +31,6 @@ const (
|
|||||||
dvResourceVirtualEnvironmentContainerCPUUnits = 1024
|
dvResourceVirtualEnvironmentContainerCPUUnits = 1024
|
||||||
dvResourceVirtualEnvironmentContainerDescription = ""
|
dvResourceVirtualEnvironmentContainerDescription = ""
|
||||||
dvResourceVirtualEnvironmentContainerDiskDatastoreID = "local-lvm"
|
dvResourceVirtualEnvironmentContainerDiskDatastoreID = "local-lvm"
|
||||||
dvResourceVirtualEnvironmentContainerDiskFileFormat = "qcow2"
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskFileID = ""
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskSize = 8
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskSpeedRead = 0
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskSpeedReadBurstable = 0
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskSpeedWrite = 0
|
|
||||||
dvResourceVirtualEnvironmentContainerDiskSpeedWriteBurstable = 0
|
|
||||||
dvResourceVirtualEnvironmentContainerMemoryDedicated = 512
|
dvResourceVirtualEnvironmentContainerMemoryDedicated = 512
|
||||||
dvResourceVirtualEnvironmentContainerMemorySwap = 0
|
dvResourceVirtualEnvironmentContainerMemorySwap = 0
|
||||||
dvResourceVirtualEnvironmentContainerNetworkInterfaceBridge = "vmbr0"
|
dvResourceVirtualEnvironmentContainerNetworkInterfaceBridge = "vmbr0"
|
||||||
@ -59,6 +52,8 @@ const (
|
|||||||
mkResourceVirtualEnvironmentContainerCPUCores = "cores"
|
mkResourceVirtualEnvironmentContainerCPUCores = "cores"
|
||||||
mkResourceVirtualEnvironmentContainerCPUUnits = "units"
|
mkResourceVirtualEnvironmentContainerCPUUnits = "units"
|
||||||
mkResourceVirtualEnvironmentContainerDescription = "description"
|
mkResourceVirtualEnvironmentContainerDescription = "description"
|
||||||
|
mkResourceVirtualEnvironmentContainerDisk = "disk"
|
||||||
|
mkResourceVirtualEnvironmentContainerDiskDatastoreID = "datastore_id"
|
||||||
mkResourceVirtualEnvironmentContainerInitialization = "initialization"
|
mkResourceVirtualEnvironmentContainerInitialization = "initialization"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
mkResourceVirtualEnvironmentContainerInitializationDNS = "dns"
|
||||||
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain"
|
||||||
@ -184,6 +179,32 @@ func resourceVirtualEnvironmentContainer() *schema.Resource {
|
|||||||
Optional: true,
|
Optional: true,
|
||||||
Default: dvResourceVirtualEnvironmentContainerDescription,
|
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{
|
mkResourceVirtualEnvironmentContainerInitialization: &schema.Schema{
|
||||||
Type: schema.TypeList,
|
Type: schema.TypeList,
|
||||||
Description: "The initialization configuration",
|
Description: "The initialization configuration",
|
||||||
@ -511,6 +532,14 @@ func resourceVirtualEnvironmentContainerCreate(d *schema.ResourceData, m interfa
|
|||||||
|
|
||||||
description := d.Get(mkResourceVirtualEnvironmentContainerDescription).(string)
|
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{})
|
initialization := d.Get(mkResourceVirtualEnvironmentContainerInitialization).([]interface{})
|
||||||
initializationDNSDomain := dvResourceVirtualEnvironmentContainerInitializationDNSDomain
|
initializationDNSDomain := dvResourceVirtualEnvironmentContainerInitializationDNSDomain
|
||||||
initializationDNSServer := dvResourceVirtualEnvironmentContainerInitializationDNSServer
|
initializationDNSServer := dvResourceVirtualEnvironmentContainerInitializationDNSServer
|
||||||
@ -666,15 +695,13 @@ func resourceVirtualEnvironmentContainerCreate(d *schema.ResourceData, m interfa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Attempt to create the resource using the retrieved values.
|
// Attempt to create the resource using the retrieved values.
|
||||||
datastoreID := "local-lvm"
|
|
||||||
|
|
||||||
body := proxmox.VirtualEnvironmentContainerCreateRequestBody{
|
body := proxmox.VirtualEnvironmentContainerCreateRequestBody{
|
||||||
ConsoleEnabled: &consoleEnabled,
|
ConsoleEnabled: &consoleEnabled,
|
||||||
ConsoleMode: &consoleMode,
|
ConsoleMode: &consoleMode,
|
||||||
CPUArchitecture: &cpuArchitecture,
|
CPUArchitecture: &cpuArchitecture,
|
||||||
CPUCores: &cpuCores,
|
CPUCores: &cpuCores,
|
||||||
CPUUnits: &cpuUnits,
|
CPUUnits: &cpuUnits,
|
||||||
DatastoreID: &datastoreID,
|
DatastoreID: &diskDatastoreID,
|
||||||
DedicatedMemory: &memoryDedicated,
|
DedicatedMemory: &memoryDedicated,
|
||||||
NetworkInterfaces: networkInterfaceArray,
|
NetworkInterfaces: networkInterfaceArray,
|
||||||
OSTemplateFileVolume: &operatingSystemTemplateFileID,
|
OSTemplateFileVolume: &operatingSystemTemplateFileID,
|
||||||
@ -901,6 +928,25 @@ func resourceVirtualEnvironmentContainerRead(d *schema.ResourceData, m interface
|
|||||||
d.Set(mkResourceVirtualEnvironmentContainerCPU, []interface{}{cpu})
|
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.
|
// Compare the memory configuration to the one stored in the state.
|
||||||
memory := map[string]interface{}{}
|
memory := map[string]interface{}{}
|
||||||
|
|
||||||
|
@ -31,6 +31,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
|||||||
testOptionalArguments(t, s, []string{
|
testOptionalArguments(t, s, []string{
|
||||||
mkResourceVirtualEnvironmentContainerCPU,
|
mkResourceVirtualEnvironmentContainerCPU,
|
||||||
mkResourceVirtualEnvironmentContainerDescription,
|
mkResourceVirtualEnvironmentContainerDescription,
|
||||||
|
mkResourceVirtualEnvironmentContainerDisk,
|
||||||
mkResourceVirtualEnvironmentContainerInitialization,
|
mkResourceVirtualEnvironmentContainerInitialization,
|
||||||
mkResourceVirtualEnvironmentContainerMemory,
|
mkResourceVirtualEnvironmentContainerMemory,
|
||||||
mkResourceVirtualEnvironmentContainerPoolID,
|
mkResourceVirtualEnvironmentContainerPoolID,
|
||||||
@ -41,6 +42,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
|||||||
testSchemaValueTypes(t, s, []string{
|
testSchemaValueTypes(t, s, []string{
|
||||||
mkResourceVirtualEnvironmentContainerCPU,
|
mkResourceVirtualEnvironmentContainerCPU,
|
||||||
mkResourceVirtualEnvironmentContainerDescription,
|
mkResourceVirtualEnvironmentContainerDescription,
|
||||||
|
mkResourceVirtualEnvironmentContainerDisk,
|
||||||
mkResourceVirtualEnvironmentContainerInitialization,
|
mkResourceVirtualEnvironmentContainerInitialization,
|
||||||
mkResourceVirtualEnvironmentContainerMemory,
|
mkResourceVirtualEnvironmentContainerMemory,
|
||||||
mkResourceVirtualEnvironmentContainerOperatingSystem,
|
mkResourceVirtualEnvironmentContainerOperatingSystem,
|
||||||
@ -53,6 +55,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
|||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
schema.TypeList,
|
schema.TypeList,
|
||||||
|
schema.TypeList,
|
||||||
schema.TypeString,
|
schema.TypeString,
|
||||||
schema.TypeBool,
|
schema.TypeBool,
|
||||||
schema.TypeInt,
|
schema.TypeInt,
|
||||||
@ -76,6 +79,18 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) {
|
|||||||
schema.TypeInt,
|
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)
|
initializationSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerInitialization)
|
||||||
|
|
||||||
testOptionalArguments(t, initializationSchema, []string{
|
testOptionalArguments(t, initializationSchema, []string{
|
||||||
|
Loading…
Reference in New Issue
Block a user