@@ -6,7 +6,8 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
6
6
{
7
7
public class MasterTemplateCreator : TemplateCreator
8
8
{
9
- public Template CreateLinkedMasterTemplate ( Template apiVersionSetTemplate ,
9
+ public Template CreateLinkedMasterTemplate ( CreatorConfig creatorConfig ,
10
+ Template apiVersionSetTemplate ,
10
11
Template productsTemplate ,
11
12
Template loggersTemplate ,
12
13
Template backendsTemplate ,
@@ -20,72 +21,73 @@ public Template CreateLinkedMasterTemplate(Template apiVersionSetTemplate,
20
21
Template masterTemplate = CreateEmptyTemplate ( ) ;
21
22
22
23
// add parameters
23
- masterTemplate . parameters = this . CreateMasterTemplateParameters ( true ) ;
24
+ masterTemplate . parameters = this . CreateMasterTemplateParameters ( creatorConfig ) ;
24
25
25
26
// add deployment resources that links to all resource files
26
27
List < TemplateResource > resources = new List < TemplateResource > ( ) ;
27
28
28
29
// apiVersionSet
29
30
if ( apiVersionSetTemplate != null )
30
31
{
31
- string apiVersionSetUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { fileNames . apiVersionSets } ')]" ;
32
+ string apiVersionSetUri = GenerateLinkedTemplateUri ( creatorConfig , fileNames . apiVersionSets ) ;
32
33
resources . Add ( this . CreateLinkedMasterTemplateResource ( "versionSetTemplate" , apiVersionSetUri , new string [ ] { } ) ) ;
33
34
}
34
35
35
36
// product
36
37
if ( productsTemplate != null )
37
38
{
38
- string productsUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { fileNames . products } ')]" ;
39
+ string productsUri = GenerateLinkedTemplateUri ( creatorConfig , fileNames . products ) ;
39
40
resources . Add ( this . CreateLinkedMasterTemplateResource ( "productsTemplate" , productsUri , new string [ ] { } ) ) ;
40
41
}
41
42
42
43
// logger
43
44
if ( loggersTemplate != null )
44
45
{
45
- string loggersUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { fileNames . loggers } ')]" ;
46
+ string loggersUri = GenerateLinkedTemplateUri ( creatorConfig , fileNames . loggers ) ;
46
47
resources . Add ( this . CreateLinkedMasterTemplateResource ( "loggersTemplate" , loggersUri , new string [ ] { } ) ) ;
47
48
}
48
49
49
50
// backend
50
51
if ( backendsTemplate != null )
51
52
{
52
- string backendsUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { fileNames . backends } ')]" ;
53
+ string backendsUri = GenerateLinkedTemplateUri ( creatorConfig , fileNames . backends ) ;
53
54
resources . Add ( this . CreateLinkedMasterTemplateResource ( "backendsTemplate" , backendsUri , new string [ ] { } ) ) ;
54
55
}
55
56
56
57
// authorizationServer
57
58
if ( authorizationServersTemplate != null )
58
59
{
59
- string authorizationServersUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { fileNames . authorizationServers } ')]" ;
60
+ string authorizationServersUri = GenerateLinkedTemplateUri ( creatorConfig , fileNames . authorizationServers ) ;
60
61
resources . Add ( this . CreateLinkedMasterTemplateResource ( "authorizationServersTemplate" , authorizationServersUri , new string [ ] { } ) ) ;
61
62
}
62
63
63
64
// each api has an associated api info class that determines whether the api is split and its dependencies on other resources
64
65
foreach ( LinkedMasterTemplateAPIInformation apiInfo in apiInformation )
65
66
{
66
- if ( apiInfo . isSplit == true )
67
+ if ( apiInfo . isSplit == true )
67
68
{
68
69
// add a deployment resource for both api template files
69
70
string originalAPIName = fileNameGenerator . GenerateOriginalAPIName ( apiInfo . name ) ;
70
71
string initialAPIDeploymentResourceName = $ "{ originalAPIName } -InitialAPITemplate";
71
72
string subsequentAPIDeploymentResourceName = $ "{ originalAPIName } -SubsequentAPITemplate";
72
73
73
74
string initialAPIFileName = fileNameGenerator . GenerateCreatorAPIFileName ( apiInfo . name , apiInfo . isSplit , true , apimServiceName ) ;
74
- string initialAPIUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { initialAPIFileName } ')]" ;
75
+ string initialAPIUri = GenerateLinkedTemplateUri ( creatorConfig , initialAPIFileName ) ;
75
76
string [ ] initialAPIDependsOn = CreateAPIResourceDependencies ( apiVersionSetTemplate , productsTemplate , loggersTemplate , backendsTemplate , authorizationServersTemplate , apiInfo ) ;
76
77
resources . Add ( this . CreateLinkedMasterTemplateResource ( initialAPIDeploymentResourceName , initialAPIUri , initialAPIDependsOn ) ) ;
77
78
78
79
string subsequentAPIFileName = fileNameGenerator . GenerateCreatorAPIFileName ( apiInfo . name , apiInfo . isSplit , false , apimServiceName ) ;
79
- string subsequentAPIUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { subsequentAPIFileName } ')]" ;
80
+ string subsequentAPIUri = GenerateLinkedTemplateUri ( creatorConfig , subsequentAPIFileName ) ;
80
81
string [ ] subsequentAPIDependsOn = new string [ ] { $ "[resourceId('Microsoft.Resources/deployments', '{ initialAPIDeploymentResourceName } ')]" } ;
81
82
resources . Add ( this . CreateLinkedMasterTemplateResource ( subsequentAPIDeploymentResourceName , subsequentAPIUri , subsequentAPIDependsOn ) ) ;
82
- } else
83
+ }
84
+ else
83
85
{
84
86
// add a deployment resource for the unified api template file
85
87
string originalAPIName = fileNameGenerator . GenerateOriginalAPIName ( apiInfo . name ) ;
86
88
string unifiedAPIDeploymentResourceName = $ "{ originalAPIName } -APITemplate";
87
89
string unifiedAPIFileName = fileNameGenerator . GenerateCreatorAPIFileName ( apiInfo . name , apiInfo . isSplit , true , apimServiceName ) ;
88
- string unifiedAPIUri = $ "[concat(parameters('LinkedTemplatesBaseUrl'), ' { unifiedAPIFileName } ')]" ;
90
+ string unifiedAPIUri = GenerateLinkedTemplateUri ( creatorConfig , unifiedAPIFileName ) ;
89
91
string [ ] unifiedAPIDependsOn = CreateAPIResourceDependencies ( apiVersionSetTemplate , productsTemplate , loggersTemplate , backendsTemplate , authorizationServersTemplate , apiInfo ) ;
90
92
resources . Add ( this . CreateLinkedMasterTemplateResource ( unifiedAPIDeploymentResourceName , unifiedAPIUri , unifiedAPIDependsOn ) ) ;
91
93
}
@@ -152,7 +154,7 @@ public MasterTemplateResource CreateLinkedMasterTemplateResource(string name, st
152
154
return masterTemplateResource ;
153
155
}
154
156
155
- public Dictionary < string , TemplateParameterProperties > CreateMasterTemplateParameters ( bool linked )
157
+ public Dictionary < string , TemplateParameterProperties > CreateMasterTemplateParameters ( CreatorConfig creatorConfig )
156
158
{
157
159
// used to create the parameter metatadata, etc (not value) for use in file with resources
158
160
// add parameters with metatdata properties
@@ -167,7 +169,7 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
167
169
} ;
168
170
parameters . Add ( "ApimServiceName" , apimServiceNameProperties ) ;
169
171
// add remote location of template files for linked option
170
- if ( linked == true )
172
+ if ( creatorConfig . linked == true )
171
173
{
172
174
TemplateParameterProperties linkedTemplatesBaseUrlProperties = new TemplateParameterProperties ( )
173
175
{
@@ -178,6 +180,18 @@ public Dictionary<string, TemplateParameterProperties> CreateMasterTemplateParam
178
180
type = "string"
179
181
} ;
180
182
parameters . Add ( "LinkedTemplatesBaseUrl" , linkedTemplatesBaseUrlProperties ) ;
183
+ if ( creatorConfig . linkedTemplatesUrlQueryString != null )
184
+ {
185
+ TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties ( )
186
+ {
187
+ metadata = new TemplateParameterMetadata ( )
188
+ {
189
+ description = "Query string for the URL of the repository"
190
+ } ,
191
+ type = "string"
192
+ } ;
193
+ parameters . Add ( "LinkedTemplatesUrlQueryString" , linkedTemplatesUrlQueryStringProperties ) ;
194
+ }
181
195
}
182
196
return parameters ;
183
197
}
@@ -202,6 +216,14 @@ public Template CreateMasterTemplateParameterValues(CreatorConfig creatorConfig)
202
216
value = creatorConfig . linkedTemplatesBaseUrl
203
217
} ;
204
218
parameters . Add ( "LinkedTemplatesBaseUrl" , linkedTemplatesBaseUrlProperties ) ;
219
+ if ( creatorConfig . linkedTemplatesUrlQueryString != null )
220
+ {
221
+ TemplateParameterProperties linkedTemplatesUrlQueryStringProperties = new TemplateParameterProperties ( )
222
+ {
223
+ value = creatorConfig . linkedTemplatesUrlQueryString
224
+ } ;
225
+ parameters . Add ( "LinkedTemplatesUrlQueryString" , linkedTemplatesUrlQueryStringProperties ) ;
226
+ }
205
227
}
206
228
masterTemplate . parameters = parameters ;
207
229
return masterTemplate ;
@@ -224,7 +246,7 @@ public async Task<bool> DetermineIfAPIDependsOnLoggerAsync(APIConfig api, FileRe
224
246
{
225
247
foreach ( KeyValuePair < string , OperationsConfig > operation in api . operations )
226
248
{
227
- string operationPolicy = operation . Value . policy != null ? await fileReader . RetrieveFileContentsAsync ( operation . Value . policy ) : "" ;
249
+ string operationPolicy = operation . Value . policy != null ? await fileReader . RetrieveFileContentsAsync ( operation . Value . policy ) : "" ;
228
250
if ( operationPolicy . Contains ( "logger" ) )
229
251
{
230
252
// capture operation policy dependent on logger
@@ -257,6 +279,11 @@ public async Task<bool> DetermineIfAPIDependsOnBackendAsync(APIConfig api, FileR
257
279
}
258
280
return false ;
259
281
}
282
+
283
+ public string GenerateLinkedTemplateUri ( CreatorConfig creatorConfig , string fileName )
284
+ {
285
+ return creatorConfig . linkedTemplatesUrlQueryString != null ? $ "[concat(parameters('LinkedTemplatesBaseUrl'), '{ fileName } ', parameters('LinkedTemplatesUrlQueryString'))]" : $ "[concat(parameters('LinkedTemplatesBaseUrl'), '{ fileName } ')]";
286
+ }
260
287
}
261
288
262
289
public class LinkedMasterTemplateAPIInformation
0 commit comments