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

Commit e61420a

Browse files
committed
Added Operations and Policy
1 parent 6e0f6f1 commit e61420a

File tree

5 files changed

+247
-28
lines changed

5 files changed

+247
-28
lines changed

petstore.json

Lines changed: 210 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,210 @@
1+
{
2+
"swagger": "2.0",
3+
"info": {
4+
"version": "1.0.0",
5+
"title": "Swagger Petstore",
6+
"description": "A sample API that uses a petstore as an example to demonstrate features in the swagger-2.0 specification",
7+
"termsOfService": "http://swagger.io/terms/",
8+
"contact": {
9+
"name": "Swagger API Team",
10+
"email": "apiteam@swagger.io",
11+
"url": "http://swagger.io"
12+
},
13+
"license": {
14+
"name": "Apache 2.0",
15+
"url": "https://www.apache.org/licenses/LICENSE-2.0.html"
16+
}
17+
},
18+
"host": "petstore.swagger.io",
19+
"basePath": "/api",
20+
"schemes": [
21+
"http"
22+
],
23+
"consumes": [
24+
"application/json"
25+
],
26+
"produces": [
27+
"application/json"
28+
],
29+
"paths": {
30+
"/pets": {
31+
"get": {
32+
"description": "Returns all pets from the system that the user has access to\nNam sed condimentum est. Maecenas tempor sagittis sapien, nec rhoncus sem sagittis sit amet. Aenean at gravida augue, ac iaculis sem. Curabitur odio lorem, ornare eget elementum nec, cursus id lectus. Duis mi turpis, pulvinar ac eros ac, tincidunt varius justo. In hac habitasse platea dictumst. Integer at adipiscing ante, a sagittis ligula. Aenean pharetra tempor ante molestie imperdiet. Vivamus id aliquam diam. Cras quis velit non tortor eleifend sagittis. Praesent at enim pharetra urna volutpat venenatis eget eget mauris. In eleifend fermentum facilisis. Praesent enim enim, gravida ac sodales sed, placerat id erat. Suspendisse lacus dolor, consectetur non augue vel, vehicula interdum libero. Morbi euismod sagittis libero sed lacinia.\n\nSed tempus felis lobortis leo pulvinar rutrum. Nam mattis velit nisl, eu condimentum ligula luctus nec. Phasellus semper velit eget aliquet faucibus. In a mattis elit. Phasellus vel urna viverra, condimentum lorem id, rhoncus nibh. Ut pellentesque posuere elementum. Sed a varius odio. Morbi rhoncus ligula libero, vel eleifend nunc tristique vitae. Fusce et sem dui. Aenean nec scelerisque tortor. Fusce malesuada accumsan magna vel tempus. Quisque mollis felis eu dolor tristique, sit amet auctor felis gravida. Sed libero lorem, molestie sed nisl in, accumsan tempor nisi. Fusce sollicitudin massa ut lacinia mattis. Sed vel eleifend lorem. Pellentesque vitae felis pretium, pulvinar elit eu, euismod sapien.\n",
33+
"operationId": "findPets",
34+
"parameters": [
35+
{
36+
"name": "tags",
37+
"in": "query",
38+
"description": "tags to filter by",
39+
"required": false,
40+
"type": "array",
41+
"collectionFormat": "csv",
42+
"items": {
43+
"type": "string"
44+
}
45+
},
46+
{
47+
"name": "limit",
48+
"in": "query",
49+
"description": "maximum number of results to return",
50+
"required": false,
51+
"type": "integer",
52+
"format": "int32"
53+
}
54+
],
55+
"responses": {
56+
"200": {
57+
"description": "pet response",
58+
"schema": {
59+
"type": "array",
60+
"items": {
61+
"$ref": "#/definitions/Pet"
62+
}
63+
}
64+
},
65+
"default": {
66+
"description": "unexpected error",
67+
"schema": {
68+
"$ref": "#/definitions/Error"
69+
}
70+
}
71+
}
72+
},
73+
"post": {
74+
"description": "Creates a new pet in the store. Duplicates are allowed",
75+
"operationId": "addPet",
76+
"parameters": [
77+
{
78+
"name": "pet",
79+
"in": "body",
80+
"description": "Pet to add to the store",
81+
"required": true,
82+
"schema": {
83+
"$ref": "#/definitions/NewPet"
84+
}
85+
}
86+
],
87+
"responses": {
88+
"200": {
89+
"description": "pet response",
90+
"schema": {
91+
"$ref": "#/definitions/Pet"
92+
}
93+
},
94+
"default": {
95+
"description": "unexpected error",
96+
"schema": {
97+
"$ref": "#/definitions/Error"
98+
}
99+
}
100+
}
101+
}
102+
},
103+
"/pets/{id}": {
104+
"get": {
105+
"description": "Returns a user based on a single ID, if the user does not have access to the pet",
106+
"operationId": "find pet by id",
107+
"parameters": [
108+
{
109+
"name": "id",
110+
"in": "path",
111+
"description": "ID of pet to fetch",
112+
"required": true,
113+
"type": "integer",
114+
"format": "int64"
115+
}
116+
],
117+
"responses": {
118+
"200": {
119+
"description": "pet response",
120+
"schema": {
121+
"$ref": "#/definitions/Pet"
122+
}
123+
},
124+
"default": {
125+
"description": "unexpected error",
126+
"schema": {
127+
"$ref": "#/definitions/Error"
128+
}
129+
}
130+
}
131+
},
132+
"delete": {
133+
"description": "deletes a single pet based on the ID supplied",
134+
"operationId": "deletePet",
135+
"parameters": [
136+
{
137+
"name": "id",
138+
"in": "path",
139+
"description": "ID of pet to delete",
140+
"required": true,
141+
"type": "integer",
142+
"format": "int64"
143+
}
144+
],
145+
"responses": {
146+
"204": {
147+
"description": "pet deleted"
148+
},
149+
"default": {
150+
"description": "unexpected error",
151+
"schema": {
152+
"$ref": "#/definitions/Error"
153+
}
154+
}
155+
}
156+
}
157+
}
158+
},
159+
"definitions": {
160+
"Pet": {
161+
"type": "object",
162+
"allOf": [
163+
{
164+
"$ref": "#/definitions/NewPet"
165+
},
166+
{
167+
"required": [
168+
"id"
169+
],
170+
"properties": {
171+
"id": {
172+
"type": "integer",
173+
"format": "int64"
174+
}
175+
}
176+
}
177+
]
178+
},
179+
"NewPet": {
180+
"type": "object",
181+
"required": [
182+
"name"
183+
],
184+
"properties": {
185+
"name": {
186+
"type": "string"
187+
},
188+
"tag": {
189+
"type": "string"
190+
}
191+
}
192+
},
193+
"Error": {
194+
"type": "object",
195+
"required": [
196+
"code",
197+
"message"
198+
],
199+
"properties": {
200+
"code": {
201+
"type": "integer",
202+
"format": "int32"
203+
},
204+
"message": {
205+
"type": "string"
206+
}
207+
}
208+
}
209+
}
210+
}

