Server, Portal, and Enterprise server changes to allow MS SQL Server 2014

Service (Create/Update/Delete) remote databases and users on SQL Server v12
(MS SQL 2014)
This commit is contained in:
David McDonald 2014-08-13 19:26:52 -05:00
parent 9cb4804ab8
commit f8906f66af
20 changed files with 975 additions and 16 deletions

View file

@ -39,6 +39,7 @@ namespace WebsitePanel.EnterpriseServer
public const string MsSql2005 = "MsSQL2005";
public const string MsSql2008 = "MsSQL2008";
public const string MsSql2012 = "MsSQL2012";
public const string MsSql2014 = "MsSQL2014";
public const string MySql5 = "MySQL5";
public const string Dns = "DNS";
public const string Statistics = "Statistics";

View file

@ -482,6 +482,7 @@ namespace WebsitePanel.EnterpriseServer
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2014, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, "");
@ -1999,6 +2000,7 @@ namespace WebsitePanel.EnterpriseServer
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MsSql2005);
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MsSql2008);
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MsSql2012);
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MsSql2014);
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MySql4);
SetSqlServerExternalAddress(packageId, items, ResourceGroups.MySql5);

View file

@ -1780,6 +1780,7 @@ namespace WebsitePanel.EnterpriseServer
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MsSql2014, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(packageId, ResourceGroups.Statistics, domain, "");
@ -2338,6 +2339,7 @@ namespace WebsitePanel.EnterpriseServer
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2005, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2008, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2012, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MsSql2014, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql4, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.MySql5, domain, "");
ServerController.AddServiceDNSRecords(domain.PackageId, ResourceGroups.Statistics, domain, "");

View file

@ -262,7 +262,8 @@ namespace WebsitePanel.EnterpriseServer
//if (context.Groups.ContainsKey(ResourceGroups.MsSql2000) ||
// context.Groups.ContainsKey(ResourceGroups.MsSql2005) ||
// context.Groups.ContainsKey(ResourceGroups.MsSql2008) ||
// context.Groups.ContainsKey(ResourceGroups.MsSql2012))
// context.Groups.ContainsKey(ResourceGroups.MsSql2012) ||
// context.Groups.ContainsKey(ResourceGroups.MsSql2014))
//{
// appsFilter.AddRange(SupportedAppDependencies.MSSQL_DATABASE);
//}
@ -496,6 +497,7 @@ namespace WebsitePanel.EnterpriseServer
|| context.Groups.ContainsKey(ResourceGroups.MsSql2005)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2008)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2012)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2014)
|| context.Groups.ContainsKey(ResourceGroups.MySql4)
|| context.Groups.ContainsKey(ResourceGroups.MySql5)))
result.ErrorCodes.Add(GalleryErrors.DatabaseRequired);
@ -505,7 +507,8 @@ namespace WebsitePanel.EnterpriseServer
&& !(context.Groups.ContainsKey(ResourceGroups.MsSql2000)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2005)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2008)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2012)))
|| context.Groups.ContainsKey(ResourceGroups.MsSql2012)
|| context.Groups.ContainsKey(ResourceGroups.MsSql2014)))
result.ErrorCodes.Add(GalleryErrors.SQLRequired);
// MySQL

View file

@ -0,0 +1,47 @@
// Copyright (c) 2014, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
namespace WebsitePanel.Providers.Database
{
public class MsSqlServer2014 : MsSqlServer2005
{
public override bool IsInstalled()
{
return CheckVersion("12.");
}
public override void TruncateDatabase(string databaseName)
{
SqlDatabase database = GetDatabase(databaseName);
ExecuteNonQuery(String.Format(@"USE [{0}];DBCC SHRINKFILE ('{1}', 1);",
databaseName, database.LogName));
}
}
}

View file

@ -66,6 +66,7 @@
<Compile Include="MsSqlServer2005.cs" />
<Compile Include="MsSqlServer2008.cs" />
<Compile Include="MsSqlServer2012.cs" />
<Compile Include="MsSqlServer2014.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="MsSqlServer.cs" />
</ItemGroup>

View file

@ -0,0 +1,20 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WebsitePanel.Providers.Database.SqlServer", "WebsitePanel.Providers.Database.SqlServer.csproj", "{3744791D-C7B5-4818-8521-78EB5261CB34}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{3744791D-C7B5-4818-8521-78EB5261CB34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3744791D-C7B5-4818-8521-78EB5261CB34}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3744791D-C7B5-4818-8521-78EB5261CB34}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3744791D-C7B5-4818-8521-78EB5261CB34}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
EndGlobal

