protected override IConfigurable PrepareDataObject() { TaskLogger.LogEnter(); DatabaseAvailabilityGroupConfiguration databaseAvailabilityGroupConfiguration = (DatabaseAvailabilityGroupConfiguration)base.PrepareDataObject(); DagConfigurationHelper dagConfigurationHelper = DagConfigurationHelper.Deserialize(databaseAvailabilityGroupConfiguration.ConfigurationXML); if (dagConfigurationHelper.Version <= 1) { if (base.Fields["ServersPerDag"] != null) { dagConfigurationHelper.ServersPerDag = this.ServersPerDag; } if (base.Fields["DatabasesPerServer"] != null) { dagConfigurationHelper.DatabasesPerServer = this.DatabasesPerServer; } if (base.Fields["DatabasesPerVolume"] != null) { dagConfigurationHelper.DatabasesPerVolume = this.DatabasesPerVolume; } if (base.Fields["CopiesPerDatabase"] != null) { dagConfigurationHelper.CopiesPerDatabase = this.CopiesPerDatabase; } if (base.Fields["MinCopiesPerDatabaseForMonitoring"] != null) { dagConfigurationHelper.MinCopiesPerDatabaseForMonitoring = this.MinCopiesPerDatabaseForMonitoring; } this.m_configXML = dagConfigurationHelper.Serialize(); databaseAvailabilityGroupConfiguration.ConfigurationXML = this.m_configXML; TaskLogger.LogExit(); return(databaseAvailabilityGroupConfiguration); } throw new DagConfigVersionConflictException(databaseAvailabilityGroupConfiguration.Name, 1, dagConfigurationHelper.Version); }
protected override void InternalValidate() { TaskLogger.LogEnter(); base.InternalValidate(); if (this.preExistingDatabase != null) { TaskLogger.LogExit(); return; } if (this.PublicFolderDatabase == null) { if (base.OwnerServerPublicFolderDatabases != null && base.OwnerServerPublicFolderDatabases.Length > 0) { this.DataObject.PublicFolderDatabase = (ADObjectId)base.OwnerServerPublicFolderDatabases[0].Identity; } else { base.WriteVerbose(Strings.VerboseFindClosestPublicFolderDatabaseFromServer(base.OwnerServer.Id.ToString())); this.DataObject.PublicFolderDatabase = Microsoft.Exchange.Data.Directory.SystemConfiguration.PublicFolderDatabase.FindClosestPublicFolderDatabase(base.DataSession, base.OwnerServer.Id); } } else { this.PublicFolderDatabase.AllowLegacy = true; IConfigurable dataObject = base.GetDataObject <PublicFolderDatabase>(this.PublicFolderDatabase, base.DataSession, null, new LocalizedString?(Strings.ErrorPublicFolderDatabaseNotFound(this.PublicFolderDatabase.ToString())), new LocalizedString?(Strings.ErrorPublicFolderDatabaseNotUnique(this.PublicFolderDatabase.ToString()))); this.DataObject.PublicFolderDatabase = (ADObjectId)dataObject.Identity; } if (this.OfflineAddressBook != null) { IConfigurable dataObject2 = base.GetDataObject <OfflineAddressBook>(this.OfflineAddressBook, base.DataSession, null, new LocalizedString?(Strings.ErrorOfflineAddressBookNotFound(this.OfflineAddressBook.ToString())), new LocalizedString?(Strings.ErrorOfflineAddressBookNotUnique(this.OfflineAddressBook.ToString()))); this.DataObject.OfflineAddressBook = (ADObjectId)dataObject2.Identity; } base.ValidateFilePaths(base.ParameterSetName == "Recovery"); if (base.Fields.IsModified("AutoDagExcludeFromMonitoring")) { this.DataObject.AutoDagExcludeFromMonitoring = this.AutoDagExcludeFromMonitoring; } else { DatabaseAvailabilityGroup databaseAvailabilityGroup = DagTaskHelper.ReadDag(this.DataObject.MasterServerOrAvailabilityGroup, this.ConfigurationSession); if (databaseAvailabilityGroup != null) { DatabaseAvailabilityGroupConfiguration databaseAvailabilityGroupConfiguration = DagConfigurationHelper.ReadDagConfig(databaseAvailabilityGroup.DatabaseAvailabilityGroupConfiguration, this.ConfigurationSession); if (databaseAvailabilityGroupConfiguration != null) { DagConfigurationHelper dagConfigurationHelper = DagConfigurationHelper.Deserialize(databaseAvailabilityGroupConfiguration.ConfigurationXML); if (dagConfigurationHelper.MinCopiesPerDatabaseForMonitoring > 1) { this.DataObject.AutoDagExcludeFromMonitoring = true; } } } } TaskLogger.LogExit(); }
private DagConfigurationEntry ConstructNewDagConfigEntry(DatabaseAvailabilityGroupConfiguration dagConfig) { DagConfigurationHelper dagConfigurationHelper = DagConfigurationHelper.Deserialize(dagConfig.ConfigurationXML); if (dagConfigurationHelper.Version <= 1) { return(new DagConfigurationEntry { Name = dagConfig.Name, Identity = dagConfig.Identity, ServersPerDag = dagConfigurationHelper.ServersPerDag, DatabasesPerServer = dagConfigurationHelper.DatabasesPerServer, DatabasesPerVolume = dagConfigurationHelper.DatabasesPerVolume, CopiesPerDatabase = dagConfigurationHelper.CopiesPerDatabase, MinCopiesPerDatabaseForMonitoring = dagConfigurationHelper.MinCopiesPerDatabaseForMonitoring }); } throw new DagConfigVersionConflictException(dagConfig.Name, 1, dagConfigurationHelper.Version); }
protected override void InternalValidate() { TaskLogger.LogEnter(); this.m_output = new HaTaskOutputHelper("new-databaseavailabiltygroupconfiguration", new Task.TaskErrorLoggingDelegate(base.WriteError), new Task.TaskWarningLoggingDelegate(this.WriteWarning), new Task.TaskVerboseLoggingDelegate(base.WriteVerbose), new Task.TaskProgressLoggingDelegate(base.WriteProgress), this.GetHashCode()); this.m_output.CreateTempLogFile(); this.m_output.AppendLogMessage("new-dagconfiguration started", new object[0]); this.LogCommandLineParameters(); this.m_dagConfigName = base.Name; DagConfigurationHelper dagConfigurationHelper = new DagConfigurationHelper(this.ServersPerDag, this.DatabasesPerServer, this.DatabasesPerVolume, this.CopiesPerDatabase, this.MinCopiesPerDatabaseForMonitoring); this.m_dagConfigXML = dagConfigurationHelper.Serialize(); QueryFilter filter = new ComparisonFilter(ComparisonOperator.Equal, DatabaseAvailabilityGroupConfigurationSchema.Name, this.m_dagConfigName); DatabaseAvailabilityGroupConfiguration[] array = this.ConfigurationSession.Find <DatabaseAvailabilityGroupConfiguration>(null, QueryScope.SubTree, filter, null, 1); if (array != null && array.Length > 0) { base.WriteError(new ADObjectAlreadyExistsException(Strings.NewDagConfigurationErrorDuplicateName(this.m_dagConfigName)), ErrorCategory.InvalidArgument, this.m_dagConfigName); } base.InternalValidate(); this.m_output.WriteVerbose(Strings.NewDagConfigurationPassedChecks); TaskLogger.LogExit(); }
protected override IConfigurable PrepareDataObject() { TaskLogger.LogEnter(); DatabaseAvailabilityGroup databaseAvailabilityGroup = (DatabaseAvailabilityGroup)base.PrepareDataObject(); if (base.Fields["NetworkCompression"] != null) { databaseAvailabilityGroup.NetworkCompression = this.NetworkCompression; } if (base.Fields["NetworkEncryption"] != null) { databaseAvailabilityGroup.NetworkEncryption = this.NetworkEncryption; } if (base.Fields["ManualDagNetworkConfiguration"] != null) { databaseAvailabilityGroup.ManualDagNetworkConfiguration = this.ManualDagNetworkConfiguration; } if (base.Fields["DatacenterActivationMode"] != null) { databaseAvailabilityGroup.DatacenterActivationMode = this.DatacenterActivationMode; } if (base.Fields.IsChanged("DatabaseAvailabilityGroupIpAddresses")) { if (base.Fields["DatabaseAvailabilityGroupIpAddresses"] == null) { databaseAvailabilityGroup.DatabaseAvailabilityGroupIpv4Addresses = new MultiValuedProperty <IPAddress> { IPAddress.Any }; } else { databaseAvailabilityGroup.DatabaseAvailabilityGroupIpv4Addresses = this.DatabaseAvailabilityGroupIpAddresses; } } if (base.Fields["DagConfiguration"] != null) { DatabaseAvailabilityGroupConfiguration databaseAvailabilityGroupConfiguration = DagConfigurationHelper.DagConfigIdParameterToDagConfig(this.DagConfiguration, this.ConfigurationSession); databaseAvailabilityGroup.DatabaseAvailabilityGroupConfiguration = databaseAvailabilityGroupConfiguration.Id; } else if (this.m_dagConfigParameterSpecified) { databaseAvailabilityGroup.DatabaseAvailabilityGroupConfiguration = null; } TaskLogger.LogExit(); return(databaseAvailabilityGroup); }
protected override IConfigurable PrepareDataObject() { TaskLogger.LogEnter(); DatabaseAvailabilityGroup databaseAvailabilityGroup = new DatabaseAvailabilityGroup(); databaseAvailabilityGroup.SetId(((ITopologyConfigurationSession)this.ConfigurationSession).GetDatabaseAvailabilityGroupContainerId().GetChildId(base.Name)); databaseAvailabilityGroup.Name = this.m_dagName; databaseAvailabilityGroup.SetWitnessServer(this.m_fsw.FileShareWitnessShare, this.m_fsw.WitnessDirectory); databaseAvailabilityGroup.ThirdPartyReplication = this.ThirdPartyReplication; if (this.DagConfiguration != null) { DatabaseAvailabilityGroupConfiguration databaseAvailabilityGroupConfiguration = DagConfigurationHelper.DagConfigIdParameterToDagConfig(this.DagConfiguration, this.ConfigurationSession); databaseAvailabilityGroup.DatabaseAvailabilityGroupConfiguration = databaseAvailabilityGroupConfiguration.Id; } this.m_newDag = databaseAvailabilityGroup; TaskLogger.LogExit(); return(databaseAvailabilityGroup); }