2

我希望能够将内联对象作为参数值传递给链接模板。用例是我有一个部署服务总线(或其他资源)的模板和一个部署 Web 应用程序的模板。我想构建一个结合这两个组件的模板。我希望 Web 应用程序模板有一个名为的对象参数userProvidedAppSettings,我可以将其与一些默认值结合,然后将该生成的对象分配为 Microsoft.Web/site/config/appsettings 资源的属性值。

看来您目前不能在参数的内联对象值中使用 reference 或 listkeys 函数,请参见userProvidedAppSettings下面的示例。

这可能吗,我没有使用适当的约定?我在文档中没有看到任何关于此的内容。

{
    "apiVersion": "[parameters('apiVersion')]",
    "name": "[variables('serviceBusDeploymentName')]",
    "type": "Microsoft.Resources/deployments",
    "properties": {
        "mode": "Incremental",
        "templateLink": {
            "uri": "[parameters('templateOneUri')]",
            "contentVersion": "1.0.0.0"
         },
         "parameters": {
             "environment": { "value": "[parameters('environment')]" },
             "appName": { "value": "[parameters('appName')]" }
          }
     }
},
{
        "apiVersion": "[parameters('apiVersion')]",
        "name": "[variables('applicationDeploymentName')]",
        "type": "Microsoft.Resources/deployments",
        "properties": {
            "mode": "Incremental",
            "templateLink": {
                "uri": "[parameters('templateTwoUri')]",
                "contentVersion": "1.0.0.0"
             },
             "parameters": {
                 "environment": { "value": "[parameters('environment')]" },
                 "appName": { "value": "[parameters('appName')]" },
                 "userProvidedAppSettings" : { "value": { "serviceBusConnectionString": "[reference(variables('serviceBusDeploymentName')).outputs.connectionString.value]" } }
              }
         }
    }

编辑:

澄清一下,这是关于链接模板参数值的行为。我特别问这个:

"parameters": {
    // Allowed:
    "param1": { "value": "[parameters('environment')]" },
    "param2": { "value": "[reference('otherDeployment').outputs.something.value]" },
    "param3": { "value": { "this": "is allowed",
                           "inline": "is allowed" } },
    // NOT Allowed
    "param4": { "value": { "this": "is NOT allowed".
                           "foo": "[reference('otherDeployment').outputs.something.value]" } }
}

reference输出被允许作为值,内联对象被允许作为值,但其值包含 a reference(或函数的隐式引用list)的内联对象是不允许的。我想知道这是否可以通过不同的约定实现,或者是否应该将其添加到所需功能的列表中。

4

2 回答 2

1

对于您的问题,不确定,但您可以尝试使用链接和嵌套模板。您可以在主模板中获取链接模板的值。

您可以在链接模板输出中定义变量并在主模板中使用它。这里有一个简单的例子。希望对你有帮助!

于 2018-10-12T01:54:36.520 回答
0

您可以使用union()函数来构建所需的对象并将其作为值传递给参数。

{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "firstObject": {
            "type": "object",
            "defaultValue": {"one": "a", "two": "b", "three": "c1"}
        },
        "secondObject": {
            "type": "object",
            "defaultValue": {"three": "c2", "four": "d", "five": "e"}
        }
    },
    "resources": [],
    "outputs": {
        "objectOutput": {
            "type": "object",
            "value": "[union(parameters('firstObject'), parameters('secondObject'))]"
        }
    }
}
于 2020-03-14T16:32:01.427 回答