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

Commit 07caa44

Browse files
committed
add resource type constants
1 parent e77dcb3 commit 07caa44

File tree

16 files changed

+95
-81
lines changed

16 files changed

+95
-81
lines changed

src/APIM_ARMTemplate/apimtemplate/Commands/Create.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public class CreateCommand : CommandLineApplication
1010
{
1111
public CreateCommand()
1212
{
13-
this.Name = Constants.CreateName;
14-
this.Description = Constants.CreateDescription;
13+
this.Name = GlobalConstants.CreateName;
14+
this.Description = GlobalConstants.CreateDescription;
1515

1616
// list command options
1717
CommandOption configFile = this.Option("--configFile <configFile>", "Config YAML file location", CommandOptionType.SingleValue).IsRequired();

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 43 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class ExtractCommand : CommandLineApplication
1414
{
1515
public ExtractCommand()
1616
{
17-
this.Name = Constants.ExtractName;
18-
this.Description = Constants.ExtractDescription;
17+
this.Name = GlobalConstants.ExtractName;
18+
this.Description = GlobalConstants.ExtractDescription;
1919

2020
var apiManagementName = this.Option("--name <apimname>", "API Management name", CommandOptionType.SingleValue);
2121
var resourceGroupName = this.Option("--resourceGroup <resourceGroup>", "Resource Group name", CommandOptionType.SingleValue);
@@ -67,12 +67,6 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
6767

6868
Console.WriteLine("{0} API's found ...", ((JContainer)oApi["value"]).Count.ToString());
6969

70-
// store api and operation policies as well as diagnostics for the time being in order to extract loggers correctly in case of a single api
71-
List<PolicyTemplateResource> policyResources = new List<PolicyTemplateResource>();
72-
List<DiagnosticTemplateResource> diagnosticResources = new List<DiagnosticTemplateResource>();
73-
// store product names for the time being in order to extract products correctly in case of a single api
74-
List<string> productNames = new List<string>();
75-
7670
List<TemplateResource> templateResources = new List<TemplateResource>();
7771

7872
for (int i = 0; i < ((JContainer)oApi["value"]).Count; i++)
@@ -176,8 +170,6 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
176170
operationPolicyResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis/operations', parameters('ApimServiceName'), '{oApiName}', '{operationResourceName}')]" };
177171

178172
templateResources.Add(operationPolicyResource);
179-
// add the operation policy resource to the list used to extract loggers later on
180-
policyResources.Add(operationPolicyResource);
181173
}
182174
catch (Exception)
183175
{
@@ -199,8 +191,6 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
199191
apiPoliciesResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{apiName}')]" };
200192

201193
templateResources.Add(apiPoliciesResource);
202-
// add the api policy resource to the list used to extract loggers later on
203-
policyResources.Add(apiPoliciesResource);
204194
}
205195
catch (Exception)
206196
{
@@ -219,16 +209,14 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
219209
{
220210
string apiProductName = ((JValue)item["name"]).Value.ToString();
221211
Console.WriteLine($" -- {apiProductName} Product found to {oApiName} API");
222-
ApiProductsTemplateResource apiProductsResource = JsonConvert.DeserializeObject<ApiProductsTemplateResource>(apiProducts);
223-
apiProductsResource.type = "Microsoft.ApiManagement/service/products/apis";
224-
apiProductsResource.name = $"[concat(parameters('ApimServiceName'), '/{apiProductName}/{oApiName}')]";
225-
apiProductsResource.apiVersion = "2018-06-01-preview";
226-
apiProductsResource.scale = null;
227-
apiProductsResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{oApiName}')]" };
212+
ProductAPITemplateResource productAPIResource = JsonConvert.DeserializeObject<ProductAPITemplateResource>(apiProducts);
213+
productAPIResource.type = ResourceTypeConstants.ProductAPI;
214+
productAPIResource.name = $"[concat(parameters('ApimServiceName'), '/{apiProductName}/{oApiName}')]";
215+
productAPIResource.apiVersion = "2018-06-01-preview";
216+
productAPIResource.scale = null;
217+
productAPIResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{oApiName}')]" };
228218

229-
templateResources.Add(apiProductsResource);
230-
// add the product name to the list used to extract products later on
231-
productNames.Add(apiProductName);
219+
templateResources.Add(productAPIResource);
232220

233221
}
234222
}
@@ -251,7 +239,7 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
251239

252240
DiagnosticTemplateResource diagnosticResource = diagnostic.ToObject<DiagnosticTemplateResource>();
253241
diagnosticResource.name = $"[concat(parameters('ApimServiceName'), '/{oApiName}/{diagnosticName}')]";
254-
diagnosticResource.type = "Microsoft.ApiManagement/service/apis/diagnostics";
242+
diagnosticResource.type = ResourceTypeConstants.APIDiagnostic;
255243
diagnosticResource.apiVersion = "2018-06-01-preview";
256244
diagnosticResource.scale = null;
257245
diagnosticResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{oApiName}')]" };
@@ -263,8 +251,6 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
263251
}
264252

265253
templateResources.Add(diagnosticResource);
266-
// add the diagnostic resource to the list used to extract loggers later on
267-
diagnosticResources.Add(diagnosticResource);
268254

269255
}
270256

@@ -280,9 +266,9 @@ private void GenerateARMTemplate(string apimname, string resourceGroup, string f
280266
}
281267

282268
// extract resources that do not fall under api. Pass in the single api name and associated resources for the single api case
283-
GenerateProductsARMTemplate(apimname, resourceGroup, fileFolder, singleApiName, productNames);
284-
GenerateNamedValuesTemplate(resourceGroup, apimname, fileFolder, singleApiName, policyResources, diagnosticResources);
285-
GenerateLoggerTemplate(resourceGroup, apimname, fileFolder, singleApiName, policyResources, diagnosticResources);
269+
GenerateProductsARMTemplate(apimname, resourceGroup, fileFolder, singleApiName, templateResources);
270+
GenerateNamedValuesTemplate(resourceGroup, apimname, fileFolder, singleApiName, templateResources);
271+
GenerateLoggerTemplate(resourceGroup, apimname, fileFolder, singleApiName, templateResources);
286272

287273
if (singleApiName == null)
288274
{
@@ -334,11 +320,14 @@ private void GenerateVersionSetARMTemplate(string apimname, string resourceGroup
334320
fileWriter.WriteJSONToFile(armTemplate, filePath);
335321
}
336322

337-
private void GenerateProductsARMTemplate(string apimname, string resourceGroup, string fileFolder, string singleApiName, List<string> productNames)
323+
private void GenerateProductsARMTemplate(string apimname, string resourceGroup, string fileFolder, string singleApiName, List<TemplateResource> armTemplateResources)
338324
{
339325
APIExtractor apiExtractor = new APIExtractor();
340326
Template armTemplate = GenerateEmptyTemplateWithParameters();
341327

328+
// isolate product api associations in the case of a single api extraction
329+
var productAPIResources = armTemplateResources.Where(resource => resource.type == ResourceTypeConstants.ProductAPI);
330+
342331
List<TemplateResource> templateResources = new List<TemplateResource>();
343332

344333
string products = apiExtractor.GetProducts(apimname, resourceGroup).Result;
@@ -362,8 +351,8 @@ private void GenerateProductsARMTemplate(string apimname, string resourceGroup,
362351
productsDetailsResource.name = $"[concat(parameters('ApimServiceName'), '/{productName}')]";
363352
productsDetailsResource.apiVersion = "2018-06-01-preview";
364353

365-
// only extract the product if this is a full extraction, or in the case of a single api, if it is found in productNames(all prodct names associated with the specific api)
366-
if (singleApiName == null || productNames.SingleOrDefault(p => p == productName) != null)
354+
// only extract the product if this is a full extraction, or in the case of a single api, if it is found in products associated with the api
355+
if (singleApiName == null || productAPIResources.SingleOrDefault(p => p.name.Contains(productName)) != null)
367356
{
368357
templateResources.Add(productsDetailsResource);
369358
}
@@ -407,13 +396,17 @@ private List<TemplateResource> GenerateSchemasARMTemplate(string apimServiceName
407396
return templateResources;
408397
}
409398

410-
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<PolicyTemplateResource> policyResources, List<DiagnosticTemplateResource> diagnosticResources)
399+
private async void GenerateLoggerTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<TemplateResource> armTemplateResources)
411400
{
412401
Console.WriteLine("------------------------------------------");
413402
Console.WriteLine("Getting loggers from service");
414403
LoggerExtractor loggerExtractor = new LoggerExtractor();
415404
Template armTemplate = GenerateEmptyTemplateWithParameters();
416405

406+
// isolate product api associations in the case of a single api extraction
407+
var diagnosticResources = armTemplateResources.Where(resource => resource.type == ResourceTypeConstants.APIDiagnostic);
408+
var policyResources = armTemplateResources.Where(resource => (resource.type == ResourceTypeConstants.APIPolicy || resource.type == ResourceTypeConstants.APIOperationPolicy));
409+
417410
List<TemplateResource> templateResources = new List<TemplateResource>();
418411

419412
string loggers = loggerExtractor.GetLoggers(apimname, resourceGroup).Result;
@@ -425,16 +418,17 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
425418
string fullLoggerResource = await loggerExtractor.GetLogger(apimname, resourceGroup, loggerName);
426419
LoggerTemplateResource loggerResource = JsonConvert.DeserializeObject<LoggerTemplateResource>(fullLoggerResource);
427420
loggerResource.name = $"[concat(parameters('ApimServiceName'), '/{loggerName}')]";
428-
loggerResource.type = "Microsoft.ApiManagement/service/loggers";
421+
loggerResource.type = ResourceTypeConstants.Logger;
429422
loggerResource.apiVersion = "2018-06-01-preview";
430423
loggerResource.scale = null;
431424

432-
if(singleApiName == null)
425+
if (singleApiName == null)
433426
{
434427
// if the user is extracting all apis, extract all the loggers
435428
Console.WriteLine("'{0}' Logger found", loggerName);
436429
templateResources.Add(loggerResource);
437-
} else
430+
}
431+
else
438432
{
439433
// if the user is extracting a single api, extract the loggers referenced by its diagnostics and api policies
440434
bool isReferencedInPolicy = false;
@@ -453,7 +447,7 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
453447
isReferencedInPolicy = true;
454448
}
455449
}
456-
if(isReferencedInPolicy == true || isReferencedInDiagnostic == true)
450+
if (isReferencedInPolicy == true || isReferencedInDiagnostic == true)
457451
{
458452
// logger was used in policy or diagnostic, extract it
459453
Console.WriteLine("'{0}' Logger found", loggerName);
@@ -467,7 +461,7 @@ private async void GenerateLoggerTemplate(string resourceGroup, string apimname,
467461
fileWriter.WriteJSONToFile(armTemplate, @fileFolder + Path.DirectorySeparatorChar + apimname + "-loggers.json");
468462
}
469463

470-
private async void GenerateNamedValuesTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<PolicyTemplateResource> policyResources, List<DiagnosticTemplateResource> diagnosticResources)
464+
private async void GenerateNamedValuesTemplate(string resourceGroup, string apimname, string fileFolder, string singleApiName, List<TemplateResource> armTemplateResources)
471465
{
472466
Console.WriteLine("------------------------------------------");
473467
Console.WriteLine("Getting named values from service");
@@ -482,16 +476,26 @@ private async void GenerateNamedValuesTemplate(string resourceGroup, string apim
482476
foreach (var extractedProperty in oProperties["value"])
483477
{
484478
string propertyName = ((JValue)extractedProperty["name"]).Value.ToString();
485-
Console.WriteLine("'{0}' Named value found", propertyName);
486479

487480
string fullLoggerResource = await propertyExtractor.GetProperty(apimname, resourceGroup, propertyName);
488481
PropertyTemplateResource propertyTemplateResource = JsonConvert.DeserializeObject<PropertyTemplateResource>(fullLoggerResource);
489482
propertyTemplateResource.name = $"[concat(parameters('ApimServiceName'), '/{propertyName}')]";
490-
propertyTemplateResource.type = "Microsoft.ApiManagement/service/properties";
483+
propertyTemplateResource.type = ResourceTypeConstants.Property;
491484
propertyTemplateResource.apiVersion = "2018-06-01-preview";
492485
propertyTemplateResource.scale = null;
493486

494-
templateResources.Add(propertyTemplateResource);
487+
if (singleApiName == null)
488+
{
489+
// if the user is executing a full extraction, extract all the loggers
490+
Console.WriteLine("'{0}' Named value found", propertyName);
491+
templateResources.Add(propertyTemplateResource);
492+
}
493+
else
494+
{
495+
// if the user is executing a single api, extract all the named values used in the template resources
496+
Console.WriteLine("'{0}' Named value found", propertyName);
497+
templateResources.Add(propertyTemplateResource);
498+
};
495499
}
496500

497501
armTemplate.resources = templateResources.ToArray();

src/APIM_ARMTemplate/apimtemplate/Common/Constants.cs renamed to src/APIM_ARMTemplate/apimtemplate/Common/Constants/GlobalConstants.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11

22
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common
33
{
4-
internal static class Constants
4+
internal static class GlobalConstants
55
{
66
public const string AppShortName = "apimtemplate";
77
public const string AppLongName = "API Management Template";
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+

2+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common
3+
{
4+
internal static class ResourceTypeConstants
5+
{
6+
public const string API = "Microsoft.ApiManagement/service/apis";
7+
public const string APIVersionSet = "Microsoft.ApiManagement/service/api-version-sets";
8+
public const string APIDiagnostic = "Microsoft.ApiManagement/service/apis/diagnostics";
9+
public const string APIOperation = "Microsoft.ApiManagement/service/apis/operations";
10+
public const string APIOperationPolicy = "Microsoft.ApiManagement/service/apis/operations/policies";
11+
public const string APIPolicy = "Microsoft.ApiManagement/service/apis/policies";
12+
public const string APISchema = "Microsoft.ApiManagement/service/apis/schemas";
13+
public const string Logger = "Microsoft.ApiManagement/service/loggers";
14+
public const string ProductAPI = "Microsoft.ApiManagement/service/products/apis";
15+
public const string Product = "Microsoft.ApiManagement/service/products";
16+
public const string Property = "Microsoft.ApiManagement/service/properties";
17+
}
18+
}

src/APIM_ARMTemplate/apimtemplate/Common/TemplateModels/ApiProductsTemplate.cs

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/APITemplateCreator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public async Task<APITemplateResource> CreateInitialAPITemplateResourceAsync(Cre
8686
APITemplateResource apiTemplateResource = new APITemplateResource()
8787
{
8888
name = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}')]",
89-
type = "Microsoft.ApiManagement/service/apis",
89+
type = ResourceTypeConstants.API,
9090
apiVersion = "2018-06-01-preview",
9191
properties = new APITemplateProperties()
9292
{
@@ -127,7 +127,7 @@ public APITemplateResource CreateSubsequentAPITemplateResource(CreatorConfig cre
127127
{
128128
// create api resource with properties
129129
string subsequentAPIName = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}')]";
130-
string subsequentAPIType = "Microsoft.ApiManagement/service/apis";
130+
string subsequentAPIType = ResourceTypeConstants.API;
131131
Uri uriResult;
132132
bool isUrl = Uri.TryCreate(creatorConfig.api.openApiSpec, UriKind.Absolute, out uriResult) && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
133133
// used to escape sequences in local swagger json

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/APIVersionSetTemplateCreator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public Template CreateAPIVersionSetTemplate(CreatorConfig creatorConfig)
2929
APIVersionSetTemplateResource apiVersionSetTemplateResource = new APIVersionSetTemplateResource()
3030
{
3131
name = $"[concat(parameters('ApimServiceName'), '/{versionSetId}')]",
32-
type = "Microsoft.ApiManagement/service/api-version-sets",
32+
type = ResourceTypeConstants.APIVersionSet,
3333
apiVersion = "2018-06-01-preview",
3434
properties = new APIVersionSetProperties()
3535
{

src/APIM_ARMTemplate/apimtemplate/Creator/TemplateCreators/DiagnosticTemplateCreator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public DiagnosticTemplateResource CreateAPIDiagnosticTemplateResource(CreatorCon
1010
DiagnosticTemplateResource diagnosticTemplateResource = new DiagnosticTemplateResource()
1111
{
1212
name = $"[concat(parameters('ApimServiceName'), '/{creatorConfig.api.name}/{creatorConfig.api.diagnostic.name}')]",
13-
type = "Microsoft.ApiManagement/service/apis/diagnostics",
13+
type = ResourceTypeConstants.APIDiagnostic,
1414
apiVersion = "2018-06-01-preview",
1515
properties = new DiagnosticTemplateProperties()
1616
{

0 commit comments

Comments
 (0)