Skip to content

Commit d06e386

Browse files
Merge pull request #701 from Sitecore/rc/1.15.0
Rc/1.15.0
2 parents c5cf40d + 37d07c5 commit d06e386

37 files changed

+1648
-407
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
using System.ComponentModel;
2+
3+
namespace SIM.ContainerInstaller
4+
{
5+
public enum Topology
6+
{
7+
Xm1,
8+
Xp0,
9+
Xp1
10+
}
11+
12+
public enum Module
13+
{
14+
[Description("SXA")]
15+
SXA,
16+
[Description("JSS")]
17+
JSS,
18+
[Description("Horizon")]
19+
Horizon,
20+
[Description("Publishing Service")]
21+
PublishingService
22+
}
23+
24+
public enum Service
25+
{
26+
MsSql,
27+
MsSqlInit,
28+
Solr,
29+
SolrInit,
30+
Id,
31+
Cd,
32+
Cm,
33+
Hrz
34+
}
35+
36+
public static class DockerSettings
37+
{
38+
public const string SitecoreContainerRegistryHost = "scr.sitecore.com";
39+
public const string SitecoreModuleNamespace = "sxp/modules";
40+
public const string SpeImage = "spe-assets";
41+
public const string SitecoreSpeImage = "sitecore-spe-assets";
42+
public const string SxaXm1Image = "sxa-xm1-assets";
43+
public const string SitecoreSxaXm1Image = "sitecore-sxa-xm1-assets";
44+
public const string SxaXpImage = "sxa-xp1-assets";
45+
public const string SitecoreSxaXpImage = "sitecore-sxa-xp1-assets";
46+
public const string SitecoreHorizonImage = "sitecore-horizon";
47+
public const string SitecoreHorizonAssetsXm1Image = "horizon-integration-xm1-assets";
48+
public const string SitecoreHorizonAssetsXp0Image = "horizon-integration-xp0-assets";
49+
public const string SitecoreHorizonAssetsXp1Image = "horizon-integration-xp1-assets";
50+
public const string JssXm1Image = "jss-xm1-assets";
51+
public const string JssXpImage = "jss-xp1-assets";
52+
public const string SitecoreHeadlessServicesXm1Image = "sitecore-headless-services-xm1-assets";
53+
public const string SitecoreHeadlessServicesXpImage = "sitecore-headless-services-xp1-assets";
54+
public const string SpsImage = "sitecore-sps";
55+
public const string SpsAssetsXm1Image = "sitecore-sps-integration-xm1-assets";
56+
public const string SpsAssetsXp0Image = "sitecore-sps-integration-xp0-assets";
57+
public const string SpsAssetsXp1Image = "sitecore-sps-integration-xp1-assets";
58+
59+
public static string SpeImagePath = $"{SitecoreModuleNamespace}/{SpeImage}";
60+
public static string SitecoreSpeImagePath = $"{SitecoreModuleNamespace}/{SitecoreSpeImage}";
61+
public static string SxaXm1ImagePath = $"{SitecoreModuleNamespace}/{SxaXm1Image}";
62+
public static string SitecoreSxaXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXm1Image}";
63+
public static string SxaXpImagePath = $"{SitecoreModuleNamespace}/{SxaXpImage}";
64+
public static string SitecoreSxaXpImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXpImage}";
65+
public static string SitecoreHorizonImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonImage}";
66+
public static string SitecoreHorizonAssetsXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXm1Image}";
67+
public static string SitecoreHorizonAssetsXp0ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp0Image}";
68+
public static string SitecoreHorizonAssetsXp1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp1Image}";
69+
public static string JssXm1ImagePath = $"{SitecoreModuleNamespace}/{JssXm1Image}";
70+
public static string JssXpImagePath = $"{SitecoreModuleNamespace}/{JssXpImage}";
71+
public static string SitecoreHeadlessServicesXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHeadlessServicesXm1Image}";
72+
public static string SitecoreHeadlessServicesXpImagePath = $"{SitecoreModuleNamespace}/{SitecoreHeadlessServicesXpImage}";
73+
public static string SpsImagePath = $"{SitecoreModuleNamespace}/{SpsImage}";
74+
public static string SpsAssetsXm1ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXm1Image}";
75+
public static string SpsAssetsXp0ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXp0Image}";
76+
public static string SpsAssetsXp1ImagePath = $"{SitecoreModuleNamespace}/{SpsAssetsXp1Image}";
77+
78+
public const string DockerComposeFileName = "docker-compose.yml";
79+
public const string DockerComposeOverrideFileName = "docker-compose.override.yml";
80+
// These values must be the same as in the "SIM.Pipelines.Install.Containers.GenerateEnvironmentData.siteTypes" list.
81+
public const string HorizonServiceName = "hrz";
82+
public const string SpsMsSqlInitServiceName = "sps-mssql-init";
83+
public const string SpsServiceName = "sps";
84+
// Horizon only works correctly if its, Identity Server and Content Management instances belong to the same site (domain) as mentioned in Horizon Installation Guide.
85+
public const string HostNameTemplate = "{0}.{1}";
86+
public const string HostNameKeyPattern = "([A-Za-z0-9]{1,3})_HOST";
87+
}
88+
}

