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));
        }
Beispiel #2
0
        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);
                }
            }
        }
Beispiel #4
0
        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);
 }
Beispiel #8
0
 /// <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());
 }
Beispiel #9
0
 /// <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);
     }
 }