/// <summary> /// Ensures the role assignment. /// </summary> /// <param name="serverPrincipal">The server principal.</param> /// <param name="storageAccountSubscriptionId">The storage account subscription identifier.</param> /// <param name="storageAccountResourceId">The storage account resource identifier.</param> /// <returns>RoleAssignment.</returns> public RoleAssignment EnsureRoleAssignment(MicrosoftGraphServicePrincipal serverPrincipal, string storageAccountSubscriptionId, string storageAccountResourceId) { string currentSubscriptionId = AuthorizationManagementClient.SubscriptionId; bool hasMismatchSubscription = currentSubscriptionId != storageAccountSubscriptionId; try { if (hasMismatchSubscription) { AuthorizationManagementClient.SubscriptionId = storageAccountSubscriptionId; } var resourceIdentifier = new ResourceIdentifier(storageAccountResourceId); string roleDefinitionScope = "/"; RoleDefinition roleDefinition = AuthorizationManagementClient.RoleDefinitions.Get(roleDefinitionScope, BuiltInRoleDefinitionId); var serverPrincipalId = serverPrincipal.Id.ToString(); var roleAssignments = AuthorizationManagementClient.RoleAssignments .ListForResource( resourceIdentifier.ResourceGroupName, ResourceIdentifier.GetProviderFromResourceType(resourceIdentifier.ResourceType), resourceIdentifier.ParentResource ?? "/", ResourceIdentifier.GetTypeFromResourceType(resourceIdentifier.ResourceType), resourceIdentifier.ResourceName, odataQuery: new ODataQuery <RoleAssignmentFilter>(f => f.AssignedTo(serverPrincipalId))); var roleAssignmentScope = storageAccountResourceId; Guid roleAssignmentId = StorageSyncResourceManager.GetGuid(); RoleAssignment roleAssignment = roleAssignments.FirstOrDefault(); if (roleAssignment == null) { VerboseLogger.Invoke(StorageSyncResources.CreateRoleAssignmentMessage); var createParameters = new RoleAssignmentCreateParameters { Properties = new RoleAssignmentProperties { PrincipalId = serverPrincipalId, RoleDefinitionId = AuthorizationHelper.ConstructFullyQualifiedRoleDefinitionIdFromSubscriptionAndIdAsGuid(resourceIdentifier.Subscription, BuiltInRoleDefinitionId) } }; roleAssignment = AuthorizationManagementClient.RoleAssignments.Create(roleAssignmentScope, roleAssignmentId.ToString(), createParameters); StorageSyncResourceManager.Wait(); } return(roleAssignment); } finally { if (hasMismatchSubscription) { AuthorizationManagementClient.SubscriptionId = currentSubscriptionId; } } }
public virtual PSResource GetById(string resourceId, string apiVersion) { var providers = new List <Provider>(); var resourceIdentifier = new ResourceIdentifier(resourceId); var providerNamespace = ResourceIdentifier.GetProviderFromResourceType(resourceIdentifier.ResourceType); if (!string.IsNullOrEmpty(providerNamespace)) { var result = ResourceManagementClient.Providers.Get(providerNamespace); if (result != null) { providers.Add(result); } } if (!providers.Any()) { var result = ResourceManagementClient.Providers.List(); if (result != null) { result.ForEach(p => providers.Add(p)); while (!string.IsNullOrEmpty(result.NextPageLink)) { result = ResourceManagementClient.Providers.ListNext(result.NextPageLink); result.ForEach(p => providers.Add(p)); } } } foreach (var provider in providers) { var resourceType = provider.ResourceTypes .Where(t => string.Equals(string.Format("{0}/{1}", provider.NamespaceProperty, t.ResourceType), resourceIdentifier.ResourceType, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (resourceType != null) { apiVersion = resourceType.ApiVersions.Contains(apiVersion) ? apiVersion : resourceType.ApiVersions.FirstOrDefault(); if (!string.IsNullOrEmpty(apiVersion)) { return(new PSResource(ResourceManagementClient.Resources.GetById(resourceId, apiVersion))); } } } return(null); }
protected bool ValidateAndExtractName(string resourceId, out string resourceGroupName, out string resourceName) { ResourceIdentifier resourceIdentifier = new ResourceIdentifier(resourceId); // validate the resource provider type if (string.Equals(ResourceProviderName, ResourceIdentifier.GetProviderFromResourceType(resourceIdentifier.ResourceType), System.StringComparison.InvariantCultureIgnoreCase) && string.Equals(ResourceTypeName, ResourceIdentifier.GetTypeFromResourceType(resourceIdentifier.ResourceType), System.StringComparison.InvariantCultureIgnoreCase)) { resourceGroupName = resourceIdentifier.ResourceGroupName; resourceName = resourceIdentifier.ResourceName; return(true); } resourceGroupName = null; resourceName = null; return(false); }