From 4d447390e684a90c9672528f4bdc22aa1433296b Mon Sep 17 00:00:00 2001 From: Tuomas Salmi Date: Thu, 9 Mar 2023 03:26:04 +0200 Subject: [PATCH] feat(lxc): Add option for nested container feature (#251) feat: Add option for nested container feature --- .../virtual_environment_container.md | 2 + .../resource_virtual_environment_container.go | 46 +++++++++++++++++++ ...urce_virtual_environment_container_test.go | 12 +++++ 3 files changed, 60 insertions(+) diff --git a/docs/resources/virtual_environment_container.md b/docs/resources/virtual_environment_container.md index 479ef0af..5c6d976e 100644 --- a/docs/resources/virtual_environment_container.md +++ b/docs/resources/virtual_environment_container.md @@ -172,6 +172,8 @@ output "ubuntu_container_public_key" { - `unprivileged` - (Optional) Whether the container runs as unprivileged on the host (defaults to `false`). - `vm_id` - (Optional) The virtual machine identifier +- `features` - (Optional) The container features + - `nesting` - (Optional) Whether the container is nested (defaults to `false`) ## Attribute Reference diff --git a/proxmoxtf/resource_virtual_environment_container.go b/proxmoxtf/resource_virtual_environment_container.go index 0ad80438..db6454d6 100644 --- a/proxmoxtf/resource_virtual_environment_container.go +++ b/proxmoxtf/resource_virtual_environment_container.go @@ -38,6 +38,7 @@ const ( dvResourceVirtualEnvironmentContainerDescription = "" dvResourceVirtualEnvironmentContainerDiskDatastoreID = "local" dvResourceVirtualEnvironmentContainerDiskSize = 4 + dvResourceVirtualEnvironmentContainerFeaturesNesting = false dvResourceVirtualEnvironmentContainerMemoryDedicated = 512 dvResourceVirtualEnvironmentContainerMemorySwap = 0 dvResourceVirtualEnvironmentContainerNetworkInterfaceBridge = "vmbr0" @@ -71,6 +72,8 @@ const ( mkResourceVirtualEnvironmentContainerDisk = "disk" mkResourceVirtualEnvironmentContainerDiskDatastoreID = "datastore_id" mkResourceVirtualEnvironmentContainerDiskSize = "size" + mkResourceVirtualEnvironmentContainerFeatures = "features" + mkResourceVirtualEnvironmentContainerFeaturesNesting = "nesting" mkResourceVirtualEnvironmentContainerInitialization = "initialization" mkResourceVirtualEnvironmentContainerInitializationDNS = "dns" mkResourceVirtualEnvironmentContainerInitializationDNSDomain = "domain" @@ -272,6 +275,32 @@ func resourceVirtualEnvironmentContainer() *schema.Resource { MaxItems: 1, MinItems: 0, }, + mkResourceVirtualEnvironmentContainerFeatures: { + Type: schema.TypeList, + Description: "Features", + Optional: true, + ForceNew: true, + DefaultFunc: func() (interface{}, error) { + return []interface{}{ + map[string]interface{}{ + mkResourceVirtualEnvironmentContainerFeaturesNesting: dvResourceVirtualEnvironmentContainerFeaturesNesting, + }, + }, nil + }, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + mkResourceVirtualEnvironmentContainerFeaturesNesting: { + Type: schema.TypeBool, + Description: "Whether the container runs as nested", + Optional: true, + ForceNew: true, + Default: dvResourceVirtualEnvironmentContainerFeaturesNesting, + }, + }, + }, + MaxItems: 1, + MinItems: 0, + }, mkResourceVirtualEnvironmentContainerInitialization: { Type: schema.TypeList, Description: "The initialization configuration", @@ -1037,6 +1066,22 @@ func resourceVirtualEnvironmentContainerCreateCustom( } } + featuresBlock, err := getSchemaBlock( + resource, + d, + []string{mkResourceVirtualEnvironmentContainerFeatures}, + 0, + true, + ) + if err != nil { + return diag.FromErr(err) + } + + nesting := proxmox.CustomBool(featuresBlock[mkResourceVirtualEnvironmentContainerFeaturesNesting].(bool)) + features := proxmox.VirtualEnvironmentContainerCustomFeatures{ + Nesting: &nesting, + } + initialization := d.Get(mkResourceVirtualEnvironmentContainerInitialization).([]interface{}) initializationDNSDomain := dvResourceVirtualEnvironmentContainerInitializationDNSDomain initializationDNSServer := dvResourceVirtualEnvironmentContainerInitializationDNSServer @@ -1233,6 +1278,7 @@ func resourceVirtualEnvironmentContainerCreateCustom( CPUUnits: &cpuUnits, DatastoreID: &diskDatastoreID, DedicatedMemory: &memoryDedicated, + Features: &features, NetworkInterfaces: networkInterfaceArray, OSTemplateFileVolume: &operatingSystemTemplateFileID, OSType: &operatingSystemType, diff --git a/proxmoxtf/resource_virtual_environment_container_test.go b/proxmoxtf/resource_virtual_environment_container_test.go index d8ded6cf..88557ae8 100644 --- a/proxmoxtf/resource_virtual_environment_container_test.go +++ b/proxmoxtf/resource_virtual_environment_container_test.go @@ -39,6 +39,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerTags, mkResourceVirtualEnvironmentContainerTemplate, mkResourceVirtualEnvironmentContainerUnprivileged, + mkResourceVirtualEnvironmentContainerFeatures, mkResourceVirtualEnvironmentContainerVMID, }) @@ -54,6 +55,7 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerTags: schema.TypeList, mkResourceVirtualEnvironmentContainerTemplate: schema.TypeBool, mkResourceVirtualEnvironmentContainerUnprivileged: schema.TypeBool, + mkResourceVirtualEnvironmentContainerFeatures: schema.TypeList, mkResourceVirtualEnvironmentContainerVMID: schema.TypeInt, }) @@ -98,6 +100,16 @@ func TestResourceVirtualEnvironmentContainerSchema(t *testing.T) { mkResourceVirtualEnvironmentContainerDiskDatastoreID: schema.TypeString, }) + featuresSchema := testNestedSchemaExistence(t, s, mkResourceVirtualEnvironmentContainerFeatures) + + testOptionalArguments(t, featuresSchema, []string{ + mkResourceVirtualEnvironmentContainerFeaturesNesting, + }) + + testValueTypes(t, featuresSchema, map[string]schema.ValueType{ + mkResourceVirtualEnvironmentContainerFeaturesNesting: schema.TypeBool, + }) + initializationSchema := testNestedSchemaExistence( t, s,