src/APIM_ARMTemplate/apimtemplate/Commands/Extract.cs

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ public ExtractCommand()
2929
string apimname = apiManagementName.Values[0].ToString();
3030
Api api = new Api();
3131
string apis = api.GetAPIs(apimname, resourceGroup).Result;
32-
32+
3333
ExtractedAPI extractedAPI = JsonConvert.DeserializeObject<ExtractedAPI>(apis);
3434
Console.WriteLine("{0} API's found!", extractedAPI.value.Count.ToString());
3535
FileReader fileReader = new FileReader();
@@ -55,17 +55,25 @@ public ExtractCommand()
5555
Dictionary<string, OperationsConfig> operationsDic = new Dictionary<string, OperationsConfig>();
5656
//operation list
5757
string operations = api.GetAPIOperations(apimname, resourceGroup, creatorConfig.api.name).Result;
58-
var o = JsonConvert.DeserializeObject<Operation.Operation>(operations);
59-
OperationsConfig op = new OperationsConfig();
60-
foreach (var item in o.value)
58+
var oOperations = JsonConvert.DeserializeObject<Operation.Operation>(operations);
59+
60+
//get operation policy
61+
for (int o = 0; o < oOperations.value.Count; o++)
6162
{
62-
string pol = api.GetOperationPolicy(apimname, resourceGroup, creatorConfig.api.name, item.name).Result;
63-
var p = JsonConvert.DeserializeObject<Operation.Operation>(pol);
64-
operationsDic.Add(item.name, p.value[0].properties.policyContent);
65-
creatorConfig.api.operations = operationsDic;
66-
63+
string operationName = oOperations.value[o].name;
64+
string policies = api.GetOperationPolicy(apimname, resourceGroup, creatorConfig.api.name, operationName).Result;
65+
var oPolicies = JsonConvert.DeserializeObject<Operation.Operation>(policies);
66+
OperationsConfig operationsConfig = new OperationsConfig();
67+
68+
for (int oc = 0; oc < oPolicies.value.Count; oc++)
69+
{
70+
operationsConfig.policy = oPolicies.value[oc].properties.policyContent;
71+
operationsDic.Add(operationName, operationsConfig);
72+
}
6773
}
6874

