Exemplo n.º 1
0
        /// <summary>
        /// Converts the response from the service to a powershell database object
        /// </summary>
        /// <param name="resourceGroupName">The resource group the server is in</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="pool">The service response</param>
        /// <returns>The converted model</returns>
        private AzureSqlFailoverGroupModel CreateFailoverGroupModelFromResponse(Management.Sql.LegacySdk.Models.FailoverGroup failoverGroup)
        {
            AzureSqlFailoverGroupModel model = new AzureSqlFailoverGroupModel();

            model.FailoverGroupName       = failoverGroup.Name;
            model.Databases               = failoverGroup.Properties.Databases;
            model.ReadOnlyFailoverPolicy  = failoverGroup.Properties.ReadOnlyEndpoint.FailoverPolicy;
            model.ReadWriteFailoverPolicy = failoverGroup.Properties.ReadWriteEndpoint.FailoverPolicy;
            model.ReplicationRole         = failoverGroup.Properties.ReplicationRole;
            model.ReplicationState        = failoverGroup.Properties.ReplicationState;
            model.PartnerServers          = failoverGroup.Properties.PartnerServers;
            model.FailoverWithDataLossGracePeriodHours = failoverGroup.Properties.ReadWriteEndpoint.FailoverWithDataLossGracePeriodMinutes == null ?
                                                         null : failoverGroup.Properties.ReadWriteEndpoint.FailoverWithDataLossGracePeriodMinutes / 60;

            model.Id       = failoverGroup.Id;
            model.Location = failoverGroup.Location;

            model.DatabaseNames = failoverGroup.Properties.Databases
                                  .Select(dbId => GetUriSegment(dbId, 10))
                                  .ToList();

            model.ResourceGroupName = GetUriSegment(failoverGroup.Id, 4);
            model.ServerName        = GetUriSegment(failoverGroup.Id, 8);

            FailoverGroupPartnerServer partnerServer = failoverGroup.Properties.PartnerServers.FirstOrDefault();

            if (partnerServer != null)
            {
                model.PartnerResourceGroupName = GetUriSegment(partnerServer.Id, 4);
                model.PartnerServerName        = GetUriSegment(partnerServer.Id, 8);
                model.PartnerLocation          = partnerServer.Location;
            }

            return(model);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Patch updates an Azure Sql Database FailoverGroup.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database FailoverGroup</returns>
        internal AzureSqlFailoverGroupModel PatchUpdateFailoverGroup(AzureSqlFailoverGroupModel model)
        {
            ReadOnlyEndpoint readOnlyEndpoint = new ReadOnlyEndpoint();

            readOnlyEndpoint.FailoverPolicy = model.ReadOnlyFailoverPolicy;

            ReadWriteEndpoint readWriteEndpoint = new ReadWriteEndpoint();

            readWriteEndpoint.FailoverPolicy = model.ReadWriteFailoverPolicy;

            if (model.FailoverWithDataLossGracePeriodHours.HasValue)
            {
                readWriteEndpoint.FailoverWithDataLossGracePeriodMinutes = checked (model.FailoverWithDataLossGracePeriodHours * 60);
            }

            var resp = Communicator.PatchUpdate(model.ResourceGroupName, model.ServerName, model.FailoverGroupName, new FailoverGroupPatchUpdateParameters()
            {
                Location   = model.Location,
                Properties = new FailoverGroupPatchUpdateProperties()
                {
                    ReadOnlyEndpoint  = readOnlyEndpoint,
                    ReadWriteEndpoint = readWriteEndpoint,
                }
            });

            return(CreateFailoverGroupModelFromResponse(resp));
        }
        /// <summary>
        /// Patch updates an Azure Sql Database FailoverGroup.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database FailoverGroup</returns>
        internal AzureSqlFailoverGroupModel PatchUpdateFailoverGroup(AzureSqlFailoverGroupModel model)
        {
            ReadOnlyEndpoint readOnlyEndpoint = new ReadOnlyEndpoint();

            readOnlyEndpoint.FailoverPolicy = model.ReadOnlyFailoverPolicy;

            ReadWriteEndpoint readWriteEndpoint = new ReadWriteEndpoint();

            readWriteEndpoint.FailoverPolicy = model.ReadWriteFailoverPolicy;

            if (!string.Equals(model.ReadWriteFailoverPolicy, FailoverPolicy.Manual.ToString()))
            {
                readWriteEndpoint.FailoverWithDataLossGracePeriodMinutes = model.FailoverWithDataLossGracePeriodHours * 60;
            }
            else
            {
                readWriteEndpoint.FailoverWithDataLossGracePeriodMinutes = null;
            }


            var resp = Communicator.PatchUpdate(model.ResourceGroupName, model.ServerName, model.FailoverGroupName, Util.GenerateTracingId(), new FailoverGroupPatchUpdateParameters()
            {
                Location   = model.Location,
                Tags       = model.Tags,
                Properties = new FailoverGroupPatchUpdateProperties()
                {
                    ReadOnlyEndpoint  = readOnlyEndpoint,
                    ReadWriteEndpoint = readWriteEndpoint,
                }
            });

            return(CreateFailoverGroupModelFromResponse(model.ResourceGroupName, model.ServerName, resp));
        }
        /// <summary>
        /// Create the model from user input
        /// </summary>
        /// <param name="model">Model retrieved from service</param>
        /// <returns>The model that was passed in</returns>
        protected override IEnumerable <AzureSqlFailoverGroupModel> ApplyUserInputToModel(IEnumerable <AzureSqlFailoverGroupModel> model)
        {
            string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName);
            List <AzureSqlFailoverGroupModel> newEntity = new List <AzureSqlFailoverGroupModel>();
            AzureSqlFailoverGroupModel        newModel  = model.First();

            newModel.ReadWriteFailoverPolicy = MyInvocation.BoundParameters.ContainsKey("FailoverPolicy") ? FailoverPolicy.ToString() : newModel.ReadWriteFailoverPolicy;
            newModel.FailoverWithDataLossGracePeriodHours = MyInvocation.BoundParameters.ContainsKey("GracePeriodWithDataLossHour") ? GracePeriodWithDataLossHour : newModel.FailoverWithDataLossGracePeriodHours;
            newModel.ReadOnlyFailoverPolicy = MyInvocation.BoundParameters.ContainsKey("AllowReadOnlyFailoverToPrimary") ? AllowReadOnlyFailoverToPrimary.ToString() : newModel.ReadOnlyFailoverPolicy;
            newEntity.Add(newModel);

            return(newEntity);
        }
