/// <summary>
        /// Returns a  list of Azure sql databases for given subscription
        /// </summary>
        private async Task <ServiceResponse <FirewallRuleResource> > TryFindAzureResourceForSubscriptionAsync(object notRequired,
                                                                                                              IAzureUserAccountSubscriptionContext input, string serverName,
                                                                                                              CancellationToken cancellationToken, CancellationToken internalCancellationToken)
        {
            ServiceResponse <FirewallRuleResource> result = null;

            if (!cancellationToken.IsCancellationRequested)
            {
                using (IAzureResourceManagementSession session = await ResourceManager.CreateSessionAsync(input))
                {
                    IAzureSqlServerResource azureSqlServer = await FindAzureResourceForSubscriptionAsync(serverName, session);

                    if (azureSqlServer != null)
                    {
                        result = new ServiceResponse <FirewallRuleResource>(new FirewallRuleResource()
                        {
                            SubscriptionContext = input,
                            AzureResource       = azureSqlServer
                        }.SingleItemAsEnumerable());
                        result.Found = true;
                    }
                }
            }

            return(result ?? new ServiceResponse <FirewallRuleResource>());
        }
Esempio n. 2
0
        public async Task <FirewallRuleResponse> CreateFirewallRuleAsync(
            IAzureResourceManagementSession azureResourceManagementSession,
            IAzureSqlServerResource azureSqlServer,
            FirewallRuleRequest firewallRuleRequest)
        {
            CommonUtil.CheckForNull(azureResourceManagementSession, "azureResourceManagerSession");
            CommonUtil.CheckForNull(firewallRuleRequest, "firewallRuleRequest");
            CommonUtil.CheckForNull(azureSqlServer, "azureSqlServer");

            try
            {
                AzureResourceManagementSession vsAzureResourceManagementSession = azureResourceManagementSession as AzureResourceManagementSession;

                if (vsAzureResourceManagementSession != null)
                {
                    var firewallRule = new RestFirewallRule()
                    {
                        EndIpAddress   = firewallRuleRequest.EndIpAddress.ToString(),
                        StartIpAddress = firewallRuleRequest.StartIpAddress.ToString()
                    };
                    IFirewallRulesOperations firewallRuleOperations = vsAzureResourceManagementSession.SqlManagementClient.FirewallRules;
                    var firewallRuleResponse = await ExecuteCloudRequest(
                        () => firewallRuleOperations.CreateOrUpdateWithHttpMessagesAsync(
                            azureSqlServer.ResourceGroupName ?? string.Empty,
                            azureSqlServer.Name,
                            firewallRuleRequest.FirewallRuleName,
                            firewallRule,
                            GetCustomHeaders()),
                        SR.FirewallRuleCreationFailedWithError);

                    var response = firewallRuleResponse.Body;
                    return(new FirewallRuleResponse()
                    {
                        StartIpAddress = response.StartIpAddress,
                        EndIpAddress = response.EndIpAddress,
                        Created = true
                    });
                }
                // else respond with failure case
                return(new FirewallRuleResponse()
                {
                    Created = false
                });
            }
            catch (Exception ex)
            {
                TraceException(TraceEventType.Error, (int)TraceId.AzureResource, ex, "Failed to create firewall rule");
                throw;
            }
        }
        private async Task <ServiceResponse <DatabaseInstanceInfo> > GetDatabasesForServerFromService(
            IAzureResourceManagementSession session,
            IAzureSqlServerResource azureSqlServer,
            string serverName,
            CancellationToken cancellationToken,
            CancellationToken internalCancellationToken)
        {
            try
            {
                if (cancellationToken.IsCancellationRequested)
                {
                    return(new ServiceResponse <DatabaseInstanceInfo>());
                }
                ServerInstanceInfo serverInstanceInfo = new ServerInstanceInfo(ServerDefinition)
                {
                    Name = azureSqlServer.Name,
                    FullyQualifiedDomainName = azureSqlServer.FullyQualifiedDomainName,
                    AdministratorLogin       = azureSqlServer.AdministratorLogin
                };
                OnDatabaseFound(new DatabaseInstanceInfo(serverInstanceInfo));
                IEnumerable <IAzureResource> databases = await AzureResourceManager.GetAzureDatabasesAsync(
                    session,
                    azureSqlServer.ResourceGroupName,
                    azureSqlServer.Name);

                if (cancellationToken.IsCancellationRequested)
                {
                    return(new ServiceResponse <DatabaseInstanceInfo>());
                }
                else
                {
                    IEnumerable <DatabaseInstanceInfo>     data   = databases.Select(x => ConvertToModel(serverInstanceInfo, x));
                    ServiceResponse <DatabaseInstanceInfo> result = new ServiceResponse <DatabaseInstanceInfo>(data);
                    foreach (var databaseInstance in result.Data)
                    {
                        if (cancellationToken.IsCancellationRequested)
                        {
                            break;
                        }
                        OnDatabaseFound(databaseInstance);
                    }

                    return(result);
                }
            }
            catch (Exception ex)
            {
                return(new ServiceResponse <DatabaseInstanceInfo>(ex));
            }
        }