75+
creatorConfig.api.operations = operationsDic;
76+
6977
if (extractedAPI.value[i].properties.apiVersionSetId != null)
7078
{
7179
string APIVersionSetFull = extractedAPI.value[i].properties.apiVersionSetId;
@@ -81,7 +89,7 @@ public ExtractCommand()
8189

8290
APIVersionSetTemplateCreator apiVersionSetTemplateCreator = new APIVersionSetTemplateCreator(templateCreator);
8391
ProductAPITemplateCreator productAPITemplateCreator = new ProductAPITemplateCreator();
84-
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator();
92+
PolicyTemplateCreator policyTemplateCreator = new PolicyTemplateCreator(creatorConfig);
8593
APITemplateCreatorEx apiTemplateCreator = new APITemplateCreatorEx(templateCreator, policyTemplateCreator, productAPITemplateCreator);
8694
MasterTemplateCreator masterTemplateCreator = new MasterTemplateCreator(templateCreator);
8795

@@ -98,21 +106,21 @@ public ExtractCommand()
98106
// write templates to outputLocation
99107
if (apiVersionSetTemplate != null)
100108
{
101-
fileWriter.WriteJSONToFile(apiVersionSetTemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSet));
109+
fileWriter.WriteJSONToFile(apiVersionSetTemplate, string.Concat(creatorConfig.outputLocation, creatorFileNames.apiVersionSet));
102110
}
103-
fileWriter.WriteJSONToFile(initialAPITemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.initialAPI));
104-
fileWriter.WriteJSONToFile(subsequentAPITemplate, String.Concat(creatorConfig.outputLocation, creatorFileNames.subsequentAPI));
105-
fileWriter.WriteJSONToFile(masterTemplate, String.Concat(creatorConfig.outputLocation, "/master.template.json"));
106-
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, "/master.parameters.json"));
111+
fileWriter.WriteJSONToFile(initialAPITemplate, string.Concat(creatorConfig.outputLocation, creatorFileNames.initialAPI));
112+
fileWriter.WriteJSONToFile(subsequentAPITemplate, string.Concat(creatorConfig.outputLocation, creatorFileNames.subsequentAPI));
113+
fileWriter.WriteJSONToFile(masterTemplate, string.Concat(creatorConfig.outputLocation, "/master.template.json"));
114+
fileWriter.WriteJSONToFile(masterTemplateParameters, string.Concat(creatorConfig.outputLocation, "/master.parameters.json"));
107115
}
108116
else
109117
{
110118
Template initialMasterTemplate = masterTemplateCreator.CreateInitialUnlinkedMasterTemplate(apiVersionSetTemplate, initialAPITemplate);
111119
Template subsequentMasterTemplate = masterTemplateCreator.CreateSubsequentUnlinkedMasterTemplate(subsequentAPITemplate);
112120
Template masterTemplateParameters = masterTemplateCreator.CreateMasterTemplateParameterValues(creatorConfig);
113-
fileWriter.WriteJSONToFile(initialMasterTemplate, String.Concat(creatorConfig.outputLocation, creatorConfig.api.name , "-master1.template.json"));
114-
fileWriter.WriteJSONToFile(subsequentMasterTemplate, String.Concat(creatorConfig.outputLocation, creatorConfig.api.name, "-master2.template.json"));
115-
fileWriter.WriteJSONToFile(masterTemplateParameters, String.Concat(creatorConfig.outputLocation, creatorConfig.api.name, "-master.parameters.json"));
121+
fileWriter.WriteJSONToFile(initialMasterTemplate, string.Concat(creatorConfig.outputLocation, creatorConfig.api.name , "-master1.template.json"));
122+
fileWriter.WriteJSONToFile(subsequentMasterTemplate, string.Concat(creatorConfig.outputLocation, creatorConfig.api.name, "-master2.template.json"));
123+
fileWriter.WriteJSONToFile(masterTemplateParameters, string.Concat(creatorConfig.outputLocation, creatorConfig.api.name, "-master.parameters.json"));
116124
}
117125
}
118126
Console.WriteLine("Templates written to output location");

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,12 @@ public async Task<Template> CreateSubsequentAPITemplateAsync(CreatorConfig creat
5858
List<TemplateResource> resources = new List<TemplateResource>();
5959
// create api resource w/ swagger content and policies
6060
APITemplateResource subsequentAPITemplateResource = await this.CreateSubsequentAPITemplateResourceAsync(creatorConfig);
61-
//PolicyTemplateResource apiPolicyResource = await this.policyTemplateCreator.CreateAPIPolicyTemplateResourceAsync(creatorConfig, dependsOnSubsequentAPI);
62-
//List<PolicyTemplateResource> operationPolicyResources = await this.policyTemplateCreator.CreateOperationPolicyTemplateResourcesAsync(creatorConfig, dependsOnSubsequentAPI);
63-
List<ProductAPITemplateResource> productAPIResources = this.productAPITemplateCreator.CreateProductAPITemplateResources(creatorConfig, dependsOnSubsequentAPI);
61+
PolicyTemplateResource apiPolicyResource = await this.policyTemplateCreator.CreateAPIPolicyTemplateResourceAsync(creatorConfig, dependsOnSubsequentAPI);
62+
List<PolicyTemplateResource> operationPolicyResources = await this.policyTemplateCreator.CreateOperationPolicyTemplateResourcesAsync(creatorConfig, dependsOnSubsequentAPI);
63+
//List<ProductAPITemplateResource> productAPIResources = this.productAPITemplateCreator.CreateProductAPITemplateResources(creatorConfig, dependsOnSubsequentAPI);
6464
resources.Add(subsequentAPITemplateResource);
65-
//resources.Add(apiPolicyResource);
66-
//resources.AddRange(operationPolicyResources);
65+
resources.Add(apiPolicyResource);
66+
resources.AddRange(operationPolicyResources);
6767
//resources.AddRange(productAPIResources);
6868

6969
apiTemplate.resources = resources.ToArray();

src/APIM_ARMTemplate/apimtemplate/Extractor/TemplateCreators/PolicyTemplateCreator.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@ namespace Microsoft.Azure.Management.ApiManagement.ArmTemplates.Extract
66
public class PolicyTemplateCreator
77
{
88
private FileReader fileReader;
9+
CreatorConfig creatorConfig;
910

1011
public PolicyTemplateCreator(FileReader fileReader)
1112
{
1213
this.fileReader = fileReader;
1314
}
14-
public PolicyTemplateCreator()
15+
public PolicyTemplateCreator(CreatorConfig creatorConfig)
1516
{
16-
17+
this.creatorConfig = creatorConfig;
1718
}
1819
public async Task<PolicyTemplateResource> CreateAPIPolicyTemplateResourceAsync(CreatorConfig creatorConfig, string[] dependsOn)
1920
{
@@ -26,7 +27,7 @@ public async Task<PolicyTemplateResource> CreateAPIPolicyTemplateResourceAsync(C
2627
properties = new PolicyTemplateProperties()
2728
{
2829
contentFormat = "rawxml",
29-
policyContent = await this.fileReader.RetrieveJSONContentsAsync(creatorConfig.api.policy)
30+
policyContent = creatorConfig.api.policy
3031
},
3132
dependsOn = dependsOn
3233
};
@@ -44,7 +45,7 @@ public async Task<PolicyTemplateResource> CreateOperationPolicyTemplateResourceA
4445
properties = new PolicyTemplateProperties()
4546
{
4647
contentFormat = "rawxml",
47-
policyContent = await this.fileReader.RetrieveJSONContentsAsync(policyPair.Value.policy)
48+
policyContent = policyPair.Value.policy
4849
},
4950
dependsOn = dependsOn
5051
};

src/APIM_ARMTemplate/apimtemplate/Properties/launchSettings.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"profiles": {
33
"apimtemplate": {
44
"commandName": "Project",
5-
"commandLineArgs": "extract --name APIM-EXtractor --resourceGroup APIM-Extractor"
5+
"commandLineArgs": "extract --name odaibert-deploy2 --resourceGroup APIM-Extractor"
66
}
77
}
88
}

0 commit comments

Comments
 (0)