【问题标题】:Azure RM Templates: Create multiple data disks of different sizes using copyIndex()Azure RM 模板:使用 copyIndex() 创建多个不同大小的数据磁盘
【发布时间】:2017-06-29 22:22:42
【问题描述】:

this问题之后,我需要更进一步,能够创建多个不同大小的数据磁盘,其中数量和大小在部署时指定。

我的最新版本是在 VM 资源之外的自己的资源中创建(托管)磁盘,然后尝试附加它们。

似乎每个资源的 copyindex 都会重置,所以我认为我需要将它们全部创建在一个副本中,以便 VM 资源中的“附加”部分可以使用 length 函数,但我想不出办法当达到某个迭代时更改复制循环内的任何属性(我会理解为什么这是不可能的)。

我想我需要使用类似的东西:

"count": "[variables('numberOfDisks')[parameters('DiskSize')]]" 

但不确定如何进行。

我也考虑过嵌套模板,但同样,这与无法在循环内更改参数相冲突。

在编程中,我可以创建一个二维数组或字典对象,但在 ARM 模板中找不到这样做的方法,不过,我刚刚找到了Intersection

数据磁盘配置示例: 只是大小和数量因部署而异。任何给定 VM 的所有磁盘的所有其他属性都应相同。

  • VM 1:2x @ 256GB、4x @ 512GB、4x @ 1023GB
  • VM 2:1x @ 1023GB,1x @ 80GB
  • VM 3:1x @ 1023GB、1x @ 80GB、2x @ 256GB、2x @ 512GB

我的模板只部署了一个虚拟机,但是磁盘的数量和大小是未知的。 DSC 将出现并创建卷的想法,根据磁盘大小整理磁盘。

我不打算粘贴我的工作,因为它们很长、错误并且在这篇文章中占了很大的比重。希望以上内容足以证明我一直在努力为自己解决问题。

【问题讨论】:

  • 你能写出磁盘到底需要多少不同吗?什么是断点?有什么不同?
  • 更新了磁盘配置示例。谢谢
  • 我想我知道该怎么做,但我现在有点不知所措。我会在大约 10 小时后回到这个问题。如果我忘记了,请给我打电话

标签: azure arm-template


【解决方案1】:

所以我设法实现了它。可能不是最优雅的,但它确实有效。尽管 Microsoft seem to suggest using a top-level resource 创建数据磁盘,但我看不出这是如何工作的,因为我不知道在 DependsOn[] 中使用 copy[] 的方法,如果您在同一空间中创建磁盘和虚拟机,这是必需的模板,他们将尝试同时部署。

对于那些可能感兴趣的人,这是我的解决方案:

首先,我使用 PowerShell 的 New-AzureRmResourceDeployment 触发模板。我没有使用参数文件。参数在 PS 中生成。

$RG = "ResourceGroup where VM resides"

$Disks = @(
    @{name = "datadisk-001";diskSizeGB = "256";lun = 0}
    @{name = "datadisk-002";diskSizeGB = "256";lun = 1}
    @{name = "datadisk-003";diskSizeGB = "512";lun = 2}
    @{name = "datadisk-004";diskSizeGB = "512";lun = 3}
    @{name = "datadisk-005";diskSizeGB = "512";lun = 4}
    @{name = "datadisk-006";diskSizeGB = "512";lun = 5}
)

$params = @{
    diskConfig = $disks 
    storageAccounttype = "Standard_LRS"
    vmName = "AUCADN102007006"
}

New-AzureRmResourceGroupDeployment -Name "SomeDeploymentName" `
                                       -ResourceGroupName $RG `
                                       -Mode Incremental `
                                       -DeploymentDebugLogLevel All `
                                       -TemplateFile C:\Temp\DiskTest.json" `
                                       -Verbose `
                                       @params

模板本身被严重削减,实际上并没有创建虚拟机。引用的 VM 需要存在。我已经尽可能地取出了。

    {
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
  "parameters": {
    "vmName": {
      "type": "string"
    },
    "diskConfig": {
      "type": "array"
    },
    "storageAccountType": {
      "type": "string",
      "defaultValue": "Standard_LRS",
      "allowedValues": [
        "Standard_LRS",
        "Premium_LRS"
      ],
      "metadata": {
        "description": "Type of disk"
      }
    }
  },
  "variables": {
    "vmSize": "Standard_DS4_v2",
    "sharedVariables": {
      "storageAccountType": "[parameters('storageAccountType')]"
    }
  },
  "resources": [
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [
      ],
      "properties": {
        "storageProfile": {
          "copy": [
            {
              "name": "dataDisks",
              "count": "[length(parameters('diskConfig'))]",
              "input": {
                "name": "[concat(parameters('vmName'),'-',parameters('diskConfig')[CopyIndex('dataDisks')].name)]",
                "diskSizeGB": "[parameters('diskConfig')[CopyIndex('dataDisks')].diskSizeGB]",
                "lun": "[parameters('diskConfig')[copyIndex('dataDisks')].lun]",
                "createOption": "Empty",
                "managedDisk": {
                  "storageAccountType": "[variables('sharedVariables').storageAccountType]"
                }
              }
            }
          ]
          }
        }
       }
     ],
        "outputs": {
          "arrayOutput1": {
            "type": "array",
            "value": "[parameters('diskConfig')]"
          },
          "arrayCount": {
            "type": "int",
            "value": "[length(parameters('diskConfig'))]"
          }
        }
      }

感谢this的帖子,作者在其中演示了索引的使用:

"properties": {
 "accountType": "  [parameters('storageAccountList')[copyIndex()].storageAccountType]"  
    }

注意 copyIndex() 在 [ ]

待办事项:使用$Disks 做一些更好的事情,使用 PS 创建哈希表或在模板中创建它。

HTH

【讨论】:

    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2019-11-01
    • 1970-01-01
    • 2020-10-10
    • 2013-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多