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

Commit e92a60b

Browse files
authored
[Extractor]Parameterize serviceUrl (#332)
1 parent b6b9073 commit e92a60b

File tree

6 files changed

+220
-46
lines changed

6 files changed

+220
-46
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,10 @@ public class TemplateParameterProperties {
2222
public string value { get; set; }
2323
}
2424

25+
public class TemplateServiceUrlProperties: TemplateParameterProperties {
26+
public new object value { get; set; }
27+
}
28+
2529
public class TemplateParameterMetadata {
2630
public string description { get; set; }
2731
}

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

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,19 @@ public async Task<string> GetOperationTagsAsync(string ApiManagementName, string
7474
return await CallApiManagementAsync(azToken, requestUrl);
7575
}
7676

77+
public async Task<string> GetAPIServiceUrl(string ApiManagementName, string ResourceGroupName, string ApiName)
78+
{
79+
(string azToken, string azSubId) = await auth.GetAccessToken();
80+
81+
string requestUrl = string.Format("{0}/subscriptions/{1}/resourceGroups/{2}/providers/Microsoft.ApiManagement/service/{3}/apis/{4}?api-version={5}",
82+
baseUrl, azSubId, ResourceGroupName, ApiManagementName, ApiName, GlobalConstants.APIVersion);
83+
84+
string apiDetails = await CallApiManagementAsync(azToken, requestUrl);
85+
JObject oApiDetails = JObject.Parse(apiDetails);
86+
APITemplateResource apiResource = JsonConvert.DeserializeObject<APITemplateResource>(apiDetails);
87+
return apiResource.properties.serviceUrl;
88+
}
89+
7790
public async Task<string> GetAPIDetailsAsync(string ApiManagementName, string ResourceGroupName, string ApiName)
7891
{
7992
(string azToken, string azSubId) = await auth.GetAccessToken();
@@ -191,7 +204,7 @@ public async Task<string> GetAPISchemaDetailsAsync(string ApiManagementName, str
191204
public async Task<List<TemplateResource>> GenerateSingleAPIResourceAsync(string apiName, Extractor exc)
192205
{
193206
List<TemplateResource> templateResources = new List<TemplateResource>();
194-
string apimname = exc.sourceApimName, resourceGroup = exc.resourceGroup, fileFolder = exc.fileFolder, policyXMLBaseUrl = exc.policyXMLBaseUrl, policyXMLSasToken = exc.policyXMLSasToken;
207+
string apimname = exc.sourceApimName, resourceGroup = exc.resourceGroup, fileFolder = exc.fileFolder, policyXMLBaseUrl = exc.policyXMLBaseUrl, policyXMLSasToken = exc.policyXMLSasToken;
195208
string apiDetails = await GetAPIDetailsAsync(apimname, resourceGroup, apiName);
196209

197210
Console.WriteLine("------------------------------------------");
@@ -207,6 +220,11 @@ public async Task<List<TemplateResource>> GenerateSingleAPIResourceAsync(string
207220
apiResource.apiVersion = GlobalConstants.APIVersion;
208221
apiResource.scale = null;
209222

223+
if (exc.paramServiceUrl)
224+
{
225+
apiResource.properties.serviceUrl = $"[parameters('serviceUrl').{ExtractorUtils.GenValidApiParamName(apiName)}]";
226+
}
227+
210228
if (apiResource.properties.apiVersionSetId != null)
211229
{
212230
apiResource.dependsOn = new string[] { };
@@ -468,7 +486,7 @@ public async Task<Template> GenerateAPIRevisionTemplateAsync(string currentRevis
468486
{
469487
// add other API revision resources to template
470488
apiResources = await GenerateSingleAPIResourceAsync(curApi, exc);
471-
489+
472490
// make current API a dependency to other revisions, in case destination apim doesn't have the this API
473491
TemplateResource apiResource = apiResources.FirstOrDefault(resource => resource.type == ResourceTypeConstants.API) as TemplateResource;
474492
List<TemplateResource> newResourcesList = ExtractorUtils.removeResourceType(ResourceTypeConstants.API, apiResources);
@@ -504,6 +522,11 @@ public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsyn
504522
apiResource.scale = null;
505523
apiResource.properties.isCurrent = null;
506524

525+
if (exc.paramServiceUrl)
526+
{
527+
apiResource.properties.serviceUrl = $"[parameters('serviceUrl').{ExtractorUtils.GenValidApiParamName(apiName)}]";
528+
}
529+
507530
if (apiResource.properties.apiVersionSetId != null)
508531
{
509532
apiResource.dependsOn = new string[] { };
@@ -744,9 +767,8 @@ public async Task<List<TemplateResource>> GenerateCurrentRevisionAPIResourceAsyn
744767
public async Task<Template> GenerateAPIsARMTemplateAsync(string singleApiName, List<string> multipleApiNames, Extractor exc)
745768
{
746769
// initialize arm template
747-
Template armTemplate = GenerateEmptyTemplateWithParameters(exc.policyXMLBaseUrl, exc.policyXMLSasToken);
770+
Template armTemplate = GenerateEmptyApiTemplateWithParameters(exc);
748771
List<TemplateResource> templateResources = new List<TemplateResource>();
749-
750772
// when extract single API
751773
if (singleApiName != null)
752774
{

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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,5 +67,36 @@ public Template GenerateEmptyTemplateWithParameters(string policyXMLBaseUrl, str
6767
}
6868
return armTemplate;
6969
}
70+
71+
public Template GenerateEmptyApiTemplateWithParameters(Extractor exc)
72+
{
73+
Template armTemplate = GenerateEmptyTemplate();
74+
armTemplate.parameters = new Dictionary<string, TemplateParameterProperties> { { "ApimServiceName", new TemplateParameterProperties() { type = "string" } } };
75+
if (exc.policyXMLBaseUrl != null && exc.policyXMLSasToken != null)
76+
{
77+
TemplateParameterProperties policyTemplateSasTokenParameterProperties = new TemplateParameterProperties()
78+
{
79+
type = "string"
80+
};
81+
armTemplate.parameters.Add("PolicyXMLSasToken", policyTemplateSasTokenParameterProperties);
82+
}
83+
if (exc.policyXMLBaseUrl != null)
84+
{
85+
TemplateParameterProperties policyTemplateBaseUrlParameterProperties = new TemplateParameterProperties()
86+
{
87+
type = "string"
88+
};
89+
armTemplate.parameters.Add("PolicyXMLBaseUrl", policyTemplateBaseUrlParameterProperties);
90+
}
91+
if (exc.paramServiceUrl || (exc.serviceUrlParameters != null && exc.serviceUrlParameters.Length > 0))
92+
{
93+
TemplateParameterProperties serviceUrlParamProperty = new TemplateParameterProperties()
94+
{
95+
type = "object"
96+
};
97+
armTemplate.parameters.Add("serviceUrl", serviceUrlParamProperty);
98+
}
99+
return armTemplate;
100+
}
70101
}
71102
}

0 commit comments

Comments
 (0)