我很难将自动化的 Azure VM 管理从旧的 .NET Fluent API 移植到新的 ARM API(
Azure.ResourceManager.*
命名空间中的 API)。
最重要的一点是从虚拟机中分离磁盘。
VirtualMachineResource
只有一种UpdateAsync
方法,那就是取VirtualMachinePatch
。我可以使用此补丁对象成功附加之前未附加的磁盘:
var vmPatch = new VirtualMachinePatch
{
StorageProfile = new VirtualMachineStorageProfile
{
DataDisks =
{
new VirtualMachineDataDisk(0, DiskCreateOptionType.Attach)
{
ManagedDisk = new VirtualMachineManagedDisk
{
Id = disc.Id
},
DeleteOption = DiskDeleteOptionType.Detach
}
}
}
};
分离应该如何工作并不明显,而且文档也很少。正如人们所期望的那样,简单地将
DataDisks
属性留空没有任何作用。
旧的 Fluent API 有专门的方法,允许编写类似的东西
vm.Update().WithoutDataDisk(entry.Lun);
新的使用起来不太明显。有什么想法吗?
我通过查看 .NET SDK 测试套件找到了正确的方法:
var vmPatch = new VirtualMachinePatch
{
StorageProfile = new VirtualMachineStorageProfile
{
DataDisks =
{
new VirtualMachineDataDisk(0, DiskCreateOptionType.Attach)
{
ToBeDetached = true
}
}
}
};
事后看来有点明显,但我错过了好几次。