我需要使用 Azure SDK API 获取Azure中 VM实例的详细信息。
这些细节包括各种参数,如...
*主机名
* IP地址
*实例名称
*位置
*标签名称等。
Azure中有两种类型的虚拟机...
* 经典虚拟机(通过旧门户网站)
* VM (使用新门户网站)
用于创建具有相同名称的云服务的经典VM 我能够使用 Microsoft.WindowsAzure.Management.Compute 库和 HostedService 类获取经典VM的上述参数详细信息。
代码段:
var cert = new X509Certificate2(Constants.PFXCertificatePath, Constants.CertificatePassword);
var cred = new CertificateCloudCredentials(Constants.SubscriptionID, cert);
var computeClient = CloudContext.Clients.CreateComputeManagementClient(cred);
List<HostedServiceListResponse.HostedService> hostedServiceOperations = computeClient.HostedServices.List().HostedServices.ToList<HostedServiceListResponse.HostedService>();
foreach (HostedServiceListResponse.HostedService hostedService in hostedServiceOperations)
{
HostedServiceGetDetailedResponse detailedResponse = computeClient.HostedServices.GetDetailed(hostedService.ServiceName);
List<HostedServiceGetDetailedResponse.Deployment> deployments = detailedResponse.Deployments.
ToList<HostedServiceGetDetailedResponse.Deployment>();
foreach (HostedServiceGetDetailedResponse.Deployment deployment in deployments)
{
List<RoleInstance> roleInstances = deployment.RoleInstances.ToList<RoleInstance>();
foreach (RoleInstance roleInstance in roleInstances)
{
string privateId = deployment.PrivateId;
Console.WriteLine($"Host Name: {roleInstance.HostName}");
Console.WriteLine($"Instance Name: {roleInstance.InstanceName}");
Console.WriteLine($"Instance size: {roleInstance.InstanceSize}");
Console.WriteLine($"Private IP: {roleInstance.IPAddress}");
foreach (RoleInstance.PublicIP publicIP in roleInstance.PublicIPs)
{
Console.WriteLine($"Public IP: {publicIP.Address}");
}
Console.WriteLine($"Role Name: {roleInstance.RoleName}");
Console.WriteLine($"Power state: {roleInstance.PowerState}");
Console.WriteLine($"Instance status: {roleInstance.InstanceStatus}");
foreach (InstanceEndpoint instanceEndpoint in roleInstance.InstanceEndpoints)
{
Console.WriteLine($"Instance endpoint name: {instanceEndpoint.Name}, port: {instanceEndpoint.Port}, protocol: {instanceEndpoint.Protocol}");
Console.WriteLine($"Instance Virtual IP address: {instanceEndpoint.VirtualIPAddress}, local port: {instanceEndpoint.LocalPort}");
}
}
}
}
但是,我发现这种方法不适用于新VM(即从新门户创建的VM),因为没有为它创建云服务。
使用新的 ARM 库( Microsoft.Azure.Management.Resources )我能够获取此VM的基本信息,该信息仅限于名称和位置信息< strong> GenericResource 类。
var token = GetAuthorizationHeader(Constants.TenantID);//Uses Active Directory authentication token
var tokenCred = new Microsoft.Rest.TokenCredentials(token);
ResourceManagementClient resourceClient = new ResourceManagementClient(tokenCred);
resourceClient.SubscriptionId = Constants.SubscriptionID;
var resourceGroups = resourceClient.ResourceGroups;
IResourcesOperations resources = resourceClient.Resources;
List<GenericResource> vmResources = resources.List().Where(r => r.Type == "Microsoft.Compute/virtualMachines").ToList<GenericResource>();
foreach (GenericResource resource in vmResources)
{
Console.WriteLine($"Resource Name: {resource.Name}, Resource Location: {resource.Location},Resource Plan: {resource.Plan}");
}
答案 0 :(得分:2)
我已使用此代码获取实例信息:
public static void GetVirtualMachine(TokenCredentials credential, string groupName, string vmName, string subscriptionId)
{
Console.WriteLine("Getting information about the virtual machine...");
var computeManagementClient = new ComputeManagementClient(credential);
computeManagementClient.SubscriptionId = subscriptionId;
var vmResult = computeManagementClient.VirtualMachines.Get(groupName, vmName, "instanceview");
Console.WriteLine("hardwareProfile");
Console.WriteLine(" vmSize: " + vmResult.HardwareProfile.VmSize);
Console.WriteLine("\nstorageProfile");
Console.WriteLine(" imageReference");
Console.WriteLine(" publisher: " + vmResult.StorageProfile.ImageReference.Publisher);
Console.WriteLine(" offer: " + vmResult.StorageProfile.ImageReference.Offer);
Console.WriteLine(" sku: " + vmResult.StorageProfile.ImageReference.Sku);
Console.WriteLine(" version: " + vmResult.StorageProfile.ImageReference.Version);
Console.WriteLine(" osDisk");
Console.WriteLine(" osType: " + vmResult.StorageProfile.OsDisk.OsType);
Console.WriteLine(" name: " + vmResult.StorageProfile.OsDisk.Name);
Console.WriteLine(" createOption: " + vmResult.StorageProfile.OsDisk.CreateOption);
Console.WriteLine(" uri: " + vmResult.StorageProfile.OsDisk.Vhd.Uri);
Console.WriteLine(" caching: " + vmResult.StorageProfile.OsDisk.Caching);
Console.WriteLine("\nosProfile");
Console.WriteLine(" computerName: " + vmResult.OsProfile.ComputerName);
Console.WriteLine(" adminUsername: " + vmResult.OsProfile.AdminUsername);
Console.WriteLine(" provisionVMAgent: " + vmResult.OsProfile.WindowsConfiguration.ProvisionVMAgent.Value);
Console.WriteLine(" enableAutomaticUpdates: " + vmResult.OsProfile.WindowsConfiguration.EnableAutomaticUpdates.Value);
Console.WriteLine("\nnetworkProfile");
foreach (NetworkInterfaceReference nic in vmResult.NetworkProfile.NetworkInterfaces)
{
Console.WriteLine(" networkInterface id: " + nic.Id);
}
Console.WriteLine("\nvmAgent");
Console.WriteLine(" vmAgentVersion" + vmResult.InstanceView.VmAgent.VmAgentVersion);
Console.WriteLine(" statuses");
foreach (InstanceViewStatus stat in vmResult.InstanceView.VmAgent.Statuses)
{
Console.WriteLine(" code: " + stat.Code);
Console.WriteLine(" level: " + stat.Level);
Console.WriteLine(" displayStatus: " + stat.DisplayStatus);
Console.WriteLine(" message: " + stat.Message);
Console.WriteLine(" time: " + stat.Time);
}
Console.WriteLine("\ndisks");
foreach (DiskInstanceView idisk in vmResult.InstanceView.Disks)
{
Console.WriteLine(" name: " + idisk.Name);
Console.WriteLine(" statuses");
foreach (InstanceViewStatus istat in idisk.Statuses)
{
Console.WriteLine(" code: " + istat.Code);
Console.WriteLine(" level: " + istat.Level);
Console.WriteLine(" displayStatus: " + istat.DisplayStatus);
Console.WriteLine(" time: " + istat.Time);
}
}
Console.WriteLine("\nVM general status");
Console.WriteLine(" provisioningStatus: " + vmResult.ProvisioningState);
Console.WriteLine(" id: " + vmResult.Id);
Console.WriteLine(" name: " + vmResult.Name);
Console.WriteLine(" type: " + vmResult.Type);
Console.WriteLine(" location: " + vmResult.Location);
Console.WriteLine("\nVM instance status");
foreach (InstanceViewStatus istat in vmResult.InstanceView.Statuses)
{
Console.WriteLine("\n code: " + istat.Code);
Console.WriteLine(" level: " + istat.Level);
Console.WriteLine(" displayStatus: " + istat.DisplayStatus);
}
}