Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit df3f40e

Browse files
authored
Merge branch 'master' into master
2 parents ec161fa + 4842e1d commit df3f40e

File tree

2 files changed

+61
-27
lines changed

2 files changed

+61
-27
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,13 +139,10 @@ public CreateCommand()
139139
// write parameters to outputLocation
140140
fileWriter.WriteJSONToFile(templateParameters, String.Concat(creatorConfig.outputLocation, fileNames.parameters));
141141
Console.WriteLine("Templates written to output location");
142-
Console.WriteLine("Press any key to exit process:");
143-
#if DEBUG
144-
Console.ReadKey();
145-
#endif
142+
146143
}
147144
return 0;
148145
});
149146
}
150147
}
151-
}
148+
}

src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors/APIExtractor.cs

Lines changed: 59 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -192,35 +192,23 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
192192
operationResource.apiVersion = GlobalConstants.APIVersion;
193193
operationResource.scale = null;
194194

195-
// add api and schemas to operation dependsOn, if necessary
195+
// add operation dependencies and fix sample value if necessary
196196
List<string> operationDependsOn = new List<string>() { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{oApiName}')]" };
197197
foreach (OperationTemplateRepresentation operationTemplateRepresentation in operationResource.properties.request.representations)
198198
{
199-
if (operationTemplateRepresentation.schemaId != null)
200-
{
201-
string dependsOn = $"[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{oApiName}', '{operationTemplateRepresentation.schemaId}')]";
202-
// add value to list if schema has not already been added
203-
if (!operationDependsOn.Exists(o => o == dependsOn))
204-
{
205-
operationDependsOn.Add(dependsOn);
206-
}
207-
}
199+
AddSchemaDependencyToOperationIfNecessary(oApiName, operationDependsOn, operationTemplateRepresentation);
200+
ArmEscapeSampleValueIfNecessary(operationTemplateRepresentation);
208201
}
202+
209203
foreach (OperationsTemplateResponse operationTemplateResponse in operationResource.properties.responses)
210204
{
211205
foreach (OperationTemplateRepresentation operationTemplateRepresentation in operationTemplateResponse.representations)
212206
{
213-
if (operationTemplateRepresentation.schemaId != null)
214-
{
215-
string dependsOn = $"[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{oApiName}', '{operationTemplateRepresentation.schemaId}')]";
216-
// add value to list if schema has not already been added
217-
if (!operationDependsOn.Exists(o => o == dependsOn))
218-
{
219-
operationDependsOn.Add(dependsOn);
220-
}
221-
}
207+
AddSchemaDependencyToOperationIfNecessary(oApiName, operationDependsOn, operationTemplateRepresentation);
208+
ArmEscapeSampleValueIfNecessary(operationTemplateRepresentation);
222209
}
223210
}
211+
224212
operationResource.dependsOn = operationDependsOn.ToArray();
225213
templateResources.Add(operationResource);
226214

@@ -342,7 +330,28 @@ public async Task<Template> GenerateAPIsARMTemplateAsync(string apimname, string
342330
return armTemplate;
343331
}
344332

345-
public static JObject FormatoApi(string singleApiName, JObject oApi)
333+
private static void ArmEscapeSampleValueIfNecessary(OperationTemplateRepresentation operationTemplateRepresentation)
334+
{
335+
if (!string.IsNullOrWhiteSpace(operationTemplateRepresentation.sample) && operationTemplateRepresentation.contentType == "application/json" && JToken.Parse(operationTemplateRepresentation.sample).Type == JTokenType.Array)
336+
{
337+
operationTemplateRepresentation.sample = "[" + operationTemplateRepresentation.sample;
338+
}
339+
}
340+
341+
private static void AddSchemaDependencyToOperationIfNecessary(string oApiName, List<string> operationDependsOn, OperationTemplateRepresentation operationTemplateRepresentation)
342+
{
343+
if (operationTemplateRepresentation.schemaId != null)
344+
{
345+
string dependsOn = $"[resourceId('Microsoft.ApiManagement/service/apis/schemas', parameters('ApimServiceName'), '{oApiName}', '{operationTemplateRepresentation.schemaId}')]";
346+
// add value to list if schema has not already been added
347+
if (!operationDependsOn.Exists(o => o == dependsOn))
348+
{
349+
operationDependsOn.Add(dependsOn);
350+
}
351+
}
352+
}
353+
354+
private static JObject FormatoApi(string singleApiName, JObject oApi)
346355
{
347356
if (singleApiName != null)
348357
{
@@ -364,7 +373,7 @@ public static JObject FormatoApi(string singleApiName, JObject oApi)
364373
return oApi;
365374
}
366375

367-
public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apimServiceName, string apiName, string resourceGroup, string fileFolder)
376+
private async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apimServiceName, string apiName, string resourceGroup, string fileFolder)
368377
{
369378
List<TemplateResource> templateResources = new List<TemplateResource>();
370379

@@ -382,7 +391,7 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
382391
// pull returned schema and convert to template resource
383392
RESTReturnedSchemaTemplate restReturnedSchemaTemplate = JsonConvert.DeserializeObject<RESTReturnedSchemaTemplate>(schemaDetails);
384393
SchemaTemplateResource schemaDetailsResource = JsonConvert.DeserializeObject<SchemaTemplateResource>(schemaDetails);
385-
schemaDetailsResource.properties.document.value = JsonConvert.SerializeObject(restReturnedSchemaTemplate.properties.document);
394+
schemaDetailsResource.properties.document.value = GetSchemaValueBasedOnContentType(restReturnedSchemaTemplate.properties);
386395
schemaDetailsResource.name = $"[concat(parameters('ApimServiceName'), '/{apiName}/{schemaName}')]";
387396
schemaDetailsResource.apiVersion = GlobalConstants.APIVersion;
388397
schemaDetailsResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{apiName}')]" };
@@ -392,5 +401,33 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
392401
}
393402
return templateResources;
394403
}
404+
405+
private string GetSchemaValueBasedOnContentType(RESTReturnedSchemaTemplateProperties schemaTemplateProperties)
406+
{
407+
if (!(schemaTemplateProperties.document is JToken))
408+
{
409+
return JsonConvert.SerializeObject(schemaTemplateProperties.document);
410+
}
411+
412+
var schemaJson = schemaTemplateProperties.document as JToken;
413+
414+
switch (schemaTemplateProperties.contentType.ToLowerInvariant())
415+
{
416+
case "application/vnd.ms-azure-apim.swagger.definitions+json":
417+
if (schemaJson["definitions"] != null && schemaJson.Count() == 1)
418+
{
419+
schemaJson = schemaJson["definitions"];
420+
}
421+
break;
422+
case "application/vnd.ms-azure-apim.xsd+xml":
423+
if (schemaJson["value"] != null && schemaJson.Count() == 1)
424+
{
425+
return schemaJson["value"].ToString();
426+
}
427+
break;
428+
}
429+
430+
return JsonConvert.SerializeObject(schemaJson);
431+
}
395432
}
396433
}

0 commit comments

Comments
 (0)