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

Commit 1d72b7c

Browse files
lurumadRupengLiu
andauthored
Allow to parametrize serviceUrl (#447)
* allow to parametrize serviceUrl * remove parameter serviceurl when specify * change serviceUrl from string to object Co-authored-by: luru <luis_ruiz_pavon@hotmail.com> Co-authored-by: RupengLiu <rliu1211@terpmail.umd.edu>
1 parent acc56d6 commit 1d72b7c

File tree

2 files changed

+40
-3
lines changed

2 files changed

+40
-3
lines changed

src/APIM_ARMTemplate/apimtemplate.test/Creator/TemplateCreatorTests/APITemplateCreatorTests.cs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ public async void ShouldCreateInitialAPITemplateResourceFromCreatorConfig()
5151

5252
// assert
5353
Assert.Equal($"[concat(parameters('ApimServiceName'), '/{api.name}')]", apiTemplateResource.name);
54+
Assert.Equal($"[parameters('{ParameterNames.ServiceUrl}').{api.name}]", apiTemplateResource.properties.serviceUrl);
5455
Assert.Equal(api.name, apiTemplateResource.properties.displayName);
5556
Assert.Equal(api.apiVersion, apiTemplateResource.properties.apiVersion);
5657
Assert.Equal(api.apiVersionDescription, apiTemplateResource.properties.apiVersionDescription);
@@ -70,6 +71,31 @@ public async void ShouldCreateInitialAPITemplateResourceFromCreatorConfig()
7071
Assert.Equal(api.authenticationSettings.subscriptionKeyRequired, apiTemplateResource.properties.authenticationSettings.subscriptionKeyRequired);
7172
}
7273

74+
[Fact]
75+
public async void ShouldCreateAPITemplateResourceFromCreatorConfigWithoutServiceUrlParameter()
76+
{
77+
// arrange
78+
APITemplateCreator apiTemplateCreator = APITemplateCreatorFactory.GenerateAPITemplateCreator();
79+
CreatorConfig creatorConfig = new CreatorConfig() { apis = new List<APIConfig>() };
80+
APIConfig api = new APIConfig()
81+
{
82+
name = "name",
83+
openApiSpec = "https://petstore.swagger.io/v2/swagger.json",
84+
serviceUrl = "https://petstore.swagger.io"
85+
};
86+
creatorConfig.apis.Add(api);
87+
88+
// act
89+
// the above api config will create a unified api template with a single resource
90+
List<Template> apiTemplates = await apiTemplateCreator.CreateAPITemplatesAsync(api);
91+
APITemplateResource apiTemplateResource = apiTemplates.FirstOrDefault().resources[0] as APITemplateResource;
92+
93+
// assert
94+
Assert.Single(apiTemplates.First().parameters);
95+
Assert.False(apiTemplates.First().parameters.ContainsKey(ParameterNames.ServiceUrl));
96+
Assert.Equal("https://petstore.swagger.io", apiTemplateResource.properties.serviceUrl);
97+
}
98+
7399
[Fact]
74100
public async void ShouldCreateSubsequentlAPITemplateResourceFromCreatorConfigWithCorrectContent()
75101
{

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Common;
55
using apimtemplate.Creator.Utilities;
66
using System.Net;
7+
using Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extract;
78

89
namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Create
910
{
@@ -68,6 +69,11 @@ public async Task<Template> CreateAPITemplateAsync(APIConfig api, bool isSplit,
6869
{ ParameterNames.ApimServiceName, new TemplateParameterProperties(){ type = "string" } }
6970
};
7071

72+
if (String.IsNullOrEmpty(api.serviceUrl))
73+
{
74+
apiTemplate.parameters.Add(ParameterNames.ServiceUrl, new TemplateParameterProperties() { type = "object" });
75+
}
76+
7177
List<TemplateResource> resources = new List<TemplateResource>();
7278
// create api resource
7379
APITemplateResource apiTemplateResource = await this.CreateAPITemplateResourceAsync(api, isSplit, isInitial);
@@ -124,7 +130,7 @@ public async Task<APITemplateResource> CreateAPITemplateResourceAsync(APIConfig
124130
{
125131
// add metadata properties for initial and unified templates
126132
apiTemplateResource.properties.apiVersion = api.apiVersion;
127-
apiTemplateResource.properties.serviceUrl = api.serviceUrl;
133+
apiTemplateResource.properties.serviceUrl = MakeServiceUrl(api);
128134
apiTemplateResource.properties.type = api.type;
129135
apiTemplateResource.properties.apiType = api.type;
130136
apiTemplateResource.properties.description = api.description;
@@ -224,8 +230,8 @@ public async Task<APITemplateResource> CreateAPITemplateResourceAsync(APIConfig
224230
apiTemplateResource.properties.format = format;
225231
apiTemplateResource.properties.value = value;
226232
apiTemplateResource.properties.path = api.suffix;
227-
apiTemplateResource.properties.serviceUrl = api.serviceUrl;
228-
233+
apiTemplateResource.properties.serviceUrl = MakeServiceUrl(api);
234+
229235
}
230236
return apiTemplateResource;
231237
}
@@ -254,5 +260,10 @@ public bool isSplitAPI(APIConfig apiConfig)
254260
// the api needs to be split into multiple templates if the user has supplied a version or version set - deploying swagger related properties at the same time as api version related properties fails, so they must be written and deployed separately
255261
return apiConfig.apiVersion != null || apiConfig.apiVersionSetId != null || (apiConfig.authenticationSettings != null && apiConfig.authenticationSettings.oAuth2 != null && apiConfig.authenticationSettings.oAuth2.authorizationServerId != null);
256262
}
263+
264+
private string MakeServiceUrl(APIConfig api)
265+
{
266+
return api.serviceUrl ?? $"[parameters('{ParameterNames.ServiceUrl}').{ExtractorUtils.GenValidParamName(api.name, ParameterPrefix.Api)}]";
267+
}
257268
}
258269
}

0 commit comments

Comments
 (0)