22using SIM . ContainerInstaller . Modules ;
33using System . Collections . Generic ;
44using System . IO ;
5+ using System . Linq ;
56using System . Text ;
67
78namespace 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