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

Commit 515ad2a

Browse files
UmairSyedRupengLiu
authored andcommitted
fix for extractor to associate groups to products (#251)
1 parent 854fdcc commit 515ad2a

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

src/APIM_ARMTemplate/apimtemplate/Common/Constants/ResourceTypeConstants.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ internal static class ResourceTypeConstants
1919
public const string Logger = "Microsoft.ApiManagement/service/loggers";
2020
public const string ProductAPI = "Microsoft.ApiManagement/service/products/apis";
2121
public const string Product = "Microsoft.ApiManagement/service/products";
22+
public const string ProductGroup = "Microsoft.ApiManagement/service/products/groups";
2223
public const string ProductTag = "Microsoft.ApiManagement/service/products/tags";
2324
public const string ProductPolicy = "Microsoft.ApiManagement/service/products/policies";
2425
public const string Property = "Microsoft.ApiManagement/service/properties";
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using System.Collections.Generic;
2+
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common
3+
{
4+
public class ProductGroupsTemplateResource
5+
{
6+
public List<ProductGroupsValue> value { get; set; }
7+
}
8+
9+
public class ProductGroupsValue : TemplateResource
10+
{
11+
public ProductGroupTemplateProperties properties { get; set; }
12+
}
13+
14+
public class ProductGroupTemplateProperties
15+
{
16+
public string description { get; set; }
17+
public string displayName { get; set; }
18+
public string type { get; set; }
19+
public string? externalId { get; set; }
20+
public bool builtIn { get; set; }
21+
}
22+
}

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

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,16 @@ public async Task<string> GetProductPolicyAsync(string ApiManagementName, string
4747
return await CallApiManagementAsync(azToken, requestUrl);
4848
}
4949

50+
public async Task<string> GetProductGroupsAsync(string ApiManagementName, string ResourceGroupName, string ProductName)
51+
{
52+
(string azToken, string azSubId) = await auth.GetAccessToken();
53+
54+
string requestUrl = string.Format("{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/products/{4}/groups?api-version={5}",
55+
baseUrl, azSubId, ResourceGroupName, ApiManagementName, ProductName, GlobalConstants.APIVersion);
5056

57+
return await CallApiManagementAsync(azToken, requestUrl);
58+
}
59+
5160
public async Task<string> GetProductTagsAsync(string ApiManagementName, string ResourceGroupName, string ProductName)
5261
{
5362
(string azToken, string azSubId) = await auth.GetAccessToken();
@@ -57,7 +66,7 @@ public async Task<string> GetProductTagsAsync(string ApiManagementName, string R
5766

5867
return await CallApiManagementAsync(azToken, requestUrl);
5968
}
60-
69+
6170
public async Task<Template> GenerateProductsARMTemplateAsync(string apimname, string resourceGroup, string singleApiName, List<TemplateResource> apiTemplateResources, string policyXMLBaseUrl, string fileFolder)
6271
{
6372
Console.WriteLine("------------------------------------------");
@@ -88,6 +97,9 @@ public async Task<Template> GenerateProductsARMTemplateAsync(string apimname, st
8897
productsTemplateResource.name = $"[concat(parameters('ApimServiceName'), '/{productName}')]";
8998
productsTemplateResource.apiVersion = GlobalConstants.APIVersion;
9099

100+
string productGroupDetails = await GetProductGroupsAsync(apimname, resourceGroup, productName);
101+
ProductGroupsTemplateResource productGroupsDetails = JsonConvert.DeserializeObject<ProductGroupsTemplateResource>(productGroupDetails, settings);
102+
91103
// 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
92104
if (singleApiName == null || productAPIResources.SingleOrDefault(p => p.name.Contains($"/{productName}/")) != null)
93105
{
@@ -97,13 +109,21 @@ public async Task<Template> GenerateProductsARMTemplateAsync(string apimname, st
97109
// add product policy resource to template
98110
try
99111
{
112+
var productResourceId = new string[] { $"[resourceId('Microsoft.ApiManagement/service/products', parameters('ApimServiceName'), '{productName}')]" };
113+
foreach (ProductGroupsValue ProductGroup in productGroupsDetails.value)
114+
{
115+
ProductGroup.name = $"[concat(parameters('ApimServiceName'), '/{productName}/{ProductGroup.name}')]";
116+
ProductGroup.apiVersion = GlobalConstants.APIVersion;
117+
ProductGroup.dependsOn = productResourceId;
118+
templateResources.Add(ProductGroup);
119+
}
100120
string productPolicy = await GetProductPolicyAsync(apimname, resourceGroup, productName);
101121
Console.WriteLine($" - Product policy found for {productName} product");
102122
PolicyTemplateResource productPolicyResource = JsonConvert.DeserializeObject<PolicyTemplateResource>(productPolicy);
103123
productPolicyResource.name = $"[concat(parameters('ApimServiceName'), '/{productName}/policy')]";
104124
productPolicyResource.apiVersion = GlobalConstants.APIVersion;
105125
productPolicyResource.scale = null;
106-
productPolicyResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/products', parameters('ApimServiceName'), '{productName}')]" };
126+
productPolicyResource.dependsOn = productResourceId;
107127

108128
// write policy xml content to file and point to it if policyXMLBaseUrl is provided
109129
if (policyXMLBaseUrl != null)

src/APIM_ARMTemplate/apimtemplate/apimtemplate.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
<OutputType>Exe</OutputType>
55
<TargetFramework>netcoreapp2.1</TargetFramework>
66
<ProjectGuid>{B5183465-2BC1-4206-9C9F-5AC9615AC941}</ProjectGuid>
7+
<LangVersion>preview</LangVersion>
78
</PropertyGroup>
89

910
<ItemGroup>

0 commit comments

Comments
 (0)