我们如何在.Net SDK中创建或列出Azure虚拟机的标签

时间:2016-02-23 10:22:43

标签: azure azure-resource-manager azure-sdk-.net

我想使用.NET SDK列出并更改Azure虚拟机的标记及其值。

请让我知道这方面的方法。

谢谢。

1 个答案:

答案 0 :(得分:1)

由于我没有方便的虚拟机,我发布了更新资源组标签的代码。

首先,请确保正确设置Azure AD应用程序。您可能会发现此链接可用于此目的:https://msdn.microsoft.com/en-us/library/azure/ee460782.aspx

接下来,我创建了一个简单的控制台应用程序。您需要做的是在您的应用程序中获取Microsoft.Azure.ResourceManager 1.0.0-previewActive Directory Authentication Library 2.22.302111727 Nuget包。

之后,事情很简单。请参阅以下代码:

using System;
using System.Linq;
using Microsoft.IdentityModel.Clients.ActiveDirectory;
using System.Threading;
using Microsoft.Azure.Management.Resources;
using Microsoft.Rest;

namespace AzureARMDemo
{
    class Program
    {
        private static string ClientId = "<your-application-client-id>";//This is the PowerShell Client Id
        private static string TenantId = "<tenant-id>";
        private static string LoginEndpoint = "https://login.microsoftonline.com/";
        private static string ServiceManagementApiEndpoint = "https://management.core.windows.net/";
        private static string RedirectUri = "urn:ietf:wg:oauth:2.0:oob";
        private static string SubscriptionId = "<your-azure-subscription-id>";
        private static string AzureResourceManagerEndpoint = "https://management.windows.net";
        private static string ResourceGroupNameToUpdate = "<resource-group-name-to-update>";
        static void Main(string[] args)
        {
            var token = GetAuthorizationHeader();
            var credentials = new TokenCredentials(token);
            var resourceManagerClient = new ResourceManagementClient(new Uri(AzureResourceManagerEndpoint), credentials)
            {
                SubscriptionId = SubscriptionId,
            };
            Console.WriteLine("Listing resource groups. Please wait....");
            Console.WriteLine("----------------------------------------");
            var resourceGroup = resourceManagerClient.ResourceGroups.List().FirstOrDefault(r => r.Name == ResourceGroupNameToUpdate);
            if (resourceGroup != null)
            {
                var tags = resourceGroup.Tags;
                if (!tags.ContainsKey("Key1"))
                {
                    tags.Add("Key1", "Value1");
                }
                else
                {
                    tags["Key1"] = tags["Key1"] + " Updated";
                }
                Console.WriteLine("Updating resource group. Please wait....");
                Console.WriteLine("----------------------------------------");
                resourceManagerClient.ResourceGroups.Patch(ResourceGroupNameToUpdate, resourceGroup);
                Console.WriteLine("Resource group updated.");
                Console.WriteLine("-----------------------");
            }
            //var resourceGroups = resourceManagerClient.ResourceGroups.List();
            //foreach (resourceGroup in resourceGroups)
            //{
            //    Console.WriteLine("Resource Group Name: " + resourceGroup.Name);
            //    Console.WriteLine("Resource Group Id: " + resourceGroup.Id);
            //    Console.WriteLine("Resource Group Location: " + resourceGroup.Location);
            //    Console.WriteLine("----------------------------------------");
            //}
            Console.WriteLine("Press any key to terminate the application");
            Console.ReadLine();
        }

        private static string GetAuthorizationHeader()
        {
            AuthenticationResult result = null;

            var context = new AuthenticationContext(LoginEndpoint + TenantId);

            var thread = new Thread(() =>
            {
                result = context.AcquireToken(
                  ServiceManagementApiEndpoint,
                  ClientId,
                  new Uri(RedirectUri));
            });

            thread.SetApartmentState(ApartmentState.STA);
            thread.Name = "AquireTokenThread";
            thread.Start();
            thread.Join();

            if (result == null)
            {
                throw new InvalidOperationException("Failed to obtain the JWT token");
            }

            string token = result.AccessToken;
            return token;
        }
    }
}