json - 如何在 Azure ARM 模板中选择 VM T 恤尺寸
问题描述
我有一个 VM 部署模板,其中我将 VM 尺寸定义为 T 恤尺寸,例如小 = Standard_DS2_v2、中 = Standard_E4s_v3 和大 = Standard_E4s_v3。
我已将它们定义为数组,如下面的变量部分所示
"parameters": {
"vmSpecs": {
"type": "array"
}
},
"variables": {
"vmSizeType" :[{
"small" : "Standard_DS2_v2",
"medium": "Standard_E4s_v3",
"large" : "Standard_E32s_v3"
}]
},
"resources": [
{
"name": "[parameters('vmSpecs')[copyIndex()].vmName]",
"type": "Microsoft.Compute/virtualMachines",
"location": "[resourceGroup().location]",
"apiVersion": "2018-06-01",
"dependsOn": [
"VMNIC0Copy",
"[variables('storageAccountName')]"
],
"copy": {
"name": "VMCopy",
"count": "[length(parameters('vmSpecs'))]"
},
"properties": {
"licenseType": "[parameters('vmSpecs')[copyIndex()].licenseType]",
"hardwareProfile": {
"vmSize": "[parameters('vmSpecs')variables('vmSizeType')[copyIndex()].vmSize[1]]"
}
}
在参数文件中
"vmSpecs": {
"value": [
{ //vm01
"vmName": "test",
"dnsDomain": "domain.com",
"vmSize": "medium"
}
}
我的问题是我如何输入 vmSize 并根据已定义的内容选择大小
解决方案
就像您通常会(使用点符号)以几乎任何语言访问对象属性一样:
"vmSizeType" :{ << should be an object, you only make it harder making it an array
"small" : "Standard_DS2_v2",
"medium": "Standard_E4s_v3",
"large" : "Standard_E32s_v3"
}
...
"vmSize": "[variables('vmSizeType')[parameters('vmSpecs')[copyIndex()].vmSize]]"
^^ tshirt variable ^ ^^ input parameter ^^ iteration ^^ property
^ get property defined dynamically, have to use [] syntax instead of dot notation
for static\hardcoded property name you can use dot notation:
variables('vmSizeType').small
如果你需要 tshirt 变量是数组(没有理由),你也必须考虑到这一点
推荐阅读
- macos - 在金属中将多个缓冲区作为 ArgumentBuffers 传递
- ruby-on-rails - 为什么产量不将结果传递给块(Rails)?
- c++ - 将 Mat 图像转换为 QImage 后图像质量失真
- django - gunicorn [/etc/systemd/system/gunicorn.socket:6] 未知部分“服务”。忽略
- php - 带多个参数的 URL 重写
- ruby-on-rails - Resque:我如何仅将特定工作人员用于一个特定队列
- symfony - 如何在 Symfony 的 EventListener 类中处理异常
- excel - 当下拉列表在另一个单元格中更改时如何使文本颜色在表格中更改
- python - 如何在 PySide2 中将图像设置为背景
- python - 分数拒绝在显示前重置为零