diff --git a/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource.go b/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource.go index 9972ef2a68e5..7b30c1d109a3 100644 --- a/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource.go +++ b/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource.go @@ -197,6 +197,7 @@ func resourceArmCosmosDbMongoDatabaseUpdate(d *schema.ResourceData, meta interfa func resourceArmCosmosDbMongoDatabaseRead(d *schema.ResourceData, meta interface{}) error { client := meta.(*clients.Client).Cosmos.MongoDbClient + accountClient := meta.(*clients.Client).Cosmos.DatabaseClient ctx, cancel := timeouts.ForRead(meta.(*clients.Client).StopContext, d) defer cancel() @@ -224,16 +225,37 @@ func resourceArmCosmosDbMongoDatabaseRead(d *schema.ResourceData, meta interface } } - throughputResp, err := client.GetMongoDBDatabaseThroughput(ctx, id.ResourceGroup, id.Account, id.Name) + accResp, err := accountClient.Get(ctx, id.ResourceGroup, id.Account) if err != nil { - if !utils.ResponseWasNotFound(throughputResp.Response) { - return fmt.Errorf("Error reading Throughput on Cosmos Mongo Database %q (Account: %q): %+v", id.Name, id.Account, err) - } else { - d.Set("throughput", nil) - d.Set("autoscale_settings", nil) + return fmt.Errorf("reading CosmosDB Account %q (Resource Group %q): %+v", id.Account, id.ResourceGroup, err) + } + + if accResp.ID == nil || *accResp.ID == "" { + return fmt.Errorf("cosmosDB Account %q (Resource Group %q) ID is empty or nil", id.Account, id.ResourceGroup) + } + + // if the cosmos Account is serverless, it could not call the get throughput api + if props := accResp.DatabaseAccountGetProperties; props != nil && props.Capabilities != nil { + serverless := false + for _, v := range *props.Capabilities { + if *v.Name == "EnableServerless" { + serverless = true + } + } + + if !serverless { + throughputResp, err := client.GetMongoDBDatabaseThroughput(ctx, id.ResourceGroup, id.Account, id.Name) + if err != nil { + if !utils.ResponseWasNotFound(throughputResp.Response) { + return fmt.Errorf("Error reading Throughput on Cosmos Mongo Database %q (Account: %q): %+v", id.Name, id.Account, err) + } else { + d.Set("throughput", nil) + d.Set("autoscale_settings", nil) + } + } else { + common.SetResourceDataThroughputFromResponse(throughputResp, d) + } } - } else { - common.SetResourceDataThroughputFromResponse(throughputResp, d) } return nil diff --git a/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go b/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go index 6e93843d3670..8cd62a0a0d15 100644 --- a/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go +++ b/azurerm/internal/services/cosmos/cosmosdb_mongo_database_resource_test.go @@ -87,6 +87,25 @@ func TestAccAzureRMCosmosDbMongoDatabase_autoscale(t *testing.T) { }) } +func TestAccAzureRMCosmosDbMongoDatabase_serverless(t *testing.T) { + data := acceptance.BuildTestData(t, "azurerm_cosmosdb_mongo_database", "test") + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acceptance.PreCheck(t) }, + Providers: acceptance.SupportedProviders, + CheckDestroy: testCheckAzureRMCosmosDbMongoDatabaseDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAzureRMCosmosDbMongoDatabase_serverless(data), + Check: resource.ComposeAggregateTestCheckFunc( + testCheckAzureRMCosmosDbMongoDatabaseExists(data.ResourceName), + ), + }, + data.ImportStep(), + }, + }) +} + func testCheckAzureRMCosmosDbMongoDatabaseDestroy(s *terraform.State) error { client := acceptance.AzureProvider.Meta().(*clients.Client).Cosmos.MongoDbClient ctx := acceptance.AzureProvider.Meta().(*clients.Client).StopContext @@ -182,3 +201,15 @@ resource "azurerm_cosmosdb_mongo_database" "test" { } `, testAccAzureRMCosmosDBAccount_basic(data, documentdb.MongoDB, documentdb.Strong), data.RandomInteger, maxThroughput) } + +func testAccAzureRMCosmosDbMongoDatabase_serverless(data acceptance.TestData) string { + return fmt.Sprintf(` +%[1]s + +resource "azurerm_cosmosdb_mongo_database" "test" { + name = "acctest-%[2]d" + resource_group_name = azurerm_cosmosdb_account.test.resource_group_name + account_name = azurerm_cosmosdb_account.test.name +} +`, testAccAzureRMCosmosDBAccount_capabilities(data, documentdb.MongoDB, []string{"EnableServerless", "mongoEnableDocLevelTTL", "EnableMongo"}), data.RandomInteger) +}