我正在构建 Azure 资源管理器 (ARM) 模板,但遇到了无法解决的问题。我们有多种开发环境(沙箱、开发、生产等),我正在努力思考如何最好地实现我想要的目标。
我想提供一个定义环境参数的参数文件来识别我们正在构建的环境。例如,这是“dev”环境的一个(有更多参数,这只是相关的最小参数)。
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"environment": {
"value": "dev"
}
}
}
我目前在 ARM 模板中有几个变量,我希望能够根据环境提取值,但是我在构建 ARM 模板时遇到了麻烦,并且错误消息很糟糕(“格式错误的字符串”)使用 Azure CLI 进行验证时,构建代理尝试部署资源时我得到的只是“BadRequest”)。
如果我有一个变量定义为:
"sampleObject": {
"sbx": {
"value1": true,
"value2": true
},
"dev": {
"value1": true,
"value2": true
},
"prd": {
"value1": false,
"value2": true
}
}
我想使用这些字段来进一步定义变量“envValue1”和“envValue2”,以便稍后在模板中定义资源时使用,所以我尝试了这样的操作:
"environmentParams": "[variables('sampleObject')[parameters('environment')]]",
"envValue1": "[variables('environmentParams').value1]",
"envValue2": "[variables('environmentParams').value2]"
但是,上面的内容似乎不起作用,虽然我在模板中使用了其他所有内容,但在这导致问题之前。具体来说,我认为是这条线
"environmentParams": "[variables('sampleObject')[parameters('environment')]]"
我可以找到几个使用 "[variables('environmentParams').value1]"的示例
之前抓取对象变量的片段,但我不确定是否可以像以前那样传递 parameters('environment)'
片段,并且我找不到任何以这种方式使用它的东西.
我做错了什么?是否可以传入环境参数来获取对象的一部分?我已尝试以下操作,但到目前为止没有任何效果(使用 Azure CLI 测试创建资源)。
"[variables('sampleObject')[parameters('environment')]]"
"[variables('sampleObject').[parameters('environment')]]"
如果我想做的事情不可能实现,那么人们如何管理多个环境?他们是否只是将所有内容都塞进参数文件中,从而很难通过查看 ARM 模板来了解环境之间的差异?
最佳答案
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"environment": {
"type": "String"
}
},
"variables": {
"sampleObject": {
"sbx": {
"value1": true,
"value2": true
},
"dev": {
"value1": true,
"value2": true
},
"prd": {
"value1": false,
"value2": true
}
},
"value": "[variables('sampleObject')[parameters('environment')]]",
"othervar": "[variables('value').value1]"
},
"resources": [ ],
"outputs": {
"we": {
"type": "Bool",
"value": "[variables('value').value1]"
}
}
}
这工作得很好,您可以使用点表示法轻松访问对象属性,您可以使用此示例。
但是你不能这样做:
"[variables('sampleObject').[parameters('environment')]]"
因此,如果您使用变量来访问属性,则无需点。
关于azure - 使用ARM参数选择对象变量中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43928235/