Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
ff86473
#663 Add ability to add Horizon to the Dockerized environment
DmitryKolinchuk Jul 27, 2022
208431f
#663 Move DockerSettings outside Modules
DmitryKolinchuk Jul 27, 2022
a674522
#663 Refactor the code
DmitryKolinchuk Jul 28, 2022
9a91811
#663 Improve service creation and environment data generation
DmitryKolinchuk Aug 10, 2022
d3634f2
#674 Do not show ungrouped Sitecore instances after installing, reins…
DmitryKolinchuk Aug 11, 2022
d77e575
#663 Improve module selection
DmitryKolinchuk Aug 11, 2022
680e74b
#681 Update tags on the "Select topology and tag" step after changing…
DmitryKolinchuk Aug 11, 2022
d10c18c
#662 Change compatible Solr version for Sitecore 9.3.0 to the correct…
DmitryKolinchuk Aug 12, 2022
7afd1cb
#676 Prevent using of invalid file name chars in the site name
DmitryKolinchuk Aug 12, 2022
b345c84
#663 Remove unnecessary code from HorizonYamlFileGeneratorHelper.Gene…
DmitryKolinchuk Aug 12, 2022
27ce2a3
Merge pull request #679 from Sitecore/feature/663-Add_ability_to_add_…
AndreyFilchenkov Aug 16, 2022
72a8e4d
Merge pull request #680 from Sitecore/feature/674-Ungrouped_Sitecore_…
AndreyFilchenkov Aug 16, 2022
a5ed92e
Merge pull request #682 from Sitecore/feature/681-Tags_are_not_update…
AndreyFilchenkov Aug 16, 2022
0d8d227
Merge pull request #683 from Sitecore/feature/662-SIM_thinks_that_Sol…
AndreyFilchenkov Aug 16, 2022
b278629
Merge pull request #684 from Sitecore/feature/676-SIM_is_crashed_when…
AndreyFilchenkov Aug 16, 2022
3bfb545
#678 Process hostnames dynamically in GenerateCertificatesProcessor
DmitryKolinchuk Aug 17, 2022
08f3501
#664 #665 Add support of Publishing Service and JSS in the Dockerized…
DmitryKolinchuk Aug 17, 2022
9b6b8ae
#678 Remove unnecessary null check
DmitryKolinchuk Aug 17, 2022
21bdd38
Merge pull request #690 from Sitecore/feature/678-Rework_GenerateCert…
AndreyFilchenkov Aug 17, 2022
4a4ce05
Merge pull request #691 from Sitecore/feature/664_665-Add_ability_to_…
AndreyFilchenkov Sep 7, 2022
43ca792
#692 Validate name illigal characters when using Install Sitecore XP …
DmitryKolinchuk Sep 8, 2022
59a6419
#692 Fix the indentation of the InstanceName text box code line
DmitryKolinchuk Sep 8, 2022
46040cc
Merge pull request #693 from Sitecore/feature/692-Validation_for_Ille…
AndreyFilchenkov Sep 8, 2022
241674a
#694 Allow to install only Publishing Service 6.0.0 and later
DmitryKolinchuk Sep 14, 2022
0cca001
#694 Disable the support of Publishing Service till the current issue…
DmitryKolinchuk Sep 14, 2022
49315ae
Merge pull request #695 from Sitecore/feature/694-Deploying_Publishin…
AndreyFilchenkov Sep 14, 2022
5620dfd
Merge pull request #696 from Sitecore/develop
AndreyFilchenkov Sep 21, 2022
7687a40
#698 Update hosts when unchecking the Include topology and tag to the…
DmitryKolinchuk Sep 23, 2022
ade2e15
Merge pull request #699 from Sitecore/feature/698-The_value_of_Projec…
AndreyFilchenkov Sep 23, 2022
37d07c5
Merge pull request #700 from Sitecore/develop
AndreyFilchenkov Sep 27, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions src/SIM.ContainerInstaller/DockerSettings.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
using System.ComponentModel;

