Skip to content

Commit

Permalink
added arm templates for cosmosdb triggers
Browse files Browse the repository at this point in the history
  • Loading branch information
anshulvermapatel committed Jun 7, 2024
1 parent d643fd3 commit a3cc31c
Show file tree
Hide file tree
Showing 4 changed files with 278 additions and 0 deletions.
114 changes: 114 additions & 0 deletions pkg/deploy/assets/databases-development.json
Original file line number Diff line number Diff line change
Expand Up @@ -260,6 +260,120 @@
}
},
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/Subscriptions/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "retryLater",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 600;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/Subscriptions/retryLater')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "setCreationBillingTimeStamp",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "Create",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/Billing/setCreationBillingTimeStamp')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "setDeletionBillingTimeStamp",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "Replace",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/Billing/setDeletionBillingTimeStamp')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/OpenShiftClusters/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', parameters('databaseName'), '/Monitors/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), parameters('databaseName'))]"
]
}
]
}
120 changes: 120 additions & 0 deletions pkg/deploy/assets/rp-production.json
Original file line number Diff line number Diff line change
Expand Up @@ -941,6 +941,126 @@
},
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers"
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/Subscriptions/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "retryLater",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 600;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/Subscriptions/retryLater')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "setCreationBillingTimeStamp",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "Create",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/Billing/setCreationBillingTimeStamp')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "setDeletionBillingTimeStamp",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "Replace",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/Billing/setDeletionBillingTimeStamp')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/OpenShiftClusters/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"Properties": {
"Resource": {
"ID": "renewLease",
"Body": "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}",
"TriggerOperation": "All",
"TriggerType": "Pre"
},
"Options": null
},
"location": "[resourceGroup().location]",
"ID": null,
"name": "[concat(parameters('databaseAccountName'), '/', 'ARO', '/Monitors/renewLease')]",
"type": "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
"apiVersion": "2023-04-15",
"dependsOn": [
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), 'ARO')]",
"[resourceId('Microsoft.DocumentDB/databaseAccounts', parameters('databaseAccountName'))]"
]
},
{
"properties": {
"severity": 3,
Expand Down
5 changes: 5 additions & 0 deletions pkg/deploy/generator/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,9 @@ const (
// Tag constants
tagKeyExemptPublicBlob = "Az.Sec.AnonymousBlobAccessEnforcement::Skip"
tagValueExemptPublicBlob = "PublicRelease"

renewLeaseTriggerFunction = "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 60;\n\t\t\t\trequest.setBody(body);\n\t\t\t}"
retryLaterTriggerFunction = "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tbody[\"leaseExpires\"] = Math.floor(date.getTime() / 1000) + 600;\n\t\t\t\trequest.setBody(body);\n\t\t\t}"
setCreationBillingTimeStampTriggerFunction = "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}"
setDeletionBillingTimeStampTriggerFunction = "function trigger() {\n\t\t\t\tvar request = getContext().getRequest();\n\t\t\t\tvar body = request.getBody();\n\t\t\t\tvar date = new Date();\n\t\t\t\tvar now = Math.floor(date.getTime() / 1000);\n\t\t\t\tvar billingBody = body[\"billing\"];\n\t\t\t\tif (!billingBody[\"creationTime\"]) {\n\t\t\t\t\tbillingBody[\"creationTime\"] = now;\n\t\t\t\t}\n\t\t\t\trequest.setBody(body);\n\t\t\t}"
)
39 changes: 39 additions & 0 deletions pkg/deploy/generator/resources_rp.go
Original file line number Diff line number Diff line change
Expand Up @@ -1207,6 +1207,20 @@ func (g *generator) database(databaseName string, addDependsOn bool) []*arm.Reso
},
}

// 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),
)

if addDependsOn {
for i := range rs {
rs[i].DependsOn = append(rs[i].DependsOn,
Expand All @@ -1218,6 +1232,31 @@ func (g *generator) database(databaseName string, addDependsOn bool) []*arm.Reso
return rs
}

func (g *generator) rpCosmosDBTriggers(databaseName, containerName, triggerID, triggerFunction string, triggerType sdkcosmos.TriggerType, triggerOperation sdkcosmos.TriggerOperation) *arm.Resource {
return &arm.Resource{
Resource: &sdkcosmos.SQLTriggerCreateUpdateParameters{
Properties: &sdkcosmos.SQLTriggerCreateUpdateProperties{
Resource: &sdkcosmos.SQLTriggerResource{
ID: to.StringPtr(triggerID),
Body: to.StringPtr(triggerFunction),
TriggerOperation: &triggerOperation,
TriggerType: &triggerType,
},
// Options: &sdkcosmos.CreateUpdateOptions{},
},
Name: to.StringPtr("[concat(parameters('databaseAccountName'), '/', " + databaseName + ", '/" + containerName + "/" + triggerID + "')]"),
Type: to.StringPtr("Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers"),
Location: to.StringPtr("[resourceGroup().location]"),
},
APIVersion: azureclient.APIVersion("Microsoft.DocumentDB"),
DependsOn: []string{
"[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), " + databaseName + ")]",
// "[resourceId('Microsoft.DocumentDB/databaseAccounts/sqlDatabases', parameters('databaseAccountName'), concat(" + databaseName + ", '/" + containerName + "'))]",
},
Type: "Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers",
}
}

func (g *generator) rpCosmosDBAlert(throttledRequestThreshold float64, ruConsumptionThreshold float64, severity int32, name string, evalFreq string, windowSize string) *arm.Resource {
throttledRequestMetricCriteria := mgmtinsights.MetricCriteria{
CriterionType: mgmtinsights.CriterionTypeStaticThresholdCriterion,
Expand Down

0 comments on commit a3cc31c

Please sign in to comment.