src/SIM.ContainerInstaller/DockerfileGenerator.cs

Lines changed: 120 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using SIM.ContainerInstaller.Modules;
33
using System.Collections.Generic;
44
using System.IO;
5+
using System.Linq;
56
using System.Text;
67

78
namespace SIM.ContainerInstaller
@@ -10,6 +11,7 @@ namespace SIM.ContainerInstaller
1011
public class DockerfileGenerator
1112
{
1213
private const string DockerfileFileName = "Dockerfile";
14+
private const string IdDockerfileFilePath = @"docker\build\id";
1315
private const string CmDockerfileFilePath = @"docker\build\cm";
1416
private const string CdDockerfileFilePath = @"docker\build\cd";
1517
private const string MsSqlDockerfileFilePath = @"docker\build\mssql";
@@ -36,6 +38,10 @@ public void Generate(string path, List<IDockerfileGeneratorHelper> helpers, int
3638
{
3739
GenerateSolrInitDockerfile(path, helpers);
3840
}
41+
if (ShouldIdDockerfileBeGenerated(shortVersion, helpers))
42+
{
43+
GenerateIdDockerfile(path, helpers);
44+
}
3945
if (ShouldCdDockerfileBeGenerated(shortVersion, topology))
4046
{
4147
GenerateCdDockerfile(path, helpers);
@@ -82,6 +88,15 @@ private bool ShouldSolrInitDockerfileBeGenerated(int shortVersion)
8288
return false;
8389
}
8490

91+
private bool ShouldIdDockerfileBeGenerated(int shortVersion, List<IDockerfileGeneratorHelper> helpers)
92+
{
93+
if (shortVersion >= 100)
94+
{
95+
return true;
96+
}
97+
return false;
98+
}
99+
85100
private bool ShouldCdDockerfileBeGenerated(int shortVersion, Topology topology)
86101
{
87102
if (shortVersion >= 100 && (topology == Topology.Xm1 || topology == Topology.Xp1))
@@ -100,15 +115,31 @@ private bool ShouldCmDockerfileBeGenerated(int shortVersion)
100115
return false;
101116
}
102117

103-
private StringBuilder GenerateDockerfile(StringBuilder args, StringBuilder froms, StringBuilder commands)
118+
private StringBuilder GenerateBaseDockerfile(StringBuilder args, StringBuilder froms, StringBuilder commands)
104119
{
105-
return new StringBuilder().Append(@"# escape=`").AppendLine().AppendLine()
106-
.Append(@"ARG BASE_IMAGE").AppendLine()
107-
.Append(args).AppendLine()
108-
.Append(froms)
109-
.Append(@"FROM ${BASE_IMAGE}").AppendLine().AppendLine()
110-
.Append("SHELL [\"powershell\", \"-Command\", \"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';\"]").AppendLine().AppendLine()
111-
.Append(commands);
120+
StringBuilder dockerfile = new StringBuilder();
121+
dockerfile.Append(@"# escape=`").AppendLine().AppendLine()
122+
.Append(@"ARG BASE_IMAGE").AppendLine();
123+
124+
if (!string.IsNullOrEmpty(args.ToString()))
125+
{
126+
dockerfile.Append(args).AppendLine();
127+
}
128+
129+
if (!string.IsNullOrEmpty(froms.ToString()))
130+
{
131+
dockerfile.Append(froms);
132+
}
133+
134+
dockerfile.Append(@"FROM ${BASE_IMAGE}").AppendLine().AppendLine();
135+
136+
if (!string.IsNullOrEmpty(commands.ToString()))
137+
{
138+
dockerfile.Append("SHELL [\"powershell\", \"-Command\", \"$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';\"]")
139+
.AppendLine().AppendLine().Append(commands);
140+
}
141+
142+
return dockerfile;
112143
}
113144

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

119150
using (StreamWriter writer = new StreamWriter(Path.Combine(path, DockerfileFileName)))
120151
{
121-
writer.WriteLine(dockerfileText);
152+
writer.WriteLine(dockerfileText.ToString().TrimEnd());
122153
}
123154
}
124155

125-
private void GenerateMsSqlDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
156+
public void GenerateDockerfile(Service service, string rootFolderPath, string dockerfileFilePath, List<IDockerfileGeneratorHelper> helpers)
126157
{
127158
StringBuilder args = new StringBuilder();
128159
StringBuilder froms = new StringBuilder();
129160
StringBuilder commands = new StringBuilder();
130-
foreach (IDockerfileGeneratorHelper helper in helpers)
161+
switch (service)
131162
{
132-
args.Append(helper.GenerateMsSqlArgs());
133-
froms.Append(helper.GenerateMsSqlFroms());
134-
commands.Append(helper.GenerateMsSqlCommands());
163+
case Service.MsSql:
164+
foreach (IDockerfileGeneratorHelper helper in helpers)
165+
{
166+
args.Append(helper.GenerateMsSqlArgs());
167+
froms.Append(helper.GenerateMsSqlFroms());
168+
commands.Append(helper.GenerateMsSqlCommands());
169+
}
170+
break;
171+
case Service.MsSqlInit:
172+
foreach (IDockerfileGeneratorHelper helper in helpers)
173+
{
174+
args.Append(helper.GenerateMsSqlInitArgs());
175+
froms.Append(helper.GenerateMsSqlInitFroms());
176+
commands.Append(helper.GenerateMsSqlInitCommands());
177+
}
178+
break;
179+
case Service.Solr:
180+
foreach (IDockerfileGeneratorHelper helper in helpers)
181+
{
182+
args.Append(helper.GenerateSolrArgs());
183+
froms.Append(helper.GenerateSolrFroms());
184+
commands.Append(helper.GenerateSolrCommands());
185+
}
186+
break;
187+
case Service.SolrInit:
188+
foreach (IDockerfileGeneratorHelper helper in helpers)
189+
{
190+
args.Append(helper.GenerateSolrInitArgs());
191+
froms.Append(helper.GenerateSolrInitFroms());
192+
commands.Append(helper.GenerateSolrInitCommands());
193+
}
194+
break;
195+
case Service.Id:
196+
foreach (IDockerfileGeneratorHelper helper in helpers)
197+
{
198+
args.Append(helper.GenerateIdArgs());
199+
froms.Append(helper.GenerateIdFroms());
200+
commands.Append(helper.GenerateIdCommands());
201+
}
202+
break;
203+
case Service.Cd:
204+
foreach (IDockerfileGeneratorHelper helper in helpers)
205+
{
206+
args.Append(helper.GenerateCdArgs());
207+
froms.Append(helper.GenerateCdFroms());
208+
commands.Append(helper.GenerateCdCommands());
209+
}
210+
break;
211+
case Service.Cm:
212+
foreach (IDockerfileGeneratorHelper helper in helpers)
213+
{
214+
args.Append(helper.GenerateCmArgs());
215+
froms.Append(helper.GenerateCmFroms());
216+
commands.Append(helper.GenerateCmCommands());
217+
}
218+
break;
219+
default:
220+
break;
135221
}
136-
GenerateSpecificDockerfile(rootFolderPath, MsSqlDockerfileFilePath, GenerateDockerfile(args, froms, commands));
222+
223+
if (args.Length > 0 || froms.Length > 0 || commands.Length > 0)
224+
{
225+
GenerateSpecificDockerfile(rootFolderPath, dockerfileFilePath, GenerateBaseDockerfile(args, froms, commands));
226+
}
227+
}
228+
229+
private void GenerateMsSqlDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
230+
{
231+
GenerateDockerfile(Service.MsSql, rootFolderPath, MsSqlDockerfileFilePath, helpers);
137232
}
138233

139234
private void GenerateMsSqlInitDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
140235
{
141-
StringBuilder args = new StringBuilder();
142-
StringBuilder froms = new StringBuilder();
143-
StringBuilder commands = new StringBuilder();
144-
foreach (IDockerfileGeneratorHelper helper in helpers)
145-
{
146-
args.Append(helper.GenerateMsSqlInitArgs());
147-
froms.Append(helper.GenerateMsSqlInitFroms());
148-
commands.Append(helper.GenerateMsSqlInitCommands());
149-
}
150-
GenerateSpecificDockerfile(rootFolderPath, MsSqlInitDockerfileFilePath, GenerateDockerfile(args, froms, commands));
236+
GenerateDockerfile(Service.MsSqlInit, rootFolderPath, MsSqlInitDockerfileFilePath, helpers);
151237
}
152238

153239
private void GenerateSolrDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
154240
{
155-
StringBuilder args = new StringBuilder();
156-
StringBuilder froms = new StringBuilder();
157-
StringBuilder commands = new StringBuilder();
158-
foreach (IDockerfileGeneratorHelper helper in helpers)
159-
{
160-
args.Append(helper.GenerateSolrArgs());
161-
froms.Append(helper.GenerateSolrFroms());
162-
commands.Append(helper.GenerateSolrCommands());
163-
}
164-
GenerateSpecificDockerfile(rootFolderPath, SolrDockerfileFilePath, GenerateDockerfile(args, froms, commands));
241+
GenerateDockerfile(Service.Solr, rootFolderPath, SolrDockerfileFilePath, helpers);
165242
}
166243

167244
private void GenerateSolrInitDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
168245
{
169-
StringBuilder args = new StringBuilder();
170-
StringBuilder froms = new StringBuilder();
171-
StringBuilder commands = new StringBuilder();
172-
foreach (IDockerfileGeneratorHelper helper in helpers)
173-
{
174-
args.Append(helper.GenerateSolrInitArgs());
175-
froms.Append(helper.GenerateSolrInitFroms());
176-
commands.Append(helper.GenerateSolrInitCommands());
177-
}
178-
GenerateSpecificDockerfile(rootFolderPath, SolrInitDockerfileFilePath, GenerateDockerfile(args, froms, commands));
246+
GenerateDockerfile(Service.SolrInit, rootFolderPath, SolrInitDockerfileFilePath, helpers);
247+
}
248+
249+
private void GenerateIdDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
250+
{
251+
GenerateDockerfile(Service.Id, rootFolderPath, IdDockerfileFilePath, helpers);
179252
}
180253

181254
private void GenerateCdDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
182255
{
183-
StringBuilder args = new StringBuilder();
184-
StringBuilder froms = new StringBuilder();
185-
StringBuilder commands = new StringBuilder();
186-
foreach (IDockerfileGeneratorHelper helper in helpers)
187-
{
188-
args.Append(helper.GenerateCdArgs());
189-
froms.Append(helper.GenerateCdFroms());
190-
commands.Append(helper.GenerateCdCommands());
191-
}
192-
GenerateSpecificDockerfile(rootFolderPath, CdDockerfileFilePath, GenerateDockerfile(args, froms, commands));
256+
GenerateDockerfile(Service.Cd, rootFolderPath, CdDockerfileFilePath, helpers);
193257
}
194258

195259
private void GenerateCmDockerfile(string rootFolderPath, List<IDockerfileGeneratorHelper> helpers)
196260
{
197-
StringBuilder args = new StringBuilder();
198-
StringBuilder froms = new StringBuilder();
199-
StringBuilder commands = new StringBuilder();
200-
foreach (IDockerfileGeneratorHelper helper in helpers)
201-
{
202-
args.Append(helper.GenerateCmArgs());
203-
froms.Append(helper.GenerateCmFroms());
204-
commands.Append(helper.GenerateCmCommands());
205-
}
206-
GenerateSpecificDockerfile(rootFolderPath, CmDockerfileFilePath, GenerateDockerfile(args, froms, commands));
261+
GenerateDockerfile(Service.Cm, rootFolderPath, CmDockerfileFilePath, helpers);
207262
}
208263

209264
private void CreateFolder(string path)

0 commit comments

Comments
 (0)