2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
7 * ================================================================================
8 * Modifications Copyright (c) 2019 Samsung
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 package org.onap.so.adapters.network;
27 import io.swagger.annotations.Api;
28 import io.swagger.annotations.ApiOperation;
29 import io.swagger.annotations.ApiParam;
30 import io.swagger.annotations.ApiResponse;
31 import io.swagger.annotations.ApiResponses;
32 import java.util.HashMap;
33 import java.util.List;
35 import javax.inject.Provider;
36 import javax.ws.rs.Consumes;
37 import javax.ws.rs.DELETE;
38 import javax.ws.rs.GET;
39 import javax.ws.rs.POST;
40 import javax.ws.rs.PUT;
41 import javax.ws.rs.Path;
42 import javax.ws.rs.PathParam;
43 import javax.ws.rs.Produces;
44 import javax.ws.rs.QueryParam;
45 import javax.ws.rs.core.GenericEntity;
46 import javax.ws.rs.core.MediaType;
47 import javax.ws.rs.core.Response;
48 import javax.xml.ws.Holder;
49 import org.apache.http.HttpStatus;
50 import org.onap.so.adapters.network.exceptions.NetworkException;
51 import org.onap.so.adapters.nwrest.ContrailNetwork;
52 import org.onap.so.adapters.nwrest.CreateNetworkError;
53 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
54 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
55 import org.onap.so.adapters.nwrest.DeleteNetworkError;
56 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
57 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
58 import org.onap.so.adapters.nwrest.ProviderVlanNetwork;
59 import org.onap.so.adapters.nwrest.QueryNetworkError;
60 import org.onap.so.adapters.nwrest.QueryNetworkResponse;
61 import org.onap.so.adapters.nwrest.RollbackNetworkError;
62 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
63 import org.onap.so.adapters.nwrest.RollbackNetworkResponse;
64 import org.onap.so.adapters.nwrest.UpdateNetworkError;
65 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
66 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
67 import org.onap.so.adapters.vnf.BpelRestClient;
68 import org.onap.so.entity.MsoRequest;
69 import org.onap.so.logger.MessageEnum;
70 import org.onap.so.logger.MsoLogger;
71 import org.onap.so.openstack.beans.NetworkRollback;
72 import org.onap.so.openstack.beans.NetworkStatus;
73 import org.onap.so.openstack.beans.RouteTarget;
74 import org.onap.so.openstack.exceptions.MsoExceptionCategory;
75 import org.slf4j.Logger;
76 import org.slf4j.LoggerFactory;
77 import org.springframework.beans.factory.annotation.Autowired;
78 import org.springframework.beans.factory.annotation.Qualifier;
79 import org.springframework.stereotype.Component;
80 import org.springframework.transaction.annotation.Transactional;
83 @Api(value = "/v1/networks", description = "root of network adapters restful web service")
86 public class NetworkAdapterRest {
88 private static final Logger logger = LoggerFactory.getLogger(NetworkAdapterRest.class);
89 private static final String TESTING_KEYWORD = "___TESTING___";
90 private String EXCEPTION = "Exception:";
93 private MsoNetworkAdapterImpl adapter;
95 @Qualifier("NetworkBpel")
96 private Provider<BpelRestClient> bpelRestClientProvider;
101 @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
102 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
103 @ApiOperation(value = "CreateNetwork",
104 response = Response.class,
105 notes = "Creates a new network, CreateNetworkRquest JSON is required")
107 @ApiResponse(code = 200, message = "network has been successfully created"),
108 @ApiResponse(code = 202, message = "create network request has been accepted (async only)"),
109 @ApiResponse(code = 500, message = "create network failed, examine entity object for details") })
110 public Response createNetwork(
111 @ApiParam(value = "details of network being created", required = true)
112 CreateNetworkRequest req) {
113 logger.debug("createNetwork enter: {}", req.toJsonString());
114 CreateNetworkTask task = new CreateNetworkTask(req);
115 if (req.isSynchronous()) {
116 // This is a synchronous request
119 .status(task.getStatusCode())
120 .entity(task.getGenericEntityResponse())
123 // This is an asynchronous request
125 Thread t1 = new Thread(task);
127 } catch (Exception e) {
128 // problem handling create, send generic failure as sync resp to caller
129 logger.error("{} {} Exception while create network ", MessageEnum.RA_CREATE_NETWORK_EXC,
130 MsoLogger.ErrorCode.BusinessProcesssError.getValue(), e);
131 return Response.serverError().build();
133 // send sync response (ACK) to caller
134 logger.debug("createNetwork exit");
135 return Response.status(HttpStatus.SC_ACCEPTED).build();
139 public class CreateNetworkTask implements Runnable {
140 private final CreateNetworkRequest req;
141 private CreateNetworkResponse response = null;
142 private CreateNetworkError eresp = null;
143 private boolean sendxml;
145 public CreateNetworkTask(CreateNetworkRequest req) {
147 this.sendxml = true; // can be set with a field or header later
149 public int getStatusCode() {
150 return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST;
152 public Object getGenericEntityResponse() {
153 return (response != null)
154 ? new GenericEntity<CreateNetworkResponse>(response) {}
155 : new GenericEntity<CreateNetworkError>(eresp) {};
157 private String getResponse() {
158 if (response != null) {
159 return sendxml ? response.toXmlString() : response.toJsonString();
161 return sendxml ? eresp.toXmlString() : eresp.toJsonString();
166 logger.debug("CreateNetworkTask start");
168 // Synchronous Web Service Outputs
169 Holder<String> networkId = new Holder<>();
170 Holder<String> neutronNetworkId = new Holder<>();
171 Holder<String> networkFqdn = new Holder<>();
172 Holder<Map<String, String>> subnetIdMap = new Holder<>();
173 Holder<NetworkRollback> rollback = new Holder<>();
175 HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams();
176 if (params == null) {
177 params = new HashMap<String,String>();
179 String shared = null;
180 String external = null;
182 String cloudsite = req.getCloudSiteId();
183 if (cloudsite != null && cloudsite.equals(TESTING_KEYWORD)) {
184 String tenant = req.getTenantId();
185 if (tenant != null && tenant.equals(TESTING_KEYWORD)) {
186 throw new NetworkException("testing.");
188 networkId.value = "479D3D8B-6360-47BC-AB75-21CC91981484";
189 neutronNetworkId.value = "55e55884-28fa-11e6-8971-0017f20fe1b8";
190 networkFqdn.value = "086f70b6-28fb-11e6-8260-0017f20fe1b8";
191 subnetIdMap.value = testMap();
192 rollback.value = new NetworkRollback();
193 } else if (req.isContrailRequest()) {
194 ContrailNetwork ctn = req.getContrailNetwork();
196 ctn = new ContrailNetwork();
197 req.setContrailNetwork(ctn);
199 if (params.containsKey("shared")) {
200 shared = params.get("shared");
202 if (ctn.getShared() != null) {
203 shared = ctn.getShared();
206 if (params.containsKey("external")) {
207 external = params.get("external");
209 if (ctn.getExternal() != null) {
210 external = ctn.getExternal();
213 adapter.createNetworkContrail(
214 req.getCloudSiteId(),
216 req.getNetworkType(),
217 req.getModelCustomizationUuid(),
218 req.getNetworkName(),
219 req.getContrailNetwork().getRouteTargets(),
222 req.getFailIfExists(),
226 req.getContrailNetwork().getPolicyFqdns(),
227 req.getContrailNetwork().getRouteTableFqdns(),
235 ProviderVlanNetwork pvn = req.getProviderVlanNetwork();
237 pvn = new ProviderVlanNetwork();
238 req.setProviderVlanNetwork(pvn);
240 if (params.containsKey("shared"))
241 shared = params.get("shared");
242 if (params.containsKey("external"))
243 external = params.get("external");
244 adapter.createNetwork(
245 req.getCloudSiteId(),
247 req.getNetworkType(),
248 req.getModelCustomizationUuid(),
249 req.getNetworkName(),
250 req.getProviderVlanNetwork().getPhysicalNetworkName(),
251 req.getProviderVlanNetwork().getVlans(),
254 req.getFailIfExists(),
264 response = new CreateNetworkResponse(
266 neutronNetworkId.value,
267 rollback.value.getNetworkStackId(),
269 rollback.value.getNetworkCreated(),
273 } catch (NetworkException e) {
274 logger.debug(EXCEPTION, e);
275 eresp = new CreateNetworkError(
276 e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId());
278 if (!req.isSynchronous()) {
279 // This is asynch, so POST response back to caller
280 BpelRestClient bpelClient = bpelRestClientProvider.get();
281 bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml);
283 logger.debug("CreateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse());
288 @Path("{aaiNetworkId}")
289 @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
290 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
291 @ApiOperation(value = "DeleteNetwork",
292 response = Response.class,
293 notes = "Deletes an existing network, aaiNetworkId and DeleteNetworkRequest JSON are required")
295 @ApiResponse(code = 200, message = "network has been successfully deleted"),
296 @ApiResponse(code = 202, message = "request to delete network has been accepted (async only)"),
297 @ApiResponse(code = 500, message = "delete network failed, examine entity object for details") })
298 public Response deleteNetwork(
299 @ApiParam(value = "aaiNetworkId to be deleted ", required = true)
300 @PathParam("aaiNetworkId") String aaiNetworkId,
301 @ApiParam(value = "details of network being deleted", required = true)
302 DeleteNetworkRequest req)
304 logger.debug("deleteNetwork enter: {}", req.toJsonString());
305 if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) {
307 .status(HttpStatus.SC_BAD_REQUEST)
308 .type(MediaType.TEXT_PLAIN)
309 .entity("A&AI NetworkId in URL ("+aaiNetworkId+") does not match content ("+req.getNetworkId()+")")
312 DeleteNetworkTask task = new DeleteNetworkTask(req);
313 if (req.isSynchronous()) {
314 // This is a synchronous request
317 .status(task.getStatusCode())
318 .entity(task.getGenericEntityResponse())
321 // This is an asynchronous request
323 Thread t1 = new Thread(task);
325 } catch (Exception e) {
326 // problem handling create, send generic failure as sync resp to caller
327 logger.error("{} {} Exception while delete network ", MessageEnum.RA_DELETE_NETWORK_EXC,
328 MsoLogger.ErrorCode.BusinessProcesssError.getValue(), e);
329 return Response.serverError().build();
331 // send sync response (ACK) to caller
332 logger.debug("deleteNetwork exit");
333 return Response.status(HttpStatus.SC_ACCEPTED).build();
337 public class DeleteNetworkTask implements Runnable {
338 private final DeleteNetworkRequest req;
339 private DeleteNetworkResponse response = null;
340 private DeleteNetworkError eresp = null;
341 private boolean sendxml;
343 public DeleteNetworkTask(DeleteNetworkRequest req) {
345 this.sendxml = true; // can be set with a field or header later
347 public int getStatusCode() {
348 return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST;
350 public Object getGenericEntityResponse() {
351 return (response != null)
352 ? new GenericEntity<DeleteNetworkResponse>(response) {}
353 : new GenericEntity<DeleteNetworkError>(eresp) {};
355 private String getResponse() {
356 if (response != null) {
357 return sendxml ? response.toXmlString() : response.toJsonString();
359 return sendxml ? eresp.toXmlString() : eresp.toJsonString();
364 logger.debug("DeleteNetworkTask start");
366 Holder<Boolean> networkDeleted = new Holder<>();
367 if (req.getCloudSiteId().equals(TESTING_KEYWORD)) {
368 networkDeleted.value = true;
370 adapter.deleteNetwork(
371 req.getCloudSiteId(),
373 req.getNetworkType(),
374 req.getModelCustomizationUuid(),
375 req.getNetworkStackId(),
379 response = new DeleteNetworkResponse(req.getNetworkId(), networkDeleted.value, req.getMessageId());
380 } catch (NetworkException e) {
381 logger.debug(EXCEPTION, e);
382 eresp = new DeleteNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId());
384 if (!req.isSynchronous()) {
385 // This is asynch, so POST response back to caller
386 BpelRestClient bpelClient = bpelRestClientProvider.get();
387 bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml);
389 logger.debug("DeleteNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse());
394 @Path("{aaiNetworkId}")
395 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
396 @ApiOperation(value = "QueryNetwork",
397 response = Response.class,
398 notes = "Queries an existing network")
400 @ApiResponse(code = 200, message = "Query network successful"),
401 @ApiResponse(code = 500, message = "Query network failed, examine entity object for details") })
402 public Response queryNetwork(
403 @ApiParam(value = "cloudSiteId", required = false)
404 @QueryParam("cloudSiteId") String cloudSiteId,
405 @ApiParam(value = "tenantId", required = false)
406 @QueryParam("tenantId") String tenantId,
407 @ApiParam(value = "networkStackId", required = false)
408 @QueryParam("networkStackId") String networkStackId,
409 @ApiParam(value = "skipAAI", required = false)
410 @QueryParam("skipAAI") String skipAAI,
411 @ApiParam(value = "msoRequest.requestId", required = false)
412 @QueryParam("msoRequest.requestId") String requestId,
413 @ApiParam(value = "msoRequest.serviceInstanceId", required = false)
414 @QueryParam("msoRequest.serviceInstanceId") String serviceInstanceId,
415 @ApiParam(value = "aaiNetworkId", required = false)
416 @PathParam("aaiNetworkId") String aaiNetworkId)
418 //This request responds synchronously only
419 logger.debug("Query network enter:{}" + aaiNetworkId);
420 MsoRequest msoRequest = new MsoRequest(requestId, serviceInstanceId);
423 int respStatus = HttpStatus.SC_OK;
424 QueryNetworkResponse resp = new QueryNetworkResponse(networkStackId, null, networkStackId, null, null);
425 Holder<Boolean> networkExists = new Holder<>();
426 Holder<String> networkId = new Holder<>();
427 Holder<String> neutronNetworkId = new Holder<>();
428 Holder<NetworkStatus> status = new Holder<>();
429 Holder<List<RouteTarget>> routeTargets = new Holder<>();
430 Holder<Map<String, String>> subnetIdMap = new Holder<>();
432 adapter.queryNetworkContrail(cloudSiteId, tenantId, aaiNetworkId, msoRequest,
433 networkExists, networkId, neutronNetworkId, status, routeTargets, subnetIdMap);
435 if (!networkExists.value) {
436 logger.debug("network not found");
437 respStatus = HttpStatus.SC_NOT_FOUND;
439 logger.debug("network found {}, status={}", networkId.value, status.value);
440 resp.setNetworkExists(networkExists.value);
441 resp.setNetworkId(networkId.value);
442 resp.setNeutronNetworkId(neutronNetworkId.value);
443 resp.setNetworkStatus(status.value);
444 resp.setRouteTargets(routeTargets.value);
445 resp.setSubnetIdMap(subnetIdMap.value);
447 logger.debug("Query network exit");
450 .entity(new GenericEntity<QueryNetworkResponse>(resp) {})
452 } catch (NetworkException e) {
453 logger.error("{} {} Exception when query VNF ", MessageEnum.RA_QUERY_VNF_ERR,
454 MsoLogger.ErrorCode.BusinessProcesssError.getValue(), e);
455 QueryNetworkError err = new QueryNetworkError();
456 err.setMessage(e.getMessage());
457 err.setCategory(MsoExceptionCategory.INTERNAL);
459 .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
460 .entity(new GenericEntity<QueryNetworkError>(err) {})
466 @Path("{aaiNetworkId}/rollback")
467 @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
468 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
469 @ApiOperation(value = "RollbackNetwork",
470 response = Response.class,
471 notes = "Rollback an existing network")
473 @ApiResponse(code = 200, message = "Rollback network successful"),
474 @ApiResponse(code = 202, message = "Rollback network request has been accepted (async only)"),
475 @ApiResponse(code = 500, message = "Rollback network failed, examine entity object for details") })
476 public Response rollbackNetwork(
477 @ApiParam(value = "RollbackNetworkRequest in JSON format", required = true)
478 RollbackNetworkRequest req)
480 logger.debug("rollbackNetwork enter: {}", req.toJsonString());
481 RollbackNetworkTask task = new RollbackNetworkTask(req);
482 if (req.isSynchronous()) {
483 // This is a synchronous request
486 .status(task.getStatusCode())
487 .entity(task.getGenericEntityResponse())
490 // This is an asynchronous request
492 Thread t1 = new Thread(task);
494 } catch (Exception e) {
495 // problem handling create, send generic failure as sync resp to caller
496 logger.error("{} {} Exception in rollbackNetwork ", MessageEnum.RA_ROLLBACK_NULL,
497 MsoLogger.ErrorCode.BusinessProcesssError.getValue(), e);
498 return Response.serverError().build();
500 // send sync response (ACK) to caller
501 logger.debug("rollbackNetwork exit");
502 return Response.status(HttpStatus.SC_ACCEPTED).build();
506 public class RollbackNetworkTask implements Runnable {
507 private final RollbackNetworkRequest req;
508 private RollbackNetworkResponse response = null;
509 private RollbackNetworkError eresp = null;
510 private boolean sendxml;
512 public RollbackNetworkTask(RollbackNetworkRequest req) {
514 this.sendxml = true; // can be set with a field or header later
516 public int getStatusCode() {
517 return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST;
519 public Object getGenericEntityResponse() {
520 return (response != null)
521 ? new GenericEntity<RollbackNetworkResponse>(response) {}
522 : new GenericEntity<RollbackNetworkError>(eresp) {};
524 private String getResponse() {
525 if (response != null) {
526 return sendxml ? response.toXmlString() : response.toJsonString();
528 return sendxml ? eresp.toXmlString() : eresp.toJsonString();
533 logger.debug("RollbackNetworkTask start");
535 NetworkRollback nwr = req.getNetworkRollback();
536 adapter.rollbackNetwork(nwr);
537 response = new RollbackNetworkResponse(true, req.getMessageId());
538 } catch (NetworkException e) {
539 logger.debug(EXCEPTION, e);
540 eresp = new RollbackNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId());
542 if (!req.isSynchronous()) {
543 // This is asynch, so POST response back to caller
544 BpelRestClient bpelClient = bpelRestClientProvider.get();
545 bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml);
547 logger.debug("RollbackNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse());
552 @Path("{aaiNetworkId}")
553 @Consumes({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
554 @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
555 @ApiOperation(value = "UpdateNetwork",
556 response = Response.class,
557 notes = "Update an existing network")
559 @ApiResponse(code = 200, message = "Update network successful"),
560 @ApiResponse(code = 202, message = "Update network request has been accepted (async only)"),
561 @ApiResponse(code = 500, message = "Update network failed, examine entity object for details") })
562 public Response updateNetwork(
563 @ApiParam(value = "aaiNetworkId", required = true)
564 @PathParam("aaiNetworkId") String aaiNetworkId,
565 @ApiParam(value = "UpdateNetworkRequest in JSON format", required = true)
566 UpdateNetworkRequest req)
568 logger.debug("updateNetwork enter: {}", req.toJsonString());
569 if (aaiNetworkId == null || !aaiNetworkId.equals(req.getNetworkId())) {
571 .status(HttpStatus.SC_BAD_REQUEST)
572 .type(MediaType.TEXT_PLAIN)
573 .entity("A&AI NetworkId in URL ("+aaiNetworkId+") does not match content ("+req.getNetworkId()+")")
576 UpdateNetworkTask task = new UpdateNetworkTask(req);
577 if (req.isSynchronous()) {
578 // This is a synchronous request
581 .status(task.getStatusCode())
582 .entity(task.getGenericEntityResponse())
585 // This is an asynchronous request
587 Thread t1 = new Thread(task);
589 } catch (Exception e) {
590 // problem handling create, send generic failure as sync resp to caller
591 logger.error("{} {} Exception in updateNetwork ", MessageEnum.RA_UPDATE_NETWORK_ERR,
592 MsoLogger.ErrorCode.BusinessProcesssError.getValue(), e);
593 return Response.serverError().build();
595 // send sync response (ACK) to caller
596 logger.debug("updateNetwork exit");
597 return Response.status(HttpStatus.SC_ACCEPTED).build();
601 public class UpdateNetworkTask implements Runnable {
602 private final UpdateNetworkRequest req;
603 private UpdateNetworkResponse response = null;
604 private UpdateNetworkError eresp = null;
605 private boolean sendxml;
607 public UpdateNetworkTask(UpdateNetworkRequest req) {
609 this.sendxml = true; // can be set with a field or header later
611 public int getStatusCode() {
612 return (response != null) ? HttpStatus.SC_OK : HttpStatus.SC_BAD_REQUEST;
614 public Object getGenericEntityResponse() {
615 return (response != null)
616 ? new GenericEntity<UpdateNetworkResponse>(response) {}
617 : new GenericEntity<UpdateNetworkError>(eresp) {};
619 private String getResponse() {
620 if (response != null) {
621 return sendxml ? response.toXmlString() : response.toJsonString();
623 return sendxml ? eresp.toXmlString() : eresp.toJsonString();
628 logger.debug("UpdateNetworkTask start");
630 Holder<Map<String, String>> subnetIdMap = new Holder<>();
631 Holder<NetworkRollback> rollback = new Holder<> ();
632 HashMap<String, String> params = (HashMap<String, String>) req.getNetworkParams();
633 if (params == null) {
634 params = new HashMap<String,String>();
636 String shared = null;
637 String external = null;
639 if (req.getCloudSiteId().equals(TESTING_KEYWORD)) {
640 subnetIdMap.value = testMap();
641 NetworkRollback rb = new NetworkRollback ();
642 rb.setCloudId(req.getCloudSiteId());
643 rb.setTenantId(req.getTenantId());
644 rb.setMsoRequest(req.getMsoRequest());
646 } else if (req.isContrailRequest()) {
647 ContrailNetwork ctn = req.getContrailNetwork();
649 ctn = new ContrailNetwork();
650 req.setContrailNetwork(ctn);
652 if (params.containsKey("shared")) {
653 shared = params.get("shared");
655 if (ctn.getShared() != null) {
656 shared = ctn.getShared();
659 if (params.containsKey("external")) {
660 external = params.get("external");
662 if (ctn.getExternal() != null) {
663 external = ctn.getExternal();
666 adapter.updateNetworkContrail(
667 req.getCloudSiteId(),
669 req.getNetworkType(),
670 req.getModelCustomizationUuid(),
671 req.getNetworkStackId(),
672 req.getNetworkName(),
673 req.getContrailNetwork().getRouteTargets(),
678 req.getContrailNetwork().getPolicyFqdns(),
679 req.getContrailNetwork().getRouteTableFqdns(),
684 ProviderVlanNetwork pvn = req.getProviderVlanNetwork();
686 pvn = new ProviderVlanNetwork();
687 req.setProviderVlanNetwork(pvn);
689 if (params.containsKey("shared")) {
690 shared = params.get("shared");
692 if (params.containsKey("external")) {
693 external = params.get("external");
695 adapter.updateNetwork(
696 req.getCloudSiteId(),
698 req.getNetworkType(),
699 req.getModelCustomizationUuid(),
700 req.getNetworkStackId(),
701 req.getNetworkName(),
702 req.getProviderVlanNetwork().getPhysicalNetworkName(),
703 req.getProviderVlanNetwork().getVlans(),
712 response = new UpdateNetworkResponse(
714 null, // NeutronNetworkId is not available from an update
717 } catch (NetworkException e) {
718 logger.debug(EXCEPTION, e);
719 eresp = new UpdateNetworkError(e.getMessage(), MsoExceptionCategory.INTERNAL, true, req.getMessageId());
721 if (!req.isSynchronous()) {
722 // This is asynch, so POST response back to caller
723 BpelRestClient bpelClient = bpelRestClientProvider.get();
724 bpelClient.bpelPost(getResponse(), req.getNotificationUrl(), sendxml);
726 logger.debug("UpdateNetworkTask exit: code={}, resp={}", getStatusCode(), getResponse());
730 public static Map<String, String> testMap() {
731 Map<String, String> m = new HashMap<>();
732 m.put("mickey", "7");
733 m.put("clyde", "10");
734 m.put("wayne", "99");