【发布时间】:2015-06-27 04:25:44
【问题描述】:
是否可以获取ClassicCompute 虚拟机列表并使用 Azure 资源管理器库对其进行管理?
使用 Azure 预览门户创建的 VM 和存储帐户也是经典版本。
是否不支持使用 azure 预览门户创建 V2 虚拟机或者我缺少任何设置?
【问题讨论】:
标签: c# azure azure-virtual-machine azure-resource-manager azure-api-management
是否可以获取ClassicCompute 虚拟机列表并使用 Azure 资源管理器库对其进行管理?
使用 Azure 预览门户创建的 VM 和存储帐户也是经典版本。
是否不支持使用 azure 预览门户创建 V2 虚拟机或者我缺少任何设置?
【问题讨论】:
标签: c# azure azure-virtual-machine azure-resource-manager azure-api-management
Azure 预览门户最近似乎已更新,允许您选择是想要“经典”虚拟机还是使用新 ARM 模板的虚拟机。
要做到这一点:
转到“新建”,选择您的模板,例如“Windows Server 2012 R2 Datacenter”,然后在“创建”命令按钮上方的下拉框中,有一个标题为“选择计算堆栈”的部分。这将让您选择“使用服务管理堆栈(经典)” - (即 V1 经典计算)或“使用资源管理器堆栈” - (即 V2 经典计算)。
希望有帮助!
【讨论】:
Azure 预览门户支持 V1 和 V2 虚拟机。您可以使用 Browse All -> Virtual Machines 创建 V2 VM,并使用 Browse All -> Virtual Machines (classic) 创建 V1 VM
【讨论】:
您可以使用以下代码获取 V1 和 V2 虚拟机列表。 ListRecursiveAsync() 只是我为了处理多页结果的可能性而拼凑的一个扩展方法。
对于了解 ARM API 的一般功能,Azure Resource Explorer) 也是一个很好的工具。
using (var client = new ResourceManagementClient(creds))
{
var v1ComputeParams = new ResourceListParameters { ResourceType = "Microsoft.ClassicCompute/virtualMachines" };
var v2ComputeParams = new ResourceListParameters { ResourceType = "Microsoft.Compute/virtualMachines" };
var v1ComputeResult = await client.ListRecursiveAsync(v1ComputeParams, null);
var v2ComputeResult = await client.ListRecursiveAsync(v2ComputeParams, null);
}
/// <summary>
/// Gets the list of resources, recursing until ResourceListResult.NextLink is empty.
/// </summary>
/// <param name="client"></param>
/// <param name="parameters">Optional. Query parameters. If null is passed returns all resources from all resource groups.</param>
/// <param name="nextLink"></param>
/// <returns></returns>
public static async Task<IList<GenericResourceExtended>> ListRecursiveAsync(this ResourceManagementClient client, ResourceListParameters listParams, string nextLink)
{
var rValue = new List<GenericResourceExtended>();
ResourceListResult computeList = null;
if (!string.IsNullOrWhiteSpace(nextLink))
{
computeList = await client.Resources.ListNextAsync(nextLink);
}
else
{
computeList = await client.Resources.ListAsync(listParams);
}
rValue.AddRange(computeList.Resources);
if (!string.IsNullOrWhiteSpace(computeList.NextLink))
{
var nextResult = await ListRecursiveAsync(client, null, computeList.NextLink);
rValue.AddRange(nextResult);
}
return rValue;
}
【讨论】: