如何在ARM模板的参数中引用参数?

时间:2019-07-25 00:20:42

标签: azure azure-devops arm-template

对于ARM模板,我似乎找不到任何方法使用参数值作为参数文件中另一个参数的一部分:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "someCustomParam": {
        "value": "desired value"
    },
    "tags": {
        "value": {
            "tag1": "[parameters('someCustomParam')]",
            "tag2": "some tag value"
        }
    },
  }
}

注意我要如何使用前一个参数的值作为另一个参数的值。

“ tag1”的值只是字符串,并且不会从parameter()函数中替换该值。我已经使用Test-AzResourceGroupDeployment PowerShell cmdlet对此进行了测试。

有什么办法可以做到这一点?

3 个答案:

答案 0 :(得分:0)

您需要使用variables

在变量中,可以使用“ [parameters('parameterName')]”。

您可以使用与参数类似的方式使用变量:“ [variables('variableName')]”

更新

以下是示例:

"parameters": {
    "someCustomParam": {
        "type": "string"
    }
},
"variables": {
    "tags": {
        "tag1": "[parameters('someCustomParam')]",
        "tag2": "some tag value"
    }
}

然后您可以在模板的资源中使用变量。

答案 1 :(得分:0)

  • 您可以使用PowerShell执行此操作。在调用Test-AzResourceGroupDeployment之前,您可以使用
  • 在PowerShell变量/对象中获取参数文件的内容
  • $ParameterObject = Get-Content ./ParameterFileName.json
  • 更新所需的值,例如:

  • $ParameterObject.parameters.tags.value.tag1 =#要分配的值

  • $parameterObject传递到-TemplateParameterObject的{​​{1}}参数

------或------

  • 使用Test-AzResourceGroupDeployment$parameterObject转换为JSON并另存为temp.json并将temp.json传递给ConvertTo-Json [参考如下]
  • -TemplateParameterFile
  • 并为$TempParameterFile = ( $ParametersObject | ConvertTo-Json -Depth 20 ) -replace "\\u0027", "'" -replace "\\u0026", "&" | Out-File $tmp -Force使用$TempParameterFile

答案 2 :(得分:0)

您可以像通常引用参数时所做的那样执行此操作,示例如下:

{
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "paramOne": {
            "value": "hello"
        },
        "paramTwo": {
            "value": "[concat(parameters('paramOne'), '-', 'world)]"
        }
    }
}

'paramTwo' 的输出值为 'hello-world'。

希望这可以帮助任何想要在参数文件中的参数中引用参数的人。