public ShareSubscription CreateIfNotExistShareSubscription(Invitation invitation) { if (invitation.InvitationStatus == "Accepted") { Console.WriteLine( $"Invitation {invitation.InvitationId} is already accepted. Trying to get Share Subscription..."); try { ShareSubscription shareSubscription = this.DataShareClient.ShareSubscriptions.Get( this.Principal.DataShareResourceGroup, this.Principal.DataShareAccountName, this.Principal.DataShareShareSubscriptionName); Console.WriteLine($"\r\n\r\nFound share subscription {shareSubscription.Id}..."); if (shareSubscription.InvitationId != invitation.InvitationId) { Console.WriteLine( $"{shareSubscription.Id} was not created for InvitationId {invitation.InvitationId}. Make sure the configuration is valid."); throw new Exception("Invalid configuration."); } return(shareSubscription); } catch (DataShareErrorException exception) { if (exception.Response.StatusCode == HttpStatusCode.NotFound) { Console.WriteLine( $"Share subscription {this.Principal.DataShareShareSubscriptionName} does not exist. Make sure the configuration is valid."); } throw; } } ConsumerInvitation consumerInvitation = this.DataShareClient.ConsumerInvitations.Get( Configuration.Location, invitation.InvitationId); var shareSubscriptionPayload = new ShareSubscription { InvitationId = invitation.InvitationId, SourceShareLocation = consumerInvitation.Location }; return(this.DataShareClient.ShareSubscriptions.Create( this.Principal.DataShareResourceGroup, this.Principal.DataShareAccountName, this.Principal.DataShareShareSubscriptionName, shareSubscriptionPayload)); }
public static async Task Main(string[] args) { Console.WriteLine("\r\n\r\nReading the configurations..."); IConfigurationRoot configurationRoot = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("AppSettings.json").Build(); var configuration = configurationRoot.GetSection("configs").Get <Configuration>(); Console.WriteLine("\r\n\r\nIdempotent creates for provider resources..."); var providerContext = new UserContext(configuration.Provider); IResourceGroup providerResourceGroup = providerContext.IdempotentCreateResourceGroup(); Account providerAccount = providerContext.IdempotentCreateAccount(); Share share = providerContext.IdempotentCreateShare(); Console.WriteLine($"\r\n\r\nAssign MSI of {providerAccount.Id} as the Blob Reader on the Provider Storage..."); await providerContext.AssignRoleTaskAsync( configuration.Provider, providerAccount.Identity.PrincipalId, "2a2b9908-6ea1-4ae2-8e65-a410df84e7d1"); Console.WriteLine("\r\n\r\nCreate data set and send invitation"); DataSet dataSet = providerContext.CreateIfNotExistDataSet(configuration.Provider); Invitation invitation = providerContext.CreateIfNotExistInvitation(configuration.Consumer); Console.WriteLine("\r\n\r\nIdempotent creates for consumer"); var consumerContext = new UserContext(configuration.Consumer); IResourceGroup consumerResourceGroup = consumerContext.IdempotentCreateResourceGroup(); Account consumerAccount = consumerContext.IdempotentCreateAccount(); Console.WriteLine("\r\n\r\nTo accept the invitation create a share subscription/received share..."); ShareSubscription shareSubscription = consumerContext.CreateIfNotExistShareSubscription(invitation); Console.WriteLine($"\r\n\r\nAssign MSI of {consumerAccount.Id} as the Blob Contributor on the consumer Storage..."); await consumerContext.AssignRoleTaskAsync( configuration.Consumer, consumerAccount.Identity.PrincipalId, "ba92f5b4-2d11-453d-a403-e96b0029c9fe"); Console.WriteLine("\r\n\r\nCreate data set mapping to setup storage for the consumer"); ConsumerSourceDataSet consumerSourceDataSet = consumerContext.GetConsumerSourceDataSet(); DataSetMapping dataSetMapping = consumerContext.CreateDataSetMapping( configuration.Consumer, consumerSourceDataSet); Console.WriteLine("\r\n\r\nInitiate a snapshot copy (duration depends on how large the data is)..."); ShareSubscriptionSynchronization response = consumerContext.Synchronize(); Console.WriteLine( $"Synchronization Status: {response.Status}. Check resource {consumerAccount.Id} on https://portal.azure.com for further details. \r\n\r\n Hit Enter to continue..."); Console.ReadLine(); }
public override void ExecuteCmdlet() { if (this.ParameterSetName.Equals(ParameterSetNames.ResourceIdParameterSet, StringComparison.OrdinalIgnoreCase)) { var parsedResourceId = new ResourceIdentifier(this.ResourceId); this.ResourceGroupName = parsedResourceId.ResourceGroupName; this.AccountName = parsedResourceId.GetAccountName(); this.Name = parsedResourceId.GetShareSubscriptionName(); } if (this.AccountName != null && this.ResourceGroupName != null) { if (this.Name != null) { try { ShareSubscription shareSubscription = this.DataShareManagementClient.ShareSubscriptions.Get( this.ResourceGroupName, this.AccountName, this.Name); this.WriteObject(shareSubscription.ToPsObject()); } catch (DataShareErrorException ex) when(ex.Response.StatusCode.Equals(HttpStatusCode.NotFound)) { throw new PSArgumentException(string.Format(Resources.ResourceNotFoundMessage, this.Name)); } } else { string nextPageLink = null; List <ShareSubscription> shareSubscriptionList = new List <ShareSubscription>(); do { IPage <ShareSubscription> shareSubscriptions = string.IsNullOrEmpty(nextPageLink) ? this.DataShareManagementClient.ShareSubscriptions.ListByAccount(this.ResourceGroupName, this.AccountName) : this.DataShareManagementClient.ShareSubscriptions.ListByAccountNext(nextPageLink); shareSubscriptionList.AddRange(shareSubscriptions.AsEnumerable()); nextPageLink = shareSubscriptions.NextPageLink; } while (nextPageLink != null); IEnumerable <PSDataShareSubscription> shareSubscriptionsInAccount = shareSubscriptionList.Select(shareSubscription => shareSubscription.ToPsObject()); this.WriteObject(shareSubscriptionsInAccount, true); } } }
public override void ExecuteCmdlet() { if (this.ShouldProcess(this.Name, string.Format(Resources.ResourceCreateMessage, NewAzDataShareSubscription.ResourceType))) { ShareSubscription shareSubscription = this.DataShareManagementClient.ShareSubscriptions.Create( this.ResourceGroupName, this.AccountName, this.Name, new ShareSubscription() { InvitationId = this.InvitationId }); this.WriteObject(shareSubscription.ToPsObject()); } }
internal static async Task CreateAsync( DataShareManagementClient client, string resourceGroupName, string accountName, string shareSubscriptionName, ShareSubscription expectedShareSubscription) { AzureOperationResponse <ShareSubscription> createResponse = await client.ShareSubscriptions.CreateWithHttpMessagesAsync( resourceGroupName, accountName, shareSubscriptionName, expectedShareSubscription); ShareSubscriptionScenarioTests.ValidateShare(createResponse.Body, shareSubscriptionName); Assert.Equal(HttpStatusCode.Created, createResponse.Response.StatusCode); }
public static PSDataShareSubscription ToPsObject(this ShareSubscription shareSubscription) { return(new PSDataShareSubscription { Id = shareSubscription.Id, Name = shareSubscription.Name, Type = shareSubscription.Type, CreatedAt = shareSubscription.CreatedAt, CreatedBy = shareSubscription.CreatedBy, InvitationId = shareSubscription.InvitationId, ProvisioningState = (PSProvisioningState)Enum.Parse( typeof(PSProvisioningState), shareSubscription.ProvisioningState), ShareName = shareSubscription.ShareName, ShareKind = shareSubscription.ShareKind, ShareDescription = shareSubscription.ShareDescription, ShareSender = shareSubscription.ShareSender, ShareSenderCompanyName = shareSubscription.ShareSenderCompanyName, ShareTerms = shareSubscription.ShareTerms, ShareSubscriptionStatus = shareSubscription.ShareSubscriptionStatus }); }
private static void ValidateShare( ShareSubscription actualShareSubscription, string expectedShareSubscriptionName) { Assert.Equal(expectedShareSubscriptionName, actualShareSubscription.Name); }
/// <summary> /// Create shareSubscription in an account. /// </summary> /// <remarks> /// Create a shareSubscription in an account /// </remarks> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The resource group name. /// </param> /// <param name='accountName'> /// The name of the share account. /// </param> /// <param name='shareSubscriptionName'> /// The name of the shareSubscription. /// </param> /// <param name='shareSubscription'> /// create parameters for shareSubscription /// </param> public static ShareSubscription Create(this IShareSubscriptionsOperations operations, string resourceGroupName, string accountName, string shareSubscriptionName, ShareSubscription shareSubscription) { return(operations.CreateAsync(resourceGroupName, accountName, shareSubscriptionName, shareSubscription).GetAwaiter().GetResult()); }
/// <summary> /// Create shareSubscription in an account. /// </summary> /// <remarks> /// Create a shareSubscription in an account /// </remarks> /// <param name='operations'> /// The operations group for this extension method. /// </param> /// <param name='resourceGroupName'> /// The resource group name. /// </param> /// <param name='accountName'> /// The name of the share account. /// </param> /// <param name='shareSubscriptionName'> /// The name of the shareSubscription. /// </param> /// <param name='shareSubscription'> /// create parameters for shareSubscription /// </param> /// <param name='cancellationToken'> /// The cancellation token. /// </param> public static async Task <ShareSubscription> CreateAsync(this IShareSubscriptionsOperations operations, string resourceGroupName, string accountName, string shareSubscriptionName, ShareSubscription shareSubscription, CancellationToken cancellationToken = default(CancellationToken)) { using (var _result = await operations.CreateWithHttpMessagesAsync(resourceGroupName, accountName, shareSubscriptionName, shareSubscription, null, cancellationToken).ConfigureAwait(false)) { return(_result.Body); } }