Esempio 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="location">The name of the local region</param>
        /// <param name="pool">The service response</param>
        /// <returns>The converted model</returns>
        private AzureSqlInstanceFailoverGroupModel CreateInstanceFailoverGroupModelFromResponse(Management.Sql.Models.InstanceFailoverGroup failoverGroup)
        {
            AzureSqlInstanceFailoverGroupModel model = new AzureSqlInstanceFailoverGroupModel();

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

            model.Id = failoverGroup.Id;

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

            model.PartnerResourceGroupName = GetUriSegment(failoverGroup.ManagedInstancePairs.First().PartnerManagedInstanceId, 4);
            model.PartnerRegion            = failoverGroup.PartnerRegions.First().Location;

            model.PrimaryManagedInstanceName = GetUriSegment(failoverGroup.ManagedInstancePairs.First().PrimaryManagedInstanceId, 8);
            model.PartnerManagedInstanceName = GetUriSegment(failoverGroup.ManagedInstancePairs.First().PartnerManagedInstanceId, 8);

            return(model);
        }
        /// <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 <AzureSqlInstanceFailoverGroupModel> ApplyUserInputToModel(IEnumerable <AzureSqlInstanceFailoverGroupModel> model)
        {
            List <AzureSqlInstanceFailoverGroupModel> newEntity = new List <AzureSqlInstanceFailoverGroupModel>();
            AzureSqlInstanceFailoverGroupModel        newModel  = model.First();
            object parameterValue;
            string effectivePolicy = FailoverPolicy;

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

            int?gracePeriod = null;

            if (!effectivePolicy.Equals("Manual", StringComparison.OrdinalIgnoreCase))
            {
                int?setDefault = newModel.FailoverWithDataLossGracePeriodHours;
                if (setDefault.Equals(null))
                {
                    setDefault = 1;
                }
                gracePeriod = MyInvocation.BoundParameters.TryGetValue("GracePeriodWithDataLossHours", out parameterValue) ? (int)parameterValue : setDefault;
            }

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

            return(newEntity);
        }
Esempio n. 3
0
        /// <summary>
        /// Creates or updates an Azure Sql Database InstanceFailoverGroup.
        /// </summary>
        /// <param name="resourceGroup">The name of the resource group</param>
        /// <param name="location">The name of the local region</param>
        /// <param name="model">The input parameters for the create/update operation</param>
        /// <returns>The upserted Azure Sql Database InstanceFailoverGroup</returns>
        internal AzureSqlInstanceFailoverGroupModel UpsertInstanceFailoverGroup(AzureSqlInstanceFailoverGroupModel model)
        {
            List <PartnerRegionInfo> partnerRegions = new List <PartnerRegionInfo>();
            PartnerRegionInfo        partnerRegion  = new PartnerRegionInfo(model.PartnerRegion, "Secondary");

            partnerRegions.Add(partnerRegion);

            List <ManagedInstancePairInfo> pairs = new List <ManagedInstancePairInfo>();
            ManagedInstancePairInfo        pair  = new ManagedInstancePairInfo();

            pair.PrimaryManagedInstanceId = string.Format(
                AzureSqlInstanceFailoverGroupModel.PrimaryManagedInstanceIdTemplate,
                _subscription.Id.ToString(),
                model.ResourceGroupName,
                model.PrimaryManagedInstanceName);
            pair.PartnerManagedInstanceId = string.Format(
                AzureSqlInstanceFailoverGroupModel.PartnerManagedInstanceIdTemplate,
                model.PartnerSubscriptionId == null ? _subscription.Id.ToString() : model.PartnerSubscriptionId,
                model.PartnerResourceGroupName,
                model.PartnerManagedInstanceName);
            pairs.Add(pair);

            InstanceFailoverGroupReadOnlyEndpoint readOnlyEndpoint = new InstanceFailoverGroupReadOnlyEndpoint();

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

            readWriteEndpoint.FailoverPolicy = model.ReadWriteFailoverPolicy;

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

            var resp = Communicator.CreateOrUpdate(model.ResourceGroupName, model.Location, model.Name, new Management.Sql.Models.InstanceFailoverGroup
            {
                ReadWriteEndpoint    = readWriteEndpoint,
                ReadOnlyEndpoint     = readOnlyEndpoint,
                PartnerRegions       = partnerRegions,
                ManagedInstancePairs = pairs
            });

            return(CreateInstanceFailoverGroupModelFromResponse(resp));
        }