namespace SIM.ContainerInstaller
{
public enum Topology
{
Xm1,
Xp0,
Xp1
}

public enum Module
{
[Description("SXA")]
SXA,
[Description("JSS")]
JSS,
[Description("Horizon")]
Horizon,
[Description("Publishing Service")]
PublishingService
}

public enum Service
{
MsSql,
MsSqlInit,
Solr,
SolrInit,
Id,
Cd,
Cm,
Hrz
}

public static class DockerSettings
{
public const string SitecoreContainerRegistryHost = "scr.sitecore.com";
public const string SitecoreModuleNamespace = "sxp/modules";
public const string SpeImage = "spe-assets";
public const string SitecoreSpeImage = "sitecore-spe-assets";
public const string SxaXm1Image = "sxa-xm1-assets";
public const string SitecoreSxaXm1Image = "sitecore-sxa-xm1-assets";
public const string SxaXpImage = "sxa-xp1-assets";
public const string SitecoreSxaXpImage = "sitecore-sxa-xp1-assets";
public const string SitecoreHorizonImage = "sitecore-horizon";
public const string SitecoreHorizonAssetsXm1Image = "horizon-integration-xm1-assets";
public const string SitecoreHorizonAssetsXp0Image = "horizon-integration-xp0-assets";
public const string SitecoreHorizonAssetsXp1Image = "horizon-integration-xp1-assets";
public const string JssXm1Image = "jss-xm1-assets";
public const string JssXpImage = "jss-xp1-assets";
public const string SitecoreHeadlessServicesXm1Image = "sitecore-headless-services-xm1-assets";
public const string SitecoreHeadlessServicesXpImage = "sitecore-headless-services-xp1-assets";
public const string SpsImage = "sitecore-sps";
public const string SpsAssetsXm1Image = "sitecore-sps-integration-xm1-assets";
public const string SpsAssetsXp0Image = "sitecore-sps-integration-xp0-assets";
public const string SpsAssetsXp1Image = "sitecore-sps-integration-xp1-assets";

public static string SpeImagePath = $"{SitecoreModuleNamespace}/{SpeImage}";
public static string SitecoreSpeImagePath = $"{SitecoreModuleNamespace}/{SitecoreSpeImage}";
public static string SxaXm1ImagePath = $"{SitecoreModuleNamespace}/{SxaXm1Image}";
public static string SitecoreSxaXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXm1Image}";
public static string SxaXpImagePath = $"{SitecoreModuleNamespace}/{SxaXpImage}";
public static string SitecoreSxaXpImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXpImage}";
public static string SitecoreHorizonImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonImage}";
public static string SitecoreHorizonAssetsXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXm1Image}";
public static string SitecoreHorizonAssetsXp0ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp0Image}";
public static string SitecoreHorizonAssetsXp1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp1Image}";
public static string JssXm1ImagePath = $"{SitecoreModuleNamespace}/{JssXm1Image}";
public static string JssXpImagePath = $"{SitecoreModuleNamespace}/{JssXpImage}";
public static string SitecoreHeadlessServicesXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHeadlessServicesXm1Image}";
public static string SitecoreHeadlessServicesXpImagePath = $"{SitecoreModuleNamespace}/{SitecoreHeadlessServicesXpImage}";
public static string SpsImagePath = $"{SitecoreModuleNamespace}/{SpsImage}";
public static string SpsAssetsXm1ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXm1Image}";
public static string SpsAssetsXp0ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXp0Image}";
public static string SpsAssetsXp1ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXp1Image}";

public const string DockerComposeFileName = "docker-compose.yml";
public const string DockerComposeOverrideFileName = "docker-compose.override.yml";
// These values must be the same as in the "SIM.Pipelines.Install.Containers.GenerateEnvironmentData.siteTypes" list.
public const string HorizonServiceName = "hrz";
public const string SpsMsSqlInitServiceName = "sps-mssql-init";
public const string SpsServiceName = "sps";
// Horizon only works correctly if its, Identity Server and Content Management instances belong to the same site (domain) as mentioned in Horizon Installation Guide.
public const string HostNameTemplate = "{0}.{1}";
public const string HostNameKeyPattern = "([A-Za-z0-9]{1,3})_HOST";
}
}
185 changes: 120 additions & 65 deletions src/SIM.ContainerInstaller/DockerfileGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using SIM.ContainerInstaller.Modules;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;

