AFAIK,所有参数都必须从一开始就在父模板中定义。是否可以动态生成参数,例如循环n次以生成n个名称字段?
This显示了如何在模板中定义参数。请注意,没有任何参数是动态创建的。
答案 0 :(得分:1)
您可以使用依赖于参数的参数来模拟类似的内容:
"parameters": {
"first": {
"type": "string",
"defaultValue": "lol"
},
"second": {
"type": "string",
"defaultValue": "[concat('not_so_', parameters('first'))]"
}
}
会为not_so_lol
参数提供first
的值。
另一种选择是根据参数创建取值的变量:
"parameterOne": "defaultValue": x, - I'm lazy to type out proper definition in json.
...
"option-x": "something"
"option-y": "something-else"
"result": "[variables(concat('option-', parameters('parameterOne')))]"
所以这基本上是ARM模板中的If
语句。 result
变量的值等于"[variables('option-x')]"
或"[variables('option-y')]"
,具体取决于您的输入。
另一个(更复杂的选项)是使用部署输出。举个例子就是,你创建了一个充满你需要的不同输出的部署(基本上你创建了一个常量池),之后,你可以在所有模板中引用那个部署输出(假设它们位于同一个订阅中) ,但您可以在所有订阅中创建该部署)。这基本上会创建一个常量池,您可以根据当前值获得所需的值。
"something": "[reference(concat('resourceGroupName', 'Microsoft.Resources/deployments/', parameters('deploymentName')),'2015-01-01').outputs]",
最后一个(最复杂的)选项是使用嵌套模板动态构建所需的东西。这在答案中有点太多了,但我只想说在这种情况下,您需要使用嵌套模板作为聚合器\转换器,您可以在其中输入值并获得所需的输出。这是非常先进的东西,但值得了解。 This将是一个很好的例子(对于初学者来说)。
答案 1 :(得分:-1)
根据您的描述,我们可以使用uniqueString()
来动态生成参数。当您需要为资源创建唯一名称时,此功能很有用。
有关uniqueString的更多信息,请参阅此链接。