我可以在 Azure 模板中动态生成参数吗?
Can I dynamically generate parameters in Azure templates?
AFAIK,所有参数都必须从一开始就在父模板中定义。有没有可能完全动态生成参数,比如循环n次生成n个name字段?
This 展示了参数是如何在模板中定义的。请注意,none 个参数是动态创建的。
根据您的描述,我们可以使用uniqueString()
来实现动态生成参数。当您需要为资源创建唯一名称时,此功能很有用。
更多关于uniqueString的信息,请参考这篇link。
您可以使用依赖于参数的参数来模拟类似的东西:
"parameters": {
"first": {
"type": "string",
"defaultValue": "lol"
},
"second": {
"type": "string",
"defaultValue": "[concat('not_so_', parameters('first'))]"
}
}
将为您提供 first
参数的 not_so_lol
值。
您的另一种选择是创建根据参数取值的变量:
"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]",
最后(最复杂的)选项是使用嵌套模板动态构建所需内容。答案有点太多了,但我只想说,在这种情况下,您需要使用嵌套模板作为 aggregator\transformator,您可以在其中输入值并获得所需的输出。这是非常高级的东西,但值得了解。 This 将是一个很好的例子(对于初学者)。
AFAIK,所有参数都必须从一开始就在父模板中定义。有没有可能完全动态生成参数,比如循环n次生成n个name字段?
This 展示了参数是如何在模板中定义的。请注意,none 个参数是动态创建的。
根据您的描述,我们可以使用uniqueString()
来实现动态生成参数。当您需要为资源创建唯一名称时,此功能很有用。
更多关于uniqueString的信息,请参考这篇link。
您可以使用依赖于参数的参数来模拟类似的东西:
"parameters": {
"first": {
"type": "string",
"defaultValue": "lol"
},
"second": {
"type": "string",
"defaultValue": "[concat('not_so_', parameters('first'))]"
}
}
将为您提供 first
参数的 not_so_lol
值。
您的另一种选择是创建根据参数取值的变量:
"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]",
最后(最复杂的)选项是使用嵌套模板动态构建所需内容。答案有点太多了,但我只想说,在这种情况下,您需要使用嵌套模板作为 aggregator\transformator,您可以在其中输入值并获得所需的输出。这是非常高级的东西,但值得了解。 This 将是一个很好的例子(对于初学者)。