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
This commit is contained in:
robvde 2012-09-24 16:31:16 +04:00
parent bddd1354bd
commit 2e02654376

View file

@ -143,14 +143,13 @@ namespace WebsitePanel.EnterpriseServer
site.FrontPageAccount = siteItem.FrontPageAccount; site.FrontPageAccount = siteItem.FrontPageAccount;
if (String.IsNullOrEmpty(site.FrontPageAccount)) if (String.IsNullOrEmpty(site.FrontPageAccount))
site.FrontPageAccount = GetFrontPageUsername(site.Name); site.FrontPageAccount = GetFrontPageUsername(site.Name);
#region Restore Web Deploy publishing persistent properties
// Set Web Deploy publishing account // Set Web Deploy publishing account
site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount; site.WebDeployPublishingAccount = siteItem.WebDeployPublishingAccount;
// Set Web Deploy site publishing enabled // Set Web Deploy site publishing enabled
site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled; site.WebDeploySitePublishingEnabled = siteItem.WebDeploySitePublishingEnabled;
// Set Web Deploy site publishing profile // Set Web Deploy site publishing profile
site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile; site.WebDeploySitePublishingProfile = siteItem.WebDeploySitePublishingProfile;
#endregion
return site; return site;
} }
@ -224,7 +223,7 @@ namespace WebsitePanel.EnterpriseServer
StringDictionary webSettings = ServerController.GetServiceSettings(serviceId); StringDictionary webSettings = ServerController.GetServiceSettings(serviceId);
int addressId = Utils.ParseInt(webSettings["SharedIP"], 0); int addressId = Utils.ParseInt(webSettings["SharedIP"], 0);
bool dedicatedIp = false;
if (packageAddressId != 0) if (packageAddressId != 0)
{ {
// dedicated IP // dedicated IP
@ -232,7 +231,6 @@ namespace WebsitePanel.EnterpriseServer
if (packageIp != null) if (packageIp != null)
{ {
addressId = packageIp.AddressID; addressId = packageIp.AddressID;
dedicatedIp = true;
} }
} }
@ -597,12 +595,7 @@ namespace WebsitePanel.EnterpriseServer
if (siteItem == null) if (siteItem == null)
return BusinessErrorCodes.ERROR_WEB_SITE_PACKAGE_ITEM_NOT_FOUND; 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; int addressId = 0;
PackageIPAddress packageIp = ServerController.GetPackageIPAddress(ipAddressId); PackageIPAddress packageIp = ServerController.GetPackageIPAddress(ipAddressId);
if (packageIp != null) if (packageIp != null)
@ -614,7 +607,7 @@ namespace WebsitePanel.EnterpriseServer
// place log record // place log record
TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name); TaskManager.StartTask("WEB_SITE", "SWITCH_TO_DEDICATED_IP", siteItem.Name);
TaskManager.ItemId = siteItemId; TaskManager.ItemId = siteItemId;
/*
try try
{ {
// remove all web site pointers // remove all web site pointers
@ -635,10 +628,21 @@ namespace WebsitePanel.EnterpriseServer
if (addressId != 0) if (addressId != 0)
ServerController.AddItemIPAddress(siteItemId, addressId); 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) 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; return 0;
} }
@ -650,7 +654,6 @@ namespace WebsitePanel.EnterpriseServer
{ {
TaskManager.CompleteTask(); TaskManager.CompleteTask();
} }
*/
return 0; return 0;
} }
@ -669,18 +672,40 @@ namespace WebsitePanel.EnterpriseServer
// place log record // place log record
TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name); TaskManager.StartTask("WEB_SITE", "SWITCH_TO_SHARED_IP", siteItem.Name);
TaskManager.ItemId = siteItemId; TaskManager.ItemId = siteItemId;
/*
try try
{ {
// get web site pointers // remove all web site pointers
var sitePointers = GetWebSitePointers(siteItemId); List<DomainInfo> pointers = GetWebSitePointers(siteItemId);
foreach (DomainInfo pointer in pointers)
DeleteWebSitePointer(siteItemId, pointer.DomainId, true, true, false);
// get existing web site bindings // remove web site main pointer
WebServer web = new WebServer(); DomainInfo domain = ServerController.GetDomain(siteItem.Name);
ServiceProviderProxy.Init(web, siteItem.ServiceId); if (domain != null)
var bindings = web.GetSiteBindings(siteItem.SiteId); 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; return 0;
} }
@ -692,7 +717,7 @@ namespace WebsitePanel.EnterpriseServer
{ {
TaskManager.CompleteTask(); TaskManager.CompleteTask();
} }
*/
return 0; return 0;
} }
@ -904,23 +929,18 @@ namespace WebsitePanel.EnterpriseServer
//ignore all other except the host_name record //ignore all other except the host_name record
foreach (GlobalDnsRecord r in dnsRecords) 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 else
tmpDnsRecords = dnsRecords; tmpDnsRecords = dnsRecords;
List<DnsRecord> resourceRecords = rebuild ? DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, "", domain.DomainName, serviceIp): List<DnsRecord> resourceRecords = DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp);
DnsServerController.BuildDnsResourceRecords(tmpDnsRecords, hostName, domain.DomainName, serviceIp);
if (!rebuild) if (!rebuild)
{ {
@ -968,10 +988,7 @@ namespace WebsitePanel.EnterpriseServer
ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP; ipAddr = !String.IsNullOrEmpty(ip.InternalIP) ? ip.InternalIP : ip.ExternalIP;
// fill bindings // fill bindings
if (rebuild) FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords);
FillWebServerBindings(bindings, dnsRecords, "", domain.DomainName, "", ignoreGlobalDNSRecords);
else
FillWebServerBindings(bindings, dnsRecords, ipAddr, hostName, domain.DomainName, ignoreGlobalDNSRecords);
//for logging purposes //for logging purposes
foreach (ServerBinding b in bindings) foreach (ServerBinding b in bindings)