namespace SIM.ContainerInstaller
Expand All @@ -10,6 +11,7 @@ namespace SIM.ContainerInstaller
public class DockerfileGenerator
{
private const string DockerfileFileName = "Dockerfile";
private const string IdDockerfileFilePath = @"docker\build\id";
private const string CmDockerfileFilePath = @"docker\build\cm";
private const string CdDockerfileFilePath = @"docker\build\cd";
private const string MsSqlDockerfileFilePath = @"docker\build\mssql";
Expand All @@ -36,6 +38,10 @@ public void Generate(string path, List<IDockerfileGeneratorHelper> helpers, int
{
GenerateSolrInitDockerfile(path, helpers);
}
if (ShouldIdDockerfileBeGenerated(shortVersion, helpers))
{
GenerateIdDockerfile(path, helpers);
}
if (ShouldCdDockerfileBeGenerated(shortVersion, topology))
{
GenerateCdDockerfile(path, helpers);
Expand Down Expand Up @@ -82,6 +88,15 @@ private bool ShouldSolrInitDockerfileBeGenerated(int shortVersion)
return false;
}

private bool ShouldIdDockerfileBeGenerated(int shortVersion, List<IDockerfileGeneratorHelper> helpers)
{
if (shortVersion >= 100)
{
return true;
}
return false;
}

private bool ShouldCdDockerfileBeGenerated(int shortVersion, Topology topology)
{
if (shortVersion >= 100 && (topology == Topology.Xm1 || topology == Topology.Xp1))
Expand All @@ -100,15 +115,31 @@ private bool ShouldCmDockerfileBeGenerated(int shortVersion)
return false;
}

private StringBuilder GenerateDockerfile(StringBuilder args, StringBuilder froms, StringBuilder commands)
private StringBuilder GenerateBaseDockerfile(StringBuilder args, StringBuilder froms, StringBuilder commands)
{
return new StringBuilder().Append(@"# escape=`").AppendLine().AppendLine()
.Append(@"ARG BASE_IMAGE").AppendLine()
.Append(args).AppendLine()
.Append(froms)
.Append(@"FROM ${BASE_IMAGE}").AppendLine().AppendLine()
.Append("SHELL [\"powershell\", \"-Command\", \"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';\"]").AppendLine().AppendLine()
.Append(commands);
StringBuilder dockerfile = new StringBuilder();
dockerfile.Append(@"# escape=`").AppendLine().AppendLine()
.Append(@"ARG BASE_IMAGE").AppendLine();

if (!string.IsNullOrEmpty(args.ToString()))
{
dockerfile.Append(args).AppendLine();
}

if (!string.IsNullOrEmpty(froms.ToString()))
{
dockerfile.Append(froms);
}

dockerfile.Append(@"FROM ${BASE_IMAGE}").AppendLine().AppendLine();

if (!string.IsNullOrEmpty(commands.ToString()))
{
dockerfile.Append("SHELL [\"powershell\", \"-Command\", \"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';\"]")
.AppendLine().AppendLine().Append(commands);
}

return dockerfile;
}

public void GenerateSpecificDockerfile(string rootFolderPath, string dockerfileFilePath, StringBuilder dockerfileText)
Expand All @@ -118,92 +149,116 @@ public void GenerateSpecificDockerfile(string rootFolderPath, string dockerfileF

using (StreamWriter writer = new StreamWriter(Path.Combine(path, DockerfileFileName)))
{
writer.WriteLine(dockerfileText);
writer.WriteLine(dockerfileText.ToString().TrimEnd());
}
}

private void GenerateMsSqlDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
public void GenerateDockerfile(Service service, string rootFolderPath, string dockerfileFilePath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
switch (service)
{
args.Append(helper.GenerateMsSqlArgs());
froms.Append(helper.GenerateMsSqlFroms());
commands.Append(helper.GenerateMsSqlCommands());
case Service.MsSql:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateMsSqlArgs());
froms.Append(helper.GenerateMsSqlFroms());
commands.Append(helper.GenerateMsSqlCommands());
}
break;
case Service.MsSqlInit:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateMsSqlInitArgs());
froms.Append(helper.GenerateMsSqlInitFroms());
commands.Append(helper.GenerateMsSqlInitCommands());
}
break;
case Service.Solr:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateSolrArgs());
froms.Append(helper.GenerateSolrFroms());
commands.Append(helper.GenerateSolrCommands());
}
break;
case Service.SolrInit:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateSolrInitArgs());
froms.Append(helper.GenerateSolrInitFroms());
commands.Append(helper.GenerateSolrInitCommands());
}
break;
case Service.Id:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateIdArgs());
froms.Append(helper.GenerateIdFroms());
commands.Append(helper.GenerateIdCommands());
}
break;
case Service.Cd:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateCdArgs());
froms.Append(helper.GenerateCdFroms());
commands.Append(helper.GenerateCdCommands());
}
break;
case Service.Cm:
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateCmArgs());
froms.Append(helper.GenerateCmFroms());
commands.Append(helper.GenerateCmCommands());
}
break;
default:
break;
}
GenerateSpecificDockerfile(rootFolderPath, MsSqlDockerfileFilePath, GenerateDockerfile(args, froms, commands));