View file

@ -57,6 +57,7 @@
<MenuItem pageID="SpaceMsSql2005" resourceGroup="MsSQL2005"/>
<MenuItem pageID="SpaceMsSql2008" resourceGroup="MsSQL2008"/>
<MenuItem pageID="SpaceMsSql2012" resourceGroup="MsSQL2012"/>
<MenuItem pageID="SpaceMsSql2014" resourceGroup="MsSQL2014"/>
<MenuItem pageID="SpaceMySql4" resourceGroup="MySQL4"/>
<MenuItem pageID="SpaceMySql5" resourceGroup="MySQL5"/>
</MenuItems>
@ -115,6 +116,7 @@
<Icon pageID="SpaceMsSql2005" resourceGroup="MsSQL2005" imageUrl="icons/mssql_48.png"/>
<Icon pageID="SpaceMsSql2008" resourceGroup="MsSQL2008" imageUrl="icons/mssql_48.png"/>
<Icon pageID="SpaceMsSql2012" resourceGroup="MsSQL2012" imageUrl="icons/mssql_48.png"/>
<Icon pageID="SpaceMsSql2014" resourceGroup="MsSQL2014" imageUrl="icons/mssql_48.png"/>
<Icon pageID="SpaceMySql4" resourceGroup="MySQL4" imageUrl="icons/mysql_48.png"/>
<Icon pageID="SpaceMySql5" resourceGroup="MySQL5" imageUrl="icons/mysql_48.png"/>
<Icon pageID="SpaceOdbc" resourceGroup="OS" quota="OS.ODBC" imageUrl="icons/odbc_48.png"/>

View file

@ -417,6 +417,29 @@
</Content>
</Page>
<Page name="SpaceMsSql2014" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True">
<Content id="LeftPane">
<Module moduleDefinitionID="UserAccountMenu" title="UserMenu" container="Clear.ascx">
<ModuleData ref="UserMenu"/>
</Module>
<Module moduleDefinitionID="SpaceMenu" title="SpaceMenu" container="Clear.ascx">
<ModuleData ref="SpaceMenu"/>
</Module>
</Content>
<Content id="ContentPane">
<Module moduleDefinitionID="SqlDatabases" title="Sql2014Databases" icon="mssql_48.png" readOnlyRoles="PlatformCSR,ResellerCSR">
<Settings>
<Add name="GroupName" value="MsSQL2014" />
</Settings>
</Module>
<Module moduleDefinitionID="SqlUsers" title="Sql2014Users" icon="db_user_48.png" readOnlyRoles="PlatformCSR,ResellerCSR">
<Settings>
<Add name="GroupName" value="MsSQL2014" />
</Settings>
</Module>
</Content>
</Page>
<Page name="SpaceMySql4" roles="Administrator,Reseller,PlatformCSR,ResellerCSR,PlatformHelpdesk,ResellerHelpdesk,User" hidden="True">
<Content id="LeftPane">
<Module moduleDefinitionID="UserAccountMenu" title="UserMenu" container="Clear.ascx">

View file

@ -287,6 +287,12 @@
</data>
<data name="PageTitle.SpaceMsSql2012" xml:space="preserve">
<value>{user} - {space} - SQL Server 2012</value>
</data>
<data name="PageName.SpaceMsSql2014" xml:space="preserve">
<value>SQL Server 2014</value>
</data>
<data name="PageTitle.SpaceMsSql2014" xml:space="preserve">
<value>{user} - {space} - SQL Server 2014</value>
</data>
<data name="PageTitle.SpaceMsSql2005" xml:space="preserve">
<value>{user} - {space} - SQL Server 2005</value>

View file

