ARM模板通过参数作为属性名称访问对象属性

use*_*520 3 azure azure-resource-manager azure-rm-template

我正在寻找通过参数名称访问 ARM 模板对象属性的方法。

在下面的例子中,

parameters: {
    "propertyName": {
        "type": "string"
    } 
}

variables: {
    "object": {
        "value": {
            "color": "red"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

其中 [parameters("propertyName")] 是颜色

以下在 ARM 模板部署中是否有效?或者有没有办法实现类似的事情?

"[variables('object')].[parameters('propertyName')]"
Run Code Online (Sandbox Code Playgroud)

我希望上面一行的输出为“红色”。

任何帮助表示赞赏!:)

Str*_*low 5

以下是如何使用parameters值来选择变量中对象的属性。

"value": "[variables('objects')[parameters('propertyName')].color]"
Run Code Online (Sandbox Code Playgroud)

一个完整的例子:

{
  "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "propertyName": {
      "type": "string"
    }
  },
  "variables": {
    "objects": {
      "property0": {
        "color": "red"
      },
      "property1": {
        "color": "green"
      },
      "property2": {
        "color": "blue"
      }
    }
  },
  "resources": [],
  "outputs": {
    "messageOutObject": {
      "type": "object",
      "value": "[variables('objects')]"
    },
    "messageOutObjectProperty": {
      "type": "string",
      "value": "[variables('objects')[parameters('propertyName')].color]"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以通过传入不同的参数值来选择不同的属性。例如:

New-AzResourceGroupDeployment -ResourceGroupName 'DeleteMe20190605' -TemplateFile .\azuredeploy.json -TemplateParameterObject @{propertyName = 'property1'}
Run Code Online (Sandbox Code Playgroud)

或者

New-AzResourceGroupDeployment -ResourceGroupName 'DeleteMe20190605' -TemplateFile .\azuredeploy.json -TemplateParameterObject @{propertyName = 'property2'}
Run Code Online (Sandbox Code Playgroud)

结果: 在此处输入图片说明