0

I need to find a way to add several custom actions to an Azure Service Bus topic subscription rule SQL action.

Azure CLI only allows one - and the forthcoming will replace the existing (anyway, I haven't found a way to pass more than 1 argument):

az servicebus topic subscription rule update --resource-group xxxxx --namespace-name xxxxxx --topic-name xxxxxx --subscription-name "xxxxxxx" --name NoArchive --action-sql-expression "set CustomProp2 = 'BBB'"

Format of --action-sql-expression "set CustomProp1 = 'AAA'","set customProp2 = 'BBB'" leads to

BadRequest: There was an error parsing the SQL expression. [Token line=1, column=23, Token in error= ,, Additional details= Unrecognized character. ',']  TrackingId:8bbf145d-3f10-476b-b58a-acc3e1014977_B61, SystemTracker:NoSystemTracker, Timestamp:2021-03-03T13:55:13 CorrelationId: 6a0a073c-ed11-4054-8261-777756a2ec3c

It looks like multiple values aren't supported.

The official documentation is also a bit useless.

Trying to find a way to do it using ARM template (as stated here) but not sure multiple values can also be passed using it:

 "properties": {
                "action": {
                    "sqlExpression": "set CustomProp2 = 'BBB'",
                    "compatibilityLevel": 20
                },
                "filterType": "SqlFilter",
                "sqlFilter": {
                    "sqlExpression": "NoArchive IS NOT NULL",
                    "compatibilityLevel": 20
                }

Here's the ref to an official ARM template documentation and I'm not sure this parameter supports multiple values.

"resources": [{
        "apiVersion": "[variables('sbVersion')]",
        "name": "[parameters('serviceBusNamespaceName')]",
        "type": "Microsoft.ServiceBus/Namespaces",
        "location": "[variables('location')]",
        "sku": {
            "name": "Standard",
        },
        "resources": [{
            "apiVersion": "[variables('sbVersion')]",
            "name": "[parameters('serviceBusTopicName')]",
            "type": "Topics",
            "dependsOn": [
                "[concat('Microsoft.ServiceBus/namespaces/', parameters('serviceBusNamespaceName'))]"
            ],
            "properties": {
                "path": "[parameters('serviceBusTopicName')]"
            },
            "resources": [{
                "apiVersion": "[variables('sbVersion')]",
                "name": "[parameters('serviceBusSubscriptionName')]",
                "type": "Subscriptions",
                "dependsOn": [
                    "[parameters('serviceBusTopicName')]"
                ],
                "properties": {},
                "resources": [{
                    "apiVersion": "[variables('sbVersion')]",
                    "name": "[parameters('serviceBusRuleName')]",
                    "type": "Rules",
                    "dependsOn": [
                        "[parameters('serviceBusSubscriptionName')]"
                    ],
                    "properties": {
                        "filterType": "SqlFilter",
                        "sqlFilter": {
                            "sqlExpression": "StoreName = 'Store1'",
                            "requiresPreprocessing": "false"
                        },
                        "action": {
                            "sqlExpression": "set FilterTag = 'true'"
                        }
                    }
                }]
            }]
        }]
    }]

I'm a bit confused.

Thanks.

Sergey
  • 381
  • 6
  • 24

1 Answers1

0

You need to use it as below. The --action-sql-expression parameter only accepts one value. If you have multiple actions then you need to specify as below. Similarly for the ARM template.

az servicebus topic subscription rule update --resource-group xxxxx --namespace-name xxxxxx --topic-name xxxxxx --subscription-name "xxxxxxx" --name NoArchive --action-sql-expression "set CustomProp1 = 'AAA' set customProp2 = 'BBB'"

MayankBargali
  • 712
  • 5
  • 8