/// <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); }
/// <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)); }