if (args.Length > 0 || froms.Length > 0 || commands.Length > 0)
{
GenerateSpecificDockerfile(rootFolderPath, dockerfileFilePath, GenerateBaseDockerfile(args, froms, commands));
}
}

private void GenerateMsSqlDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
GenerateDockerfile(Service.MsSql, rootFolderPath, MsSqlDockerfileFilePath, helpers);
}

private void GenerateMsSqlInitDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateMsSqlInitArgs());
froms.Append(helper.GenerateMsSqlInitFroms());
commands.Append(helper.GenerateMsSqlInitCommands());
}
GenerateSpecificDockerfile(rootFolderPath, MsSqlInitDockerfileFilePath, GenerateDockerfile(args, froms, commands));
GenerateDockerfile(Service.MsSqlInit, rootFolderPath, MsSqlInitDockerfileFilePath, helpers);
}

private void GenerateSolrDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateSolrArgs());
froms.Append(helper.GenerateSolrFroms());
commands.Append(helper.GenerateSolrCommands());
}
GenerateSpecificDockerfile(rootFolderPath, SolrDockerfileFilePath, GenerateDockerfile(args, froms, commands));
GenerateDockerfile(Service.Solr, rootFolderPath, SolrDockerfileFilePath, helpers);
}

private void GenerateSolrInitDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateSolrInitArgs());
froms.Append(helper.GenerateSolrInitFroms());
commands.Append(helper.GenerateSolrInitCommands());
}
GenerateSpecificDockerfile(rootFolderPath, SolrInitDockerfileFilePath, GenerateDockerfile(args, froms, commands));
GenerateDockerfile(Service.SolrInit, rootFolderPath, SolrInitDockerfileFilePath, helpers);
}

private void GenerateIdDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
GenerateDockerfile(Service.Id, rootFolderPath, IdDockerfileFilePath, helpers);
}

private void GenerateCdDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateCdArgs());
froms.Append(helper.GenerateCdFroms());
commands.Append(helper.GenerateCdCommands());
}
GenerateSpecificDockerfile(rootFolderPath, CdDockerfileFilePath, GenerateDockerfile(args, froms, commands));
GenerateDockerfile(Service.Cd, rootFolderPath, CdDockerfileFilePath, helpers);
}

private void GenerateCmDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
{
StringBuilder args = new StringBuilder();
StringBuilder froms = new StringBuilder();
StringBuilder commands = new StringBuilder();
foreach (IDockerfileGeneratorHelper helper in helpers)
{
args.Append(helper.GenerateCmArgs());
froms.Append(helper.GenerateCmFroms());
commands.Append(helper.GenerateCmCommands());
}
GenerateSpecificDockerfile(rootFolderPath, CmDockerfileFilePath, GenerateDockerfile(args, froms, commands));
GenerateDockerfile(Service.Cm, rootFolderPath, CmDockerfileFilePath, helpers);
}

private void CreateFolder(string path)
Expand Down
Loading