diff --git a/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource.go b/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource.go index 96fac23c42c8..4034de41a64a 100644 --- a/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource.go +++ b/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource.go @@ -93,6 +93,11 @@ func resourceCosmosDbSQLContainer() *schema.Resource { "autoscale_settings": common.DatabaseAutoscaleSettingsSchema(), + "analytical_storage_ttl": { + Type: schema.TypeInt, + Optional: true, + }, + "default_ttl": { Type: schema.TypeInt, Optional: true, @@ -156,9 +161,8 @@ func resourceCosmosDbSQLContainerCreate(d *schema.ResourceData, meta interface{} db := documentdb.SQLContainerCreateUpdateParameters{ SQLContainerCreateUpdateProperties: &documentdb.SQLContainerCreateUpdateProperties{ Resource: &documentdb.SQLContainerResource{ - ID: &name, - IndexingPolicy: indexingPolicy, - + ID: &name, + IndexingPolicy: indexingPolicy, ConflictResolutionPolicy: common.ExpandCosmosDbConflicResolutionPolicy(d.Get("conflict_resolution_policy").([]interface{})), }, Options: &documentdb.CreateUpdateOptions{}, @@ -182,6 +186,10 @@ func resourceCosmosDbSQLContainerCreate(d *schema.ResourceData, meta interface{} } } + if analyticalStorageTTL, ok := d.GetOk("analytical_storage_ttl"); ok { + db.SQLContainerCreateUpdateProperties.Resource.AnalyticalStorageTTL = utils.Int64(int64(analyticalStorageTTL.(int))) + } + if defaultTTL, hasTTL := d.GetOk("default_ttl"); hasTTL { db.SQLContainerCreateUpdateProperties.Resource.DefaultTTL = utils.Int32(int32(defaultTTL.(int))) } @@ -269,6 +277,10 @@ func resourceCosmosDbSQLContainerUpdate(d *schema.ResourceData, meta interface{} } } + if analyticalStorageTTL, ok := d.GetOk("analytical_storage_ttl"); ok { + db.SQLContainerCreateUpdateProperties.Resource.AnalyticalStorageTTL = utils.Int64(int64(analyticalStorageTTL.(int))) + } + if defaultTTL, hasTTL := d.GetOk("default_ttl"); hasTTL { db.SQLContainerCreateUpdateProperties.Resource.DefaultTTL = utils.Int32(int32(defaultTTL.(int))) } @@ -348,6 +360,10 @@ func resourceCosmosDbSQLContainerRead(d *schema.ResourceData, meta interface{}) } } + if analyticalStorageTTL := res.AnalyticalStorageTTL; analyticalStorageTTL != nil { + d.Set("analytical_storage_ttl", analyticalStorageTTL) + } + if defaultTTL := res.DefaultTTL; defaultTTL != nil { d.Set("default_ttl", defaultTTL) } diff --git a/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource_test.go b/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource_test.go index 03ab317d26a4..78ed182d7af7 100644 --- a/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource_test.go +++ b/azurerm/internal/services/cosmos/cosmosdb_sql_container_resource_test.go @@ -5,6 +5,7 @@ import ( "fmt" "testing" + "github.com/Azure/azure-sdk-for-go/services/cosmos-db/mgmt/2021-01-15/documentdb" "github.com/hashicorp/terraform-plugin-sdk/helper/resource" "github.com/hashicorp/terraform-plugin-sdk/terraform" "github.com/terraform-providers/terraform-provider-azurerm/azurerm/internal/acceptance" @@ -65,6 +66,22 @@ func TestAccCosmosDbSqlContainer_complete(t *testing.T) { }) } +func TestAccCosmosDbSqlContainer_analyticalStorageTTL(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_cosmosdb_sql_container", "test") + r := CosmosSqlContainerResource{} + + data.ResourceTest(t, r, []resource.TestStep{ + { + + Config: r.analyticalStorageTTL(data), + Check: resource.ComposeAggregateTestCheckFunc( + check.That(data.ResourceName).ExistsInAzure(r), + ), + }, + data.ImportStep(), + }) +} + func TestAccCosmosDbSqlContainer_update(t *testing.T) { data := acceptance.BuildTestData(t, "azurerm_cosmosdb_sql_container", "test") r := CosmosSqlContainerResource{} @@ -289,6 +306,27 @@ resource "azurerm_cosmosdb_sql_container" "test" { `, CosmosSqlDatabaseResource{}.basic(data), data.RandomInteger) } +func (CosmosSqlContainerResource) analyticalStorageTTL(data acceptance.TestData) string { + return fmt.Sprintf(` +%[1]s + +resource "azurerm_cosmosdb_sql_database" "test" { + name = "acctest-%[2]d" + resource_group_name = azurerm_cosmosdb_account.test.resource_group_name + account_name = azurerm_cosmosdb_account.test.name +} + +resource "azurerm_cosmosdb_sql_container" "test" { + name = "acctest-CSQLC-%[2]d" + resource_group_name = azurerm_cosmosdb_account.test.resource_group_name + account_name = azurerm_cosmosdb_account.test.name + database_name = azurerm_cosmosdb_sql_database.test.name + partition_key_path = "/definition/id" + analytical_storage_ttl = 600 +} +`, CosmosDBAccountResource{}.analyticalStorage(data, "GlobalDocumentDB", documentdb.Eventual), data.RandomInteger, data.RandomInteger) +} + func (CosmosSqlContainerResource) update(data acceptance.TestData) string { return fmt.Sprintf(` %[1]s diff --git a/website/docs/r/cosmosdb_sql_container.html.markdown b/website/docs/r/cosmosdb_sql_container.html.markdown index fc810cabfff7..7d11bf990997 100644 --- a/website/docs/r/cosmosdb_sql_container.html.markdown +++ b/website/docs/r/cosmosdb_sql_container.html.markdown @@ -72,6 +72,8 @@ The following arguments are supported: * `default_ttl` - (Optional) The default time to live of SQL container. If missing, items are not expired automatically. If present and the value is set to `-1`, it is equal to infinity, and items don’t expire by default. If present and the value is set to some number `n` – items will expire `n` seconds after their last modified time. +* `analytical_storage_ttl` - (Optional) The default time to live of Analytical Storage for this SQL container. If present and the value is set to `-1`, it is equal to infinity, and items don’t expire by default. If present and the value is set to some number `n` – items will expire `n` seconds after their last modified time. + * `conflict_resolution_policy` - (Optional) A `conflict_resolution_policy` blocks as defined below. ---