From d6ed15deb78a432e9d892419ed832a8f7ebdaa47 Mon Sep 17 00:00:00 2001 From: Malcolm Morgan Date: Thu, 22 Feb 2024 16:04:40 -0800 Subject: [PATCH 1/2] Added double encryption support and documentation --- .../netapp/netapp_pool_data_source.go | 7 +++ .../netapp/netapp_pool_data_source_test.go | 1 + .../services/netapp/netapp_pool_resource.go | 25 ++++++++- .../netapp/netapp_pool_resource_test.go | 55 +++++++++++++++++++ website/docs/d/netapp_pool.html.markdown | 2 + website/docs/r/netapp_pool.html.markdown | 4 +- 6 files changed, 91 insertions(+), 3 deletions(-) diff --git a/internal/services/netapp/netapp_pool_data_source.go b/internal/services/netapp/netapp_pool_data_source.go index 75e809dad0b5..68f0557ab3c6 100644 --- a/internal/services/netapp/netapp_pool_data_source.go +++ b/internal/services/netapp/netapp_pool_data_source.go @@ -7,6 +7,7 @@ import ( "fmt" "time" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/location" @@ -51,6 +52,11 @@ func dataSourceNetAppPool() *pluginsdk.Resource { Type: pluginsdk.TypeInt, Computed: true, }, + + "encryption_type": { + Type: pluginsdk.TypeString, + Computed: true, + }, }, } } @@ -80,6 +86,7 @@ func dataSourceNetAppPoolRead(d *pluginsdk.ResourceData, meta interface{}) error d.Set("location", location.NormalizeNilable(&model.Location)) d.Set("service_level", string(model.Properties.ServiceLevel)) d.Set("size_in_tb", model.Properties.Size/1099511627776) + d.Set("encryption_type", string(pointer.From(model.Properties.EncryptionType))) } return nil diff --git a/internal/services/netapp/netapp_pool_data_source_test.go b/internal/services/netapp/netapp_pool_data_source_test.go index ce91f1c3be0a..022e9cc11509 100644 --- a/internal/services/netapp/netapp_pool_data_source_test.go +++ b/internal/services/netapp/netapp_pool_data_source_test.go @@ -26,6 +26,7 @@ func TestAccDataSourceNetAppPool_basic(t *testing.T) { check.That(data.ResourceName).Key("account_name").Exists(), check.That(data.ResourceName).Key("service_level").Exists(), check.That(data.ResourceName).Key("size_in_tb").Exists(), + check.That(data.ResourceName).Key("encryption_type").Exists(), ), }, }) diff --git a/internal/services/netapp/netapp_pool_resource.go b/internal/services/netapp/netapp_pool_resource.go index e4ca0c2412c7..f50e30c19ef5 100644 --- a/internal/services/netapp/netapp_pool_resource.go +++ b/internal/services/netapp/netapp_pool_resource.go @@ -10,6 +10,7 @@ import ( "strconv" "time" + "github.com/hashicorp/go-azure-helpers/lang/pointer" "github.com/hashicorp/go-azure-helpers/lang/response" "github.com/hashicorp/go-azure-helpers/resourcemanager/commonschema" "github.com/hashicorp/go-azure-helpers/resourcemanager/tags" @@ -88,6 +89,17 @@ func resourceNetAppPool() *pluginsdk.Resource { }, false), }, + "encryption_type": { + Type: pluginsdk.TypeString, + Optional: true, + Computed: true, + ForceNew: true, + ValidateFunc: validation.StringInSlice([]string{ + string(capacitypools.EncryptionTypeSingle), + string(capacitypools.EncryptionTypeDouble), + }, false), + }, + "tags": commonschema.Tags(), }, } @@ -116,11 +128,19 @@ func resourceNetAppPoolCreate(d *pluginsdk.ResourceData, meta interface{}) error sizeInMB := sizeInTB * 1024 * 1024 sizeInBytes := sizeInMB * 1024 * 1024 + var encryptionType capacitypools.EncryptionType + encryptionTypeString := d.Get("encryption_type").(string) + if encryptionTypeString == "" { + encryptionType = capacitypools.EncryptionTypeSingle + } + encryptionType = capacitypools.EncryptionType(encryptionTypeString) + capacityPoolParameters := capacitypools.CapacityPool{ Location: azure.NormalizeLocation(d.Get("location").(string)), Properties: capacitypools.PoolProperties{ - ServiceLevel: capacitypools.ServiceLevel(d.Get("service_level").(string)), - Size: sizeInBytes, + ServiceLevel: capacitypools.ServiceLevel(d.Get("service_level").(string)), + Size: sizeInBytes, + EncryptionType: &encryptionType, }, Tags: tags.Expand(d.Get("tags").(map[string]interface{})), } @@ -234,6 +254,7 @@ func resourceNetAppPoolRead(d *pluginsdk.ResourceData, meta interface{}) error { qosType = string(*poolProperties.QosType) } d.Set("qos_type", qosType) + d.Set("encryption_type", string(pointer.From(poolProperties.EncryptionType))) return tags.FlattenAndSet(d, model.Tags) } diff --git a/internal/services/netapp/netapp_pool_resource_test.go b/internal/services/netapp/netapp_pool_resource_test.go index e9ba6d6eb263..1b05fa0c779b 100644 --- a/internal/services/netapp/netapp_pool_resource_test.go +++ b/internal/services/netapp/netapp_pool_resource_test.go @@ -65,6 +65,7 @@ func TestAccNetAppPool_complete(t *testing.T) { check.That(data.ResourceName).Key("tags.%").HasValue("2"), check.That(data.ResourceName).Key("tags.FoO").HasValue("BaR"), check.That(data.ResourceName).Key("qos_type").HasValue("Auto"), + check.That(data.ResourceName).Key("encryption_type").HasValue("Single"), ), }, data.ImportStep(), @@ -110,6 +111,22 @@ func TestAccNetAppPool_update(t *testing.T) { }) } +func TestAccNetAppPool_doubleEncryption(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_netapp_pool", "test") + r := NetAppPoolResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.doubleEncryption(data), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("encryption_type").HasValue("Double"), + ), + }, + data.ImportStep(), + }) +} + func (t NetAppPoolResource) Exists(ctx context.Context, clients *clients.Client, state *pluginsdk.InstanceState) (*bool, error) { id, err := capacitypools.ParseCapacityPoolID(state.ID) if err != nil { @@ -208,6 +225,7 @@ resource "azurerm_netapp_pool" "test" { service_level = "Standard" size_in_tb = 15 qos_type = "Auto" + encryption_type = "Single" tags = { "CreatedOnDate" = "2022-07-08T23:50:21Z", @@ -259,3 +277,40 @@ resource "azurerm_netapp_pool" "test" { } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) } + +func (NetAppPoolResource) doubleEncryption(data acceptance.TestData) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-netapp-%d" + location = "%s" + + tags = { + "SkipNRMSNSG" = "true" + } +} + +resource "azurerm_netapp_account" "test" { + name = "acctest-NetAppAccount-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name +} + +resource "azurerm_netapp_pool" "test" { + name = "acctest-NetAppPool-%d" + account_name = azurerm_netapp_account.test.name + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + service_level = "Standard" + size_in_tb = 2 + encryption_type = "Double" + + tags = { + "CreatedOnDate" = "2022-07-08T23:50:21Z", + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, data.RandomInteger) +} diff --git a/website/docs/d/netapp_pool.html.markdown b/website/docs/d/netapp_pool.html.markdown index c0edd7b1fc25..9d25f78ff191 100644 --- a/website/docs/d/netapp_pool.html.markdown +++ b/website/docs/d/netapp_pool.html.markdown @@ -44,6 +44,8 @@ The following attributes are exported: * `size_in_tb` - Provisioned size of the pool in TB. +* `encryption_type` - The encryption type of the pool. + --- ## Timeouts diff --git a/website/docs/r/netapp_pool.html.markdown b/website/docs/r/netapp_pool.html.markdown index 7db7af00e207..26f5d096b6ef 100644 --- a/website/docs/r/netapp_pool.html.markdown +++ b/website/docs/r/netapp_pool.html.markdown @@ -46,7 +46,7 @@ The following arguments are supported: * `location` - (Required) Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created. -* `service_level` - (Required) The service level of the file system. Valid values include `Premium`, `Standard`, or `Ultra`. Changing this forces a new resource to be created. +* `service_level` - (Required) The service level of the file system. Valid values include `Premium`, `Standard`, and `Ultra`. Changing this forces a new resource to be created. * `size_in_tb` - (Required) Provisioned size of the pool in TB. Value must be between `2` and `500`. @@ -54,6 +54,8 @@ The following arguments are supported: * `qos_type` - (Optional) QoS Type of the pool. Valid values include `Auto` or `Manual`. +* `encryption_type` - (Optional) The encryption type of the pool. Valid values include `Single`, and `Double`. Changing this forces a new resource to be created. + * `tags` - (Optional) A mapping of tags to assign to the resource. --- From 4e7b815d7dcfb25597c535b130c2b7810bcc6920 Mon Sep 17 00:00:00 2001 From: Malcolm Morgan Date: Mon, 26 Feb 2024 11:13:39 -0800 Subject: [PATCH 2/2] Updated to include default value of single encryption --- internal/services/netapp/netapp_pool_resource.go | 9 ++------- website/docs/r/netapp_pool.html.markdown | 2 +- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/internal/services/netapp/netapp_pool_resource.go b/internal/services/netapp/netapp_pool_resource.go index f50e30c19ef5..fb539563be04 100644 --- a/internal/services/netapp/netapp_pool_resource.go +++ b/internal/services/netapp/netapp_pool_resource.go @@ -92,8 +92,8 @@ func resourceNetAppPool() *pluginsdk.Resource { "encryption_type": { Type: pluginsdk.TypeString, Optional: true, - Computed: true, ForceNew: true, + Default: capacitypools.EncryptionTypeSingle, ValidateFunc: validation.StringInSlice([]string{ string(capacitypools.EncryptionTypeSingle), string(capacitypools.EncryptionTypeDouble), @@ -128,12 +128,7 @@ func resourceNetAppPoolCreate(d *pluginsdk.ResourceData, meta interface{}) error sizeInMB := sizeInTB * 1024 * 1024 sizeInBytes := sizeInMB * 1024 * 1024 - var encryptionType capacitypools.EncryptionType - encryptionTypeString := d.Get("encryption_type").(string) - if encryptionTypeString == "" { - encryptionType = capacitypools.EncryptionTypeSingle - } - encryptionType = capacitypools.EncryptionType(encryptionTypeString) + encryptionType := capacitypools.EncryptionType(d.Get("encryption_type").(string)) capacityPoolParameters := capacitypools.CapacityPool{ Location: azure.NormalizeLocation(d.Get("location").(string)), diff --git a/website/docs/r/netapp_pool.html.markdown b/website/docs/r/netapp_pool.html.markdown index 26f5d096b6ef..bd6018a997df 100644 --- a/website/docs/r/netapp_pool.html.markdown +++ b/website/docs/r/netapp_pool.html.markdown @@ -54,7 +54,7 @@ The following arguments are supported: * `qos_type` - (Optional) QoS Type of the pool. Valid values include `Auto` or `Manual`. -* `encryption_type` - (Optional) The encryption type of the pool. Valid values include `Single`, and `Double`. Changing this forces a new resource to be created. +* `encryption_type` - (Optional) The encryption type of the pool. Valid values include `Single`, and `Double`. Defaults to `Single`. Changing this forces a new resource to be created. * `tags` - (Optional) A mapping of tags to assign to the resource.