c# - 使用 C# 和 StorageManagementClient/ComputeManagementClient 将 Azure 磁盘附加到 VM
问题描述
我已经有一个可以正常工作的 C# ResourceManager 应用程序,它可以成功地将磁盘附加到虚拟机。但是我用 nuget 包解决了这个问题Microsoft.Azure.Management.Compute
。但是,由于这个包在其他开发中引起了问题,所以决定不再使用它。为此,我们正在使用Microsoft.Azure.Management.Compute.Fluent
.
到目前为止,我有以下代码(短版):
var computeClient = new ComputeManagementClient(credentials) {
SubscriptionId = credentials.DefaultSubscriptionId };
var ObjVirtualMachines = computeClient.VirtualMachines.Get(resourcegroup, vmname);
ObjVirtualMachines.StorageProfile.DataDisks.Add(
new DataDisk(ObjVirtualMachines.StorageProfile.DataDisks.Count + 1,
"Attach", name, null, null, null, null, null,
new ManagedDiskParameters(resourceid, acctype)));
var newUpdatesVM = computeClient.VirtualMachines.CreateOrUpdate(
resourcegroup, ObjVirtualMachines.Name, ObjVirtualMachines);
这非常有效,但正如我所说,我必须翻译到另一个包。
首先,我认为我可以使用StorageManagementClient
.
但是由于参数的类型不匹配,我没有得到任何更新虚拟机的选项。
有任何想法吗?
解决方案
好的,这就是答案...
var ObjVirtualMachines = computeClient.VirtualMachines.GetAsync(ressgroup, virtualmname, null, new System.Threading.CancellationToken()).Result;
var storagemanagementclient = new StorageManagementClient(credentials) { SubscriptionId = credentials.DefaultSubscriptionId };
ObjVirtualMachines.StorageProfile.DataDisks.Add(new DataDisk(
ObjVirtualMachines.StorageProfile.DataDisks.Count + 1,
DiskCreateOptionTypes.Attach,
name,
null,
null,
null,
null,
new ManagedDiskParametersInner(resourceid, acctype)));
var newUpdateVM = computeClient.VirtualMachines.CreateOrUpdateAsync(ressgroup, virtualmname, ObjVirtualMachines);
对于 acctype 使用这个。
var computeClient = new ComputeManagementClient(credentials) { SubscriptionId = credentials.DefaultSubscriptionId };
var disk = computeClient.Disks.ListAsync().Result.FirstOrDefault(p => p.Name == name);
var content = azure.Disks.GetById(disk.Id);
var resourceid = disk.Id;
var ressgroup = Resourcegroup.Get(context);
var virtualmname = VirtualMachineName.Get(context);
var acctype = getAccType(content.Sku.AccountType.ToString());
getAccType 函数是这个...
public StorageAccountTypes getAccType(string input)
{
switch (input)
{
case "StandardLRS": return StorageAccountTypes.StandardLRS;
case "PremiumLRS": return StorageAccountTypes.PremiumLRS;
// case "StandardSSDLRS":return "StandardSSD_LRS";
// case "UltraSSDLRS":return "UltraSSD_LRS";
default: return StorageAccountTypes.StandardLRS;
}
}
问题是此命名空间中的 AccType 版本限制为 2 (StandardLRS 和 PremiumLRS)。在旧版本中,您有 4 个不同的版本。
推荐阅读
- azure-logic-apps - 逻辑应用功能删除文件扩展名
- python - 使用子图绘制熊猫数据框时出现 IndexError
- xml - WellFormedWeb 发生了什么?为什么它仍然存在于如此多的 XML 声明中?
- handlebars.js - 如何根据 handlebar.js 中的屏幕大小呈现不同的局部?
- php - SELECT COUNT with Group BY 仅返回值为 2
- javascript - 快节奏在线游戏(2D 平台游戏)- 网络服务器/客户端
- flutter - 如何获得包裹在 RenderBox 内的 RenderSliver 位置
- python - 如何减少 PyQt5 QGridLayout 中两个小部件之间的空间?
- php - 如何使 css 在 tcpdf 中工作?
- javascript - 如何自动增加版本控制以便浏览器可以自动重新加载 JS/CSS 文件而无需手动清除缓存