diff --git a/azurerm/helpers/validate/storage.go b/azurerm/helpers/validate/storage.go index 445bac547097..ca8a30e60ba8 100644 --- a/azurerm/helpers/validate/storage.go +++ b/azurerm/helpers/validate/storage.go @@ -11,8 +11,8 @@ func StorageShareDirectoryName(v interface{}, k string) (warnings []string, erro // File share names can contain only uppercase and lowercase letters, numbers, and hyphens, // and must begin and end with a letter or a number. - // however they can be nested (e.g. foo/bar) - if !regexp.MustCompile(`^[A-Za-z0-9][A-Za-z0-9-]+[A-Za-z0-9]$`).MatchString(value) && !regexp.MustCompile(`^[A-Za-z0-9]{1,}/[A-Za-z0-9]{1,}$`).MatchString(value) { + // However they can be nested (e.g. foo/bar) with at most one level. + if !regexp.MustCompile(`^[A-Za-z0-9]{1,}[A-Za-z0-9-]{0,1}[A-Za-z0-9]{1,}(/[A-Za-z0-9]{1,}[A-Za-z0-9-]{0,1}[A-Za-z0-9]{1,})?$`).MatchString(value) { errors = append(errors, fmt.Errorf("%s must contain only uppercase and lowercase alphanumeric characters, numbers and hyphens. It must start and end with a letter and end only with a number or letter", k)) } diff --git a/azurerm/helpers/validate/storage_test.go b/azurerm/helpers/validate/storage_test.go index d0b29c96b1a3..6de33c952a9f 100644 --- a/azurerm/helpers/validate/storage_test.go +++ b/azurerm/helpers/validate/storage_test.go @@ -39,6 +39,22 @@ func TestValidateStorageShareDirectoryName(t *testing.T) { Input: "hello/world", Expected: true, }, + { + Input: "123-abc/hello-world", + Expected: true, + }, + { + Input: "123-abc/hello--world", + Expected: false, + }, + { + Input: "123-abc/hello/world", + Expected: false, + }, + { + Input: "123-abc/hello/world-", + Expected: false, + }, { Input: "hello/", Expected: false, diff --git a/azurerm/internal/services/storage/tests/resource_arm_storage_share_directory_test.go b/azurerm/internal/services/storage/tests/resource_arm_storage_share_directory_test.go index 1dbf902e6e0a..189cdb3de76d 100644 --- a/azurerm/internal/services/storage/tests/resource_arm_storage_share_directory_test.go +++ b/azurerm/internal/services/storage/tests/resource_arm_storage_share_directory_test.go @@ -124,7 +124,7 @@ func TestAccAzureRMStorageShareDirectory_nested(t *testing.T) { Config: testAccAzureRMStorageShareDirectory_nested(data), Check: resource.ComposeTestCheckFunc( testCheckAzureRMStorageShareDirectoryExists("azurerm_storage_share_directory.parent"), - testCheckAzureRMStorageShareDirectoryExists("azurerm_storage_share_directory.child"), + testCheckAzureRMStorageShareDirectoryExists("azurerm_storage_share_directory.child_two"), ), }, }, @@ -305,6 +305,12 @@ resource "azurerm_storage_share_directory" "child" { share_name = azurerm_storage_share.test.name storage_account_name = azurerm_storage_account.test.name } + +resource "azurerm_storage_share_directory" "child_two" { + name = "${azurerm_storage_share_directory.parent.name}/child-two" + share_name = azurerm_storage_share.test.name + storage_account_name = azurerm_storage_account.test.name +} `, template) }