使用C#调用Azure SDK创建DataDisk无报错但未成功,求排查
解决C# Azure SDK创建并挂载数据磁盘无报错但未生效的问题
嘿,我一眼就看出问题所在了——你的代码只是在本地VM对象里添加了磁盘,但根本没把这个更新请求发送给Azure服务端!
Azure .NET SDK的设计逻辑是这样的:vm.Update()只是生成一个更新操作的构建器,它只会帮你定义要做什么更改,并不会自动执行这个操作。你得手动触发提交,才能让Azure真正创建并挂载磁盘。
来看修正后的代码,两种可行方式供你选择:
方式一:用SDK内置链式更新方法(推荐)
这种方式更简洁,SDK会自动处理不少细节:
var vm = azure.VirtualMachines.List() .FirstOrDefault(x => x.Name.Equals(vmName, StringComparison.OrdinalIgnoreCase)); if (vm == null) { Console.WriteLine($"虚拟机 {vmName} 不存在"); return; } // 构建更新操作并立即提交到Azure var updatedVm = vm.Update() .WithNewDataDisk( lun: vm.StorageProfile.DataDisks.Count + 1, createOption: DiskCreateOptionTypes.Empty, diskSizeGB: 128, name: $"{vmName}_disk") .Apply();
方式二:手动创建DataDisk对象再添加
如果你还是偏好手动创建磁盘对象的方式,记得要把添加操作放到更新构建器里,最后调用Apply()提交更改:
var vm = azure.VirtualMachines.List() .FirstOrDefault(x => x.Name.Equals(vmName, StringComparison.OrdinalIgnoreCase)); if (vm == null) { Console.WriteLine($"虚拟机 {vmName} 不存在"); return; } var disk = new DataDisk( lun: vm.StorageProfile.DataDisks.Count + 1, createOption: DiskCreateOptionTypes.Empty, name: $"{vmName}_disk") { DiskSizeGB = 128 }; disk.Validate(); // 通过更新构建器添加磁盘并执行服务端更新 var updatedVm = vm.Update() .WithDataDisk(disk) .Apply();
额外注意事项
- 务必处理VM为null的情况,避免空引用异常;
- LUN号要保证唯一,你用
Count +1的方式没问题,但如果之前有删除过磁盘,建议检查现有LUN的最大值再加1更稳妥; - 不同版本的Azure SDK API可能略有差异,比如新版
Azure.ResourceManager.Compute可能用AddDataDisk而非WithDataDisk,但核心逻辑都是必须调用提交方法(如Apply())触发服务端更新。
内容的提问来源于stack exchange,提问作者Vadim Visnevski
相关产品推荐
相关产品推荐

