@@ -180,6 +202,8 @@
+
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs
index 2814fe0c..974ce822 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.cs
@@ -27,9 +27,12 @@
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
+using System.Collections.Generic;
using System.Collections.Specialized;
+using System.Data;
using System.Linq;
using System.Web.UI.WebControls;
+using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.Common;
using WebsitePanel.Providers.Virtualization;
@@ -45,6 +48,8 @@ namespace WebsitePanel.Portal.ProviderControls
public string RemoteServerName { get { return IsRemoteServer ? txtServerName.Text.Trim() : ""; } }
public string CertificateThumbprint { get { return IsRemoteServer ? txtCertThumbnail.Text.Trim() : ddlCertThumbnail.SelectedValue; } }
public bool IsReplicaServer { get { return ReplicationModeList.SelectedValue == "IsReplicaServer"; } }
+ public bool EnabledReplica { get { return ReplicationModeList.SelectedValue == "Enable"; } }
+ public string ReplicaServerId { get; set; }
void IHostingServiceProviderSettings.BindSettings(StringDictionary settings)
{
@@ -103,6 +108,7 @@ namespace WebsitePanel.Portal.ProviderControls
// replica
ReplicationModeList.SelectedValue = settings["ReplicaMode"] ?? "Disabled";
txtReplicaPath.Text = settings["ReplicaServerPath"];
+ ReplicaServerId = settings["ReplicaServerId"];
ToggleControls();
@@ -171,6 +177,7 @@ namespace WebsitePanel.Portal.ProviderControls
// replication
settings["ReplicaMode"] = ReplicationModeList.SelectedValue;
+ settings["ReplicaServerId"] = ddlReplicaServer.SelectedValue;
settings["ReplicaServerPath"] = txtReplicaPath.Text;
settings["ReplicaServerThumbprint"] = CertificateThumbprint;
@@ -211,6 +218,64 @@ namespace WebsitePanel.Portal.ProviderControls
}
}
+
+ private void BindReplicaServices()
+ {
+ ddlReplicaServer.Items.Clear();
+
+ ServiceInfo serviceInfo = ES.Services.Servers.GetServiceInfo(PanelRequest.ServiceId);
+ DataView dvServices = ES.Services.Servers.GetRawServicesByGroupName(ResourceGroups.VPS2012).Tables[0].DefaultView;
+
+ List services = GetServices(ReplicaServerId);
+
+ foreach (DataRowView dr in dvServices)
+ {
+ int serviceId = (int)dr["ServiceID"];
+
+ ServiceInfo currentServiceInfo = ES.Services.Servers.GetServiceInfo(serviceId);
+ if (currentServiceInfo == null || currentServiceInfo.ProviderId != serviceInfo.ProviderId)
+ continue;
+
+ var currentServiceSettings = ConvertArrayToDictionary(ES.Services.Servers.GetServiceSettings(serviceId));
+ if (currentServiceSettings["ReplicaMode"] == ReplicaMode.IsReplicaServer.ToString())
+ continue;
+
+ var exists = false;
+ if (services != null)
+ exists = services.Any(current => current != null && current.ServiceId == serviceId);
+
+ var listItem = new ListItem(dr["FullServiceName"].ToString(), serviceId.ToString()) {Selected = exists};
+ ddlReplicaServer.Items.Add(listItem);
+ }
+ }
+
+ private List GetServices(string data)
+ {
+ if (string.IsNullOrEmpty(data))
+ return null;
+ List list = new List();
+ string[] servicesIds = data.Split(',');
+ foreach (string current in servicesIds)
+ {
+ ServiceInfo serviceInfo = ES.Services.Servers.GetServiceInfo(Utils.ParseInt(current));
+ list.Add(serviceInfo);
+ }
+
+
+ return list;
+ }
+
+ private StringDictionary ConvertArrayToDictionary(string[] settings)
+ {
+ StringDictionary r = new StringDictionary();
+ foreach (string setting in settings)
+ {
+ int idx = setting.IndexOf('=');
+ r.Add(setting.Substring(0, idx), setting.Substring(idx + 1));
+ }
+ return r;
+ }
+
private void ToggleControls()
{
ServerNameRow.Visible = (radioServer.SelectedIndex == 1);
@@ -230,11 +295,13 @@ namespace WebsitePanel.Portal.ProviderControls
// Replica
IsReplicaServerRow.Visible = IsReplicaServer;
+ EnableReplicaRow.Visible = EnabledReplica;
ddlCertThumbnail.Visible = !IsRemoteServer;
txtCertThumbnail.Visible = CertificateThumbnailValidator.Visible = IsRemoteServer;
IsReplicaServerRow.Visible = IsReplicaServer;
ReplicaPathErrorTr.Visible = ReplicaErrorTr.Visible = false;
if (IsReplicaServer) BindCertificates();
+ if (EnabledReplica) BindReplicaServices();
}
protected void radioServer_SelectedIndexChanged(object sender, EventArgs e)
diff --git a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.designer.cs b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.designer.cs
index 2ae51e9a..d8100907 100644
--- a/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.designer.cs
+++ b/WebsitePanel/Sources/WebsitePanel.WebPortal/DesktopModules/WebsitePanel/ProviderControls/HyperV2012R2_Settings.ascx.designer.cs
@@ -363,6 +363,60 @@ namespace WebsitePanel.Portal.ProviderControls {
///
protected global::System.Web.UI.WebControls.RadioButtonList ReplicationModeList;
+ ///
+ /// EnableReplicaRow control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.HtmlControls.HtmlTableRow EnableReplicaRow;
+
+ ///
+ /// locReplicaServer control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Localize locReplicaServer;
+
+ ///
+ /// ddlReplicaServer control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.DropDownList ddlReplicaServer;
+
+ ///
+ /// ReplicaServerValidator control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.RequiredFieldValidator ReplicaServerValidator;
+
+ ///
+ /// EnableReplicaErrorTr control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.HtmlControls.HtmlTableRow EnableReplicaErrorTr;
+
+ ///
+ /// locEnableReplicaError control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.Label locEnableReplicaError;
+
///
/// IsReplicaServerRow control.
///
@@ -417,6 +471,15 @@ namespace WebsitePanel.Portal.ProviderControls {
///
protected global::System.Web.UI.WebControls.RequiredFieldValidator CertificateThumbnailValidator;
+ ///
+ /// CertificateDdlThumbnailValidator control.
+ ///
+ ///
+ /// Auto-generated field.
+ /// To modify move field declaration from designer file to code-behind file.
+ ///
+ protected global::System.Web.UI.WebControls.RequiredFieldValidator CertificateDdlThumbnailValidator;
+
///
/// ReplicaPathErrorTr control.
///
|