从基础打包程序映像部署超过1个azure vm

时间:2017-05-14 10:50:37

标签: azure packer azure-resource-manager

我有问题从使用packer构建的自定义映像(aka ami)部署多个azure vms。

这是我的打包程序脚本,用于创建基本图像:

{
  "builders": [
    {
      "type": "azure-arm",
      "client_id": "CHANGE_ME",
      "client_secret": "CHANGE_ME",
      "object_id": "CHANGE_ME",
      "subscription_id": "CHANGE_ME",
      "tenant_id": "CHANGE_ME",
      "resource_group_name": "packerrgvm",
      "storage_account": "packerrgvm",
      "capture_container_name": "images",
      "capture_name_prefix": "packer",
      "os_type": "Linux",
      "image_publisher": "Canonical",
      "image_offer": "UbuntuServer",
      "image_sku": "16.04.0-LTS",
      "azure_tags": {
        "dept": "engineering"
      },
      "location": "westeurope",
      "vm_size": "Standard_A2"
    }
  ],
  "provisioners": [
    {
      "type": "shell",
      "inline": ["do sth interesting here"]
    },
    {
      "type": "shell",
      "inline": [
        "sudo /usr/sbin/waagent -force -deprovision+user && export HISTSIZE=0 && sync"
      ]
    }
  ]
}

现在,我正在尝试使用ARM模板部署新的vm。我的模板包含成功构建后由packer提供的imageName,imageUri和vhdUri。无用的Vnets,网络接口等:

{
  "apiVersion": "2016-03-30",
  "type": "Microsoft.Compute/virtualMachines",
  "name": "[variables('workerVM').machine.name]",
  "location": "[resourceGroup().location]",
  "properties": {
    "hardwareProfile": {
      "vmSize": "[variables('workerVM').machine.size]"
    },
    "storageProfile": {
      "osDisk": {
        "osType": "Linux",
        "name": "[variables('workerVM').machine.imageName]",
        "createOption": "FromImage",
        "image": {
          "uri": "[variables('workerVM').machine.imageUri]"
        },
        "vhd": {
          "uri": "[variables('workerVM').machine.vhdUri]"
        },
        "caching": "ReadWrite"
      }
    },
    "osProfile": {
      "computerName": "[variables('workerVM').machine.name]",
      "adminUsername": "[variables('workerVM').machine.adminUsername]",
      "adminPassword": "[variables('workerVM').machine.adminPassword]"
    },
    "networkProfile": {
      "networkInterfaces": [
        {
          "id": "[resourceId('Microsoft.Network/networkInterfaces', variables('workerVM').network.nicName)]"
        }
      ]
    },
    "diagnosticsProfile": {
      "bootDiagnostics": {
        "enabled": false
      }
    },
    "provisioningState": 0
  }
}

当我第一次部署它时,它可以工作。 Hovewer,即使我完全删除了我的资源组并尝试再次部署vm,我也会收到以下错误:

error:   The resource operation completed with terminal provisioning state 'Failed'.
error:   Blob https://packerrgvm.blob.core.windows.net/vmcontainera1ba96d3-a593-44b9-8c71-1d345ef67a2d/osDisk.a1ba96d3-a593-44b9-8c71-1d345ef67a2d.vhd already exists. Please provide a different blob URI as target for disk 'packer-osDisk.49359f62-5c49-44c1-aed8-4ea1613ab2e9.vhd'.

是否可以通过这种方式使用由packer构建的自定义ami?

2 个答案:

答案 0 :(得分:0)

  

如何从使用支持者构建的单个基本图像创建超过1个vm

您可以在重新部署ARM模板之前更改值vhdUri变量。

"vhd": {
    "uri": "[variables('workerVM').machine.vhdUri]"
}

ARM模板中的vhdUri变量可能是这样的,

"variables": {
  "workerVM": {
    "machine": {
      "vhdUri": "reset this uri"
    }
 }

答案 1 :(得分:0)

在ARM模板中添加以下存储资源,该资源使用由packer生成的图像uri

{
  "type": "Microsoft.Compute/images",
  "apiVersion": "2016-04-30-preview",
  "name": "[variables('imageName')]",
  "location": "[resourceGroup().location]",
  "properties": {
    "storageProfile": {
      "osDisk": {
        "osType": "Windows",
        "osState": "Generalized",
        "blobUri": "[parameters('your_image_uri_generated_by_packer')]",
        "storageAccountType": "Standard_LRS"
      }
    }
  }
},

修改Microsoft.Compute / virtualMachines中的存储配置文件属性以使用此资源

"storageProfile": {
  "imageReference": {
        "id": "[resourceId('Microsoft.Compute/images', variables('imageName'))]"
      }
},