【问题标题】:Azure ARM Template osprofile dependencyAzure ARM 模板 osprofile 依赖项
【发布时间】:2018-11-30 13:18:53
【问题描述】:

我在创建自定义模板时遇到问题。我正在尝试将虚拟机从 vhd 创建为 vhd,但在部署中失败并出现错误 osProfile 丢失。这很有趣,因为在来自互联网的其他模板中,我看到没有 osprofile 部分,并且它正在部署没有问题。

所以我添加了osProfilecomputerName 参数。但是现在部署失败并出现错误,需要adminUsernameadminPassword。我不明白在另一个脚本中这不是必需的,它会毫无问题地创建 VM。

还有一个事实是,我的模板是使用 vhd 创建 VM,但另一个模板是使用托管磁盘创建 VM。这可能有问题吗?

我的一段代码:

"apiVersion": "2017-03-30",
            "type": "Microsoft.Compute/virtualMachines",
            "name": "[parameters('vmName')]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
            ],
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[parameters('vmSize')]"
                },
                "osProfile": {
                    "computerName": "[concat(parameters('vmName'))]",
                    "adminUsername": "",
                    "adminPassword": ""
                },
                "storageProfile": {
                    "osDisk": {
                        "name": "[concat(parameters('vmName'),'-osDisk')]",
                        "osType": "[parameters('osType')]",
                        "caching": "ReadWrite",
                        "image": {
                            "uri": "[parameters('osVhdUri')]"
                        },
                        "vhd": {
                            "uri": "[variables('osDiskVhdName')]"
                        },
                        "createOption": "FromImage"
                    }
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                        }
                    ]
                },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true,
                        "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', parameters('userDiagStorageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
                    }
                }

我知道 adminUsernameadminPassword 不能为空,但我不希望在从现有 vhd 创建 VM 时使用此参数。

部署成功的一段模板代码:

"apiVersion": "2017-03-30",
            "type": "Microsoft.Compute/virtualMachines",
            "name": "[parameters('vmName')]",
            "location": "[parameters('location')]",
            "tags": {
                "displayName": "VirtualMachine"
            },
            "dependsOn": [
                "[concat('Microsoft.Network/networkInterfaces/', variables('nicName'))]",
                "[concat(parameters('vmName'), '_OSdisk')]",
                "[concat(parameters('vmName'), '_Datadisk')]"
            ],
            "properties": {
                "hardwareProfile": {
                    "vmSize": "[parameters('vmSize')]"
                },
                "storageProfile": {
                    "osDisk": {
                        "osType": "[parameters('osType')]",
                        "caching": "ReadWrite",
                        "createOption": "Attach",
                        "managedDisk": {
                            "id": "[resourceId('Microsoft.Compute/disks', concat(parameters('vmName'), '_OSdisk'))]"
                        }
                    },
                    "dataDisks": [
                        {
                            "lun": 0,
                            "managedDisk": {
                                "id": "[resourceId('Microsoft.Compute/disks', concat(parameters('vmName'), '_Datadisk'))]"
                            },
                            "caching": "ReadOnly",
                            "createOption": "Attach"
                        }
                    ]
                },
                "networkProfile": {
                    "networkInterfaces": [
                        {
                            "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                        }
                    ]
                },
                "diagnosticsProfile": {
                    "bootDiagnostics": {
                        "enabled": true,
                        "storageUri": "[concat(reference(concat('Microsoft.Storage/storageAccounts/', variables('diagStorageAccountName')), '2016-01-01').primaryEndpoints.blob)]"
                    }
                }

这是我的模板中没有 osProfile 的部署失败的打印屏幕。

【问题讨论】:

标签: azure deployment


【解决方案1】:

"createOption": "FromImage" 更改为"createOption": "Attach"。您正在尝试从市场映像创建 VM,而不是从现有 VHD。

在这种情况下,您可以完全删除 osProfile

【讨论】:

  • 谢谢,但在我更改后,部署中出现新错误:如果 VM 是从平台或用户映像创建的,则无法附加现有的 OS 磁盘。
  • 否,因为此 vhd 来自现有的 azure VM。我只将托管操作系统磁盘从这个现有的 Azure VM 转换为 vhd。
  • Azure 中的 vm 资源已经存在了吗?删除 vm 资源,然后重试。有很多事情可能是错误的,请查看此链接social.msdn.microsoft.com/Forums/en-US/…。但是您应该使用附加。我建议您关闭此问题并调查发生了什么,然后提出一个新问题。因为这个解决了(虽然你还是有问题,但是不一样)
  • 在你的帮助下我得到了它。所以我按照你的说法将 FromImage 更改为 Attach,接下来删除了这部分 "name": "[concat(parameters('vmName'),'-osDisk')]", "osType": "[parameters('osType')]", "caching": "ReadWrite", "image": { "uri": "[parameters('osVhdUri')]" },,最后一件事是破折号 (-) 它在代码的另一部分。我从这里删除了破折号parameters('vmName'),'-osDisk.vhd')]",
猜你喜欢
  • 1970-01-01
  • 2020-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多