/// <summary> /// Registers resource providers for RDFE. /// </summary> /// <typeparam name="T">The client type</typeparam> private void RegisterServiceManagementProviders <T>(AzureContext context) where T : ServiceClient <T> { var credentials = AzureSession.AuthenticationFactory.GetSubscriptionCloudCredentials(context); var providersToRegister = RequiredResourceLookup.RequiredProvidersForServiceManagement <T>(); var registeredProviders = context.Subscription.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders); var unregisteredProviders = providersToRegister.Where(p => !registeredProviders.Contains(p)).ToList(); var successfullyRegisteredProvider = new List <string>(); if (unregisteredProviders.Count > 0) { using (var client = new ManagementClient(credentials, context.Environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ServiceManagement))) { foreach (var provider in unregisteredProviders) { try { client.Subscriptions.RegisterResource(provider); } catch (CloudException ex) { if (ex.Response.StatusCode != HttpStatusCode.Conflict && ex.Response.StatusCode != HttpStatusCode.NotFound) { // Conflict means already registered, that's OK. // NotFound means there is no registration support, like Windows Azure Pack. // Otherwise it's a failure. throw; } } successfullyRegisteredProvider.Add(provider); } } UpdateSubscriptionRegisteredProviders(context.Subscription, successfullyRegisteredProvider); } }
/// <summary> /// Registers resource providers for Sparta. /// </summary> /// <typeparam name="T">The client type</typeparam> private void RegisterResourceManagerProviders <T>(AzureContext context) where T : ServiceClient <T> { var providersToRegister = RequiredResourceLookup.RequiredProvidersForResourceManager <T>(); var registeredProviders = context.Subscription.GetPropertyAsArray(AzureSubscription.Property.RegisteredResourceProviders); var unregisteredProviders = providersToRegister.Where(p => !registeredProviders.Contains(p)).ToList(); var successfullyRegisteredProvider = new List <string>(); SubscriptionCloudCredentials creds = AzureSession.AuthenticationFactory.GetSubscriptionCloudCredentials(context); if (unregisteredProviders.Count > 0) { using (var client = CreateCustomClient <ResourceManagementClient>(creds, context.Environment.GetEndpointAsUri(AzureEnvironment.Endpoint.ResourceManager))) { foreach (string provider in unregisteredProviders) { try { client.Providers.Register(provider); successfullyRegisteredProvider.Add(provider); } catch { // Ignore this as the user may not have access to service management endpoint or the provider is already registered } } } UpdateSubscriptionRegisteredProviders(context.Subscription, successfullyRegisteredProvider); } }