@ -1854,6 +1854,24 @@
<data name="Quota.MsSQL2012.Users" xml:space="preserve">
<value>Users</value>
</data>
<data name="Quota.MsSQL2014.Backup" xml:space="preserve">
<value>Database Backups</value>
</data>
<data name="Quota.MsSQL2014.Databases" xml:space="preserve">
<value>Databases</value>
</data>
<data name="Quota.MsSQL2014.MaxDatabaseSize" xml:space="preserve">
<value>Max Database Size, MB</value>
</data>
<data name="Quota.MsSQL2014.Restore" xml:space="preserve">
<value>Database Restores</value>
</data>
<data name="Quota.MsSQL2014.Truncate" xml:space="preserve">
<value>Database Truncate</value>
</data>
<data name="Quota.MsSQL2014.Users" xml:space="preserve">
<value>Users</value>
</data>
<data name="Quota.MySQL5.Backup" xml:space="preserve">
<value>Database Backups</value>
</data>
@ -1905,6 +1923,9 @@
<data name="ResourceGroup.MsSQL2012" xml:space="preserve">
<value>SQL Server 2012</value>
</data>
<data name="ResourceGroup.MsSQL2014" xml:space="preserve">
<value>SQL Server 2014</value>
</data>
<data name="Quota.OS.MinimumTaskInterval" xml:space="preserve">
<value>Minimum Tasks Interval, minutes</value>
</data>
@ -2100,6 +2121,12 @@
<data name="ServiceItemType.MsSQL2012User" xml:space="preserve">
<value>MS SQL 2012 User</value>
</data>
<data name="ServiceItemType.MsSQL2014Database" xml:space="preserve">
<value>MS SQL 2014 Database</value>
</data>
<data name="ServiceItemType.MsSQL2014User" xml:space="preserve">
<value>MS SQL 2014 User</value>
</data>
<data name="ServiceItemType.MySQL4Database" xml:space="preserve">
<value>MySQL 4 Database</value>
</data>
@ -3274,6 +3301,9 @@
<data name="Quota.MsSQL2012.MaxLogSize" xml:space="preserve">
<value>Max Log Size, MB</value>
</data>
<data name="Quota.MsSQL2014.MaxLogSize" xml:space="preserve">
<value>Max Log Size, MB</value>
</data>
<data name="Error.EXCHANGE_UPDATE_MAILBOX_PERMISSIONS" xml:space="preserve">
<value>Error updating mailbox permissions. See audit log for more details.</value>
</data>
@ -4834,6 +4864,9 @@
<data name="ReportResourceGroup.MsSQL2012" xml:space="preserve">
<value>SQL Server 2012</value>
</data>
<data name="ReportResourceGroup.MsSQL2014" xml:space="preserve">
<value>SQL Server 2014</value>
</data>
<data name="WebAppGallery.ApplicationInstallationError" xml:space="preserve">
<value>Error while install application pack</value>
</data>

View file

@ -168,4 +168,7 @@
<data name="lclMSSQL2012Resources.Text" xml:space="preserve">
<value>Microsoft SQL 2012 Quotas</value>
</data>
<data name="lclMSSQL2014Resources.Text" xml:space="preserve">
<value>Microsoft SQL 2014 Quotas</value>
</data>
</root>

View file

@ -165,7 +165,7 @@
<th colspan="2">
<br />
<div class="FormButtonsBar">
<div class="FormSectionHeader"><asp:Localize ID="Localize3" runat="server" meta:resourcekey="lclMSSQL2012Resources" /></div>
<div class="FormSectionHeader"><asp:Localize ID="Localize8" runat="server" meta:resourcekey="lclMSSQL2012Resources" /></div>
</div>
</th>
</tr>
@ -179,6 +179,25 @@
</asp:Repeater>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="MsSQL2014" Visible="false">
<tr>
<th colspan="2">
<br />
<div class="FormButtonsBar">
<div class="FormSectionHeader"><asp:Localize ID="Localize7" runat="server" meta:resourcekey="lclMSSQL2014Resources" /></div>
</div>
</th>
</tr>
<asp:Repeater runat="server" ID="MsSQL2014_Quotas">
<ItemTemplate>
<tr>
<td class="Width20Pcs" style="white-space: nowrap;"><strong><%# GetSharedLocalizedString("Quota." + GetQuotaItemName((string)Container.DataItem)) %>:</strong></td>
<td><%# GetQuotaItemAllocatedValue((string)Container.DataItem) %></td>
</tr>
</ItemTemplate>
</asp:Repeater>
</asp:PlaceHolder>
<asp:PlaceHolder runat="server" ID="MySQL4" Visible="false">
<tr>
<th colspan="2">

View file

