in pkg/deploy/generator/resources_rp.go [980:1323]
func (g *generator) database(databaseName string, addDependsOn bool) []*arm.Resource {
database := &arm.Resource{
Resource: &sdkcosmos.SQLDatabaseCreateUpdateParameters{
Properties: &sdkcosmos.SQLDatabaseCreateUpdateProperties{
Resource: &sdkcosmos.SQLDatabaseResource{
ID: to.StringPtr("[" + databaseName + "]"),
},
Options: &sdkcosmos.CreateUpdateOptions{
Throughput: to.Int32Ptr(cosmosDbStandardProvisionedThroughputHack),
},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ")]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
}
hashPartitionKey := sdkcosmos.PartitionKindHash
portal := &arm.Resource{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("Portal"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{
Throughput: to.Int32Ptr(cosmosDbPortalProvisionedThroughputHack),
},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/Portal')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
}
gateway := &arm.Resource{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("Gateway"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{
Throughput: to.Int32Ptr(cosmosDbGatewayProvisionedThroughputHack),
},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/Gateway')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
}
mimo := &arm.Resource{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("MaintenanceManifests"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/clusterResourceID"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{
Throughput: to.Int32Ptr(cosmosDbGatewayProvisionedThroughputHack),
},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/MaintenanceManifests')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
}
if !g.production {
database.Resource.(*sdkcosmos.SQLDatabaseCreateUpdateParameters).Properties.Options = &sdkcosmos.CreateUpdateOptions{
AutoscaleSettings: &sdkcosmos.AutoscaleSettings{
MaxThroughput: to.Int32Ptr(1000),
},
}
portal.Resource.(*sdkcosmos.SQLContainerCreateUpdateParameters).Properties.Options = &sdkcosmos.CreateUpdateOptions{}
gateway.Resource.(*sdkcosmos.SQLContainerCreateUpdateParameters).Properties.Options = &sdkcosmos.CreateUpdateOptions{}
mimo.Resource.(*sdkcosmos.SQLContainerCreateUpdateParameters).Properties.Options = &sdkcosmos.CreateUpdateOptions{}
}
rs := []*arm.Resource{
database,
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("AsyncOperations"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(7 * 86400), // 7 days
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/AsyncOperations')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("OpenShiftVersions"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/OpenShiftVersions')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("PlatformWorkloadIdentityRoleSets"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/PlatformWorkloadIdentityRoleSets')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("Billing"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/Billing')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
gateway,
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("Monitors"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
DefaultTTL: to.Int32Ptr(-1),
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/Monitors')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("OpenShiftClusters"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/partitionKey"),
},
Kind: &hashPartitionKey,
},
UniqueKeyPolicy: &sdkcosmos.UniqueKeyPolicy{
UniqueKeys: []*sdkcosmos.UniqueKey{
{
Paths: []*string{
to.StringPtr("/key"),
},
},
{
Paths: []*string{
to.StringPtr("/clusterResourceGroupIdKey"),
},
},
{
Paths: []*string{
to.StringPtr("/clientIdKey"),
},
},
},
},
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/OpenShiftClusters')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
portal,
{
Resource: &sdkcosmos.SQLContainerCreateUpdateParameters{
Properties: &sdkcosmos.SQLContainerCreateUpdateProperties{
Resource: &sdkcosmos.SQLContainerResource{
ID: to.StringPtr("Subscriptions"),
PartitionKey: &sdkcosmos.ContainerPartitionKey{
Paths: []*string{
to.StringPtr("/id"),
},
Kind: &hashPartitionKey,
},
},
Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/Subscriptions')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases",
},
}
// Adding Triggers
rs = append(rs,
// Subscription
g.rpCosmosDBTriggers(databaseName, "Subscriptions", "renewLease", renewLeaseTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationAll),
g.rpCosmosDBTriggers(databaseName, "Subscriptions", "retryLater", retryLaterTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationAll),
// Billing
g.rpCosmosDBTriggers(databaseName, "Billing", "setCreationBillingTimeStamp", setCreationBillingTimeStampTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationCreate),
g.rpCosmosDBTriggers(databaseName, "Billing", "setDeletionBillingTimeStamp", setDeletionBillingTimeStampTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationReplace),
// OpenShiftClusters
g.rpCosmosDBTriggers(databaseName, "OpenShiftClusters", "renewLease", renewLeaseTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationAll),
// Monitors
g.rpCosmosDBTriggers(databaseName, "Monitors", "renewLease", renewLeaseTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationAll),
)
// Don't deploy the MIMO databases in production yet
if !g.production {
rs = append(rs,
mimo,
// MIMO DB triggers
g.rpCosmosDBTriggers(databaseName, "MaintenanceManifests", "renewLease", renewLeaseTriggerFunction, sdkcosmos.TriggerTypePre, sdkcosmos.TriggerOperationAll),
)
}
if addDependsOn {
for i := range rs {
rs[i].DependsOn = append(rs[i].DependsOn,
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]",
)
}
}
return rs
}