From 78ee19b9d331bb16ab16d242b22003d22210024a Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Tue, 11 Feb 2025 20:51:33 +0800 Subject: [PATCH 01/11] add schema support for cosmos db --- cli/azd/internal/cmd/add/add_configure.go | 9 +++ cli/azd/internal/cmd/add/add_preview.go | 5 ++ cli/azd/internal/scaffold/scaffold_test.go | 15 +++++ cli/azd/internal/scaffold/spec.go | 12 ++++ cli/azd/pkg/project/resources.go | 37 +++++++++--- cli/azd/pkg/project/scaffold_gen.go | 16 ++++++ .../scaffold/templates/resources.bicept | 56 +++++++++++++++++++ schemas/alpha/azure.yaml.json | 42 +++++++++++++- 8 files changed, 183 insertions(+), 9 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_configure.go b/cli/azd/internal/cmd/add/add_configure.go index de59a5c5f8f..179317fcdec 100644 --- a/cli/azd/internal/cmd/add/add_configure.go +++ b/cli/azd/internal/cmd/add/add_configure.go @@ -44,6 +44,15 @@ func Configure( case project.ResourceTypeDbPostgres, project.ResourceTypeDbMongo: return fillDatabaseName(ctx, r, console, p) + case project.ResourceTypeDbCosmos: + _, err := fillDatabaseName(ctx, r, console, p) + if err != nil { + return nil, err + } + r.Props = project.CosmosDBProps{ + DatabaseName: r.Name, + } + return r, nil case project.ResourceTypeDbRedis: if _, exists := p.PrjConfig.Resources["redis"]; exists { return nil, fmt.Errorf("only one Redis resource is allowed at this time") diff --git a/cli/azd/internal/cmd/add/add_preview.go b/cli/azd/internal/cmd/add/add_preview.go index 62f95bfa6c8..5d40a9a32b3 100644 --- a/cli/azd/internal/cmd/add/add_preview.go +++ b/cli/azd/internal/cmd/add/add_preview.go @@ -67,6 +67,11 @@ func Metadata(r *project.ResourceConfig) resourceMeta { res.UseEnvVars = []string{ "AZURE_OPENAI_ENDPOINT", } + case project.ResourceTypeDbCosmos: + res.AzureResourceType = "Microsoft.DocumentDB/databaseAccounts" + res.UseEnvVars = []string{ + "AZURE_COSMOSDB_ENDPOINT", + } } return res } diff --git a/cli/azd/internal/scaffold/scaffold_test.go b/cli/azd/internal/scaffold/scaffold_test.go index dcd1c6e5c41..d509c4840af 100644 --- a/cli/azd/internal/scaffold/scaffold_test.go +++ b/cli/azd/internal/scaffold/scaffold_test.go @@ -175,6 +175,21 @@ func TestExecInfra(t *testing.T) { }, }, }, + { + "API with Cosmos", + InfraSpec{ + DbCosmos: &DatabaseCosmos{}, + Services: []ServiceSpec{ + { + Name: "api", + Port: 3100, + DbCosmos: &DatabaseReference{ + DatabaseName: "cosmos", + }, + }, + }, + }, + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/cli/azd/internal/scaffold/spec.go b/cli/azd/internal/scaffold/spec.go index 99aea10e3e0..6d2db135d22 100644 --- a/cli/azd/internal/scaffold/spec.go +++ b/cli/azd/internal/scaffold/spec.go @@ -15,6 +15,7 @@ type InfraSpec struct { // Databases to create DbPostgres *DatabasePostgres DbCosmosMongo *DatabaseCosmosMongo + DbCosmos *DatabaseCosmos DbRedis *DatabaseRedis // ai models @@ -37,6 +38,16 @@ type DatabaseCosmosMongo struct { DatabaseName string } +type DatabaseCosmos struct { + DatabaseName string + Containers []CosmosSqlDatabaseContainer +} + +type CosmosSqlDatabaseContainer struct { + ContainerName string + PartitionKeyPaths []string +} + type DatabaseRedis struct { } @@ -69,6 +80,7 @@ type ServiceSpec struct { // Connection to a database DbPostgres *DatabaseReference DbCosmosMongo *DatabaseReference + DbCosmos *DatabaseReference DbRedis *DatabaseReference // AI model connections diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index 9c1494ec15e..3605ef0a3ba 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -16,6 +16,7 @@ func AllResourceTypes() []ResourceType { ResourceTypeDbRedis, ResourceTypeDbPostgres, ResourceTypeDbMongo, + ResourceTypeDbCosmos, ResourceTypeHostContainerApp, ResourceTypeOpenAiModel, } @@ -25,6 +26,7 @@ const ( ResourceTypeDbRedis ResourceType = "db.redis" ResourceTypeDbPostgres ResourceType = "db.postgres" ResourceTypeDbMongo ResourceType = "db.mongo" + ResourceTypeDbCosmos ResourceType = "db.cosmos" ResourceTypeHostContainerApp ResourceType = "host.containerapp" ResourceTypeOpenAiModel ResourceType = "ai.openai.model" ) @@ -37,6 +39,8 @@ func (r ResourceType) String() string { return "PostgreSQL" case ResourceTypeDbMongo: return "MongoDB" + case ResourceTypeDbCosmos: + return "CosmosDB" case ResourceTypeHostContainerApp: return "Container App" case ResourceTypeOpenAiModel: @@ -78,17 +82,18 @@ func (r *ResourceConfig) MarshalYAML() (interface{}, error) { return nil } + var errMarshal error switch raw.Type { case ResourceTypeOpenAiModel: - err := marshalRawProps(raw.Props.(AIModelProps)) - if err != nil { - return nil, err - } + errMarshal = marshalRawProps(raw.Props.(AIModelProps)) case ResourceTypeHostContainerApp: - err := marshalRawProps(raw.Props.(ContainerAppProps)) - if err != nil { - return nil, err - } + errMarshal = marshalRawProps(raw.Props.(ContainerAppProps)) + case ResourceTypeDbCosmos: + errMarshal = marshalRawProps(raw.Props.(CosmosDBProps)) + } + + if errMarshal != nil { + return nil, errMarshal } return raw, nil @@ -128,6 +133,12 @@ func (r *ResourceConfig) UnmarshalYAML(value *yaml.Node) error { return err } raw.Props = cap + case ResourceTypeDbCosmos: + cdp := CosmosDBProps{} + if err := unmarshalProps(&cdp); err != nil { + return err + } + raw.Props = cdp } *r = ResourceConfig(raw) @@ -155,3 +166,13 @@ type AIModelPropsModel struct { Name string `yaml:"name,omitempty"` Version string `yaml:"version,omitempty"` } + +type CosmosDBProps struct { + Containers []CosmosDBContainerProps `yaml:"containers,omitempty"` + DatabaseName string `yaml:"databaseName,omitempty"` +} + +type CosmosDBContainerProps struct { + ContainerName string `yaml:"containerName,omitempty"` + PartitionKeyPaths []string `yaml:"partitionKeyPaths,omitempty"` +} diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index 120f1c63211..863104a97b7 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -143,6 +143,19 @@ func infraSpec(projectConfig *ProjectConfig) (*scaffold.InfraSpec, error) { infraSpec.DbCosmosMongo = &scaffold.DatabaseCosmosMongo{ DatabaseName: res.Name, } + case ResourceTypeDbCosmos: + props := res.Props.(CosmosDBProps) + containers := make([]scaffold.CosmosSqlDatabaseContainer, 0) + for _, c := range props.Containers { + containers = append(containers, scaffold.CosmosSqlDatabaseContainer{ + ContainerName: c.ContainerName, + PartitionKeyPaths: c.PartitionKeyPaths, + }) + } + infraSpec.DbCosmos = &scaffold.DatabaseCosmos{ + DatabaseName: res.Name, + Containers: containers, + } case ResourceTypeDbPostgres: infraSpec.DbPostgres = &scaffold.DatabasePostgres{ DatabaseName: res.Name, @@ -152,6 +165,7 @@ func infraSpec(projectConfig *ProjectConfig) (*scaffold.InfraSpec, error) { svcSpec := scaffold.ServiceSpec{ Name: res.Name, Port: -1, + Env: map[string]string{}, } err := mapContainerApp(res, &svcSpec, &infraSpec) @@ -259,6 +273,8 @@ func mapHostUses( switch useRes.Type { case ResourceTypeDbMongo: svcSpec.DbCosmosMongo = &scaffold.DatabaseReference{DatabaseName: useRes.Name} + case ResourceTypeDbCosmos: + svcSpec.DbCosmos = &scaffold.DatabaseReference{DatabaseName: useRes.Name} case ResourceTypeDbPostgres: svcSpec.DbPostgres = &scaffold.DatabaseReference{DatabaseName: useRes.Name} case ResourceTypeDbRedis: diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index 92d9826a550..c5ca0e035cb 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -174,6 +174,56 @@ resource localUserOpenAIIdentity 'Microsoft.Authorization/roleAssignments@2022-0 } {{- end}} +{{- if .DbCosmos }} +module cosmos 'br/public:avm/res/document-db/database-account:0.8.1' = { + name: 'cosmos' + params: { + name: '${abbrs.documentDBDatabaseAccounts}${resourceToken}' + tags: tags + location: location + locations: [ + { + failoverPriority: 0 + isZoneRedundant: false + locationName: location + } + ] + networkRestrictions: { + ipRules: [] + virtualNetworkRules: [] + publicNetworkAccess: 'Enabled' + } + sqlDatabases: [ + { + name: '{{ .DbCosmos.DatabaseName }}' + containers: [ + {{- range .DbCosmos.Containers}} + { + name: '{{ .ContainerName }}' + paths: [ + {{- range $path := .PartitionKeyPaths}} + '{{ $path }}' + {{- end}} + ] + } + {{- end}} + ] + } + ] + sqlRoleAssignmentsPrincipalIds: [ + {{- range .Services}} + {{bicepName .Name}}Identity.outputs.principalId + {{- end}} + ] + sqlRoleDefinitions: [ + { + name: 'service-access-cosmos-sql-role' + } + ] + } +} +{{- end}} + {{- range .Services}} module {{bicepName .Name}}Identity 'br/public:avm/res/managed-identity/user-assigned-identity:0.2.1' = { @@ -349,6 +399,12 @@ module {{bicepName .Name}} 'br/public:avm/res/app/container-app:0.8.0' = { value: account.outputs.endpoint } {{- end}} + {{- if .DbCosmos}} + { + name: 'AZURE_COSMOSDB_ENDPOINT' + value: cosmos.outputs.endpoint + } + {{- end}} {{- if .Frontend}} {{- range $i, $e := .Frontend.Backends}} { diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index adf9a7e81a5..6c39bf7ec8c 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -368,6 +368,7 @@ "db.postgres", "db.redis", "db.mongo", + "db.cosmos", "ai.openai.model", "host.containerapp" ] @@ -386,7 +387,8 @@ { "if": { "properties": { "type": { "const": "ai.openai.model" }}}, "then": { "$ref": "#/definitions/aiModelResource" } }, { "if": { "properties": { "type": { "const": "db.postgres" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.redis" }}}, "then": { "$ref": "#/definitions/resource"} }, - { "if": { "properties": { "type": { "const": "db.mongo" }}}, "then": { "$ref": "#/definitions/resource"} } + { "if": { "properties": { "type": { "const": "db.mongo" }}}, "then": { "$ref": "#/definitions/resource"} }, + { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/cosmosDbResource"} } ] } }, @@ -1314,6 +1316,44 @@ } } } + }, + "cosmosDbResource": { + "type": "object", + "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL.", + "additionalProperties": false, + "properties": { + "type": true, + "uses": true, + "databaseName": { + "type": "string", + "title": "The Azure Cosmos DB Name", + "description": "The name of Azure Cosmos DB." + }, + "containers": { + "type": "array", + "title": "Azure Cosmos DB Containers", + "description": "A list of containers in the Azure CosmosDB.", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "containerName": { + "type": "string", + "title": "Container Name", + "description": "The name of the container." + }, + "partitionKeyPaths": { + "type": "array", + "title": "Partition Key Paths", + "description": "A list of partition key paths for the container.", + "items": { + "type": "string" + } + } + } + } + } + } } } } \ No newline at end of file From b6a3dd88a1258aaf95bc8b599078eb1218d918fa Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Wed, 12 Feb 2025 17:23:30 -0800 Subject: [PATCH 02/11] remove DatabaseName --- cli/azd/internal/cmd/add/add_configure.go | 6 ++---- cli/azd/pkg/project/resources.go | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_configure.go b/cli/azd/internal/cmd/add/add_configure.go index 550aa8dc4df..c1aae97f6bf 100644 --- a/cli/azd/internal/cmd/add/add_configure.go +++ b/cli/azd/internal/cmd/add/add_configure.go @@ -45,13 +45,11 @@ func Configure( project.ResourceTypeDbMongo: return fillDatabaseName(ctx, r, console, p) case project.ResourceTypeDbCosmos: - _, err := fillDatabaseName(ctx, r, console, p) + r, err := fillDatabaseName(ctx, r, console, p) if err != nil { return nil, err } - r.Props = project.CosmosDBProps{ - DatabaseName: r.Name, - } + r.Props = project.CosmosDBProps{} return r, nil case project.ResourceTypeMessagingEventHubs: return fillEventHubs(ctx, r, console, p) diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index 115039841af..e34b8cf3231 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -204,8 +204,7 @@ type AIModelPropsModel struct { } type CosmosDBProps struct { - Containers []CosmosDBContainerProps `yaml:"containers,omitempty"` - DatabaseName string `yaml:"databaseName,omitempty"` + Containers []CosmosDBContainerProps `yaml:"containers,omitempty"` } type CosmosDBContainerProps struct { From e39f4fadcd11178c8d6d4f04ce92694ec57f0614 Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Wed, 12 Feb 2025 17:36:55 -0800 Subject: [PATCH 03/11] update schema --- schemas/alpha/azure.yaml.json | 50 +++++++++++++++++------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index bba48337081..b10983cebae 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -391,7 +391,7 @@ { "if": { "properties": { "type": { "const": "db.postgres" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.redis" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.mongo" }}}, "then": { "$ref": "#/definitions/resource"} }, - { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/cosmosDbResource"} } + { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/cosmosDbResource"} }, { "if": { "properties": { "type": { "const": "messaging.eventhubs" }}}, "then": { "$ref": "#/definitions/eventHubsResource" } }, { "if": { "properties": { "type": { "const": "messaging.servicebus" }}}, "then": { "$ref": "#/definitions/serviceBusResource" } }, { "if": { "properties": { "type": { "const": "storage" }}}, "then": { "$ref": "#/definitions/storageAccountResource"} } @@ -1326,30 +1326,30 @@ "cosmosDbResource": { "type": "object", "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL.", - "databaseName": { - "type": "string", - "title": "The Azure Cosmos DB Name", - "description": "The name of Azure Cosmos DB." - }, - "containers": { - "type": "array", - "title": "Azure Cosmos DB Containers", - "description": "A list of containers in the Azure CosmosDB.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "containerName": { - "type": "string", - "title": "Container Name", - "description": "The name of the container." - }, - "partitionKeyPaths": { - "type": "array", - "title": "Partition Key Paths", - "description": "A list of partition key paths for the container.", - "items": { - "type": "string" + "additionalProperties": false, + "properties": { + "type": true, + "uses": true, + "containers": { + "type": "array", + "title": "Azure Cosmos DB Containers", + "description": "A list of containers in the Azure CosmosDB.", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "containerName": { + "type": "string", + "title": "Container Name", + "description": "The name of the container." + }, + "partitionKeyPaths": { + "type": "array", + "title": "Partition Key Paths", + "description": "A list of partition key paths for the container.", + "items": { + "type": "string" + } } } } From 1ec39abe607b00492cf730c268c34760fe631632 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Thu, 13 Feb 2025 16:53:14 +0800 Subject: [PATCH 04/11] address comments --- cli/azd/internal/cmd/add/add_preview.go | 2 +- cli/azd/internal/scaffold/scaffold_test.go | 3 +++ cli/azd/pkg/project/resources.go | 4 ++-- cli/azd/pkg/project/scaffold_gen.go | 4 ++-- cli/azd/resources/scaffold/templates/resources.bicept | 4 +++- 5 files changed, 11 insertions(+), 6 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_preview.go b/cli/azd/internal/cmd/add/add_preview.go index 8edbdcf7aca..5e52ec99483 100644 --- a/cli/azd/internal/cmd/add/add_preview.go +++ b/cli/azd/internal/cmd/add/add_preview.go @@ -70,7 +70,7 @@ func Metadata(r *project.ResourceConfig) resourceMeta { case project.ResourceTypeDbCosmos: res.AzureResourceType = "Microsoft.DocumentDB/databaseAccounts" res.UseEnvVars = []string{ - "AZURE_COSMOSDB_ENDPOINT", + "AZURE_COSMOS_ENDPOINT", } case project.ResourceTypeMessagingEventHubs: res.AzureResourceType = "Microsoft.EventHub/namespaces" diff --git a/cli/azd/internal/scaffold/scaffold_test.go b/cli/azd/internal/scaffold/scaffold_test.go index e7cd18d6a87..ade2e129764 100644 --- a/cli/azd/internal/scaffold/scaffold_test.go +++ b/cli/azd/internal/scaffold/scaffold_test.go @@ -89,6 +89,9 @@ func TestExecInfra(t *testing.T) { DbCosmosMongo: &DatabaseCosmosMongo{ DatabaseName: "appdb", }, + DbCosmos: &DatabaseCosmos{ + DatabaseName: "cosmos", + }, DbRedis: &DatabaseRedis{}, ServiceBus: &ServiceBus{}, EventHubs: &EventHubs{}, diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index e34b8cf3231..a2b5ae87071 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -208,8 +208,8 @@ type CosmosDBProps struct { } type CosmosDBContainerProps struct { - ContainerName string `yaml:"containerName,omitempty"` - PartitionKeyPaths []string `yaml:"partitionKeyPaths,omitempty"` + Name string `yaml:"containerName,omitempty"` + PartitionKeys []string `yaml:"partitionKeyPaths,omitempty"` } type ServiceBusProps struct { diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index 6ffbe44a0a8..98fc490116b 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -148,8 +148,8 @@ func infraSpec(projectConfig *ProjectConfig) (*scaffold.InfraSpec, error) { containers := make([]scaffold.CosmosSqlDatabaseContainer, 0) for _, c := range props.Containers { containers = append(containers, scaffold.CosmosSqlDatabaseContainer{ - ContainerName: c.ContainerName, - PartitionKeyPaths: c.PartitionKeyPaths, + ContainerName: c.Name, + PartitionKeyPaths: c.PartitionKeys, }) } infraSpec.DbCosmos = &scaffold.DatabaseCosmos{ diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index 69bf01c2c7d..9d10485df13 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -141,12 +141,14 @@ module cosmos 'br/public:avm/res/document-db/database-account:0.8.1' = { {{- range .Services}} {{bicepName .Name}}Identity.outputs.principalId {{- end}} + principalId ] sqlRoleDefinitions: [ { name: 'service-access-cosmos-sql-role' } ] + capabilitiesToAdd: [ 'EnableServerless' ] } } {{- end}} @@ -459,7 +461,7 @@ module {{bicepName .Name}} 'br/public:avm/res/app/container-app:0.8.0' = { {{- end}} {{- if .DbCosmos}} { - name: 'AZURE_COSMOSDB_ENDPOINT' + name: 'AZURE_COSMOS_ENDPOINT' value: cosmos.outputs.endpoint } {{- end}} From 4b63d3883fde832731cc327b2853bf4e7eae0425 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Fri, 14 Feb 2025 17:38:54 +0800 Subject: [PATCH 05/11] address comments --- cli/azd/pkg/project/resources.go | 4 ++-- schemas/alpha/azure.yaml.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index a2b5ae87071..2f840895b03 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -208,8 +208,8 @@ type CosmosDBProps struct { } type CosmosDBContainerProps struct { - Name string `yaml:"containerName,omitempty"` - PartitionKeys []string `yaml:"partitionKeyPaths,omitempty"` + Name string `yaml:"name,omitempty"` + PartitionKeys []string `yaml:"partitionKeys,omitempty"` } type ServiceBusProps struct { diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index b10983cebae..0ba4c0374ce 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -1338,14 +1338,14 @@ "type": "object", "additionalProperties": false, "properties": { - "containerName": { + "name": { "type": "string", - "title": "Container Name", + "title": "Container to create in the Azure Cosmos DB", "description": "The name of the container." }, - "partitionKeyPaths": { + "partitionKeys": { "type": "array", - "title": "Partition Key Paths", + "title": "Partition key paths of the container", "description": "A list of partition key paths for the container.", "items": { "type": "string" From 76356331508a4072eb35e2a2ea83ab220fcfbf1a Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Fri, 14 Feb 2025 16:21:44 -0800 Subject: [PATCH 06/11] add abbreviation and adjust output --- cli/azd/resources/scaffold/base/abbreviations.json | 1 + cli/azd/resources/scaffold/templates/resources.bicept | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/cli/azd/resources/scaffold/base/abbreviations.json b/cli/azd/resources/scaffold/base/abbreviations.json index dc62141f9da..1533dee5698 100644 --- a/cli/azd/resources/scaffold/base/abbreviations.json +++ b/cli/azd/resources/scaffold/base/abbreviations.json @@ -37,6 +37,7 @@ "devicesProvisioningServices": "provs-", "devicesProvisioningServicesCertificates": "pcert-", "documentDBDatabaseAccounts": "cosmos-", + "documentDBMongoDatabaseAccounts": "cosmon-", "eventGridDomains": "evgd-", "eventGridDomainsTopics": "evgt-", "eventGridEventSubscriptions": "evgs-", diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index 9d10485df13..e966d5bfbed 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -68,7 +68,7 @@ module containerAppsEnvironment 'br/public:avm/res/app/managed-environment:0.4.5 module cosmosMongo 'br/public:avm/res/document-db/database-account:0.8.1' = { name: 'cosmosMongo' params: { - name: '${abbrs.documentDBDatabaseAccounts}${resourceToken}' + name: '${abbrs.documentDBMongoDatabaseAccounts}${resourceToken}' location: location tags: tags locations: [ @@ -665,7 +665,7 @@ output AZURE_RESOURCE_REDIS_ID string = redis.outputs.resourceId output AZURE_RESOURCE_{{alphaSnakeUpper .DbPostgres.DatabaseName}}_ID string = '${postgreServer.outputs.resourceId}/databases/{{.DbPostgres.DatabaseName}}' {{- end}} {{- if .DbCosmos }} -output AZURE_RESOURCE_{{alphaSnakeUpper .DbCosmos.DatabaseName}}_ID string = cosmos.outputs.resourceId +output AZURE_RESOURCE_{{alphaSnakeUpper .DbCosmos.DatabaseName}}_ID string = '${cosmos.outputs.resourceId}/sqlDatabases/{{.DbCosmos.DatabaseName}}' {{- end}} {{- if .StorageAccount }} output AZURE_RESOURCE_STORAGE_ID string = storageAccount.outputs.resourceId From 3c67a78dc32273ce57e96573e67dccd0dd943314 Mon Sep 17 00:00:00 2001 From: Xiaolu Dai Date: Mon, 17 Feb 2025 21:39:21 +0800 Subject: [PATCH 07/11] remove containers --- cli/azd/internal/cmd/add/add_configure.go | 7 +--- cli/azd/internal/scaffold/spec.go | 6 ---- cli/azd/pkg/project/resources.go | 12 ------- cli/azd/pkg/project/scaffold_gen.go | 9 ----- .../scaffold/templates/resources.bicept | 12 ------- schemas/alpha/azure.yaml.json | 35 +------------------ 6 files changed, 2 insertions(+), 79 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_configure.go b/cli/azd/internal/cmd/add/add_configure.go index c1aae97f6bf..f0494a365ce 100644 --- a/cli/azd/internal/cmd/add/add_configure.go +++ b/cli/azd/internal/cmd/add/add_configure.go @@ -45,12 +45,7 @@ func Configure( project.ResourceTypeDbMongo: return fillDatabaseName(ctx, r, console, p) case project.ResourceTypeDbCosmos: - r, err := fillDatabaseName(ctx, r, console, p) - if err != nil { - return nil, err - } - r.Props = project.CosmosDBProps{} - return r, nil + return fillDatabaseName(ctx, r, console, p) case project.ResourceTypeMessagingEventHubs: return fillEventHubs(ctx, r, console, p) case project.ResourceTypeMessagingServiceBus: diff --git a/cli/azd/internal/scaffold/spec.go b/cli/azd/internal/scaffold/spec.go index 203a98b8cc5..19b539bd876 100644 --- a/cli/azd/internal/scaffold/spec.go +++ b/cli/azd/internal/scaffold/spec.go @@ -47,12 +47,6 @@ type DatabaseCosmosMongo struct { type DatabaseCosmos struct { DatabaseName string - Containers []CosmosSqlDatabaseContainer -} - -type CosmosSqlDatabaseContainer struct { - ContainerName string - PartitionKeyPaths []string } type DatabaseRedis struct { diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index 2f840895b03..a4c0a3af2cb 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -100,8 +100,6 @@ func (r *ResourceConfig) MarshalYAML() (interface{}, error) { errMarshal = marshalRawProps(raw.Props.(AIModelProps)) case ResourceTypeHostContainerApp: errMarshal = marshalRawProps(raw.Props.(ContainerAppProps)) - case ResourceTypeDbCosmos: - errMarshal = marshalRawProps(raw.Props.(CosmosDBProps)) case ResourceTypeMessagingEventHubs: errMarshal = marshalRawProps(raw.Props.(EventHubsProps)) case ResourceTypeMessagingServiceBus: @@ -151,12 +149,6 @@ func (r *ResourceConfig) UnmarshalYAML(value *yaml.Node) error { return err } raw.Props = cap - case ResourceTypeDbCosmos: - cdp := CosmosDBProps{} - if err := unmarshalProps(&cdp); err != nil { - return err - } - raw.Props = cdp case ResourceTypeMessagingEventHubs: ehp := EventHubsProps{} if err := unmarshalProps(&ehp); err != nil { @@ -203,10 +195,6 @@ type AIModelPropsModel struct { Version string `yaml:"version,omitempty"` } -type CosmosDBProps struct { - Containers []CosmosDBContainerProps `yaml:"containers,omitempty"` -} - type CosmosDBContainerProps struct { Name string `yaml:"name,omitempty"` PartitionKeys []string `yaml:"partitionKeys,omitempty"` diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index 98fc490116b..072030e2cc9 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -144,17 +144,8 @@ func infraSpec(projectConfig *ProjectConfig) (*scaffold.InfraSpec, error) { DatabaseName: res.Name, } case ResourceTypeDbCosmos: - props := res.Props.(CosmosDBProps) - containers := make([]scaffold.CosmosSqlDatabaseContainer, 0) - for _, c := range props.Containers { - containers = append(containers, scaffold.CosmosSqlDatabaseContainer{ - ContainerName: c.Name, - PartitionKeyPaths: c.PartitionKeys, - }) - } infraSpec.DbCosmos = &scaffold.DatabaseCosmos{ DatabaseName: res.Name, - Containers: containers, } case ResourceTypeDbPostgres: infraSpec.DbPostgres = &scaffold.DatabasePostgres{ diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index e966d5bfbed..fce253b834d 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -123,18 +123,6 @@ module cosmos 'br/public:avm/res/document-db/database-account:0.8.1' = { sqlDatabases: [ { name: '{{ .DbCosmos.DatabaseName }}' - containers: [ - {{- range .DbCosmos.Containers}} - { - name: '{{ .ContainerName }}' - paths: [ - {{- range $path := .PartitionKeyPaths}} - '{{ $path }}' - {{- end}} - ] - } - {{- end}} - ] } ] sqlRoleAssignmentsPrincipalIds: [ diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index 0ba4c0374ce..db393812242 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -391,7 +391,7 @@ { "if": { "properties": { "type": { "const": "db.postgres" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.redis" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.mongo" }}}, "then": { "$ref": "#/definitions/resource"} }, - { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/cosmosDbResource"} }, + { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "messaging.eventhubs" }}}, "then": { "$ref": "#/definitions/eventHubsResource" } }, { "if": { "properties": { "type": { "const": "messaging.servicebus" }}}, "then": { "$ref": "#/definitions/serviceBusResource" } }, { "if": { "properties": { "type": { "const": "storage" }}}, "then": { "$ref": "#/definitions/storageAccountResource"} } @@ -1323,39 +1323,6 @@ } } }, - "cosmosDbResource": { - "type": "object", - "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL.", - "additionalProperties": false, - "properties": { - "type": true, - "uses": true, - "containers": { - "type": "array", - "title": "Azure Cosmos DB Containers", - "description": "A list of containers in the Azure CosmosDB.", - "items": { - "type": "object", - "additionalProperties": false, - "properties": { - "name": { - "type": "string", - "title": "Container to create in the Azure Cosmos DB", - "description": "The name of the container." - }, - "partitionKeys": { - "type": "array", - "title": "Partition key paths of the container", - "description": "A list of partition key paths for the container.", - "items": { - "type": "string" - } - } - } - } - } - } - }, "eventHubsResource": { "type": "object", "description": "An Azure Event Hubs namespace.", From 495b3084b0334b081b4c0b644bba0719244f7a90 Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Wed, 19 Feb 2025 17:48:45 -0800 Subject: [PATCH 08/11] resolve merge --- cli/azd/internal/cmd/add/add_configure.go | 5 ++--- cli/azd/resources/scaffold/templates/main.bicept | 1 + schemas/alpha/azure.yaml.json | 1 + 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_configure.go b/cli/azd/internal/cmd/add/add_configure.go index 4a5b657bcce..a2f8ee50d2a 100644 --- a/cli/azd/internal/cmd/add/add_configure.go +++ b/cli/azd/internal/cmd/add/add_configure.go @@ -43,9 +43,8 @@ func Configure( return fillAiModelName(ctx, r, console, p) case project.ResourceTypeDbPostgres, project.ResourceTypeDbMySql, - project.ResourceTypeDbMongo: - return fillDatabaseName(ctx, r, console, p) - case project.ResourceTypeDbCosmos: + project.ResourceTypeDbMongo, + project.ResourceTypeDbCosmos: return fillDatabaseName(ctx, r, console, p) case project.ResourceTypeMessagingEventHubs: return fillEventHubs(ctx, r, console, p) diff --git a/cli/azd/resources/scaffold/templates/main.bicept b/cli/azd/resources/scaffold/templates/main.bicept index 611a6c70cb4..596ce942d5b 100644 --- a/cli/azd/resources/scaffold/templates/main.bicept +++ b/cli/azd/resources/scaffold/templates/main.bicept @@ -69,6 +69,7 @@ output AZURE_RESOURCE_{{alphaSnakeUpper .DbPostgres.DatabaseName}}_ID string = r {{- end}} {{- if .DbCosmos }} output AZURE_RESOURCE_{{alphaSnakeUpper .DbCosmos.DatabaseName}}_ID string = resources.outputs.AZURE_RESOURCE_{{alphaSnakeUpper .DbCosmos.DatabaseName}}_ID +{{- end}} {{- if .DbMySql}} output AZURE_RESOURCE_{{alphaSnakeUpper .DbMySql.DatabaseName}}_ID string = resources.outputs.AZURE_RESOURCE_{{alphaSnakeUpper .DbMySql.DatabaseName}}_ID {{- end}} diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index c85b22fb81a..3aab3eb9085 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -1237,6 +1237,7 @@ "db.redis", "db.mysql", "db.mongo", + "db.cosmos", "host.containerapp", "ai.openai.model" ] From a257e549143497b687606879f25cb725949d8233 Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Thu, 20 Feb 2025 13:01:44 -0800 Subject: [PATCH 09/11] Revert "remove containers" This reverts commit 3c67a78dc32273ce57e96573e67dccd0dd943314. --- cli/azd/internal/cmd/add/add_configure.go | 10 ++++-- cli/azd/internal/scaffold/spec.go | 6 ++++ cli/azd/pkg/project/resources.go | 12 +++++++ cli/azd/pkg/project/scaffold_gen.go | 9 +++++ .../scaffold/templates/resources.bicept | 12 +++++++ schemas/alpha/azure.yaml.json | 35 ++++++++++++++++++- 6 files changed, 81 insertions(+), 3 deletions(-) diff --git a/cli/azd/internal/cmd/add/add_configure.go b/cli/azd/internal/cmd/add/add_configure.go index a2f8ee50d2a..4e734da9c19 100644 --- a/cli/azd/internal/cmd/add/add_configure.go +++ b/cli/azd/internal/cmd/add/add_configure.go @@ -43,9 +43,15 @@ func Configure( return fillAiModelName(ctx, r, console, p) case project.ResourceTypeDbPostgres, project.ResourceTypeDbMySql, - project.ResourceTypeDbMongo, - project.ResourceTypeDbCosmos: + project.ResourceTypeDbMongo: return fillDatabaseName(ctx, r, console, p) + case project.ResourceTypeDbCosmos: + r, err := fillDatabaseName(ctx, r, console, p) + if err != nil { + return nil, err + } + r.Props = project.CosmosDBProps{} + return r, nil case project.ResourceTypeMessagingEventHubs: return fillEventHubs(ctx, r, console, p) case project.ResourceTypeMessagingServiceBus: diff --git a/cli/azd/internal/scaffold/spec.go b/cli/azd/internal/scaffold/spec.go index dbdf5661ff8..0c595598cce 100644 --- a/cli/azd/internal/scaffold/spec.go +++ b/cli/azd/internal/scaffold/spec.go @@ -51,6 +51,12 @@ type DatabaseCosmosMongo struct { type DatabaseCosmos struct { DatabaseName string + Containers []CosmosSqlDatabaseContainer +} + +type CosmosSqlDatabaseContainer struct { + ContainerName string + PartitionKeyPaths []string } type DatabaseRedis struct { diff --git a/cli/azd/pkg/project/resources.go b/cli/azd/pkg/project/resources.go index 9e682c421a9..c05e2240592 100644 --- a/cli/azd/pkg/project/resources.go +++ b/cli/azd/pkg/project/resources.go @@ -104,6 +104,8 @@ func (r *ResourceConfig) MarshalYAML() (interface{}, error) { errMarshal = marshalRawProps(raw.Props.(AIModelProps)) case ResourceTypeHostContainerApp: errMarshal = marshalRawProps(raw.Props.(ContainerAppProps)) + case ResourceTypeDbCosmos: + errMarshal = marshalRawProps(raw.Props.(CosmosDBProps)) case ResourceTypeMessagingEventHubs: errMarshal = marshalRawProps(raw.Props.(EventHubsProps)) case ResourceTypeMessagingServiceBus: @@ -153,6 +155,12 @@ func (r *ResourceConfig) UnmarshalYAML(value *yaml.Node) error { return err } raw.Props = cap + case ResourceTypeDbCosmos: + cdp := CosmosDBProps{} + if err := unmarshalProps(&cdp); err != nil { + return err + } + raw.Props = cdp case ResourceTypeMessagingEventHubs: ehp := EventHubsProps{} if err := unmarshalProps(&ehp); err != nil { @@ -199,6 +207,10 @@ type AIModelPropsModel struct { Version string `yaml:"version,omitempty"` } +type CosmosDBProps struct { + Containers []CosmosDBContainerProps `yaml:"containers,omitempty"` +} + type CosmosDBContainerProps struct { Name string `yaml:"name,omitempty"` PartitionKeys []string `yaml:"partitionKeys,omitempty"` diff --git a/cli/azd/pkg/project/scaffold_gen.go b/cli/azd/pkg/project/scaffold_gen.go index 1a479a6b63a..13cd35cd6b3 100644 --- a/cli/azd/pkg/project/scaffold_gen.go +++ b/cli/azd/pkg/project/scaffold_gen.go @@ -144,8 +144,17 @@ func infraSpec(projectConfig *ProjectConfig) (*scaffold.InfraSpec, error) { DatabaseName: res.Name, } case ResourceTypeDbCosmos: + props := res.Props.(CosmosDBProps) + containers := make([]scaffold.CosmosSqlDatabaseContainer, 0) + for _, c := range props.Containers { + containers = append(containers, scaffold.CosmosSqlDatabaseContainer{ + ContainerName: c.Name, + PartitionKeyPaths: c.PartitionKeys, + }) + } infraSpec.DbCosmos = &scaffold.DatabaseCosmos{ DatabaseName: res.Name, + Containers: containers, } case ResourceTypeDbPostgres: infraSpec.DbPostgres = &scaffold.DatabasePostgres{ diff --git a/cli/azd/resources/scaffold/templates/resources.bicept b/cli/azd/resources/scaffold/templates/resources.bicept index aa13e1a8d01..2c9cca78310 100644 --- a/cli/azd/resources/scaffold/templates/resources.bicept +++ b/cli/azd/resources/scaffold/templates/resources.bicept @@ -123,6 +123,18 @@ module cosmos 'br/public:avm/res/document-db/database-account:0.8.1' = { sqlDatabases: [ { name: '{{ .DbCosmos.DatabaseName }}' + containers: [ + {{- range .DbCosmos.Containers}} + { + name: '{{ .ContainerName }}' + paths: [ + {{- range $path := .PartitionKeyPaths}} + '{{ $path }}' + {{- end}} + ] + } + {{- end}} + ] } ] sqlRoleAssignmentsPrincipalIds: [ diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index 3aab3eb9085..965b5fe5945 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -393,7 +393,7 @@ { "if": { "properties": { "type": { "const": "db.mysql" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.redis" }}}, "then": { "$ref": "#/definitions/resource"} }, { "if": { "properties": { "type": { "const": "db.mongo" }}}, "then": { "$ref": "#/definitions/resource"} }, - { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/resource"} }, + { "if": { "properties": { "type": { "const": "db.cosmos" }}}, "then": { "$ref": "#/definitions/cosmosDbResource"} }, { "if": { "properties": { "type": { "const": "messaging.eventhubs" }}}, "then": { "$ref": "#/definitions/eventHubsResource" } }, { "if": { "properties": { "type": { "const": "messaging.servicebus" }}}, "then": { "$ref": "#/definitions/serviceBusResource" } }, { "if": { "properties": { "type": { "const": "storage" }}}, "then": { "$ref": "#/definitions/storageAccountResource"} } @@ -1327,6 +1327,39 @@ } } }, + "cosmosDbResource": { + "type": "object", + "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL.", + "additionalProperties": false, + "properties": { + "type": true, + "uses": true, + "containers": { + "type": "array", + "title": "Azure Cosmos DB Containers", + "description": "A list of containers in the Azure CosmosDB.", + "items": { + "type": "object", + "additionalProperties": false, + "properties": { + "name": { + "type": "string", + "title": "Container to create in the Azure Cosmos DB", + "description": "The name of the container." + }, + "partitionKeys": { + "type": "array", + "title": "Partition key paths of the container", + "description": "A list of partition key paths for the container.", + "items": { + "type": "string" + } + } + } + } + } + } + }, "eventHubsResource": { "type": "object", "description": "An Azure Event Hubs namespace.", From 1f4be09347b32a0ffa80470a65df521adc95bc69 Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Mon, 24 Feb 2025 18:03:14 -0800 Subject: [PATCH 10/11] WIP --- .../cmd/add/add_configure_database.go | 65 +++++++++++++++++++ schemas/alpha/azure.yaml.json | 16 +++-- 2 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 cli/azd/internal/cmd/add/add_configure_database.go diff --git a/cli/azd/internal/cmd/add/add_configure_database.go b/cli/azd/internal/cmd/add/add_configure_database.go new file mode 100644 index 00000000000..478f1b85d82 --- /dev/null +++ b/cli/azd/internal/cmd/add/add_configure_database.go @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package add + +import ( + "context" + + "github.com/azure/azure-dev/cli/azd/internal/names" + "github.com/azure/azure-dev/cli/azd/pkg/input" + "github.com/azure/azure-dev/cli/azd/pkg/project" +) + +func fillCosmosDetails( + ctx context.Context, + r *project.ResourceConfig, + console input.Console, + p PromptOptions) (*project.ResourceConfig, error) { + if r.Props != nil { + return r, nil + } + + props := project.CosmosDBProps{} + container := project.CosmosDBContainerProps{} + for { + name, err := console.Prompt(ctx, input.ConsoleOptions{ + Message: "Input the container name to store data:", + Help: "Container name\n\n" + + "A container that is used to store data. For example, the container named 'products' to store product data.", + }) + if err != nil { + return r, err + } + + if err := names.ValidateLabelName(name); err != nil { + console.Message(ctx, err.Error()) + continue + } + + container.Name = name + break + } + + for { + name, err := console.Prompt(ctx, input.ConsoleOptions{ + Message: "Input the partition key:", + Help: "Container name\n\n" + + "A container that is used to store data. For example, the container named 'products' to store product data.", + }) + if err != nil { + return r, err + } + + if err := names.ValidateLabelName(name); err != nil { + console.Message(ctx, err.Error()) + continue + } + + container.Name = name + break + } + + props.Containers = []project.CosmosDBContainerProps{} + return r, nil +} diff --git a/schemas/alpha/azure.yaml.json b/schemas/alpha/azure.yaml.json index 965b5fe5945..7961c1d5a1a 100644 --- a/schemas/alpha/azure.yaml.json +++ b/schemas/alpha/azure.yaml.json @@ -1329,28 +1329,30 @@ }, "cosmosDbResource": { "type": "object", - "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL.", + "description": "A deployed, ready-to-use Azure Cosmos DB for NoSQL database.", "additionalProperties": false, "properties": { "type": true, "uses": true, "containers": { "type": "array", - "title": "Azure Cosmos DB Containers", - "description": "A list of containers in the Azure CosmosDB.", + "title": "Containers", + "description": "Containers to be created to store data. Each container stores a collection of items.", "items": { "type": "object", "additionalProperties": false, "properties": { "name": { "type": "string", - "title": "Container to create in the Azure Cosmos DB", - "description": "The name of the container." + "title": "Container name.", + "description": "Required. The name of the container." }, "partitionKeys": { "type": "array", - "title": "Partition key paths of the container", - "description": "A list of partition key paths for the container.", + "title": "Partition keys.", + "description": "Required. The partition key(s) used to distribute data across partitions. The ordering of keys matters. By default, a single partition key '/id' is naturally a great choice for most applications.", + "minLength": 1, + "maxLength": 3, "items": { "type": "string" } From aa73fc1f600a37bc6e5ee9737bbaa61fb7e5f5dc Mon Sep 17 00:00:00 2001 From: Wei Lim Date: Tue, 4 Mar 2025 11:17:25 -0800 Subject: [PATCH 11/11] remove prompting for now --- .../cmd/add/add_configure_database.go | 65 ------------------- 1 file changed, 65 deletions(-) delete mode 100644 cli/azd/internal/cmd/add/add_configure_database.go diff --git a/cli/azd/internal/cmd/add/add_configure_database.go b/cli/azd/internal/cmd/add/add_configure_database.go deleted file mode 100644 index 478f1b85d82..00000000000 --- a/cli/azd/internal/cmd/add/add_configure_database.go +++ /dev/null @@ -1,65 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package add - -import ( - "context" - - "github.com/azure/azure-dev/cli/azd/internal/names" - "github.com/azure/azure-dev/cli/azd/pkg/input" - "github.com/azure/azure-dev/cli/azd/pkg/project" -) - -func fillCosmosDetails( - ctx context.Context, - r *project.ResourceConfig, - console input.Console, - p PromptOptions) (*project.ResourceConfig, error) { - if r.Props != nil { - return r, nil - } - - props := project.CosmosDBProps{} - container := project.CosmosDBContainerProps{} - for { - name, err := console.Prompt(ctx, input.ConsoleOptions{ - Message: "Input the container name to store data:", - Help: "Container name\n\n" + - "A container that is used to store data. For example, the container named 'products' to store product data.", - }) - if err != nil { - return r, err - } - - if err := names.ValidateLabelName(name); err != nil { - console.Message(ctx, err.Error()) - continue - } - - container.Name = name - break - } - - for { - name, err := console.Prompt(ctx, input.ConsoleOptions{ - Message: "Input the partition key:", - Help: "Container name\n\n" + - "A container that is used to store data. For example, the container named 'products' to store product data.", - }) - if err != nil { - return r, err - } - - if err := names.ValidateLabelName(name); err != nil { - console.Message(ctx, err.Error()) - continue - } - - container.Name = name - break - } - - props.Containers = []project.CosmosDBContainerProps{} - return r, nil -}