Skip to content

Commit

Permalink
storage_management_policy - support appendBlob for blob_types (#8659)
Browse files Browse the repository at this point in the history
Append Blob now supports Blob Lifecycle Management and will be added to the validation.
azure.microsoft.com/en-us/updates/azure-blob-storage-lifecycle-management-now-supports-append-blobs

Docs:
docs.microsoft.com/en-us/azure/storage/blobs/storage-lifecycle-management-concepts?tabs=azure-portal#rule-filters
  • Loading branch information
shibayan authored Sep 29, 2020
1 parent d7cecda commit 7081ca8
Show file tree
Hide file tree
Showing 5 changed files with 162 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,8 +73,11 @@ func resourceArmStorageManagementPolicy() *schema.Resource {
Type: schema.TypeSet,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{"blockBlob"}, false),
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{
"blockBlob",
"appendBlob",
}, false),
},
Set: schema.HashString,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,36 @@ func TestAccDataSourceAzureRMStorageManagementPolicy_basic(t *testing.T) {
})
}

func TestAccDataSourceAzureRMStorageManagementPolicy_blobTypes(t *testing.T) {
data := acceptance.BuildTestData(t, "data.azurerm_storage_management_policy", "test")

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acceptance.PreCheck(t) },
Providers: acceptance.SupportedProviders,
Steps: []resource.TestStep{
{
Config: testAccDataSourceAzureRMStorageManagementPolicy_blobTypes(data),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(data.ResourceName, "rule.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.name", "rule1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.enabled", "true"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.prefix_match.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.prefix_match.3439697764", "container1/prefix1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.#", "2"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.1068358194", "blockBlob"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.932666486", "appendBlob"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.base_blob.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.base_blob.0.delete_after_days_since_modification_greater_than", "100"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.snapshot.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.snapshot.0.delete_after_days_since_creation_greater_than", "30"),
),
},
},
})
}

func testAccDataSourceAzureRMStorageManagementPolicy_basic(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
Expand Down Expand Up @@ -88,3 +118,51 @@ data "azurerm_storage_management_policy" "test" {
}
`, data.RandomInteger, data.Locations.Primary, data.RandomString)
}

func testAccDataSourceAzureRMStorageManagementPolicy_blobTypes(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "test" {
name = "acctestRG-storage-%d"
location = "%s"
}
resource "azurerm_storage_account" "test" {
name = "unlikely23exst2acct%s"
resource_group_name = azurerm_resource_group.test.name
location = azurerm_resource_group.test.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "BlobStorage"
}
resource "azurerm_storage_management_policy" "test" {
storage_account_id = azurerm_storage_account.test.id
rule {
name = "rule1"
enabled = true
filters {
prefix_match = ["container1/prefix1"]
blob_types = ["blockBlob", "appendBlob"]
}
actions {
base_blob {
delete_after_days_since_modification_greater_than = 100
}
snapshot {
delete_after_days_since_creation_greater_than = 30
}
}
}
}
data "azurerm_storage_management_policy" "test" {
storage_account_id = azurerm_storage_management_policy.test.storage_account_id
}
`, data.RandomInteger, data.Locations.Primary, data.RandomString)
}
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,39 @@ func TestAccAzureRMStorageManagementPolicy_updateMultipleRule(t *testing.T) {
})
}

func TestAccAzureRMStorageManagementPolicy_blobTypes(t *testing.T) {
data := acceptance.BuildTestData(t, "azurerm_storage_management_policy", "test")

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { acceptance.PreCheck(t) },
Providers: acceptance.SupportedProviders,
CheckDestroy: testCheckAzureRMStorageAccountManagementPolicyDestroy(),
Steps: []resource.TestStep{
{
Config: testAccAzureRMStorageManagementPolicy_blobTypes(data),
Check: resource.ComposeTestCheckFunc(
testCheckAzureRMStorageAccountManagementPolicyExists(data.ResourceName),
resource.TestCheckResourceAttr(data.ResourceName, "rule.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.name", "rule1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.enabled", "true"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.prefix_match.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.prefix_match.3439697764", "container1/prefix1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.#", "2"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.1068358194", "blockBlob"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.filters.0.blob_types.932666486", "appendBlob"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.base_blob.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.base_blob.0.delete_after_days_since_modification_greater_than", "100"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.snapshot.#", "1"),
resource.TestCheckResourceAttr(data.ResourceName, "rule.0.actions.0.snapshot.0.delete_after_days_since_creation_greater_than", "30"),
),
},
data.ImportStep(),
},
})
}

func testCheckAzureRMStorageAccountManagementPolicyDestroy() resource.TestCheckFunc {
return func(s *terraform.State) error {
for _, rs := range s.RootModule().Resources {
Expand Down Expand Up @@ -601,3 +634,47 @@ resource "azurerm_storage_management_policy" "test" {
}
`, data.RandomInteger, data.Locations.Primary, data.RandomString)
}

func testAccAzureRMStorageManagementPolicy_blobTypes(data acceptance.TestData) string {
return fmt.Sprintf(`
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "test" {
name = "acctestRG-storage-%d"
location = "%s"
}
resource "azurerm_storage_account" "test" {
name = "unlikely23exst2acct%s"
resource_group_name = azurerm_resource_group.test.name
location = azurerm_resource_group.test.location
account_tier = "Standard"
account_replication_type = "LRS"
account_kind = "BlobStorage"
}
resource "azurerm_storage_management_policy" "test" {
storage_account_id = azurerm_storage_account.test.id
rule {
name = "rule1"
enabled = true
filters {
prefix_match = ["container1/prefix1"]
blob_types = ["blockBlob", "appendBlob"]
}
actions {
base_blob {
delete_after_days_since_modification_greater_than = 100
}
snapshot {
delete_after_days_since_creation_greater_than = 30
}
}
}
}
`, data.RandomInteger, data.Locations.Primary, data.RandomString)
}
2 changes: 1 addition & 1 deletion website/docs/d/storage_management_policy.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ The following arguments are supported:
`filters` supports the following:

* `prefix_match` - An array of strings for prefixes to be matched.
* `blob_types` - An array of predefined values. Only `blockBlob` is supported.
* `blob_types` - An array of predefined values. Valid options are `blockBlob` and `appendBlob`.

---

Expand Down
2 changes: 1 addition & 1 deletion website/docs/r/storage_management_policy.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ The following arguments are supported:
`filters` supports the following:

* `prefix_match` - An array of strings for prefixes to be matched.
* `blob_types` - An array of predefined values. Only `blockBlob` is supported.
* `blob_types` - An array of predefined values. Valid options are `blockBlob` and `appendBlob`.

---

Expand Down

0 comments on commit 7081ca8

Please sign in to comment.