如何在ARM模板的其他区域获取CopyUniqueNameToArmParameters指定的vmName?
ARM模板中
CopyUniqueNameToArmParameters的vmName规则及引用方法 vmName的确定规则
- 这个参数的最终值完全由你调用的虚拟机子模板内部的命名逻辑决定:
- 如果子模板直接使用你传入的
vmName参数创建VM、没有做任何修改,那最终的vmName就是你一开始传给子模板的原始值 - 如果子模板内部对名称做了处理(比如添加后缀、用循环索引生成唯一名称),
CopyUniqueNameToArmParameters会把模板实际生成的VM名称同步回父模板的参数里 - 典型场景是用
copy循环批量创建VM时,子模板可能自动给每个VM添加索引(比如web-vm-0、web-vm-1),这时候同步回来的就是这些带索引的实际名称
- 如果子模板直接使用你传入的
如何在模板其他区域获取这个vmName
要在父模板的其他地方使用这个同步后的名称,得通过嵌套部署的输出捕获后引用:
- 先确保虚拟机子模板里已经定义了
vmName作为输入参数,且实际创建VM时用的就是这个参数(或者子模板处理后的它) - 在父模板的嵌套部署资源中,除了
CopyUniqueNameToArmParameters,还要配置outputs把同步后的vmName输出:"resources": [ { "type": "Microsoft.Resources/deployments", "apiVersion": "2021-04-01", "name": "vmDeployment", "properties": { "mode": "Incremental", "templateLink": { "uri": "[uri(deployment().properties.templateLink.uri, 'vm-template.json')]" }, "parameters": { "vmName": { "value": "[parameters('baseVmName')]" } }, "CopyUniqueNameToArmParameters": [ "vmName" ], "outputs": { "createdVmName": { "type": "string", "value": "[parameters('vmName')]" } } } } ] - 在父模板的其他资源配置或嵌套部署里,通过
reference函数引用这个输出值:"[reference('vmDeployment').outputs.createdVmName.value]" - 如果是循环创建多台VM的场景,每个循环实例的
vmName会单独同步,这时候要结合copyIndex()来对应引用:"[reference(concat('vmDeployment', copyIndex())).outputs.createdVmName.value]"
内容的提问来源于stack exchange,提问作者Talang_madave
相关产品推荐
相关产品推荐

