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