/// <summary> /// init objects for MachineStore /// </summary> static void InitMachineObjects() { #region machine objects string[] enum_vals = Enum.GetNames(typeof(EnvironmentConfig.Machine)); //first loop only initialize physical machines foreach (string s in enum_vals) { DsMachine machine = null; EnvironmentConfig.Machine val = (EnvironmentConfig.Machine)Enum.Parse(typeof(EnvironmentConfig.Machine), s); switch (val) { case Machine.None: continue; case Machine.Endpoint: //initialize client machine = new ClientMachine(); machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; machine.NetbiosName = ADCommonServerAdapter.Instance(testSite).ENDPOINTNetbiosName; machine.DnsHostName = machine.NetbiosName + "." + machine.Domain.DNSName; break; case Machine.MainDC: if (MachineStore.ContainsKey(Machine.WritableDC1)) { machine = MachineStore[Machine.WritableDC1]; } else { machine = ldapAd.GetDCInfo(ADCommonServerAdapter.Instance(testSite).PDCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName, UserStore[User.ParentDomainAdmin]); if (testDS) { //do this in AD LDS will assign an AD LDS domain machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; } } break; case Machine.RODC: if (string.IsNullOrWhiteSpace(ADCommonServerAdapter.Instance(testSite).RODCNetbiosName)) { continue; } try { machine = ldapAd.GetDCInfo(ADCommonServerAdapter.Instance(testSite).RODCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName, UserStore[User.ParentDomainAdmin]); if (testDS) { //do this in AD LDS will assign an AD LDS domain machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; } ((AddsServer)machine).IsRODC = true; } catch (System.DirectoryServices.Protocols.LdapException) { continue; } break; case Machine.WritableDC1: if (MachineStore.ContainsKey(Machine.MainDC)) { machine = MachineStore[Machine.MainDC]; } else { machine = ldapAd.GetDCInfo(ADCommonServerAdapter.Instance(testSite).PDCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName, UserStore[User.ParentDomainAdmin]); if (testDS) { //do this in AD LDS will assign an AD LDS domain machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; } } break; case Machine.WritableDC2: if (string.IsNullOrWhiteSpace(ADCommonServerAdapter.Instance(testSite).SDCNetbiosName)) { continue; } try { machine = ldapAd.GetDCInfo(ADCommonServerAdapter.Instance(testSite).SDCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName, UserStore[User.ParentDomainAdmin]); if (testDS) { //do this in AD LDS will assign an AD LDS domain machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; } } catch (System.DirectoryServices.Protocols.LdapException) { continue; } break; default: //by default, it should be a DC if (testDS) { if (string.IsNullOrEmpty(testSite.Properties[s + ".NetbiosName"])) { continue; } machine = ldapAd.GetDCInfo(testSite.Properties[s + ".NetbiosName"] + "." + GetDomainFromMachineType(val).DNSName, GetDomainFromMachineType(val).Admin); } else { if (string.IsNullOrEmpty(testSite.Properties[s + ".LDSPort"])) { continue; } machine = ldapAd.GetDCInfo( ADCommonServerAdapter.Instance(testSite).PDCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName + ":" + testSite.Properties[s + ".LDSPort"], UserStore[User.ParentDomainAdmin]); ((AdldsServer)machine).DsaNetworkAddress = ADCommonServerAdapter.Instance(testSite).PDCNetbiosName + "." + ADCommonServerAdapter.Instance(testSite).PrimaryDomainDnsName + ":" + ((AdldsServer)machine).DsaNetworkAddress; } ((DsServer)machine).IsWindows = bool.Parse(testSite.Properties[s + ".IsWindows"]); if (machine != null) { switch (val) { case Machine.CDC: machine.Domain = DomainStore[DomainEnum.ChildDomain]; break; case Machine.ExternalDC: machine.Domain = DomainStore[DomainEnum.ExternalDomain]; break; default: machine.Domain = DomainStore[DomainEnum.PrimaryDomain]; break; } } break; } if (machine != null) { MachineStore.Add(val, machine); if (val != Machine.MainDC) { PhysicalMachineStore.Add(val, machine); } } } //second loop initialize roles foreach (string s in enum_vals) { EnvironmentConfig.Machine val = (EnvironmentConfig.Machine)Enum.Parse(typeof(EnvironmentConfig.Machine), s); switch (val) { case Machine.DC_With_DomainNamingMasterRole: break; case Machine.DC_With_RidAllocationMasterRole: break; case Machine.GCServer: break; case Machine.PDC: break; default: continue; } MachineStore.Add(val, MachineStore[Machine.WritableDC1]); } #endregion }