Skip to content

Commit 27ce2a3

Browse files
Merge pull request #679 from Sitecore/feature/663-Add_ability_to_add_Horizon_to_the_Dockerized_environment
Feature/663 add ability to add horizon to the dockerized environment
2 parents 388f704 + b345c84 commit 27ce2a3

21 files changed

+882
-168
lines changed

src/SIM.ContainerInstaller/Modules/DockerSettings.cs renamed to src/SIM.ContainerInstaller/DockerSettings.cs

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.ComponentModel;
22

3-
namespace SIM.ContainerInstaller.Modules
3+
namespace SIM.ContainerInstaller
44
{
55
public enum Topology
66
{
@@ -21,6 +21,18 @@ public enum Module
2121
PublishingService
2222
}
2323

24+
public enum Service
25+
{
26+
MsSql,
27+
MsSqlInit,
28+
Solr,
29+
SolrInit,
30+
Id,
31+
Cd,
32+
Cm,
33+
Hrz
34+
}
35+
2436
public static class DockerSettings
2537
{
2638
public const string SitecoreContainerRegistryHost = "scr.sitecore.com";
@@ -33,6 +45,10 @@ public static class DockerSettings
3345
public const string SitecoreSxaXm1Image = "sitecore-sxa-xm1-assets";
3446
public const string SxaXpImage = "sxa-xp1-assets";
3547
public const string SitecoreSxaXpImage = "sitecore-sxa-xp1-assets";
48+
public const string SitecoreHorizonImage = "sitecore-horizon";
49+
public const string SitecoreHorizonAssetsXm1Image = "horizon-integration-xm1-assets";
50+
public const string SitecoreHorizonAssetsXp0Image = "horizon-integration-xp0-assets";
51+
public const string SitecoreHorizonAssetsXp1Image = "horizon-integration-xp1-assets";
3652

3753
public static string SitecoreToolsImagePath = $"{SitecoreToolsNamespace}/{SitecoreToolsImage}";
3854
public static string SpeImagePath = $"{SitecoreModuleNamespace}/{SpeImage}";
@@ -41,5 +57,17 @@ public static class DockerSettings
4157
public static string SitecoreSxaXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXm1Image}";
4258
public static string SxaXpImagePath = $"{SitecoreModuleNamespace}/{SxaXpImage}";
4359
public static string SitecoreSxaXpImagePath = $"{SitecoreModuleNamespace}/{SitecoreSxaXpImage}";
60+
public static string SitecoreHorizonImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonImage}";
61+
public static string SitecoreHorizonAssetsXm1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXm1Image}";
62+
public static string SitecoreHorizonAssetsXp0ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp0Image}";
63+
public static string SitecoreHorizonAssetsXp1ImagePath = $"{SitecoreModuleNamespace}/{SitecoreHorizonAssetsXp1Image}";
64+
65+
public const string DockerComposeFileName = "docker-compose.yml";
66+
public const string DockerComposeOverrideFileName = "docker-compose.override.yml";
67+
// This value must be the same as in the "SIM.Pipelines.Install.Containers.GenerateEnvironmentData.siteTypes" list.
68+
public const string HorizonServiceName = "hrz";
69+
// Horizon only works correctly if its, Identity Server and Content Management instances belong to the same site (domain) as mentioned in Horizon Installation Guide.
70+
public const string HostNameTemplate = "{0}.{1}";
71+
public const string HostNameKeyPattern = "([A-Za-z0-9]{1,3})_HOST";
4472
}
45-
}
73+
}

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)

src/SIM.ContainerInstaller/EnvModel.cs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -247,6 +247,48 @@ public string SxaVersion
247247
this[SxaVersionName] = value;
248248
}
249249
}
250+
251+
public const string HorizonHostName = "HORIZON_HOST";
252+
253+
public string HorizonHost
254+
{
255+
get
256+
{
257+
return this[HorizonHostName];
258+
}
259+
set
260+
{
261+
this[HorizonHostName] = value;
262+
}
263+
}
264+
265+
public const string HorizonVersionName = "HORIZON_VERSION";
266+
267+
public string HorizonVersion
268+
{
269+
get
270+
{
271+
return this[HorizonVersionName];
272+
}
273+
set
274+
{
275+
this[HorizonVersionName] = value;
276+
}
277+
}
278+
279+
public const string HorizonAssetsVersionName = "HORIZON_ASSETS_VERSION";
280+
281+
public string HorizonAssetsVersion
282+
{
283+
get
284+
{
285+
return this[HorizonAssetsVersionName];
286+
}
287+
set
288+
{
289+
this[HorizonAssetsVersionName] = value;
290+
}
291+
}
250292
#endregion
251293

252294
public string this[string Name]

0 commit comments

Comments
 (0)