基于输入参数的 Azure ARM 模板参数

Azure ARM Template Parameter Based on Input Parameter

给定一个 template.json 并且:

"parameters": {

    "virtualMachineName": {
        "type": "string"
    },
      "networkInterfaceName": {
        "type": "string"
    }
}

如何根据输入的 virtualMachineName 设置 networkInterfaceName?

例如:

New-AzureRmResourceGroupDeployment -Name MyDeployment -TemplateFile .\template.json -TemplateParameterFile .\parameters.json

将提示输入 VirtualMachineName,如果输入 'test-vm',我们希望网络接口名称默认为 'test-vm-nic'。

我们尝试添加这个 parameters.json:

"networkInterfaceName": {
        "value": "[concat(parameters('virtualMachineName'),'_nic')]"
},

但收到错误:

Error: Code=InvalidResourceName; Message=Resource name 
[concat(parameters('virtualMachineName'),'_nic')] is invalid. The 
name can be up to 80 characters long. It must begin with a word character,  
and it must end with a word character or with '_'. The name may contain word 
characters or '.', '-', '_'.

您可以在主模板的变量下添加网卡名称,而不是在参数下。您的参数部分将只包含 'virtualMachineName' 参数:

"parameters": {
      "virtualMachineName": {
        "type": "string"
      }
    },
"variables": {
      "networkInterfaceName": "[concat(parameters('virtualMachineName'),'_nic')]"
    },
"resources":{
...
}

在资源定义中,您可以将网卡名称定义为

variables('networkInterfaceName')