Exemplo n.º 5
0
        /// <summary>
        /// Creates or updates an Azure Sql Database FailoverGroup.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database FailoverGroup</returns>
        internal AzureSqlFailoverGroupModel UpsertFailoverGroup(AzureSqlFailoverGroupModel model)
        {
            List <FailoverGroupPartnerServer> partnerServers = new List <FailoverGroupPartnerServer>();
            FailoverGroupPartnerServer        partnerServer  = new FailoverGroupPartnerServer();

            partnerServer.Id = string.Format(
                AzureSqlFailoverGroupModel.PartnerServerIdTemplate,
                _subscription.Id.ToString(),
                model.PartnerResourceGroupName,
                model.PartnerServerName);
            partnerServers.Add(partnerServer);

            ReadOnlyEndpoint readOnlyEndpoint = new ReadOnlyEndpoint();

            readOnlyEndpoint.FailoverPolicy = model.ReadOnlyFailoverPolicy;
            ReadWriteEndpoint readWriteEndpoint = new ReadWriteEndpoint();

            readWriteEndpoint.FailoverPolicy = model.ReadWriteFailoverPolicy;

            if (model.FailoverWithDataLossGracePeriodHours.HasValue)
            {
                readWriteEndpoint.FailoverWithDataLossGracePeriodMinutes = model.FailoverWithDataLossGracePeriodHours * 60;
            }
            else
            {
                readWriteEndpoint.FailoverWithDataLossGracePeriodMinutes = null;
            }

            var resp = Communicator.CreateOrUpdate(model.ResourceGroupName, model.ServerName, model.FailoverGroupName, Util.GenerateTracingId(), new FailoverGroupCreateOrUpdateParameters()
            {
                Location   = model.Location,
                Tags       = model.Tags,
                Properties = new FailoverGroupCreateOrUpdateProperties()
                {
                    PartnerServers    = partnerServers,
                    ReadOnlyEndpoint  = readOnlyEndpoint,
                    ReadWriteEndpoint = readWriteEndpoint,
                }
            });

            return(CreateFailoverGroupModelFromResponse(model.ResourceGroupName, model.ServerName, resp));
        }
