首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure ARM模板部署:添加现有的附加数据孤岛

Azure ARM模板部署:添加现有的附加数据孤岛
EN

Stack Overflow用户
提问于 2017-08-08 13:08:42
回答 1查看 1.7K关注 0票数 2

看起来,我遇到了手臂模板的限制,并希望有人能对周围的工作提出建议。

我的deployVM.json模板使用copy函数来创建托管数据集,但是,我需要附加一个不遵循复制模式的附加数据中心。

Properties.storageprofile:

代码语言:javascript
复制
  "copy": [
            {
              "name": "dataDisks",
              "count": "[length(parameters('sharedVariables').disks.config)]",
              "input": {
                "name": "[concat(variables('vmName'),'-',parameters('sharedVariables').disks.config[CopyIndex('dataDisks')].name)]",
                "diskSizeGB": "[parameters('sharedVariables').disks.config[CopyIndex('dataDisks')].diskSizeGB]",
                "lun": "[parameters('sharedVariables').disks.config[copyIndex('dataDisks')].lun]",
                "createOption": "Empty",
                "managedDisk": {
                  "storageAccountType": "[parameters('sharedVariables').disks.accountType]"
                }
              }
            }
          ]
  • 不允许创建datadisks[]属性的第二个实例,
  • 也不允许创建整个VM资源的第二个实例,

因此,我创建了一个子模板来克服上述限制。子模板创建数据中心并将其附加到vm,但是在执行附加操作时,它会取消附加在deployVM.json中的磁盘:

代码语言:javascript
复制
"resources" : [
    //Create a managed disk using an existing VHD
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/disks",
      "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
      "location": "[resourceGroup().location]",
      "tags": {
        "Purpose": "Managed disk containing VHD of installation media",
        "createdBy": "[parameters('sharedVariables').createdBy]"
      },
      "sku": {
        "name": "[parameters('sharedVariables').media.storageAccountType]"
      },
      "properties": {
        "creationData": {
          "createOption": "Import",
          "sourceUri": "[parameters('sharedVariables').media.sourceVhdUri]"
        },
        "diskSizeGB": "[parameters('sharedVariables').media.vhdManagedDiskSize]"
      }
    },
    //Attach managed disk to existing VM
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [ "[concat(parameters('vmName'),'-mediadisk-001')]" ],
      "properties": {
        "storageProfile": {
          "dataDisks": [
            {
              "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
              "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
              "createOption": "Attach",
              "managedDisk": {
                "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
              }
            }
          ]
        }
      }
    }
]

也许我应该尝试附加,而不创建托管数据安全。毕竟,它是一个VHD,因此在子模板中,上面的内容被替换为:

代码语言:javascript
复制
"resources" : [
    {
      "apiVersion": "2017-03-30",
      "type": "Microsoft.Compute/virtualMachines",
      "name": "[parameters('vmName')]",
      "location": "[resourceGroup().location]",
      "dependsOn": [],
      "properties": {
        "storageProfile": {
          "dataDisks": [
            {
              "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
              "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
              "createOption": "FromImage",
              "image": {
                "uri": "concat(parameters('vmName'),'-mediadisk-001')"
              },
              "vhd": {
                "uri": "[parameters('sharedVariables').media.sourceVhdUri]"
              },
              "managedDisk": {
                  "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
              }
            }
          ]
        }
      }
    }
]

然后,它开始抱怨"Addition of a blob based disk to VM with managed disks is not supported。实际上,这是否意味着不能同时使用托管磁盘和存储帐户磁盘?最后一次尝试,我删除了台词:

代码语言:javascript
复制
"managedDisk": {
              "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
          }

但同样的错误。

我可以在门户中重新附加磁盘,我唯一的想法是在子模板中创建另一个copy[]函数来重新附加,而无需返回存储帐户磁盘。这听起来很疯狂,所以我假设这是一个功能要求,或者我需要学校教育!

提亚

更新--我已经从deployVM.json模板中删除了datadisks资源,并添加了两个子模板,每个子模板用于每个“类型”的数据磁盘。copy()和单个VHD,但是当第二个子磁盘连接到它的磁盘时,它仍然将拷贝()磁盘从第一个子磁盘中分离出来。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-08-08 15:49:54

所以它分离了现有的磁盘,因为它使用了声明式的方法。第二个部署只定义了一个数据磁盘,因此它给出了您所要求的内容。一个vm上的一个磁盘。

你真的没有太多的选择来克服这个问题。使用外部工具(如powershell)为您创建json并直接传递它,或者使用arm模板创建包含所有磁盘并将其传递到资源的json对象。

代码语言:javascript
复制
      [
        {
          "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
          "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
          "createOption": "Attach",
          "managedDisk": {
            "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
          }
        },
        {
          "lun": "[add(length(parameters('sharedVariables').disks.config),1)]",
          "name": "[concat(parameters('vmName'),'-mediadisk-001')]",
          "createOption": "Attach",
          "managedDisk": {
            "id": "[resourceId('Microsoft.Compute/disks/', concat(parameters('vmName'),'-mediadisk-001'))]"
          }
        }
      ]

示例powershell对象以反映:

代码语言:javascript
复制
@(@{lun=xxx;...},@{...})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45569243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档