From b47569dac4852dfa1915ac52638ff41bafb5dff7 Mon Sep 17 00:00:00 2001 From: Harshavardhan Musanalli <10049720+harshavmb@users.noreply.github.com> Date: Tue, 2 Jan 2024 18:26:35 +0100 Subject: [PATCH 1/5] #24317: Support preferred_data_persistence_auth_method for azurerm_redis_cache resource --- .../services/redis/redis_cache_resource.go | 18 ++++++++++++++++++ website/docs/r/redis_cache.html.markdown | 2 ++ 2 files changed, 20 insertions(+) diff --git a/internal/services/redis/redis_cache_resource.go b/internal/services/redis/redis_cache_resource.go index 5480f47ac6c8..e96bfc51c939 100644 --- a/internal/services/redis/redis_cache_resource.go +++ b/internal/services/redis/redis_cache_resource.go @@ -179,6 +179,16 @@ func resourceRedisCache() *pluginsdk.Resource { Computed: true, }, + "preferred_data_persistence_auth_method": { + Type: pluginsdk.TypeString, + Optional: true, + Default: "SAS", + ValidateFunc: validation.StringInSlice([]string{ + "SAS", + "ManagedIdentity", + }, false), + }, + "rdb_backup_enabled": { Type: pluginsdk.TypeBool, Optional: true, @@ -830,6 +840,10 @@ func expandRedisConfiguration(d *pluginsdk.ResourceData) (*redis.RedisCommonProp output.MaxmemoryPolicy = utils.String(v) } + if v := raw["preferred_data_persistence_auth_method"].(string); v != "" { + output.PreferredDataPersistenceAuthMethod = utils.String(v) + } + // AAD/Entra support // nolint : staticcheck v, valExists := d.GetOkExists("redis_configuration.0.active_directory_authentication_enabled") @@ -1000,6 +1014,10 @@ func flattenRedisConfiguration(input *redis.RedisCommonPropertiesRedisConfigurat outputs["maxmemory_policy"] = *input.MaxmemoryPolicy } + if input.PreferredDataPersistenceAuthMethod != nil { + outputs["preferred_data_persistence_auth_method"] = *input.PreferredDataPersistenceAuthMethod + } + if input.MaxfragmentationmemoryReserved != nil { i, err := strconv.Atoi(*input.MaxfragmentationmemoryReserved) if err != nil { diff --git a/website/docs/r/redis_cache.html.markdown b/website/docs/r/redis_cache.html.markdown index 858fed9239a8..9e8a8d0fe31e 100644 --- a/website/docs/r/redis_cache.html.markdown +++ b/website/docs/r/redis_cache.html.markdown @@ -146,6 +146,8 @@ redis_configuration { * `maxmemory_delta` - (Optional) The max-memory delta for this Redis instance. Defaults are shown below. * `maxmemory_policy` - (Optional) How Redis will select what to remove when `maxmemory` is reached. Defaults to `volatile-lru`. +* `preferred_data_persistence_auth_method` - (Optional) Preferred auth method to communicate to storage account used for data persistence. Possible values are `SAS` and `ManagedIdentity`. Defaults to `SAS`. + * `maxfragmentationmemory_reserved` - (Optional) Value in megabytes reserved to accommodate for memory fragmentation. Defaults are shown below. * `rdb_backup_enabled` - (Optional) Is Backup Enabled? Only supported on Premium SKUs. Defaults to `false`. From 83189857298d126327569c24dfae8aec56257e3e Mon Sep 17 00:00:00 2001 From: Harshavardhan Musanalli <10049720+harshavmb@users.noreply.github.com> Date: Wed, 10 Jan 2024 18:01:48 +0100 Subject: [PATCH 2/5] #24317: Changes as per review comments --- internal/services/redis/redis_cache_resource_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/services/redis/redis_cache_resource_test.go b/internal/services/redis/redis_cache_resource_test.go index 6a17974a74c5..48f65b5697cf 100644 --- a/internal/services/redis/redis_cache_resource_test.go +++ b/internal/services/redis/redis_cache_resource_test.go @@ -30,6 +30,7 @@ func TestAccRedisCache_basic(t *testing.T) { check.That(data.ResourceName).Key("minimum_tls_version").Exists(), check.That(data.ResourceName).Key("primary_connection_string").Exists(), check.That(data.ResourceName).Key("secondary_connection_string").Exists(), + check.That(data.ResourceName).Key("redis_configuration.0.preferred_data_persistence_auth_method").HasValue("SAS"), ), }, data.ImportStep(), From 703ad3ae6cb71c0d3591294a929db7fb0acffbea Mon Sep 17 00:00:00 2001 From: Harshavardhan Musanalli <10049720+harshavmb@users.noreply.github.com> Date: Mon, 12 Feb 2024 11:27:53 +0100 Subject: [PATCH 3/5] #24317: Fix tests --- .../redis/redis_cache_resource_test.go | 48 ++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/internal/services/redis/redis_cache_resource_test.go b/internal/services/redis/redis_cache_resource_test.go index 48f65b5697cf..434ede5c0074 100644 --- a/internal/services/redis/redis_cache_resource_test.go +++ b/internal/services/redis/redis_cache_resource_test.go @@ -30,7 +30,25 @@ func TestAccRedisCache_basic(t *testing.T) { check.That(data.ResourceName).Key("minimum_tls_version").Exists(), check.That(data.ResourceName).Key("primary_connection_string").Exists(), check.That(data.ResourceName).Key("secondary_connection_string").Exists(), - check.That(data.ResourceName).Key("redis_configuration.0.preferred_data_persistence_auth_method").HasValue("SAS"), + ), + }, + data.ImportStep(), + }) +} + +func TestAccRedisCache_managedIdentityAuth(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_redis_cache", "test") + r := RedisCacheResource{} + + data.ResourceTest(t, r, []acceptance.TestStep{ + { + Config: r.managedIdentityAuth(data, true), + Check: acceptance.ComposeTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + check.That(data.ResourceName).Key("minimum_tls_version").Exists(), + check.That(data.ResourceName).Key("primary_connection_string").Exists(), + check.That(data.ResourceName).Key("secondary_connection_string").Exists(), + check.That(data.ResourceName).Key("redis_configuration.0.preferred_data_persistence_auth_method").HasValue("ManagedIdentity"), ), }, data.ImportStep(), @@ -584,6 +602,34 @@ resource "azurerm_redis_cache" "test" { `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, !requireSSL) } +func (RedisCacheResource) managedIdentityAuth(data acceptance.TestData, requireSSL bool) string { + return fmt.Sprintf(` +provider "azurerm" { + features {} +} + +resource "azurerm_resource_group" "test" { + name = "acctestRG-%d" + location = "%s" +} + +resource "azurerm_redis_cache" "test" { + name = "acctestRedis-%d" + location = azurerm_resource_group.test.location + resource_group_name = azurerm_resource_group.test.name + capacity = 1 + family = "C" + sku_name = "Basic" + enable_non_ssl_port = %t + minimum_tls_version = "1.2" + + redis_configuration { + preferred_data_persistence_auth_method = "ManagedIdentity" + } +} +`, data.RandomInteger, data.Locations.Primary, data.RandomInteger, !requireSSL) +} + func (RedisCacheResource) requiresImport(data acceptance.TestData) string { template := RedisCacheResource{}.basic(data, true) return fmt.Sprintf(` From 7c9ab2167b6378f4dd8d8e8e4cc9187e2d281668 Mon Sep 17 00:00:00 2001 From: Harshavardhan Musanalli <10049720+harshavmb@users.noreply.github.com> Date: Wed, 14 Feb 2024 17:23:21 +0100 Subject: [PATCH 4/5] #24317: renaming preferred_data_persistence_auth_method to data_persistence_authentication_method as per review --- internal/services/redis/redis_cache_resource.go | 6 +++--- internal/services/redis/redis_cache_resource_test.go | 4 ++-- website/docs/r/redis_cache.html.markdown | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/services/redis/redis_cache_resource.go b/internal/services/redis/redis_cache_resource.go index e96bfc51c939..fca201b77852 100644 --- a/internal/services/redis/redis_cache_resource.go +++ b/internal/services/redis/redis_cache_resource.go @@ -179,7 +179,7 @@ func resourceRedisCache() *pluginsdk.Resource { Computed: true, }, - "preferred_data_persistence_auth_method": { + "data_persistence_authentication_method": { Type: pluginsdk.TypeString, Optional: true, Default: "SAS", @@ -840,7 +840,7 @@ func expandRedisConfiguration(d *pluginsdk.ResourceData) (*redis.RedisCommonProp output.MaxmemoryPolicy = utils.String(v) } - if v := raw["preferred_data_persistence_auth_method"].(string); v != "" { + if v := raw["data_persistence_authentication_method"].(string); v != "" { output.PreferredDataPersistenceAuthMethod = utils.String(v) } @@ -1015,7 +1015,7 @@ func flattenRedisConfiguration(input *redis.RedisCommonPropertiesRedisConfigurat } if input.PreferredDataPersistenceAuthMethod != nil { - outputs["preferred_data_persistence_auth_method"] = *input.PreferredDataPersistenceAuthMethod + outputs["data_persistence_authentication_method"] = *input.PreferredDataPersistenceAuthMethod } if input.MaxfragmentationmemoryReserved != nil { diff --git a/internal/services/redis/redis_cache_resource_test.go b/internal/services/redis/redis_cache_resource_test.go index 434ede5c0074..241a28b42f52 100644 --- a/internal/services/redis/redis_cache_resource_test.go +++ b/internal/services/redis/redis_cache_resource_test.go @@ -48,7 +48,7 @@ func TestAccRedisCache_managedIdentityAuth(t *testing.T) { check.That(data.ResourceName).Key("minimum_tls_version").Exists(), check.That(data.ResourceName).Key("primary_connection_string").Exists(), check.That(data.ResourceName).Key("secondary_connection_string").Exists(), - check.That(data.ResourceName).Key("redis_configuration.0.preferred_data_persistence_auth_method").HasValue("ManagedIdentity"), + check.That(data.ResourceName).Key("redis_configuration.0.data_persistence_authentication_method").HasValue("ManagedIdentity"), ), }, data.ImportStep(), @@ -624,7 +624,7 @@ resource "azurerm_redis_cache" "test" { minimum_tls_version = "1.2" redis_configuration { - preferred_data_persistence_auth_method = "ManagedIdentity" + data_persistence_authentication_method = "ManagedIdentity" } } `, data.RandomInteger, data.Locations.Primary, data.RandomInteger, !requireSSL) diff --git a/website/docs/r/redis_cache.html.markdown b/website/docs/r/redis_cache.html.markdown index 9e8a8d0fe31e..45811986fd2c 100644 --- a/website/docs/r/redis_cache.html.markdown +++ b/website/docs/r/redis_cache.html.markdown @@ -146,7 +146,7 @@ redis_configuration { * `maxmemory_delta` - (Optional) The max-memory delta for this Redis instance. Defaults are shown below. * `maxmemory_policy` - (Optional) How Redis will select what to remove when `maxmemory` is reached. Defaults to `volatile-lru`. -* `preferred_data_persistence_auth_method` - (Optional) Preferred auth method to communicate to storage account used for data persistence. Possible values are `SAS` and `ManagedIdentity`. Defaults to `SAS`. +* `data_persistence_authentication_method` - (Optional) Preferred auth method to communicate to storage account used for data persistence. Possible values are `SAS` and `ManagedIdentity`. Defaults to `SAS`. * `maxfragmentationmemory_reserved` - (Optional) Value in megabytes reserved to accommodate for memory fragmentation. Defaults are shown below. From 30fcd627b217cce31716eb4d7310f970185a1082 Mon Sep 17 00:00:00 2001 From: Harshavardhan Musanalli <10049720+harshavmb@users.noreply.github.com> Date: Fri, 16 Feb 2024 14:09:12 +0100 Subject: [PATCH 5/5] #24317: Fix azurerm_redis_cache data source --- internal/services/redis/redis_cache_data_source.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/services/redis/redis_cache_data_source.go b/internal/services/redis/redis_cache_data_source.go index b8905ae8c745..037286149366 100644 --- a/internal/services/redis/redis_cache_data_source.go +++ b/internal/services/redis/redis_cache_data_source.go @@ -162,6 +162,10 @@ func dataSourceRedisCache() *pluginsdk.Resource { Type: pluginsdk.TypeString, Computed: true, }, + "data_persistence_authentication_method": { + Type: pluginsdk.TypeString, + Computed: true, + }, }, }, },