Exemplo n.º 6
0
        /// <summary>
        /// Create the model from user input
        /// </summary>
        /// <param name="model">Model retrieved from service</param>
        /// <returns>The model that was passed in</returns>
        protected override IEnumerable <AzureSqlFailoverGroupModel> ApplyUserInputToModel(IEnumerable <AzureSqlFailoverGroupModel> model)
        {
            string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName);
            List <AzureSqlFailoverGroupModel> newEntity = new List <AzureSqlFailoverGroupModel>();
            AzureSqlFailoverGroupModel        newModel  = model.First();

            FailoverPolicy effectivePolicy = FailoverPolicy;

            if (!MyInvocation.BoundParameters.ContainsKey("FailoverPolicy"))
            {
                // If none was provided, use the existing policy.
                Enum.TryParse(newModel.ReadWriteFailoverPolicy, out effectivePolicy);
            }

            newModel.ReadWriteFailoverPolicy = effectivePolicy.ToString();
            newModel.FailoverWithDataLossGracePeriodHours = ComputeEffectiveGracePeriod(effectivePolicy, originalGracePeriod: newModel.FailoverWithDataLossGracePeriodHours);
            newModel.ReadOnlyFailoverPolicy = MyInvocation.BoundParameters.ContainsKey("AllowReadOnlyFailoverToPrimary") ? AllowReadOnlyFailoverToPrimary.ToString() : newModel.ReadOnlyFailoverPolicy;
            newEntity.Add(newModel);

            return(newEntity);
        }
Exemplo n.º 7
0
        /// <summary>
        /// Converts the response from the service to a powershell database object
        /// </summary>
        /// <param name="resourceGroupName">The resource group the server is in</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="pool">The service response</param>
        /// <returns>The converted model</returns>
        private AzureSqlFailoverGroupModel CreateFailoverGroupModelFromResponse(string resourceGroup, string serverName, Management.Sql.Models.FailoverGroup failoverGroup)
        {
            AzureSqlFailoverGroupModel model = new AzureSqlFailoverGroupModel();

            model.ResourceGroupName       = resourceGroup;
            model.ServerName              = serverName;
            model.FailoverGroupName       = failoverGroup.Name;
            model.Databases               = failoverGroup.Properties.Databases;
            model.ReadOnlyFailoverPolicy  = failoverGroup.Properties.ReadOnlyEndpoint.FailoverPolicy;
            model.ReadWriteFailoverPolicy = failoverGroup.Properties.ReadWriteEndpoint.FailoverPolicy;
            model.ReplicationRole         = failoverGroup.Properties.ReplicationRole;
            model.ReplicationState        = failoverGroup.Properties.ReplicationState;
            model.PartnerServers          = failoverGroup.Properties.PartnerServers;
            model.FailoverWithDataLossGracePeriodHours = failoverGroup.Properties.ReadWriteEndpoint.FailoverWithDataLossGracePeriodMinutes == null ?
                                                         null : failoverGroup.Properties.ReadWriteEndpoint.FailoverWithDataLossGracePeriodMinutes / 60;

            model.Tags     = TagsConversionHelper.CreateTagDictionary(TagsConversionHelper.CreateTagHashtable(failoverGroup.Tags), false);
            model.Location = failoverGroup.Location;;

            return(model);
        }
Exemplo n.º 8
0
        /// <summary>
        /// Patch updates an Azure Sql Database FailoverGroup.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="serverName">The name of the Azure Sql Database Server</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The updated Azure Sql Database FailoverGroup</returns>
        internal AzureSqlFailoverGroupModel AddOrRemoveDatabaseToFailoverGroup(string resourceGroupName, string serverName, string failoverGroupName, AzureSqlFailoverGroupModel model)
        {
            var resp = Communicator.PatchUpdate(resourceGroupName, serverName, failoverGroupName, new FailoverGroupPatchUpdateParameters()
            {
                Location   = model.Location,
                Properties = new FailoverGroupPatchUpdateProperties()
                {
                    Databases = model.Databases,
                }
            });

            return(CreateFailoverGroupModelFromResponse(resp));
        }