/// <summary>
        /// Update a sync member
        /// </summary>
        /// <param name="model">AzureSqlSyncMemberModel object</param>
        /// <param name="databaseType">The type of member database</param>
        /// <param name="password">The password of member database</param>
        /// <returns>Updated AzureSqlSyncGroupModel object</returns>
        internal AzureSqlSyncMemberModel UpdateSyncMember(AzureSqlSyncMemberModel model)
        {
            SyncMemberCreateOrUpdateProperties properties = new SyncMemberCreateOrUpdateProperties()
            {
                DatabaseType = (DatabaseTypeEnum)(model.MemberDatabaseType != null ? Enum.Parse(typeof(DatabaseTypeEnum), model.MemberDatabaseType, true) : null),
                DatabaseName = model.MemberDatabaseName,
                ServerName   = model.MemberServerName,
                UserName     = model.MemberDatabaseUserName,
                Password     = model.MemberDatabasePassword == null ? null : AzureSqlServerAdapter.Decrypt(model.MemberDatabasePassword)
            };
            var resp = Communicator.UpdateSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, new SyncMemberCreateOrUpdateParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
                Properties     = properties
            });

            // Workaround for Rest API return response value incorrect issue. Remove this line after backend fix is deployed
            resp = Communicator.GetSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, new SyncMemberGeneralParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
            });
            return(CreateSyncMemberModelFromResponse(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, resp));
        }
        /// <summary>
        /// Create a sync member
        /// </summary>
        /// <param name="model">AzureSqlSyncMemberModel object</param>
        /// <param name="databaseType">The type of member database</param>
        /// <param name="password">The password of member database</param>
        /// <returns>Created AzureSqlSyncGroupModel object</returns>
        internal AzureSqlSyncMemberModel CreateSyncMember(AzureSqlSyncMemberModel model, string syncAgentId)
        {
            Management.Sql.Models.SyncMember properties = new Management.Sql.Models.SyncMember()
            {
                SyncDirection = model.SyncDirection,
                DatabaseType  = model.MemberDatabaseType,
            };

            if (properties.DatabaseType == DatabaseTypeEnum.AzureSqlDatabase.ToString())
            {
                properties.DatabaseName                      = model.MemberDatabaseName;
                properties.ServerName                        = model.MemberServerName;
                properties.UserName                          = model.MemberDatabaseUserName;
                properties.Password                          = model.MemberDatabasePassword == null ? null : AzureSqlServerAdapter.Decrypt(model.MemberDatabasePassword);
                properties.UsePrivateLinkConnection          = model.UsePrivateLinkConnection;
                properties.SyncMemberAzureDatabaseResourceId = model.SyncMemberAzureDatabaseResourceId;
            }
            else
            {
                properties.SqlServerDatabaseId = model.SqlServerDatabaseId == null ? null : (Guid?)Guid.Parse(model.SqlServerDatabaseId);
                properties.SyncAgentId         = model.SyncAgentId;
            }
            var createResp = Communicator.CreateSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, model.SyncMemberName, syncAgentId, properties);

            // Workaround for Rest API return response value incorrect issue. Remove this line after backend fix is deployed
            var resp = Communicator.GetSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, new SyncMemberGeneralParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
            });

            return(CreateSyncMemberModelFromResponse(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, resp));
        }
        /// <summary>
        /// Create a sync member
        /// </summary>
        /// <param name="model">AzureSqlSyncMemberModel object</param>
        /// <param name="databaseType">The type of member database</param>
        /// <param name="password">The password of member database</param>
        /// <returns>Created AzureSqlSyncGroupModel object</returns>
        internal AzureSqlSyncMemberModel CreateSyncMember(AzureSqlSyncMemberModel model, string syncAgentId)
        {
            SyncMemberCreateOrUpdateProperties properties = new SyncMemberCreateOrUpdateProperties()
            {
                SyncDirection = (SyncDirectionEnum?)(model.SyncDirection != null ? Enum.Parse(typeof(SyncDirectionEnum), model.SyncDirection, true) : null),
                DatabaseType  = (DatabaseTypeEnum)(model.MemberDatabaseType != null ? Enum.Parse(typeof(DatabaseTypeEnum), model.MemberDatabaseType, true) : null)
            };

            if (properties.DatabaseType == DatabaseTypeEnum.AzureSqlDatabase)
            {
                properties.DatabaseName = model.MemberDatabaseName;
                properties.ServerName   = model.MemberServerName;
                properties.UserName     = model.MemberDatabaseUserName;
                properties.Password     = model.MemberDatabasePassword == null ? null : AzureSqlServerAdapter.Decrypt(model.MemberDatabasePassword);
            }
            else
            {
                properties.SqlServerDatabaseId = model.SqlServerDatabaseId;
                properties.SyncAgentId         = model.SyncAgentId;
            }
            var resp = Communicator.CreateSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, syncAgentId, new SyncMemberCreateOrUpdateParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
                Properties     = properties,
            });

            // Workaround for Rest API return response value incorrect issue. Remove this line after backend fix is deployed
            resp = Communicator.GetSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, new SyncMemberGeneralParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
            });
            return(CreateSyncMemberModelFromResponse(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, 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 <AzureSqlSyncMemberModel> ApplyUserInputToModel(IEnumerable <AzureSqlSyncMemberModel> model)
        {
            AzureSqlSyncMemberModel newModel = model.First();

            if (MyInvocation.BoundParameters.ContainsKey(nameof(UsePrivateLinkConnection)))
            {
                if (this.UsePrivateLinkConnection.GetValueOrDefault() && !MyInvocation.BoundParameters.ContainsKey(nameof(SyncMemberAzureDatabaseResourceId)))
                {
                    throw new PSArgumentException(
                              Microsoft.Azure.Commands.Sql.Properties.Resources.SyncMemberIdRequired, nameof(SyncMemberAzureDatabaseResourceId));
                }

                newModel.UsePrivateLinkConnection          = this.UsePrivateLinkConnection;
                newModel.SyncMemberAzureDatabaseResourceId = this.SyncMemberAzureDatabaseResourceId;
            }

            if (MyInvocation.BoundParameters.ContainsKey("MemberDatabaseCredential"))
            {
                newModel.MemberDatabaseUserName = this.MemberDatabaseCredential.UserName;
                newModel.MemberDatabasePassword = this.MemberDatabaseCredential.Password;
            }
            else
            {
                newModel.MemberDatabaseUserName = null;
                newModel.MemberDatabasePassword = null;
            }

            return(model);
        }
Example #5
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 <AzureSqlSyncMemberModel> ApplyUserInputToModel(IEnumerable <AzureSqlSyncMemberModel> model)
        {
            List <AzureSqlSyncMemberModel> newEntity = new List <AzureSqlSyncMemberModel>();
            AzureSqlSyncMemberModel        newModel  = new AzureSqlSyncMemberModel()
            {
                ResourceGroupName  = this.ResourceGroupName,
                ServerName         = this.ServerName,
                DatabaseName       = this.DatabaseName,
                SyncGroupName      = this.SyncGroupName,
                SyncMemberName     = this.Name,
                SyncDirection      = this.SyncDirection,
                MemberDatabaseType = this.MemberDatabaseType
            };

            if (UsePrivateLinkConnection.IsPresent)
            {
                if (!MyInvocation.BoundParameters.ContainsKey(nameof(SyncMemberAzureDatabaseResourceId)))
                {
                    throw new PSArgumentException(
                              Microsoft.Azure.Commands.Sql.Properties.Resources.SyncMemberIdRequired, nameof(SyncMemberAzureDatabaseResourceId));
                }

                newModel.UsePrivateLinkConnection          = true;
                newModel.SyncMemberAzureDatabaseResourceId = this.SyncMemberAzureDatabaseResourceId;
            }

            if (ParameterSetName == AzureSqlSet)
            {
                newModel.MemberDatabaseName     = this.MemberDatabaseName;
                newModel.MemberServerName       = this.MemberServerName;
                newModel.MemberDatabaseUserName = this.MemberDatabaseCredential.UserName;
                newModel.MemberDatabasePassword = this.MemberDatabaseCredential.Password;
            }
            else
            {
                newModel.SqlServerDatabaseId = this.SqlServerDatabaseId;
                if (ParameterSetName == OnPremisesSyncAgentResourceIDSet)
                {
                    newModel.SyncAgentId = this.SyncAgentResourceID;
                }
                else
                {
                    // "/subscriptions/{id}/" will be added in AzureSqlDataSyncCommunicator
                    this.syncAgentId = string.Format("resourceGroups/{0}/providers/Microsoft.Sql/servers/{1}/syncAgents/{2}", this.SyncAgentResourceGroupName, this.SyncAgentServerName, this.SyncAgentName);
                }
            }
            newEntity.Add(newModel);
            return(newEntity);
        }
        /// <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 <AzureSqlSyncMemberModel> ApplyUserInputToModel(IEnumerable <AzureSqlSyncMemberModel> model)
        {
            AzureSqlSyncMemberModel newModel = model.First();

            if (MyInvocation.BoundParameters.ContainsKey("MemberDatabaseCredential"))
            {
                newModel.MemberDatabaseUserName = this.MemberDatabaseCredential.UserName;
                newModel.MemberDatabasePassword = this.MemberDatabaseCredential.Password;
            }
            else
            {
                newModel.MemberDatabaseUserName = null;
                newModel.MemberDatabasePassword = null;
            }

            return(model);
        }
        /// <summary>
        /// Update a sync member
        /// </summary>
        /// <param name="model">AzureSqlSyncMemberModel object</param>
        /// <param name="databaseType">The type of member database</param>
        /// <param name="password">The password of member database</param>
        /// <returns>Updated AzureSqlSyncGroupModel object</returns>
        internal AzureSqlSyncMemberModel UpdateSyncMember(AzureSqlSyncMemberModel model)
        {
            Management.Sql.Models.SyncMember properties = new Management.Sql.Models.SyncMember()
            {
                DatabaseType                      = model.MemberDatabaseType,
                DatabaseName                      = model.MemberDatabaseName,
                ServerName                        = model.MemberServerName,
                UserName                          = model.MemberDatabaseUserName,
                Password                          = model.MemberDatabasePassword == null ? null : AzureSqlServerAdapter.Decrypt(model.MemberDatabasePassword),
                UsePrivateLinkConnection          = model.UsePrivateLinkConnection,
                SyncMemberAzureDatabaseResourceId = model.SyncMemberAzureDatabaseResourceId
            };
            var updateResp = Communicator.UpdateSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, model.SyncMemberName, properties);

            // Workaround for Rest API return response value incorrect issue. Remove this line after backend fix is deployed
            var resp = Communicator.GetSyncMember(model.ResourceGroupName, model.ServerName, model.DatabaseName, new SyncMemberGeneralParameters()
            {
                SyncGroupName  = model.SyncGroupName,
                SyncMemberName = model.SyncMemberName,
            });

            return(CreateSyncMemberModelFromResponse(model.ResourceGroupName, model.ServerName, model.DatabaseName, model.SyncGroupName, 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 <AzureSqlSyncMemberModel> ApplyUserInputToModel(IEnumerable <AzureSqlSyncMemberModel> model)
        {
            List <AzureSqlSyncMemberModel> newEntity = new List <AzureSqlSyncMemberModel>();
            AzureSqlSyncMemberModel        newModel  = new AzureSqlSyncMemberModel()
            {
                ResourceGroupName  = this.ResourceGroupName,
                ServerName         = this.ServerName,
                DatabaseName       = this.DatabaseName,
                SyncGroupName      = this.SyncGroupName,
                SyncMemberName     = this.Name,
                SyncDirection      = this.SyncDirection,
                MemberDatabaseType = this.MemberDatabaseType
            };

            if (ParameterSetName == AzureSqlSet)
            {
                newModel.MemberDatabaseName     = this.MemberDatabaseName;
                newModel.MemberServerName       = this.MemberServerName;
                newModel.MemberDatabaseUserName = this.MemberDatabaseCredential.UserName;
                newModel.MemberDatabasePassword = this.MemberDatabaseCredential.Password;
            }
            else
            {
                newModel.SqlServerDatabaseId = this.SqlServerDatabaseId;
                if (ParameterSetName == OnPremisesSyncAgentResourceIDSet)
                {
                    newModel.SyncAgentId = this.SyncAgentResourceID;
                }
                else
                {
                    // "/subscriptions/{id}/" will be added in AzureSqlDataSyncCommunicator
                    this.syncAgentId = string.Format("resourceGroups/{0}/providers/Microsoft.Sql/servers/{1}/syncAgents/{2}", this.SyncAgentResourceGroupName, this.SyncAgentServerName, this.SyncAgentName);
                }
            }
            newEntity.Add(newModel);
            return(newEntity);
        }