From 2e02654376afc394d5d81b2fc9ad3211af0901d8 Mon Sep 17 00:00:00 2001 From: robvde Date: Mon, 24 Sep 2012 16:31:16 +0400 Subject: [PATCH] Switch shared IP to dedicated IP and vice versa Ensure the server component for IIS global dns definitions contain at least the following: An "A" record with name "[host_name]" and IP Addres "[ip]" This is regardless if DNS is implemented. Ensure also the IIS server component configuration contains the Public Shared IP address, this will be the "external" ip as to be configured in the dns records Note: * records as part of the global dns records are not taken care of so they will need to changed manually. Main reason is that they are not bound to a website as such and for DNS purposes only. This change has impacted quite some areas, any testing is welcome --- .../Code/WebServers/WebServerController.cs | 89 +++++++++++-------- 1 file changed, 53 insertions(+), 36 deletions(-) diff --git a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs index 5ea4e114..8cb32b80 100644 --- a/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs +++ b/WebsitePanel/Sources/WebsitePanel.EnterpriseServer/Code/WebServers/WebServerController.cs @@ -143,14 +143,13 @@ namespace WebsitePanel.EnterpriseServer site.FrontPageAccount = siteItem.FrontPageAccount; if (String.IsNullOrEmpty(site.FrontPageAccount)) site.FrontPageAccount = GetFrontPageUsername(site.Name); - #region Restore Web Deploy publishing persistent properties + // Set Web Deploy publishing account site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; // Set Web Deploy site publishing enabled site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; // Set Web Deploy site publishing profile site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; - #endregion return site; } @@ -224,7 +223,7 @@ namespace WebsitePanel.EnterpriseServer StringDictionary webSettings = ServerController.GetServiceSettings(serviceId); int addressId = Utils.ParseInt(webSettings["SharedIP"], 0); - bool dedicatedIp = false; + if (packageAddressId != 0) { // dedicated IP @@ -232,7 +231,6 @@ namespace WebsitePanel.EnterpriseServer if (packageIp != null) { addressId = packageIp.AddressID; - dedicatedIp = true; } } @@ -597,12 +595,7 @@ namespace WebsitePanel.EnterpriseServer if (siteItem == null) return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; - // load assigned IP address - //IPAddressInfo ip = ServerController.GetIPAddress(ipAddressId); - //if (ip == null) - //return BusinessErrorCodes.ERROR_WEB_SITE_IP_ADDRESS_NOT_SPECIFIED; - - //string ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; + int addressId = 0; PackageIPAddress packageIp = ServerController.GetPackageIPAddress(ipAddressId); if (packageIp != null) @@ -614,7 +607,7 @@ namespace WebsitePanel.EnterpriseServer // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; -/* + try { // remove all web site pointers @@ -635,10 +628,21 @@ namespace WebsitePanel.EnterpriseServer if (addressId != 0) ServerController.AddItemIPAddress(siteItemId, addressId); - AddWebSitePointer(siteItemId, "", domain.DomainId, true, true, true); + + DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "": domain.DomainName.Replace("." + domain.ZoneName,"") + , ZoneInfo.DomainId, true, true, true); foreach (DomainInfo pointer in pointers) - AddWebSitePointer(siteItemId, "", pointer.DomainId, true, true, true); + { + ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + } return 0; } @@ -650,7 +654,6 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } - */ return 0; } @@ -669,18 +672,40 @@ namespace WebsitePanel.EnterpriseServer // place log record TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); TaskManager.ItemId = siteItemId; -/* + try { - // get web site pointers - var sitePointers = GetWebSitePointers(siteItemId); + // remove all web site pointers + List pointers = GetWebSitePointers(siteItemId); + foreach (DomainInfo pointer in pointers) + DeleteWebSitePointer(siteItemId, pointer.DomainId, true, true, false); - // get existing web site bindings - WebServer web = new WebServer(); - ServiceProviderProxy.Init(web, siteItem.ServiceId); - var bindings = web.GetSiteBindings(siteItem.SiteId); + // remove web site main pointer + DomainInfo domain = ServerController.GetDomain(siteItem.Name); + if (domain != null) + DeleteWebSitePointer(siteItemId, domain.DomainId, true, true, false); - // TODO - what would be correct logic here? + //Deallocate IP Address + ServerController.DeleteItemIPAddress(siteItemId, siteItem.SiteIPAddressId); + + // update site item + siteItem.SiteIPAddressId = 0; + PackageController.UpdatePackageItem(siteItem); + + DomainInfo ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (domain.DomainName.Replace("." + domain.ZoneName, "") == domain.ZoneName) ? "" : domain.DomainName.Replace("." + domain.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + + foreach (DomainInfo pointer in pointers) + { + ZoneInfo = ServerController.GetDomain(domain.ZoneName); + + AddWebSitePointer(siteItemId, + (pointer.DomainName.Replace("." + pointer.ZoneName, "") == pointer.ZoneName) ? "" : pointer.DomainName.Replace("." + pointer.ZoneName, "") + , ZoneInfo.DomainId, true, true, true); + } return 0; } @@ -692,7 +717,7 @@ namespace WebsitePanel.EnterpriseServer { TaskManager.CompleteTask(); } - */ + return 0; } @@ -904,23 +929,18 @@ namespace WebsitePanel.EnterpriseServer //ignore all other except the host_name record foreach (GlobalDnsRecord r in dnsRecords) { - if (rebuild) + if (r.RecordName == "[host_name]") { - if ((r.RecordName + (string.IsNullOrEmpty(r.RecordName) ? domain.ZoneName : "." + domain.ZoneName)) == domain.DomainName) tmpDnsRecords.Add(r); + tmpDnsRecords.Add(r); + break; } - else - { - if (r.RecordName == "[host_name]") tmpDnsRecords.Add(r); - } - } } else tmpDnsRecords = dnsRecords; - List resourceRecords = rebuild ? DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, "", domain.DomainName, serviceIp): - DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); + List resourceRecords = DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp); if (!rebuild) { @@ -968,10 +988,7 @@ namespace WebsitePanel.EnterpriseServer ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; // fill bindings - if (rebuild) - FillWebServerBindings(bindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords); - else - FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); + FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords); //for logging purposes foreach (ServerBinding b in bindings)