642f941e8830288d0fbc4104e1c55af68267ed40
[vid.git] /
1 package org.onap.simulator.presetGenerator.presets.aai;
2
3 import com.google.common.collect.ImmutableMap;
4 import com.google.common.collect.ImmutableMultimap;
5 import com.google.common.collect.Multimap;
6 import org.apache.commons.lang3.RandomStringUtils;
7 import org.apache.commons.lang3.StringUtils;
8 import org.apache.commons.text.StrSubstitutor;
9 import org.onap.simulator.presetGenerator.presets.BasePresets.BaseAAIPreset;
10 import org.springframework.http.HttpMethod;
11
12 import java.util.UUID;
13 import java.util.stream.Collectors;
14 import java.util.stream.Stream;
15
16 import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
17 import static org.apache.commons.text.StringEscapeUtils.escapeJson;
18 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.ATT_AIC;
19 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.hvf6;
20
21 public class PresetAAIStandardQueryGet extends BaseAAIPreset {
22     private final String instanceId;
23     private final String instanceName;
24     private final String instanceType;
25     private final String instanceRole;
26     private final String additionalProperties;
27     private final String uri;
28     private final String typeInResponse;
29     private final Multimap<String, String> relationshipsUris;
30     private Placement placement;
31
32     private PresetAAIStandardQueryGet(String typeInResponse, String instanceId, String instanceName, String instanceType, String instanceRole, String uri, Multimap<String, String> relationshipsUris, String additionalProperties, Placement placement) {
33         this.instanceId = defaultIfNull(instanceId, randomUUID());
34         this.instanceName = defaultIfNull(instanceName, randomAlphanumeric());
35         this.instanceType = defaultIfNull(instanceType, randomAlphanumeric());
36         this.instanceRole = defaultIfNull(instanceRole, randomAlphanumeric());
37         this.uri = uri;
38         this.typeInResponse = typeInResponse;
39         this.additionalProperties = additionalProperties;
40         this.relationshipsUris = relationshipsUris;
41         this.placement = placement;
42     }
43
44     private PresetAAIStandardQueryGet(String typeInResponse, String instanceId, String uri, Multimap<String, String> relationshipsUris, String additionalProperties, Placement placement) {
45         this(typeInResponse, instanceId, randomAlphanumeric(), randomAlphanumeric(), randomAlphanumeric(), uri, relationshipsUris, additionalProperties, placement);
46     }
47
48     public static PresetAAIStandardQueryGet ofServiceInstance(String instanceId, final String modelVersionId, final String modelInvariantId, String subscriberId, String serviceType, Multimap<String, String> relationshipsUris) {
49         return ofServiceInstance(instanceId, "", "", modelVersionId, modelInvariantId, subscriberId, serviceType, "GARBAGE DATA", relationshipsUris);
50     }
51
52     public static PresetAAIStandardQueryGet ofServiceInstance(String instanceId, String instanceType, String instanceRole, final String modelVersionId, final String modelInvariantId, String subscriberId, String serviceType, String orchStatus, Multimap<String, String> relationshipsUris) {
53         return new PresetAAIStandardQueryGet(
54                 "service-instance", instanceId,
55                 randomAlphanumeric(),
56                 instanceType,
57                 instanceRole,
58                 new StrSubstitutor(ImmutableMap.of(
59                         "global-customer-id", subscriberId,
60                         "service-type", serviceType,
61                         "service-instance-id", instanceId
62                 )).replace("" +
63                         "/business/customers/customer/${global-customer-id}" +
64                         "/service-subscriptions/service-subscription/${service-type}" +
65                         "/service-instances/service-instance/${service-instance-id}"),
66                 relationshipsUris, "" +
67                 "\"model-invariant-id\": \"" + modelInvariantId + "\", " +
68                 "\"model-version-id\": \"" + modelVersionId + "\", " +
69                 "\"resource-version\": \"GARBAGE DATA\", " +
70                 "\"orchestration-status\": \"" + orchStatus + "\", ", null
71         );
72     }
73
74     public static PresetAAIStandardQueryGet ofInstanceGroup(String groupType, String groupRole, Multimap<String, String> relationshipsUris) {
75         return ofInstanceGroup(groupType, groupRole, relationshipsUris, "4bb2e27e-ddab-4790-9c6d-1f731bc14a45", "daeb6568-cef8-417f-9075-ed259ce59f48");
76     }
77
78     public static PresetAAIStandardQueryGet ofInstanceGroup(String groupType, String groupRole, Multimap<String, String> relationshipsUris, String modelInvariantId, String modelVersionId) {
79         final String instanceId = randomUUID();
80         return new PresetAAIStandardQueryGet(
81                 "instance-group", instanceId, randomAlphanumeric(), groupType, groupRole,
82                 "/network/instance-groups/instance-group/" + instanceId,
83                 relationshipsUris, "" +
84                 "    \"id\": \"" + instanceId + "\"," +
85                 addModelIds(modelInvariantId, modelVersionId) +
86                 "    \"description\": \"vTSBC Customer Landing Network Collection Desc\"," +
87                 "    \"resource-version\": \"1536169790853\"," +
88                 "    \"instance-group-function\": \"vTSBC Customer Landing Network Collection\",", null
89         );
90     }
91
92     public static PresetAAIStandardQueryGet ofVnf(String instanceId, Multimap<String, String> relationshipsUris, Placement placement) {
93         return ofVnf(instanceId, "vnf-instance-model-version-id", "vnf-instance-model-customization-id", "", relationshipsUris, placement);
94     }
95
96     public static Placement defaultPlacement() {
97         return new Placement(ATT_AIC, hvf6, "bae71557c5bb4d5aac6743a4e5f1d054");
98     }
99
100     public static PresetAAIStandardQueryGet ofVnf(String instanceId, String modelVersionId, String modelCustomizationId, String additionalProperties, Multimap<String, String> relationshipsUris, Placement placement) {
101         return new PresetAAIStandardQueryGet(
102                 "vnf", instanceId,
103                 "/network/generic-vnfs/generic-vnf/" + instanceId,
104                 relationshipsUris, additionalProperties +
105                 "\"model-invariant-id\": \"vnf-instance-model-invariant-id\", " +
106                 "\"model-customization-id\": \"" + modelCustomizationId + "\", " +
107                 "\"model-version-id\": \"" + modelVersionId + "\", ", placement
108         );
109     }
110
111     public static PresetAAIStandardQueryGet ofRelatedVnf(String instanceId, String modelVersionId, String additionalProperties, Multimap<String, String> relationshipsUris) {
112         return new PresetAAIStandardQueryGet(
113                 "vnf", instanceId,
114                 "/network/generic-vnfs/generic-vnf/" + instanceId,
115                 relationshipsUris, additionalProperties +
116                 "\"model-invariant-id\": \"vnf-instance-model-invariant-id\", " +
117                 "\"model-version-id\": \"" + modelVersionId + "\", ", null
118         );
119     }
120
121     private static String randomAlphanumeric() {
122         return RandomStringUtils.randomAlphanumeric(17);
123     }
124
125     private static String randomUUID() {
126         return UUID.randomUUID().toString();
127     }
128
129     public static PresetAAIStandardQueryGet ofL3Network(String instanceType, String orchStatus, Multimap<String, String> relationshipsUris) {
130         return ofL3Network(randomUUID(), randomAlphanumeric(), instanceType, relationshipsUris, orchStatus, "prov", "network-instance-model-version-id", "network-instance-model-customization-id");
131     }
132
133     public static PresetAAIStandardQueryGet ofL3Network(String instanceType, String orchStatus, String provStatus, String modelVersionId, String modelCustomizationId, Multimap<String, String> relationshipsUris) {
134         return ofL3Network(randomUUID(), randomAlphanumeric(), instanceType, relationshipsUris, orchStatus, provStatus, modelVersionId, modelCustomizationId);
135     }
136
137     public static PresetAAIStandardQueryGet ofL3Network(String instanceId, String instanceName, String instanceType, Multimap<String, String> relationshipsUris, String orchStatus) {
138         return ofL3Network(instanceId, instanceName, instanceType, relationshipsUris, orchStatus, "prov", "network-instance-model-version-id", "94fdd893-4a36-4d70-b16a-ec29c54c184f");
139     }
140
141     public static PresetAAIStandardQueryGet ofL3Network(String instanceId, String instanceName, String instanceType, Multimap<String, String> relationshipsUris, String orchStatus, String provStatus, String modelVersionId, String modelCustomizationId) {
142         return new PresetAAIStandardQueryGet(
143                 "network", instanceId, instanceName, instanceType, randomAlphanumeric(),
144                 "/network/l3-networks/l3-network/" + instanceId,
145                 relationshipsUris, "" +
146                 "\"orchestration-status\": \"" + orchStatus + "\"," +
147                 "\"prov-status\": \"" + provStatus + "\"," +
148                 "\"network-technology\": \"contrail\", " +
149                 "\"neutron-network-id\": \"66ee6123-1c45-4e71-b6c0-a748ae0fee88\", " +
150                 "\"is-bound-to-vpn\": true, " +
151                 "\"is-external-network\": true, " +
152                 "\"model-invariant-id\": \"network-instance-model-invariant-id\", " +
153                 "\"model-customization-id\": \"" + modelCustomizationId + "\", " +
154                 "\"model-version-id\": \"" + modelVersionId + "\", ", null
155         );
156     }
157
158     public static PresetAAIStandardQueryGet ofVolumeGroup(String instanceType, Multimap<String, String> relationshipsUris) {
159         final String instanceId = randomUUID();
160         return new PresetAAIStandardQueryGet(
161                 "volume-group", instanceId, randomAlphanumeric(), instanceType, randomAlphanumeric(),
162                 "/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/olson5b/volume-groups/volume-group/" + instanceId,
163                 relationshipsUris, "" +
164                 "    \"vnf-type\": \"vSON_test_ap7145/vSON_test_ap7145 0\"," +
165                 "    \"orchestration-status\": \"Active\"," +
166                 "    \"model-customization-id\": \"bc3bbdcc-42f3-4682-b151-99c308d15255\"," +
167                 "    \"vf-module-model-customization-id\": \"bc3bbdcc-42f3-4682-b151-99c308d15255\"," +
168                 "    \"resource-version\": \"1533679899735\",", null
169         );
170     }
171
172
173     public static PresetAAIStandardQueryGet ofCollectionResource(String orchStatus, Multimap<String, String> relationshipsUris, String modelInvariantId, String modelVersionId) {
174         final String instanceId = randomUUID();
175         return new PresetAAIStandardQueryGet(
176                 "collection", instanceId, randomAlphanumeric(), "L3-NETWORK", randomAlphanumeric(),
177                 "/network/collections/collection/" + instanceId,
178                 relationshipsUris, "" +
179                 "\"orchestration-status\": \"" + orchStatus + "\", " +
180                 addModelIds(modelInvariantId, modelVersionId), null
181         );
182     }
183
184     private static String addModelIds(String modelInvariantId, String modelVersionId) {
185         return "\"model-invariant-id\": \"" + modelInvariantId + "\", " +
186                 "\"model-version-id\": \"" + modelVersionId + "\", ";
187     }
188
189     public static PresetAAIStandardQueryGet ofVrf(String orchStatus, Multimap<String, String> relationshipsUris) {
190         final String instanceId = randomUUID();
191         return new PresetAAIStandardQueryGet(
192                 "configuration", instanceId, randomAlphanumeric(), "COLLECTION", randomAlphanumeric(),
193                 "/network/configurations/configuration/" + instanceId,
194                 relationshipsUris, "" +
195                 "\"orchestration-status\": \"" + orchStatus + "\", " +
196                 "\"model-invariant-id\": \"b67a289b-1688-496d-86e8-1583c828be0a\", " +
197                 "\"model-customization-id\": \"dd024d73-9bd1-425d-9db5-476338d53433\", " +
198                 "\"model-version-id\": \"9cac02be-2489-4374-888d-2863b4511a59\", ", null
199         );
200     }
201
202     public static PresetAAIStandardQueryGet ofVpn(String orchStatus, Multimap<String, String> relationshipsUris, String globalRoutTarget, String routeTargetRole, String customerId, String region) {
203         final String instanceId = randomUUID();
204         return new PresetAAIStandardQueryGet(
205                 "vpn", instanceId, randomAlphanumeric(), "SERVICE-INFRASTRUCTURE", randomAlphanumeric(),
206                 "/network/collections/collection/" + instanceId,
207                 relationshipsUris, "" +
208                 "\"orchestration-status\": \"" + orchStatus + "\", " +
209                 "\"prov-status\": \"" + "prov" + "\"," +
210                 "\"model-invariant-id\": \"vpn-model-invariant-id\", " +
211                 "\"model-customization-id\": \"vpn-model-customization-id\", " +
212                 "\"customer-vpn-id\": \"" + customerId + "\", " +
213                 "\"vpn-region\": \"" + region + "\", " +
214                 "\"route-targets\" : [" +
215                 "            {" +
216                 "              \"global-route-target\":\"" + globalRoutTarget + "\"," +
217                 "              \"route-target-role\" : \"" + routeTargetRole + "\"" +
218                 "            }" +
219                 "            ],"+
220                 "\"model-version-id\": \"vpn-model-version-id\", ", null
221         );
222     }
223
224     public static PresetAAIStandardQueryGet ofVlanTag(int vlanIdOuter) {
225         final String instanceId = randomUUID();
226         return new PresetAAIStandardQueryGet(
227                 "vlan-tag", instanceId,
228                 "/this is an invented link/tag/vlan-tags/vlan-tag/" + instanceId,
229                 ImmutableMultimap.of(), "" +
230                 "\"vlan-interface\": \"US-10688-genvnf-vlan-interface1\", " +
231                 "\"vlan-id-inner\": " + 123456789 + ", " +
232                 "\"vlan-id-outer\": " + vlanIdOuter + ", " +
233                 "\"resource-version\": \"1518934744675\", " +
234                 "\"in-maint\": false, " +
235                 "\"is-ip-unnumbered\": false, ", null
236         );
237     }
238
239     public String getInstanceId() {
240         return instanceId;
241     }
242
243     public String getInstanceName() {
244         return instanceName;
245     }
246
247     public String getInstanceType() {
248         return instanceType;
249     }
250
251     public String getInstanceRole() {
252         return instanceRole;
253     }
254
255     @Override
256     public Object getResponseBody() {
257         return "" +
258                 "{ " +
259                 "  \"" + typeInResponse + "-id\": \"" + getInstanceId() + "\", " +
260                 "  \"" + typeInResponse + "-name\": \"" + escapeJson(getInstanceName()) + "\", " +
261                 "  \"" + typeInResponse + "-type\": \"" + escapeJson(getInstanceType()) + "\", " +
262                 "  \"" + typeInResponse + "-role\": \"" + escapeJson(getInstanceRole()) + "\", " +
263                 additionalProperties +
264                 "  \"relationship-list\": { " +
265                 "    \"relationship\": [ " +
266                 Stream.concat(
267                         placement !=null ? Stream.of(buildPlacementRelationship()) : Stream.empty(),
268                         relationshipsUris.entries().stream().map(entry -> buildRelationship(entry.getKey(), entry.getValue())
269                         )).collect(Collectors.joining(",")) +
270                 "    ] " +
271                 "  } " +
272                 "} ";
273     }
274
275     private String buildRelationship(String relatedTo, final String relatedLink) {
276         return "" +
277                 "{ " +
278                 "  \"related-to\": \"" + relatedTo + "\", " +
279                 "  \"relationship-label\": \"org.onap.relationships.inventory.ComposedOf\", " +
280                 "  \"related-link\": \"" + relatedLink + "\", " +
281                 "  \"relationship-data\": [" +
282                 "      { " +
283                 "        \"relationship-key\": \"GARBAGE DATA\", " +
284                 "        \"relationship-value\": \"GARBAGE DATA\" " +
285                 "      } " +
286                 "  ] " +
287                 "}";
288     }
289
290     private String buildPlacementRelationship() {
291         String relatedTo = StringUtils.equals(instanceType,"vf-module")? "vserver": "tenant";
292         return "" +
293                 "            {" +
294                 "                \"related-to\": \"" + relatedTo + "\"," +
295                 "                \"relationship-label\": \"org.onap.relationships.inventory.Uses\"," +
296                 "                \"related-link\": \"/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/" +  this.placement.lcpRegionId + "/tenants/tenant/" + this.placement.tenantId+ "/vservers/vserver/5eef9f6d-9933-4bc6-9a1a-862d61309437\"," +
297                 "                \"relationship-data\": [" +
298                 "                    {" +
299                 "                        \"relationship-key\": \"cloud-region.cloud-owner\"," +
300                 "                        \"relationship-value\": \""+ this.placement.cloudOwner+"\"" +
301                 "                    }," +
302                 "                    {" +
303                 "                        \"relationship-key\": \"cloud-region.cloud-region-id\"," +
304                 "                        \"relationship-value\": \"" +  this.placement.lcpRegionId + "\"" +
305                 "                    }," +
306                 "                    {" +
307                 "                        \"relationship-key\": \"tenant.tenant-id\"," +
308                 "                        \"relationship-value\": \"" +  this.placement.tenantId + "\"" +
309                 "                    }," +
310                 "                    {" +
311                 "                        \"relationship-key\": \"vserver.vserver-id\"," +
312                 "                        \"relationship-value\": \"5eef9f6d-9933-4bc6-9a1a-862d61309437\"" +
313                 "                    }" +
314                 "                ]," +
315                 "                \"related-to-property\": [" +
316                 "                    {" +
317                 "                        \"property-key\": \"vserver.vserver-name\"," +
318                 "                        \"property-value\": \"zolson5bfapn01dns002\"" +
319                 "                    }" +
320                 "                ]" +
321                 "            }" ;
322     }
323
324     @Override
325     public HttpMethod getReqMethod() {
326         return HttpMethod.GET;
327     }
328
329     @Override
330     public String getReqPath() {
331         return getRootPath() + uri;
332     }
333 }