Ошибка при передаче переменной со специальными параметрами в шаблон ARM - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть мастер-шаблон и пара связанных шаблонов. Я хочу передать параметр со специальными символами и ошибка. Кто-нибудь знает, как это исправить? Проблема вызвана параметром «servicebus_1_connectionString» в последнем определении связанного шаблона. Я предоставил ошибку и изменил несколько букв в секрете, чтобы у вас был общий обзор, но вы не раскрыли мои секреты.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
    "parameters": {
        "containerUri": {
            "type": "string"
        },
        "containerSasToken": {
            "type": "string"
        }
    },
  "variables": {},
    "resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2017-05-10",
            "name": "AzureServiceBusLinkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('containerUri'), 'Infrastructure/AzureServiceBus.json', parameters('containerSasToken'))]"
                }
            }
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2017-05-10",
            "name": "AppFunctionsLinkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('containerUri'), 'Infrastructure/AppFunctions.json', parameters('containerSasToken'))]"
                }
            }
        },
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2017-05-10",
            "name": "LogicAppLinkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('containerUri'), 'LogicApp.json', parameters('containerSasToken'))]"
                },
                 "parameters": {
                "servicebus_1_connectionString": "[reference('AzureServiceBusLinkedTemplate').outputs.SBNamespaceDefaultConnectionString.value]"
            }
            },
            "dependsOn": [
                "AzureServiceBusLinkedTemplate"
            ]
        }
    ],
  "outputs": {
  }
}
2020-02-26T09:47:34.3751880Z ##[error]At least one resource deployment operation failed. Please list deployment operations for details. Please see https://aka.ms/DeployOperations for usage details.
2020-02-26T09:47:34.3754763Z ##[error]Details:
2020-02-26T09:47:34.3758785Z ##[error]BadRequest: {
  "error": {
    "code": "InvalidRequestContent",
    "message": "The request content was invalid and could not be deserialized: 'Error converting value \"Endpoint=sb://myservicebusname.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=I/COoOJCWH/PFMab0dzpseIbfA3+0sQMUj33d71/Rg4=\" to type 'Microsoft.WindowsAzure.ResourceStack.Frontdoor.Data.Definitions.DeploymentParameterDefinition'. Path 'properties.parameters.servicebus_1_connectionString', line 1, position 462.'."
  }
}
2020-02-26T09:47:34.3786900Z ##[error]Task failed while creating or updating the template deployment.

Редактировать: я решил эту проблему, изменив способ передачи параметра на следующий :

       {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2017-05-10",
            "name": "LogicAppLinkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('containerUri'), 'LogicApp.json', parameters('containerSasToken'))]"
                },
                "parameters": {
                    "servicebus_1_connectionString": {
                        "value": "[reference('AzureServiceBusLinkedTemplate').outputs.SBNamespaceDefaultConnectionString.value]"
                    },
                    "logicAppName": {
                        "value": "DeployedFromVS"
                    }
                }
            },
            "dependsOn": [
                "AzureServiceBusLinkedTemplate"
            ]
        }

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Я решил это, изменив способ передачи параметра следующим образом:

   {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2017-05-10",
            "name": "LogicAppLinkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                    "uri": "[concat(parameters('containerUri'), 'LogicApp.json', parameters('containerSasToken'))]"
                },
                "parameters": {
                    "servicebus_1_connectionString": {
                        "value": "[reference('AzureServiceBusLinkedTemplate').outputs.SBNamespaceDefaultConnectionString.value]"
                    },
                    "logicAppName": {
                        "value": "DeployedFromVS"
                    }
                }
            },
            "dependsOn": [
                "AzureServiceBusLinkedTemplate"
            ]
        }

0 голосов
/ 26 февраля 2020

несколько вариантов:

  1. , что имеет больше смысла, не передавайте его, просто используйте значение во вложенном шаблоне
  2. bonus: вместо получения значения развертывания output - получить значение строки подключения во вложенном шаблоне. имеет больше смысла и является более безопасным
  3. base64 кодирует его и декодирует во вложенном шаблоне. для этого есть функция base64encode \ decode
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...