2016-02-23 7 views
1

Я хочу перечислить и изменить теги и их значения для Azure Virtual Machines с помощью .NET SDK.Как создать или перечислить теги для Azure Virtual Machine в .Net SDK

Пожалуйста, дайте мне знать путь для этого.

Thank you.

+0

Пожалуйста, сообщите нам, что вы сделали до сих пор, и с какими проблемами вы столкнулись. –

+0

Привет, Гаурав. Спасибо за ответ. Я только начал изучать dll Microsoft.Azure.Management.Resources и классы для него, которые упоминаются в MSDN. Но я не нахожу полезную документацию, которая может помочь мне аутентифицировать и настроить запрос на листинг и создание тегов для конкретной виртуальной машины или группы ресурсов. Ваша помощь будет оценена по достоинству. – Tejas

+0

@GauravMantri Не могли бы вы помочь мне в этом. – Tejas

ответ

1

Поскольку у меня нет виртуальной машины, я отправляю код для обновления тегов для группы ресурсов.

Во-первых, убедитесь, что приложение Azure AD правильно настроено. Вы можете найти эту ссылку полезной для этой цели: https://msdn.microsoft.com/en-us/library/azure/ee460782.aspx.

Далее я создал простое консольное приложение. Что вам нужно сделать, это получить Microsoft.Azure.ResourceManager 1.0.0-preview и Active 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; 
     } 
    } 
} 
+1

Hi Gaurav. Спасибо за ваш ответ, и это было очень полезно. Тем не менее, он обновит тег для всей группы ресурсов, но как мы можем добиться обновления тега на конкретной виртуальной машине. – Tejas

+0

Есть ли способ, по которому мы можем обновлять теги только для конкретной виртуальной машины – Tejas

+0

Конечно, вы можете обновлять теги только для конкретной виртуальной машины. Я выбрал группы ресурсов в качестве примера, чтобы продемонстрировать, как вы можете обновлять теги с помощью библиотеки диспетчера ресурсов, поскольку у меня не было виртуальной машины. Я бы предложил вам использовать библиотеку, чтобы лучше понять ее, а затем использовать ее для вашего сценария. –