@ -1,10 +1,9 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:2.0.50727.3074
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
@ -157,15 +156,6 @@ namespace WebsitePanel.Ecommerce.Portal.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder MsSQL2008;
/// <summary>
/// MsSQL2012 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder MsSQL2012;
/// <summary>
/// Localize3 control.
/// </summary>
@ -184,6 +174,24 @@ namespace WebsitePanel.Ecommerce.Portal.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.Repeater MsSQL2008_Quotas;
/// <summary>
/// MsSQL2012 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder MsSQL2012;
/// <summary>
/// Localize8 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize8;
/// <summary>
/// MsSQL2012_Quotas control.
/// </summary>
@ -193,6 +201,33 @@ namespace WebsitePanel.Ecommerce.Portal.UserControls {
/// </remarks>
protected global::System.Web.UI.WebControls.Repeater MsSQL2012_Quotas;
/// <summary>
/// MsSQL2014 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.PlaceHolder MsSQL2014;
/// <summary>
/// Localize7 control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Localize Localize7;
/// <summary>
/// MsSQL2014_Quotas control.
/// </summary>
/// <remarks>
/// Auto-generated field.
/// To modify move field declaration from designer file to code-behind file.
/// </remarks>
protected global::System.Web.UI.WebControls.Repeater MsSQL2014_Quotas;
/// <summary>
/// MySQL4 control.
/// </summary>

View file

@ -303,6 +303,7 @@ namespace WebsitePanel.Portal
AddDatabaseVersion(cntx, ResourceGroups.MsSql2005, items, versions);
AddDatabaseVersion(cntx, ResourceGroups.MsSql2008, items, versions);
AddDatabaseVersion(cntx, ResourceGroups.MsSql2012, items, versions);
AddDatabaseVersion(cntx, ResourceGroups.MsSql2014, items, versions);
AddDatabaseVersion(cntx, ResourceGroups.MySql4, items, versions);
AddDatabaseVersion(cntx, ResourceGroups.MySql5, items, versions);
}

View file

@ -207,10 +207,12 @@ namespace WebsitePanel.Portal
sqlDatabases.AddRange(ES.Services.DatabaseServers.GetSqlDatabases(packageId, ResourceGroups.MsSql2005, false));
sqlDatabases.AddRange(ES.Services.DatabaseServers.GetSqlDatabases(packageId, ResourceGroups.MsSql2008, false));
sqlDatabases.AddRange(ES.Services.DatabaseServers.GetSqlDatabases(packageId, ResourceGroups.MsSql2012, false));
sqlDatabases.AddRange(ES.Services.DatabaseServers.GetSqlDatabases(packageId, ResourceGroups.MsSql2014, false));
sqlUsers.AddRange(ES.Services.DatabaseServers.GetSqlUsers(packageId, ResourceGroups.MsSql2000, false));
sqlUsers.AddRange(ES.Services.DatabaseServers.GetSqlUsers(packageId, ResourceGroups.MsSql2005, false));
sqlUsers.AddRange(ES.Services.DatabaseServers.GetSqlUsers(packageId, ResourceGroups.MsSql2008, false));
sqlUsers.AddRange(ES.Services.DatabaseServers.GetSqlUsers(packageId, ResourceGroups.MsSql2012, false));
sqlUsers.AddRange(ES.Services.DatabaseServers.GetSqlUsers(packageId, ResourceGroups.MsSql2014, false));
}
else if (driverName == "MySql")
{

View file

@ -170,7 +170,8 @@ namespace WebsitePanel.Portal
(resourceGroup.GroupName == ResourceGroups.MsSql2000)|
(resourceGroup.GroupName == ResourceGroups.MsSql2005)|
(resourceGroup.GroupName == ResourceGroups.MsSql2008)|
(resourceGroup.GroupName == ResourceGroups.MsSql2012)|
(resourceGroup.GroupName == ResourceGroups.MsSql2012) |
(resourceGroup.GroupName == ResourceGroups.MsSql2014) |
(resourceGroup.GroupName == ResourceGroups.MySql4)|
(resourceGroup.GroupName == ResourceGroups.MySql5)|
(resourceGroup.GroupName == ResourceGroups.Statistics)|

View file

@ -70,6 +70,7 @@ namespace WebsitePanel.Portal
versions.Add(ResourceGroups.MsSql2005);
versions.Add(ResourceGroups.MsSql2008);
versions.Add(ResourceGroups.MsSql2012);
versions.Add(ResourceGroups.MsSql2014);
FillDatabaseVersions(PanelSecurity.PackageId, ddlDatabaseVersion.Items, versions);
}

View file

@ -161,6 +161,8 @@ namespace WebsitePanel.Portal
PackageContext cntx = PackagesHelper.GetCachedPackageContext(PanelSecurity.PackageId);
// add SQL Server engines
if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2014))
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2014, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2014));
if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2012))
AddDatabaseEngine(DeploymentParameterWellKnownTag.Sql, ResourceGroups.MsSql2012, GetSharedLocalizedString("ResourceGroup." + ResourceGroups.MsSql2012));
if (cntx.Groups.ContainsKey(ResourceGroups.MsSql2008))