2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.sdnc.vnfapi;
24 import java.text.DateFormat;
25 import java.text.SimpleDateFormat;
26 import java.util.ArrayList;
27 import java.util.Date;
28 import java.util.Properties;
29 import java.util.TimeZone;
30 import java.util.concurrent.ExecutionException;
31 import java.util.concurrent.ExecutorService;
32 import java.util.concurrent.Executors;
33 import java.util.concurrent.Future;
35 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
36 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
37 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
38 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
39 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
40 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
41 import org.opendaylight.controller.md.sal.common.api.data.OptimisticLockFailedException;
42 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
43 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
44 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
45 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
46 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.NetworkTopologyOperationInput;
47 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.NetworkTopologyOperationInputBuilder;
48 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.NetworkTopologyOperationOutput;
49 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.NetworkTopologyOperationOutputBuilder;
50 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationInput;
51 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationInputBuilder;
52 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationOutput;
53 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationOutputBuilder;
54 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationInput;
55 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationInputBuilder;
56 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationOutput;
57 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationOutputBuilder;
58 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModules;
59 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVfModulesBuilder;
60 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationInput;
61 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationInputBuilder;
62 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationOutput;
63 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationOutputBuilder;
64 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstances;
65 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfInstancesBuilder;
66 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationInput;
67 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationInputBuilder;
68 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationOutput;
69 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationOutputBuilder;
70 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfs;
71 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.PreloadVnfsBuilder;
72 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VNFAPIService;
73 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModuleTopologyOperationInput;
74 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModuleTopologyOperationInputBuilder;
75 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModuleTopologyOperationOutput;
76 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModuleTopologyOperationOutputBuilder;
77 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModules;
78 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VfModulesBuilder;
79 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
80 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
81 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
82 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutputBuilder;
83 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstances;
84 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfInstancesBuilder;
85 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfTopologyOperationInput;
86 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfTopologyOperationInputBuilder;
87 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfTopologyOperationOutput;
88 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfTopologyOperationOutputBuilder;
89 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.Vnfs;
90 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.VnfsBuilder;
91 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.network.information.NetworkInformationBuilder;
92 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.data.PreloadData;
93 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.data.PreloadDataBuilder;
94 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadList;
95 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadListBuilder;
96 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadListKey;
97 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadList;
98 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadListBuilder;
99 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadListKey;
100 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadList;
101 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadListBuilder;
102 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadListKey;
103 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.request.information.RequestInformation;
104 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.sdnc.request.header.SdncRequestHeader;
105 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.sdnc.request.header.SdncRequestHeader.SvcAction;
106 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.data.ServiceData;
107 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.data.ServiceDataBuilder;
108 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus;
109 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus.RequestStatus;
110 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus.RpcAction;
111 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus.RpcName;
112 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus.VnfsdnAction;
113 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatus.VnfsdnSubaction;
114 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.service.status.ServiceStatusBuilder;
115 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.information.VfModuleInformationBuilder;
116 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleList;
117 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleListBuilder;
118 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleListKey;
119 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.preload.data.VfModulePreloadData;
120 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.preload.data.VfModulePreloadDataBuilder;
121 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.service.data.VfModuleServiceData;
122 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vf.module.service.data.VfModuleServiceDataBuilder;
123 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.information.VnfInformationBuilder;
124 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.information.VnfInstanceInformationBuilder;
125 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceList;
126 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceListBuilder;
127 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceListKey;
128 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.preload.data.VnfInstancePreloadData;
129 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.preload.data.VnfInstancePreloadDataBuilder;
130 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceData;
131 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceDataBuilder;
132 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.model.infrastructure.VnfList;
133 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.model.infrastructure.VnfListBuilder;
134 import org.opendaylight.yang.gen.v1.org.onap.sdnctl.vnf.rev150720.vnf.model.infrastructure.VnfListKey;
135 import org.opendaylight.yangtools.concepts.ListenerRegistration;
136 import org.opendaylight.yangtools.yang.binding.DataObject;
137 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
138 import org.opendaylight.yangtools.yang.common.RpcResult;
139 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
140 import org.slf4j.Logger;
141 import org.slf4j.LoggerFactory;
143 import com.google.common.base.Optional;
144 import com.google.common.util.concurrent.CheckedFuture;
145 import com.google.common.util.concurrent.FutureCallback;
146 import com.google.common.util.concurrent.Futures;
147 import com.google.common.util.concurrent.SettableFuture;
151 * Defines a base implementation for your provider. This class extends from a helper class
152 * which provides storage for the most commonly used components of the MD-SAL. Additionally the
153 * base class provides some basic logging and initialization / clean up methods.
157 public class vnfapiProvider implements AutoCloseable, VNFAPIService, DataChangeListener{
159 private final Logger log = LoggerFactory.getLogger( vnfapiProvider.class );
160 private final String appName = "vnfapi";
161 private final ExecutorService executor;
164 private ListenerRegistration<DataChangeListener> dclServices;
166 protected DataBroker dataBroker;
167 protected NotificationProviderService notificationService;
168 protected RpcProviderRegistry rpcRegistry;
169 protected BindingAwareBroker.RpcRegistration<VNFAPIService> rpcRegistration;
173 public vnfapiProvider(DataBroker dataBroker2,
174 NotificationProviderService notificationProviderService,
175 RpcProviderRegistry rpcProviderRegistry) {
176 this.log.info( "Creating provider for " + appName );
177 executor = Executors.newFixedThreadPool(1);
178 dataBroker = dataBroker2;
179 notificationService = notificationProviderService;
180 rpcRegistry = rpcProviderRegistry;
185 public void initialize(){
186 log.info( "Initializing provider for " + appName );
187 // Create the top level containers
190 VnfSdnUtil.loadProperties();
191 } catch (Exception e) {
192 log.error("Caught Exception while trying to load properties file: ", e);
194 rpcRegistration = rpcRegistry.addRpcImplementation(VNFAPIService.class, this);
196 log.info( "Initialization complete for " + appName );
199 private void createContainers() {
200 final WriteTransaction t = dataBroker.newReadWriteTransaction();
202 // Create the Vnfs container
203 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(Vnfs.class),
204 new VnfsBuilder().build());
205 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(Vnfs.class),
206 new VnfsBuilder().build());
208 // Create the PreloadVnfs container
209 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(PreloadVnfs.class),
210 new PreloadVnfsBuilder().build());
211 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(PreloadVnfs.class),
212 new PreloadVnfsBuilder().build());
214 // 1610 Create the PreloadVnfInstances container
215 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(PreloadVnfInstances.class),
216 new PreloadVnfInstancesBuilder().build());
217 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(PreloadVnfInstances.class),
218 new PreloadVnfInstancesBuilder().build());
220 // 1610 Create the VnfInstances container
221 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(VnfInstances.class),
222 new VnfInstancesBuilder().build());
223 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(VnfInstances.class),
224 new VnfInstancesBuilder().build());
226 // 1610 Create the PreloadVfModules container
227 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(PreloadVfModules.class),
228 new PreloadVfModulesBuilder().build());
229 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(PreloadVfModules.class),
230 new PreloadVfModulesBuilder().build());
232 // 1610 Create the VfModules container
233 t.merge(LogicalDatastoreType.CONFIGURATION, InstanceIdentifier.create(VfModules.class),
234 new VfModulesBuilder().build());
235 t.merge(LogicalDatastoreType.OPERATIONAL, InstanceIdentifier.create(VfModules.class),
236 new VfModulesBuilder().build());
239 CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = t.submit();
241 log.info("Create Containers succeeded!: ");
243 } catch (InterruptedException | ExecutionException e) {
244 log.error("Create Containers Failed: " + e);
250 protected void initializeChild() {
251 //Override if you have custom initialization intelligence
255 public void close() throws Exception {
256 log.info( "Closing provider for " + appName );
258 rpcRegistration.close();
259 // dclServices.close();
260 log.info( "Successfully closed provider for " + appName );
263 // On data change not used
265 public void onDataChanged(
266 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
267 boolean changed = false;
268 log.info(" IN ON DATA CHANGE: ");
269 WriteTransaction writeTransaction = dataBroker
270 .newWriteOnlyTransaction();
272 DataObject updatedSubTree = change.getUpdatedSubtree();
274 if (updatedSubTree != null) {
275 if (log.isDebugEnabled())
277 log.debug("updatedSubTree was non-null:" + updatedSubTree);
279 if ( updatedSubTree instanceof Vnfs ) {
280 ArrayList<VnfList> vnfList = (ArrayList<VnfList>) ((Vnfs) updatedSubTree).getVnfList();
281 if (vnfList != null) {
282 for (VnfList entry : vnfList) {
283 ServiceData serviceData = entry.getServiceData();
284 ServiceStatus serviceStatus = entry.getServiceStatus();
285 if (serviceData != null && serviceStatus != null) {
287 // ServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
289 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
290 if (log.isDebugEnabled())
292 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
294 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
301 if ( updatedSubTree instanceof PreloadVnfs ) {
302 ArrayList<VnfPreloadList> vnfList = (ArrayList<VnfPreloadList>) ((PreloadVnfs) updatedSubTree).getVnfPreloadList();
303 if (vnfList != null) {
304 for (VnfPreloadList entry : vnfList) {
305 PreloadData preloadData = entry.getPreloadData();
306 if (preloadData != null ) {
308 // PreloadData change detected
310 // handlePreloadDataUpdated(preloadData, writeTransaction);
317 if ( updatedSubTree instanceof PreloadVnfInstances ) {
318 ArrayList<VnfInstancePreloadList> vnfInstanceList = (ArrayList<VnfInstancePreloadList>) ((PreloadVnfInstances) updatedSubTree).getVnfInstancePreloadList();
319 if (vnfInstanceList != null) {
320 for (VnfInstancePreloadList entry : vnfInstanceList) {
321 VnfInstancePreloadData vnfInstancePreloadData = entry.getVnfInstancePreloadData();
322 if (vnfInstancePreloadData != null ) {
324 // PreloadData change detected
326 // handlePreloadDataUpdated(preloadData, writeTransaction);
333 if ( updatedSubTree instanceof VnfInstances ) {
334 ArrayList<VnfInstanceList> vnfInstanceList = (ArrayList<VnfInstanceList>) ((VnfInstances) updatedSubTree).getVnfInstanceList();
335 if (vnfInstanceList != null) {
336 for (VnfInstanceList entry : vnfInstanceList) {
337 VnfInstanceServiceData vnfInstanceServiceData = entry.getVnfInstanceServiceData();
338 ServiceStatus serviceStatus = entry.getServiceStatus();
339 if (vnfInstanceServiceData != null && serviceStatus != null) {
341 // VnfInstanceServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
343 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
344 if (log.isDebugEnabled())
346 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
348 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
356 if ( updatedSubTree instanceof PreloadVfModules ) {
357 ArrayList<VfModulePreloadList> vnfInstanceList = (ArrayList<VfModulePreloadList>) ((PreloadVfModules) updatedSubTree).getVfModulePreloadList();
358 if (vnfInstanceList != null) {
359 for (VfModulePreloadList entry : vnfInstanceList) {
360 VfModulePreloadData vnfInstancePreloadData = entry.getVfModulePreloadData();
361 if (vnfInstancePreloadData != null ) {
363 // PreloadData change detected
365 // handlePreloadDataUpdated(preloadData, writeTransaction);
372 if ( updatedSubTree instanceof VfModules ) {
373 ArrayList<VfModuleList> vfModuleList = (ArrayList<VfModuleList>) ((VfModules) updatedSubTree).getVfModuleList();
374 if (vfModuleList != null) {
375 for (VfModuleList entry : vfModuleList) {
376 VfModuleServiceData vfModuleServiceData = entry.getVfModuleServiceData();
377 ServiceStatus serviceStatus = entry.getServiceStatus();
378 if (vfModuleServiceData != null && serviceStatus != null) {
380 // VfModuleServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
382 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
383 if (log.isDebugEnabled())
385 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
387 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
395 // Do the write transaction only if something changed.
397 CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = writeTransaction
399 Futures.addCallback(checkedFuture, new FutureCallback<Void>() {
402 public void onSuccess(Void arg0) {
403 log.debug("Successfully updated Service Status");
407 public void onFailure(Throwable ex) {
409 "Failed updating Service Status",
416 private static class Iso8601Util
418 private static TimeZone tz = TimeZone.getTimeZone("UTC");
419 private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
426 private static String now()
428 return df.format(new Date());
432 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, String errorCode, String errorMessage, String ackFinal)
434 serviceStatusBuilder.setResponseCode(errorCode);
435 serviceStatusBuilder.setResponseMessage(errorMessage);
436 serviceStatusBuilder.setFinalIndicator(ackFinal);
437 serviceStatusBuilder.setResponseTimestamp(Iso8601Util.now());
440 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, RequestInformation requestInformation)
442 if (requestInformation != null && requestInformation.getRequestAction() != null) {
443 switch (requestInformation.getRequestAction())
445 case VNFActivateRequest:
446 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VNFActivateRequest);
448 case ChangeVNFActivateRequest:
449 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVNFActivateRequest);
451 case DisconnectVNFRequest:
452 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVNFRequest);
454 case PreloadVNFRequest:
455 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVNFRequest);
457 case DeletePreloadVNFRequest:
458 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DeletePreloadVNFRequest);
460 // 1610 vnf-instance Requests
461 case VnfInstanceActivateRequest:
462 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VnfInstanceActivateRequest);
464 case ChangeVnfInstanceActivateRequest:
465 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVnfInstanceActivateRequest);
467 case DisconnectVnfInstanceRequest:
468 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVnfInstanceRequest);
470 case PreloadVnfInstanceRequest:
471 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVnfInstanceRequest);
473 // 1610 vf-module Requests
474 case VfModuleActivateRequest:
475 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VfModuleActivateRequest);
477 case ChangeVfModuleActivateRequest:
478 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVfModuleActivateRequest);
480 case DisconnectVfModuleRequest:
481 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVfModuleRequest);
483 case PreloadVfModuleRequest:
484 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVfModuleRequest);
487 log.error("Unknown RequestAction: " + requestInformation.getRequestAction() );
491 if (requestInformation != null && requestInformation.getRequestSubAction() != null) {
492 switch (requestInformation.getRequestSubAction())
495 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.SUPP);
498 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.CANCEL);
501 log.error("Unknown RequestSubAction: " + requestInformation.getRequestSubAction() );
507 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, SdncRequestHeader requestHeader)
509 if (requestHeader != null && requestHeader.getSvcAction() != null) {
510 switch (requestHeader.getSvcAction())
513 serviceStatusBuilder.setRpcAction(RpcAction.Reserve);
516 serviceStatusBuilder.setRpcAction(RpcAction.Activate);
519 serviceStatusBuilder.setRpcAction(RpcAction.Assign);
522 serviceStatusBuilder.setRpcAction(RpcAction.Delete);
525 serviceStatusBuilder.setRpcAction(RpcAction.Changeassign);
528 serviceStatusBuilder.setRpcAction(RpcAction.Changedelete);
531 serviceStatusBuilder.setRpcAction(RpcAction.Rollback);
534 log.error("Unknown SvcAction: " + requestHeader.getSvcAction() );
540 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder)
543 getServiceData(siid,serviceDataBuilder,LogicalDatastoreType.CONFIGURATION);
547 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder, LogicalDatastoreType type)
549 // See if any data exists yet for this siid, if so grab it.
550 InstanceIdentifier serviceInstanceIdentifier =
551 InstanceIdentifier.<Vnfs>builder(Vnfs.class)
552 .child(VnfList.class, new VnfListKey(siid)).toInstance();
553 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
554 Optional<VnfList> data = null;
556 data = (Optional<VnfList>) readTx.read(type, serviceInstanceIdentifier).get();
557 } catch (InterruptedException | ExecutionException e) {
558 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
561 if (data != null && data.isPresent()) {
562 ServiceData serviceData = (ServiceData) data.get().getServiceData();
563 if (serviceData != null) {
564 log.info("Read MD-SAL ("+type+") data for ["+siid+"] ServiceData: " + serviceData);
565 serviceDataBuilder.setSdncRequestHeader(serviceData.getSdncRequestHeader());
566 serviceDataBuilder.setRequestInformation(serviceData.getRequestInformation());
567 serviceDataBuilder.setServiceInformation(serviceData.getServiceInformation());
568 serviceDataBuilder.setVnfRequestInformation(serviceData.getVnfRequestInformation());
569 serviceDataBuilder.setVnfId(serviceData.getVnfId());
570 serviceDataBuilder.setVnfTopologyInformation(serviceData.getVnfTopologyInformation());
571 serviceDataBuilder.setOperStatus(serviceData.getOperStatus());
573 log.info("No service-data found in MD-SAL ("+type+") for ["+siid+"] ");
576 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
581 private void getVnfInstanceServiceData(String siid, VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder)
584 getVnfInstanceServiceData(siid,vnfInstanceServiceDataBuilder,LogicalDatastoreType.CONFIGURATION);
587 private void getVnfInstanceServiceData(String siid, VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder, LogicalDatastoreType type)
589 // See if any data exists yet for this siid, if so grab it.
590 InstanceIdentifier vnfInstanceIdentifier =
591 InstanceIdentifier.<VnfInstances>builder(VnfInstances.class)
592 .child(VnfInstanceList.class, new VnfInstanceListKey(siid)).toInstance();
593 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
594 Optional<VnfInstanceList> data = null;
596 data = (Optional<VnfInstanceList>) readTx.read(type, vnfInstanceIdentifier).get();
597 } catch (InterruptedException | ExecutionException e) {
598 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
601 if (data != null && data.isPresent()) {
602 VnfInstanceServiceData vnfInstanceServiceData = (VnfInstanceServiceData) data.get().getVnfInstanceServiceData();
603 if (vnfInstanceServiceData != null) {
604 log.info("Read MD-SAL ("+type+") data for ["+siid+"] VnfInstanceServiceData: " + vnfInstanceServiceData);
605 vnfInstanceServiceDataBuilder.setSdncRequestHeader(vnfInstanceServiceData.getSdncRequestHeader());
606 vnfInstanceServiceDataBuilder.setRequestInformation(vnfInstanceServiceData.getRequestInformation());
607 vnfInstanceServiceDataBuilder.setServiceInformation(vnfInstanceServiceData.getServiceInformation());
608 vnfInstanceServiceDataBuilder.setVnfInstanceRequestInformation(vnfInstanceServiceData.getVnfInstanceRequestInformation());
609 vnfInstanceServiceDataBuilder.setVnfInstanceId(vnfInstanceServiceData.getVnfInstanceId());
610 vnfInstanceServiceDataBuilder.setVnfInstanceTopologyInformation(vnfInstanceServiceData.getVnfInstanceTopologyInformation());
611 vnfInstanceServiceDataBuilder.setOperStatus(vnfInstanceServiceData.getOperStatus());
613 log.info("No vnf-instance-service-data found in MD-SAL ("+type+") for ["+siid+"] ");
616 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
621 private void getVfModuleServiceData(String siid, VfModuleServiceDataBuilder vfModuleServiceDataBuilder)
624 getVfModuleServiceData(siid,vfModuleServiceDataBuilder,LogicalDatastoreType.CONFIGURATION);
627 private void getVfModuleServiceData(String siid, VfModuleServiceDataBuilder vfModuleServiceDataBuilder, LogicalDatastoreType type)
629 // See if any data exists yet for this siid, if so grab it.
630 InstanceIdentifier vfModuleIdentifier =
631 InstanceIdentifier.<VfModules>builder(VfModules.class)
632 .child(VfModuleList.class, new VfModuleListKey(siid)).toInstance();
633 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
634 Optional<VfModuleList> data = null;
636 data = (Optional<VfModuleList>) readTx.read(type, vfModuleIdentifier).get();
637 } catch (InterruptedException | ExecutionException e) {
638 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
641 if (data != null && data.isPresent()) {
642 VfModuleServiceData vfModuleServiceData = (VfModuleServiceData) data.get().getVfModuleServiceData();
643 if (vfModuleServiceData != null) {
644 log.info("Read MD-SAL ("+type+") data for ["+siid+"] VfModuleServiceData: " + vfModuleServiceData);
645 vfModuleServiceDataBuilder.setSdncRequestHeader(vfModuleServiceData.getSdncRequestHeader());
646 vfModuleServiceDataBuilder.setRequestInformation(vfModuleServiceData.getRequestInformation());
647 vfModuleServiceDataBuilder.setServiceInformation(vfModuleServiceData.getServiceInformation());
648 vfModuleServiceDataBuilder.setVfModuleRequestInformation(vfModuleServiceData.getVfModuleRequestInformation());
649 vfModuleServiceDataBuilder.setVfModuleId(vfModuleServiceData.getVfModuleId());
650 vfModuleServiceDataBuilder.setVfModuleTopologyInformation(vfModuleServiceData.getVfModuleTopologyInformation());
651 vfModuleServiceDataBuilder.setOperStatus(vfModuleServiceData.getOperStatus());
653 log.info("No vf-module-service-data found in MD-SAL ("+type+") for ["+siid+"] ");
656 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
661 private void getPreloadData(String vnf_name, String vnf_type, PreloadDataBuilder preloadDataBuilder)
664 getPreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
667 private void getPreloadData(String preload_name, String preload_type, PreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
669 // See if any data exists yet for this name/type, if so grab it.
670 InstanceIdentifier preloadInstanceIdentifier =
671 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
672 .child(VnfPreloadList.class, new VnfPreloadListKey(preload_name, preload_type)).toInstance();
673 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
674 Optional<VnfPreloadList> data = null;
676 data = (Optional<VnfPreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
677 } catch (InterruptedException | ExecutionException e) {
678 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
681 if (data != null && data.isPresent()) {
682 PreloadData preloadData = (PreloadData) data.get().getPreloadData();
683 if (preloadData != null) {
684 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] PreloadData: " + preloadData);
685 preloadDataBuilder.setVnfTopologyInformation(preloadData.getVnfTopologyInformation());
686 preloadDataBuilder.setNetworkTopologyInformation(preloadData.getNetworkTopologyInformation());
687 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
689 log.info("No preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
692 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
696 //1610 preload-vnf-instance
697 private void getVnfInstancePreloadData(String vnf_name, String vnf_type, VnfInstancePreloadDataBuilder preloadDataBuilder)
700 getVnfInstancePreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
703 //1610 preload-vnf-instance
704 private void getVnfInstancePreloadData(String preload_name, String preload_type, VnfInstancePreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
706 // See if any data exists yet for this name/type, if so grab it.
707 InstanceIdentifier preloadInstanceIdentifier =
708 InstanceIdentifier.<PreloadVnfInstances>builder(PreloadVnfInstances.class)
709 .child(VnfInstancePreloadList.class, new VnfInstancePreloadListKey(preload_name, preload_type)).toInstance();
710 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
711 Optional<VnfInstancePreloadList> data = null;
713 data = (Optional<VnfInstancePreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
714 } catch (InterruptedException | ExecutionException e) {
715 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
718 if (data != null && data.isPresent()) {
719 VnfInstancePreloadData preloadData = (VnfInstancePreloadData) data.get().getVnfInstancePreloadData();
720 if (preloadData != null) {
721 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] VnfInstancePreloadData: " + preloadData);
722 preloadDataBuilder.setVnfInstanceTopologyInformation(preloadData.getVnfInstanceTopologyInformation());
723 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
725 log.info("No vnf-instance-preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
728 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
732 // 1610 preload-vf-module
733 private void getVfModulePreloadData(String vnf_name, String vnf_type, VfModulePreloadDataBuilder preloadDataBuilder)
736 getVfModulePreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
739 private void getVfModulePreloadData(String preload_name, String preload_type, VfModulePreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
741 // See if any data exists yet for this name/type, if so grab it.
742 InstanceIdentifier preloadInstanceIdentifier =
743 InstanceIdentifier.<PreloadVfModules>builder(PreloadVfModules.class)
744 .child(VfModulePreloadList.class, new VfModulePreloadListKey(preload_name, preload_type)).toInstance();
745 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
746 Optional<VfModulePreloadList> data = null;
748 data = (Optional<VfModulePreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
749 } catch (InterruptedException | ExecutionException e) {
750 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
753 if (data != null && data.isPresent()) {
754 VfModulePreloadData preloadData = (VfModulePreloadData) data.get().getVfModulePreloadData();
755 if (preloadData != null) {
756 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] VfModulePreloadData: " + preloadData);
757 preloadDataBuilder.setVfModuleTopologyInformation(preloadData.getVfModuleTopologyInformation());
758 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
760 log.info("No preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
763 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
767 private void SaveVnfList (final VnfList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
768 // Each entry will be identifiable by a unique key, we have to create that identifier
769 InstanceIdentifier.InstanceIdentifierBuilder<VnfList> vnfListIdBuilder =
770 InstanceIdentifier.<Vnfs>builder(Vnfs.class)
771 .child(VnfList.class, entry.getKey());
772 InstanceIdentifier<VnfList> path = vnfListIdBuilder.toInstance();
777 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
779 tx.merge(storeType, path, entry);
781 tx.put(storeType, path, entry);
783 tx.submit().checkedGet();
784 log.debug("Update DataStore succeeded");
786 } catch (final TransactionCommitFailedException e) {
787 if(e instanceof OptimisticLockFailedException) {
789 log.debug("Got OptimisticLockFailedException on last try - failing ");
790 throw new IllegalStateException(e);
792 log.debug("Got OptimisticLockFailedException - trying again ");
794 log.debug("Update DataStore failed");
795 throw new IllegalStateException(e);
801 private void DeleteVnfList (final VnfList entry, LogicalDatastoreType storeType) throws IllegalStateException {
802 // Each entry will be identifiable by a unique key, we have to create that identifier
803 InstanceIdentifier.InstanceIdentifierBuilder<VnfList> vnfListIdBuilder =
804 InstanceIdentifier.<Vnfs>builder(Vnfs.class)
805 .child(VnfList.class, entry.getKey());
806 InstanceIdentifier<VnfList> path = vnfListIdBuilder.toInstance();
811 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
812 tx.delete(storeType, path);
813 tx.submit().checkedGet();
814 log.debug("DataStore delete succeeded");
816 } catch (final TransactionCommitFailedException e) {
817 if (e instanceof OptimisticLockFailedException) {
819 log.debug("Got OptimisticLockFailedException on last try - failing ");
820 throw new IllegalStateException(e);
822 log.debug("Got OptimisticLockFailedException - trying again ");
824 log.debug("Delete DataStore failed");
825 throw new IllegalStateException(e);
832 private void SaveVnfInstanceList (final VnfInstanceList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
833 // Each entry will be identifiable by a unique key, we have to create that identifier
834 InstanceIdentifier.InstanceIdentifierBuilder<VnfInstanceList> vnfInstanceListIdBuilder =
835 InstanceIdentifier.<VnfInstances>builder(VnfInstances.class)
836 .child(VnfInstanceList.class, entry.getKey());
837 InstanceIdentifier<VnfInstanceList> path = vnfInstanceListIdBuilder.toInstance();
842 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
844 tx.merge(storeType, path, entry);
846 tx.put(storeType, path, entry);
848 tx.submit().checkedGet();
849 log.debug("Update DataStore succeeded");
851 } catch (final TransactionCommitFailedException e) {
852 if(e instanceof OptimisticLockFailedException) {
854 log.debug("Got OptimisticLockFailedException on last try - failing ");
855 throw new IllegalStateException(e);
857 log.debug("Got OptimisticLockFailedException - trying again ");
859 log.debug("Update DataStore failed");
860 throw new IllegalStateException(e);
867 private void SaveVfModuleList (final VfModuleList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
868 // Each entry will be identifiable by a unique key, we have to create that identifier
869 InstanceIdentifier.InstanceIdentifierBuilder<VfModuleList> vfModuleListIdBuilder =
870 InstanceIdentifier.<VfModules>builder(VfModules.class)
871 .child(VfModuleList.class, entry.getKey());
872 InstanceIdentifier<VfModuleList> path = vfModuleListIdBuilder.toInstance();
877 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
879 tx.merge(storeType, path, entry);
881 tx.put(storeType, path, entry);
883 tx.submit().checkedGet();
884 log.debug("Update DataStore succeeded");
886 } catch (final TransactionCommitFailedException e) {
887 if(e instanceof OptimisticLockFailedException) {
889 log.debug("Got OptimisticLockFailedException on last try - failing ");
890 throw new IllegalStateException(e);
892 log.debug("Got OptimisticLockFailedException - trying again ");
894 log.debug("Update DataStore failed");
895 throw new IllegalStateException(e);
901 private void SavePreloadList(final VnfPreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
903 // Each entry will be identifiable by a unique key, we have to create that identifier
904 InstanceIdentifier.InstanceIdentifierBuilder<VnfPreloadList> vnfListIdBuilder =
905 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
906 .child(VnfPreloadList.class, entry.getKey());
907 InstanceIdentifier<VnfPreloadList> path = vnfListIdBuilder.toInstance();
911 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
913 tx.merge(storeType, path, entry);
915 tx.put(storeType, path, entry);
917 tx.submit().checkedGet();
918 log.debug("Update DataStore succeeded");
920 } catch (final TransactionCommitFailedException e) {
921 if(e instanceof OptimisticLockFailedException) {
923 log.debug("Got OptimisticLockFailedException on last try - failing ");
924 throw new IllegalStateException(e);
926 log.debug("Got OptimisticLockFailedException - trying again ");
928 log.debug("Update DataStore failed");
929 throw new IllegalStateException(e);
935 //1610 preload vnf-instance
936 private void SaveVnfInstancePreloadList(final VnfInstancePreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
938 // Each entry will be identifiable by a unique key, we have to create that identifier
939 InstanceIdentifier.InstanceIdentifierBuilder<VnfInstancePreloadList> vnfInstanceListIdBuilder =
940 InstanceIdentifier.<PreloadVnfInstances>builder(PreloadVnfInstances.class)
941 .child(VnfInstancePreloadList.class, entry.getKey());
942 InstanceIdentifier<VnfInstancePreloadList> path = vnfInstanceListIdBuilder.toInstance();
946 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
948 tx.merge(storeType, path, entry);
950 tx.put(storeType, path, entry);
952 tx.submit().checkedGet();
953 log.debug("Update DataStore succeeded");
955 } catch (final TransactionCommitFailedException e) {
956 if(e instanceof OptimisticLockFailedException) {
958 log.debug("Got OptimisticLockFailedException on last try - failing ");
959 throw new IllegalStateException(e);
961 log.debug("Got OptimisticLockFailedException - trying again ");
963 log.debug("Update DataStore failed");
964 throw new IllegalStateException(e);
970 //1610 preload vf-module
971 private void SaveVfModulePreloadList(final VfModulePreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
973 // Each entry will be identifiable by a unique key, we have to create that identifier
974 InstanceIdentifier.InstanceIdentifierBuilder<VfModulePreloadList> vfModuleListIdBuilder =
975 InstanceIdentifier.<PreloadVfModules>builder(PreloadVfModules.class)
976 .child(VfModulePreloadList.class, entry.getKey());
977 InstanceIdentifier<VfModulePreloadList> path = vfModuleListIdBuilder.toInstance();
981 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
983 tx.merge(storeType, path, entry);
985 tx.put(storeType, path, entry);
987 tx.submit().checkedGet();
988 log.debug("Update DataStore succeeded");
990 } catch (final TransactionCommitFailedException e) {
991 if(e instanceof OptimisticLockFailedException) {
993 log.debug("Got OptimisticLockFailedException on last try - failing ");
994 throw new IllegalStateException(e);
996 log.debug("Got OptimisticLockFailedException - trying again ");
998 log.debug("Update DataStore failed");
999 throw new IllegalStateException(e);
1005 //1610 vnf-instance-topology-operation
1007 public Future<RpcResult<VnfInstanceTopologyOperationOutput>> vnfInstanceTopologyOperation(
1008 VnfInstanceTopologyOperationInput input) {
1010 final String SVC_OPERATION = "vnf-instance-topology-operation";
1011 VnfInstanceServiceData vnfInstanceServiceData = null;
1012 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1013 Properties parms = new Properties();
1015 log.info( SVC_OPERATION +" called." );
1016 // create a new response object
1017 VnfInstanceTopologyOperationOutputBuilder responseBuilder = new VnfInstanceTopologyOperationOutputBuilder();
1019 //if(input == null || input.getVnfInstanceRequestInformation().getVnfInstanceTopologyIdentifier().getVnfInstanceId() == null )
1021 input.getVnfInstanceRequestInformation() == null ||
1022 input.getVnfInstanceRequestInformation().getVnfInstanceId() == null )
1024 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-id");
1025 responseBuilder.setResponseCode("403");
1026 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
1027 responseBuilder.setAckFinalIndicator("Y");
1028 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1029 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1031 return Futures.immediateFuture(rpcResult);
1034 // Grab the service instance ID from the input buffer
1035 String viid = input.getVnfInstanceRequestInformation().getVnfInstanceId();
1036 String preload_name = input.getVnfInstanceRequestInformation().getVnfInstanceName();
1037 String preload_type = input.getVnfInstanceRequestInformation().getVnfModelId();
1039 // Make sure we have a valid viid
1040 if(viid == null || viid.length() == 0 ) {
1041 log.debug("exiting "+SVC_OPERATION+" because of invalid vnf-instance-id");
1042 responseBuilder.setResponseCode("403");
1043 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
1044 responseBuilder.setAckFinalIndicator("Y");
1045 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1046 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1048 return Futures.immediateFuture(rpcResult);
1051 if (input.getSdncRequestHeader() != null) {
1052 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1055 // Get vnf-instance-preload-data
1056 VnfInstancePreloadDataBuilder vnfInstancePreloadDataBuilder = new VnfInstancePreloadDataBuilder();
1057 getVnfInstancePreloadData(preload_name, preload_type, vnfInstancePreloadDataBuilder);
1060 VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder = new VnfInstanceServiceDataBuilder();
1061 getVnfInstanceServiceData(viid,vnfInstanceServiceDataBuilder);
1063 // Get operational-data
1064 VnfInstanceServiceDataBuilder operDataBuilder = new VnfInstanceServiceDataBuilder();
1065 getVnfInstanceServiceData(viid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1067 // Set the serviceStatus based on input
1068 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1069 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1072 // setup a service-data object builder
1073 // ACTION vnf-topology-operation
1075 // USES sdnc-request-header;
1076 // USES request-information;
1077 // USES service-information;
1078 // USES vnf-request-information
1080 // USES vnf-topology-response-body;
1081 // USES vnf-information
1082 // USES service-information
1084 // container service-data
1085 // uses vnf-configuration-information;
1086 // uses oper-status;
1088 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+viid+"] input: " + input);
1089 VnfInstanceTopologyOperationInputBuilder inputBuilder = new VnfInstanceTopologyOperationInputBuilder(input);
1090 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1092 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+viid+"] operational-data: " + operDataBuilder.build());
1093 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1095 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + vnfInstancePreloadDataBuilder.build());
1096 VnfSdnUtil.toProperties(parms, "vnf-instance-preload-data", vnfInstancePreloadDataBuilder);
1098 // Call SLI sync method
1099 // Get SvcLogicService reference
1101 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1102 Properties respProps = null;
1104 String errorCode = "200";
1105 String errorMessage = null;
1106 String ackFinal = "Y";
1111 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1116 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vnfInstanceServiceDataBuilder, parms);
1120 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1121 errorMessage = e.getMessage();
1125 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1132 errorMessage = e.getMessage();
1133 log.error("Caught exception looking for service logic", e);
1137 if (respProps != null)
1139 errorCode = respProps.getProperty("error-code");
1140 errorMessage = respProps.getProperty("error-message");
1141 ackFinal = respProps.getProperty("ack-final", "Y");
1144 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1145 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1146 serviceStatusBuilder.setRpcName(RpcName.VnfInstanceTopologyOperation);
1148 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1149 responseBuilder.setResponseCode(errorCode);
1150 responseBuilder.setResponseMessage(errorMessage);
1151 responseBuilder.setAckFinalIndicator(ackFinal);
1152 VnfInstanceListBuilder vnfInstanceListBuilder = new VnfInstanceListBuilder();
1153 vnfInstanceListBuilder.setVnfInstanceId(viid);
1154 vnfInstanceListBuilder.setServiceStatus(serviceStatusBuilder.build());
1156 SaveVnfInstanceList (vnfInstanceListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1157 } catch (Exception e) {
1158 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] \n",e);
1160 log.error("Returned FAILED for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1161 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1162 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1164 return Futures.immediateFuture(rpcResult);
1167 // Got success from SLI
1169 vnfInstanceServiceData = vnfInstanceServiceDataBuilder.build();
1170 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] VnfInstanceServiceData: " + vnfInstanceServiceData);
1171 // svc-configuration-list
1172 VnfInstanceListBuilder vnfInstanceListBuilder = new VnfInstanceListBuilder();
1173 vnfInstanceListBuilder.setVnfInstanceServiceData(vnfInstanceServiceData);
1174 vnfInstanceListBuilder.setVnfInstanceId(vnfInstanceServiceData.getVnfInstanceId());
1175 //siid = vnfInstanceServiceData.getVnfInstanceId();
1176 vnfInstanceListBuilder.setServiceStatus(serviceStatusBuilder.build());
1177 SaveVnfInstanceList (vnfInstanceListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1178 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1180 // Only update operational tree on Delete or Activate
1181 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1182 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1184 log.info("Updating OPERATIONAL tree.");
1185 SaveVnfInstanceList (vnfInstanceListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1188 VnfInstanceInformationBuilder vnfInstanceInformationBuilder = new VnfInstanceInformationBuilder();
1189 vnfInstanceInformationBuilder.setVnfInstanceId(viid);
1190 responseBuilder.setVnfInstanceInformation(vnfInstanceInformationBuilder.build());
1191 responseBuilder.setServiceInformation(vnfInstanceServiceData.getServiceInformation());
1192 } catch (Exception e) {
1193 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] \n",e);
1194 responseBuilder.setResponseCode("500");
1195 responseBuilder.setResponseMessage(e.toString());
1196 responseBuilder.setAckFinalIndicator("Y");
1197 log.error("Returned FAILED for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1198 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1199 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1201 return Futures.immediateFuture(rpcResult);
1205 responseBuilder.setResponseCode(errorCode);
1206 responseBuilder.setAckFinalIndicator(ackFinal);
1207 if (errorMessage != null)
1209 responseBuilder.setResponseMessage(errorMessage);
1211 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+viid+"] ");
1212 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1214 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1215 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1217 return Futures.immediateFuture(rpcResult);
1220 //1610 vf-module-topology-operation
1222 public Future<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
1223 VfModuleTopologyOperationInput input) {
1225 final String SVC_OPERATION = "vf-module-topology-operation";
1226 VfModuleServiceData vfModuleServiceData = null;
1227 VnfInstanceServiceData vnfInstanceServiceData = null;
1228 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1229 Properties parms = new Properties();
1231 log.info( SVC_OPERATION +" called." );
1232 // create a new response object
1233 VfModuleTopologyOperationOutputBuilder responseBuilder = new VfModuleTopologyOperationOutputBuilder();
1235 // Validate vf-module-id from vf-module-request-information
1237 input.getVfModuleRequestInformation() == null ||
1238 input.getVfModuleRequestInformation().getVfModuleId() == null)
1240 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vf-module-id");
1241 responseBuilder.setResponseCode("403");
1242 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1243 responseBuilder.setAckFinalIndicator("Y");
1244 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1245 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1247 return Futures.immediateFuture(rpcResult);
1250 // Grab the vf-module-request-information.vf-module-id from the input buffer
1251 String vfid = input.getVfModuleRequestInformation().getVfModuleId();
1252 String preload_name = input.getVfModuleRequestInformation().getVfModuleName();
1253 String preload_type = input.getVfModuleRequestInformation().getVfModuleModelId();
1255 // Make sure we have a valid siid
1256 if(vfid == null || vfid.length() == 0 ) {
1257 log.debug("exiting "+SVC_OPERATION+" because of invalid vf-module-id");
1258 responseBuilder.setResponseCode("403");
1259 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1260 responseBuilder.setAckFinalIndicator("Y");
1261 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1262 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1264 return Futures.immediateFuture(rpcResult);
1267 // 1610 add vf-module-id to vnf-instance-list.vf-module-relationship-list
1268 String viid = input.getVfModuleRequestInformation().getVnfInstanceId();
1270 if(viid == null || viid.length() == 0 ) {
1271 log.debug("exiting "+SVC_OPERATION+" because of invalid vnf-instance-id");
1272 responseBuilder.setResponseCode("403");
1273 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
1274 responseBuilder.setAckFinalIndicator("Y");
1275 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1276 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1278 return Futures.immediateFuture(rpcResult);
1281 if (input.getSdncRequestHeader() != null) {
1282 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1285 // Get vf-module-preload-data
1286 VfModulePreloadDataBuilder vfModulePreloadDataBuilder = new VfModulePreloadDataBuilder();
1287 getVfModulePreloadData(preload_name, preload_type, vfModulePreloadDataBuilder);
1289 // Get vf-module-service-data
1290 VfModuleServiceDataBuilder vfModuleServiceDataBuilder = new VfModuleServiceDataBuilder();
1291 getVfModuleServiceData(vfid,vfModuleServiceDataBuilder);
1293 // Get vf-module operation-data
1294 VfModuleServiceDataBuilder operDataBuilder = new VfModuleServiceDataBuilder();
1295 getVfModuleServiceData(vfid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1297 // save service-data builder object for rollback
1298 VfModuleServiceDataBuilder rb_vfModuleServiceDataBuilder = vfModuleServiceDataBuilder;
1299 VfModuleServiceDataBuilder rb_operDataBuilder = operDataBuilder;
1301 // 1610 Need to pull vnf-instance-list.vf-module-relationship-list from MD-SAL
1302 VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder = new VnfInstanceServiceDataBuilder();
1303 getVnfInstanceServiceData(viid, vnfInstanceServiceDataBuilder);
1305 // vnf-instance operational-data
1306 VnfInstanceServiceDataBuilder vnfInstanceOperDataBuilder = new VnfInstanceServiceDataBuilder();
1307 getVnfInstanceServiceData(viid, vnfInstanceOperDataBuilder, LogicalDatastoreType.OPERATIONAL );
1309 // save operational builder object for rollback
1310 VnfInstanceServiceDataBuilder rb_vnfInstanceServiceDataBuilder = vnfInstanceServiceDataBuilder;
1311 VnfInstanceServiceDataBuilder rb_vnfInstanceOperDataBuilder = vnfInstanceOperDataBuilder;
1313 // Set the serviceStatus based on input
1314 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1315 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1318 // setup a service-data object builder
1319 // ACTION vnf-topology-operation
1321 // USES sdnc-request-header;
1322 // USES request-information;
1323 // USES service-information;
1324 // USES vnf-request-information
1326 // USES vnf-topology-response-body;
1327 // USES vnf-information
1328 // USES service-information
1330 // container service-data
1331 // uses vnf-configuration-information;
1332 // uses oper-status;
1334 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+vfid+"] input: " + input);
1335 VfModuleTopologyOperationInputBuilder inputBuilder = new VfModuleTopologyOperationInputBuilder(input);
1336 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1338 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+vfid+"] vf-module operational-data: " + operDataBuilder.build());
1339 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1341 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] vf-module-preload-data: " + vfModulePreloadDataBuilder.build());
1342 VnfSdnUtil.toProperties(parms, "vf-module-preload-data", vfModulePreloadDataBuilder);
1344 log.info("Adding vnf-instance CONFIG data for "+SVC_OPERATION+" ["+viid+"] vnf-instance-service-data: " + vnfInstanceServiceDataBuilder.build());
1345 VnfSdnUtil.toProperties(parms, "vnf-instance-service-data", vnfInstanceServiceDataBuilder);
1347 log.info("Adding vnf-instance OPERATIONAL data for "+SVC_OPERATION+" ["+viid+"] vnf-instance operational-data: " + vnfInstanceOperDataBuilder.build());
1348 VnfSdnUtil.toProperties(parms, "vnf-instance-operational-data", vnfInstanceOperDataBuilder);
1350 // Call SLI sync method
1351 // Get SvcLogicService reference
1353 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1354 Properties respProps = null;
1356 String errorCode = "200";
1357 String errorMessage = null;
1358 String ackFinal = "Y";
1363 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1368 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vfModuleServiceDataBuilder, parms);
1372 log.error("Caught exception executing service logic on vf-module for "+ SVC_OPERATION, e);
1373 errorMessage = e.getMessage();
1378 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1385 errorMessage = e.getMessage();
1386 log.error("Caught exception looking for service logic", e);
1390 if (respProps != null) {
1391 errorCode = respProps.getProperty("error-code");
1392 errorMessage = respProps.getProperty("error-message");
1393 ackFinal = respProps.getProperty("ack-final", "Y");
1396 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1397 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1398 serviceStatusBuilder.setRpcName(RpcName.VfModuleTopologyOperation);
1400 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1401 responseBuilder.setResponseCode(errorCode);
1402 responseBuilder.setResponseMessage(errorMessage);
1403 responseBuilder.setAckFinalIndicator(ackFinal);
1404 VfModuleListBuilder vfModuleListBuilder = new VfModuleListBuilder();
1405 vfModuleListBuilder.setVfModuleId(vfid);
1406 vfModuleListBuilder.setServiceStatus(serviceStatusBuilder.build());
1408 SaveVfModuleList (vfModuleListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1409 } catch (Exception e) {
1410 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] \n",e);
1412 log.error("Returned FAILED for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1413 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1414 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1416 return Futures.immediateFuture(rpcResult);
1419 // Got success from SLI
1420 // save vf-module-service-data in MD-SAL
1422 vfModuleServiceData = vfModuleServiceDataBuilder.build();
1423 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] VfModuleServiceData: " + vfModuleServiceData);
1425 VfModuleListBuilder vfModuleListBuilder = new VfModuleListBuilder();
1426 vfModuleListBuilder.setVfModuleServiceData(vfModuleServiceData);
1427 vfModuleListBuilder.setVfModuleId(vfModuleServiceData.getVfModuleId());
1428 //vfid = vfModuleServiceData.getVfModuleId();
1429 vfModuleListBuilder.setServiceStatus(serviceStatusBuilder.build());
1430 SaveVfModuleList (vfModuleListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1431 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1433 // Only update operational tree on Delete or Activate
1434 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1435 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1437 log.info("Updating OPERATIONAL tree.");
1438 SaveVfModuleList (vfModuleListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1441 VfModuleInformationBuilder vfModuleInformationBuilder = new VfModuleInformationBuilder();
1442 vfModuleInformationBuilder.setVfModuleId(vfid);
1443 responseBuilder.setVfModuleInformation(vfModuleInformationBuilder.build());
1444 responseBuilder.setServiceInformation(vfModuleServiceData.getServiceInformation());
1445 } catch (Exception e) {
1446 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] \n",e);
1447 responseBuilder.setResponseCode("500");
1448 responseBuilder.setResponseMessage(e.toString());
1449 responseBuilder.setAckFinalIndicator("Y");
1450 log.error("Returned FAILED for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1451 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1452 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1454 return Futures.immediateFuture(rpcResult);
1458 responseBuilder.setResponseCode(errorCode);
1459 responseBuilder.setAckFinalIndicator(ackFinal);
1460 if (errorMessage != null)
1462 responseBuilder.setResponseMessage(errorMessage);
1464 log.info("Updated vf-module in MD-SAL for "+SVC_OPERATION+" ["+vfid+"] ");
1465 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1467 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1468 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1470 return Futures.immediateFuture(rpcResult);
1475 public Future<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(
1476 VnfTopologyOperationInput input) {
1478 final String SVC_OPERATION = "vnf-topology-operation";
1479 ServiceData serviceData = null;
1480 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1481 Properties parms = new Properties();
1483 log.info( SVC_OPERATION +" called." );
1484 // create a new response object
1485 VnfTopologyOperationOutputBuilder responseBuilder = new VnfTopologyOperationOutputBuilder();
1488 input.getServiceInformation() == null ||
1489 input.getServiceInformation().getServiceInstanceId() == null ||
1490 input.getServiceInformation().getServiceInstanceId().length() == 0)
1492 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1493 responseBuilder.setResponseCode("403");
1494 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1495 responseBuilder.setAckFinalIndicator("Y");
1496 RpcResult<VnfTopologyOperationOutput> rpcResult =
1497 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1499 return Futures.immediateFuture(rpcResult);
1502 if(input.getVnfRequestInformation() == null ||
1503 input.getVnfRequestInformation().getVnfId() == null ||
1504 input.getVnfRequestInformation().getVnfId().length() == 0)
1506 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vf-module-id");
1507 responseBuilder.setResponseCode("403");
1508 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1509 responseBuilder.setAckFinalIndicator("Y");
1510 RpcResult<VnfTopologyOperationOutput> rpcResult =
1511 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1513 return Futures.immediateFuture(rpcResult);
1516 // Grab the service instance ID from the input buffer
1517 String siid = input.getVnfRequestInformation().getVnfId();
1518 String preload_name = input.getVnfRequestInformation().getVnfName();
1519 String preload_type = input.getVnfRequestInformation().getVnfType();
1522 // Make sure we have a valid siid
1523 if(siid == null || siid.length() == 0 ) {
1524 log.debug("exiting "+SVC_OPERATION+" because of invalid siid");
1525 responseBuilder.setResponseCode("403");
1526 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1527 responseBuilder.setAckFinalIndicator("Y");
1528 RpcResult<VnfTopologyOperationOutput> rpcResult =
1529 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1531 return Futures.immediateFuture(rpcResult);
1535 if (input.getSdncRequestHeader() != null) {
1536 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1539 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1540 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1542 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1543 getServiceData(siid,serviceDataBuilder);
1545 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
1546 getServiceData(siid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1548 // Set the serviceStatus based on input
1549 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1550 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1553 // setup a service-data object builder
1554 // ACTION vnf-topology-operation
1556 // USES sdnc-request-header;
1557 // USES request-information;
1558 // USES service-information;
1559 // USES vnf-request-information
1561 // USES vnf-topology-response-body;
1562 // USES vnf-information
1563 // USES service-information
1565 // container service-data
1566 // uses vnf-configuration-information;
1567 // uses oper-status;
1569 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1570 VnfTopologyOperationInputBuilder inputBuilder = new VnfTopologyOperationInputBuilder(input);
1571 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1573 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
1574 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1576 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + preloadDataBuilder.build());
1577 VnfSdnUtil.toProperties(parms, "preload-data", preloadDataBuilder);
1579 // Call SLI sync method
1580 // Get SvcLogicService reference
1582 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1583 Properties respProps = null;
1585 String errorCode = "200";
1586 String errorMessage = null;
1587 String ackFinal = "Y";
1592 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1597 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1601 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1602 errorMessage = e.getMessage();
1606 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1613 errorMessage = e.getMessage();
1614 log.error("Caught exception looking for service logic", e);
1618 if (respProps != null)
1620 errorCode = respProps.getProperty("error-code");
1621 errorMessage = respProps.getProperty("error-message");
1622 ackFinal = respProps.getProperty("ack-final", "Y");
1625 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1626 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1627 serviceStatusBuilder.setRpcName(RpcName.VnfTopologyOperation);
1629 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1630 responseBuilder.setResponseCode(errorCode);
1631 responseBuilder.setResponseMessage(errorMessage);
1632 responseBuilder.setAckFinalIndicator(ackFinal);
1633 VnfListBuilder vnfListBuilder = new VnfListBuilder();
1634 vnfListBuilder.setVnfId(siid);
1635 vnfListBuilder.setServiceStatus(serviceStatusBuilder.build());
1637 SaveVnfList (vnfListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1638 } catch (Exception e) {
1639 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1641 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1642 RpcResult<VnfTopologyOperationOutput> rpcResult =
1643 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1645 return Futures.immediateFuture(rpcResult);
1648 // Got success from SLI
1650 serviceData = serviceDataBuilder.build();
1651 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1652 // svc-configuration-list
1653 VnfListBuilder vnfListBuilder = new VnfListBuilder();
1654 vnfListBuilder.setServiceData(serviceData);
1655 vnfListBuilder.setVnfId(serviceData.getVnfId());
1656 siid = serviceData.getVnfId();
1657 vnfListBuilder.setServiceStatus(serviceStatusBuilder.build());
1658 SaveVnfList (vnfListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1659 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1661 // Only update operational tree on Delete or Activate
1662 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate)) {
1663 log.info("Updating OPERATIONAL tree.");
1664 SaveVnfList (vnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1666 else if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1667 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Rollback)) {
1668 log.info("Delete OPERATIONAL tree.");
1669 DeleteVnfList (vnfListBuilder.build(), LogicalDatastoreType.CONFIGURATION);
1670 DeleteVnfList (vnfListBuilder.build(), LogicalDatastoreType.OPERATIONAL);
1673 VnfInformationBuilder vnfInformationBuilder = new VnfInformationBuilder();
1674 vnfInformationBuilder.setVnfId(siid);
1675 responseBuilder.setVnfInformation(vnfInformationBuilder.build());
1676 responseBuilder.setServiceInformation(serviceData.getServiceInformation());
1677 } catch (Exception e) {
1678 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1679 responseBuilder.setResponseCode("500");
1680 responseBuilder.setResponseMessage(e.toString());
1681 responseBuilder.setAckFinalIndicator("Y");
1682 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1683 RpcResult<VnfTopologyOperationOutput> rpcResult =
1684 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1686 return Futures.immediateFuture(rpcResult);
1690 responseBuilder.setResponseCode(errorCode);
1691 responseBuilder.setAckFinalIndicator(ackFinal);
1692 if (errorMessage != null)
1694 responseBuilder.setResponseMessage(errorMessage);
1696 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1697 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1699 RpcResult<VnfTopologyOperationOutput> rpcResult =
1700 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1702 return Futures.immediateFuture(rpcResult);
1707 public Future<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
1708 NetworkTopologyOperationInput input) {
1710 final String SVC_OPERATION = "network-topology-operation";
1711 ServiceData serviceData = null;
1712 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1713 Properties parms = new Properties();
1715 log.info( SVC_OPERATION +" called." );
1716 // create a new response object
1717 NetworkTopologyOperationOutputBuilder responseBuilder = new NetworkTopologyOperationOutputBuilder();
1720 input.getServiceInformation() == null ||
1721 input.getServiceInformation().getServiceInstanceId() == null ||
1722 input.getServiceInformation().getServiceInstanceId().length() == 0)
1724 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1725 responseBuilder.setResponseCode("403");
1726 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1727 responseBuilder.setAckFinalIndicator("Y");
1728 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1729 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1731 return Futures.immediateFuture(rpcResult);
1734 if(input.getNetworkRequestInformation() == null || input.getNetworkRequestInformation().getNetworkName() == null) {
1735 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1736 responseBuilder.setResponseCode("403");
1737 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1738 responseBuilder.setAckFinalIndicator("Y");
1739 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1740 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1742 return Futures.immediateFuture(rpcResult);
1745 // Grab the service instance ID from the input buffer
1747 if (input.getSdncRequestHeader().getSvcAction().equals("assign")) {
1748 siid = input.getNetworkRequestInformation().getNetworkName();
1751 siid = input.getNetworkRequestInformation().getNetworkId();
1753 String preload_name = input.getNetworkRequestInformation().getNetworkName();
1754 String preload_type = input.getNetworkRequestInformation().getNetworkType();
1757 if(siid == null || siid.length() == 0 ) {
1758 log.debug("exiting "+SVC_OPERATION+" because of invalid siid");
1759 responseBuilder.setResponseCode("403");
1760 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1761 responseBuilder.setAckFinalIndicator("Y");
1762 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1763 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1765 return Futures.immediateFuture(rpcResult);
1769 if (input.getSdncRequestHeader() != null) {
1770 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1773 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1774 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1776 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1777 NetworkTopologyOperationInputBuilder inputBuilder = new NetworkTopologyOperationInputBuilder(input);
1778 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1781 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
1782 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1784 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + preloadDataBuilder.build());
1785 VnfSdnUtil.toProperties(parms, "preload-data", preloadDataBuilder);
1788 // Call SLI sync method
1789 // Get SvcLogicService reference
1791 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1792 Properties respProps = null;
1794 String errorCode = "200";
1795 String errorMessage = null;
1796 String ackFinal = "Y";
1797 String networkId = "error";
1802 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1807 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1811 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1812 errorMessage = e.getMessage();
1816 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1823 errorMessage = e.getMessage();
1824 log.error("Caught exception looking for service logic", e);
1828 if (respProps != null)
1830 errorCode = respProps.getProperty("error-code");
1831 errorMessage = respProps.getProperty("error-message");
1832 ackFinal = respProps.getProperty("ack-final", "Y");
1833 networkId = respProps.getProperty("networkId","0");
1836 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1837 responseBuilder.setResponseCode(errorCode);
1838 responseBuilder.setResponseMessage(errorMessage);
1839 responseBuilder.setAckFinalIndicator(ackFinal);
1841 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1843 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1844 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1846 return Futures.immediateFuture(rpcResult);
1849 // Got success from SLI
1851 NetworkInformationBuilder networkInformationBuilder = new NetworkInformationBuilder();
1852 networkInformationBuilder.setNetworkId(networkId);
1853 responseBuilder.setNetworkInformation(networkInformationBuilder.build());
1854 responseBuilder.setServiceInformation(input.getServiceInformation());
1855 } catch (IllegalStateException e) {
1856 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1857 responseBuilder.setResponseCode("500");
1858 responseBuilder.setResponseMessage(e.toString());
1859 responseBuilder.setAckFinalIndicator("Y");
1860 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1861 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1862 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1864 return Futures.immediateFuture(rpcResult);
1868 responseBuilder.setResponseCode(errorCode);
1869 responseBuilder.setAckFinalIndicator(ackFinal);
1870 if (errorMessage != null)
1872 responseBuilder.setResponseMessage(errorMessage);
1874 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1875 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1877 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1878 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1880 return Futures.immediateFuture(rpcResult);
1884 public Future<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
1885 PreloadVnfTopologyOperationInput input) {
1887 final String SVC_OPERATION = "preload-vnf-topology-operation";
1888 PreloadData preloadData = null;
1889 Properties parms = new Properties();
1891 log.info( SVC_OPERATION +" called." );
1892 // create a new response object
1893 PreloadVnfTopologyOperationOutputBuilder responseBuilder = new PreloadVnfTopologyOperationOutputBuilder();
1895 // Result from savePreloadData
1896 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
1898 if(input == null || input.getVnfTopologyInformation() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType() == null) {
1899 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-name and vnf-type");
1900 responseBuilder.setResponseCode("403");
1901 responseBuilder.setResponseMessage("invalid input, null or empty vnf-name and vnf-type");
1902 responseBuilder.setAckFinalIndicator("Y");
1903 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1904 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1905 return Futures.immediateFuture(rpcResult);
1908 // Grab the name and type from the input buffer
1909 String preload_name = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName();
1910 String preload_type = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType();
1912 // Make sure we have a preload_name and preload_type
1913 if(preload_name == null || preload_name.length() == 0 ) {
1914 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
1915 responseBuilder.setResponseCode("403");
1916 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
1917 responseBuilder.setAckFinalIndicator("Y");
1918 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1919 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1920 return Futures.immediateFuture(rpcResult);
1922 if(preload_type == null || preload_type.length() == 0 ) {
1923 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
1924 responseBuilder.setResponseCode("403");
1925 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
1926 responseBuilder.setAckFinalIndicator("Y");
1927 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1928 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1929 return Futures.immediateFuture(rpcResult);
1932 if (input.getSdncRequestHeader() != null) {
1933 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1936 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1937 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1938 //preloadData = preloadDataBuilder.build();
1940 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
1941 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1944 // setup a preload-data object builder
1945 // ACTION vnf-topology-operation
1947 // USES sdnc-request-header;
1948 // USES request-information;
1949 // uses vnf-topology-information;
1951 // USES vnf-topology-response-body;
1953 // container preload-data
1954 // uses vnf-configuration-information;
1957 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
1958 PreloadVnfTopologyOperationInputBuilder inputBuilder = new PreloadVnfTopologyOperationInputBuilder(input);
1959 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1960 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
1961 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1963 // Call SLI sync method
1964 // Get SvcLogicService reference
1966 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1967 Properties respProps = null;
1969 String errorCode = "200";
1970 String errorMessage = null;
1971 String ackFinal = "Y";
1976 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1981 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1985 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1986 errorMessage = e.getMessage();
1990 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1997 errorMessage = e.getMessage();
1998 log.error("Caught exception looking for service logic", e);
2002 if (respProps != null)
2004 errorCode = respProps.getProperty("error-code");
2005 errorMessage = respProps.getProperty("error-message");
2006 ackFinal = respProps.getProperty("ack-final", "Y");
2007 // internalError = respProps.getProperty("internal-error", "false");
2010 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2012 responseBuilder.setResponseCode(errorCode);
2013 responseBuilder.setResponseMessage(errorMessage);
2014 responseBuilder.setAckFinalIndicator(ackFinal);
2016 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2017 preloadVnfListBuilder.setVnfName(preload_name);
2018 preloadVnfListBuilder.setVnfType(preload_type);
2019 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
2020 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2022 SavePreloadList (preloadVnfListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
2023 } catch (Exception e) {
2024 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2026 log.debug("Sending Success rpc result due to external error");
2027 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
2028 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2029 return Futures.immediateFuture(rpcResult);
2032 // Got success from SLI
2034 preloadData = preloadDataBuilder.build();
2035 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
2036 // svc-configuration-list
2037 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2038 preloadVnfListBuilder.setVnfName(preload_name);
2039 preloadVnfListBuilder.setVnfType(preload_type);
2040 preloadVnfListBuilder.setPreloadData(preloadData);
2042 // SDNGC-989 set merge flag to false
2043 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2044 log.info("Updating OPERATIONAL tree.");
2045 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2046 } catch (Exception e) {
2047 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2048 responseBuilder.setResponseCode("500");
2049 responseBuilder.setResponseMessage(e.toString());
2050 responseBuilder.setAckFinalIndicator("Y");
2051 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2052 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
2053 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2054 return Futures.immediateFuture(rpcResult);
2058 responseBuilder.setResponseCode(errorCode);
2059 responseBuilder.setAckFinalIndicator(ackFinal);
2060 if (errorMessage != null)
2062 responseBuilder.setResponseMessage(errorMessage);
2064 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2065 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2067 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
2068 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2069 return Futures.immediateFuture(rpcResult);
2072 //1610 preload-vnf-instance-topology-operation
2074 public Future<RpcResult<PreloadVnfInstanceTopologyOperationOutput>> preloadVnfInstanceTopologyOperation(
2075 PreloadVnfInstanceTopologyOperationInput input) {
2077 final String SVC_OPERATION = "preload-vnf-instance-topology-operation";
2078 VnfInstancePreloadData vnfInstancePreloadData = null;
2079 Properties parms = new Properties();
2081 log.info( SVC_OPERATION +" called." );
2082 // create a new response object
2083 PreloadVnfInstanceTopologyOperationOutputBuilder responseBuilder = new PreloadVnfInstanceTopologyOperationOutputBuilder();
2085 // Result from savePreloadData
2086 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2089 input.getVnfInstanceTopologyInformation() == null ||
2090 input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfInstanceName() == null ||
2091 input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfModelId() == null)
2093 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-name and vnf-model-id");
2094 responseBuilder.setResponseCode("403");
2095 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-name and vnf-model-id");
2096 responseBuilder.setAckFinalIndicator("Y");
2097 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2098 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2099 return Futures.immediateFuture(rpcResult);
2102 // Grab the name and type from the input buffer
2103 String preload_name = input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfInstanceName();
2104 String preload_type = input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfModelId();
2106 // Make sure we have a preload_name and preload_type
2107 if(preload_name == null || preload_name.length() == 0 ) {
2108 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2109 responseBuilder.setResponseCode("403");
2110 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
2111 responseBuilder.setAckFinalIndicator("Y");
2112 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2113 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2114 return Futures.immediateFuture(rpcResult);
2116 if(preload_type == null || preload_type.length() == 0 ) {
2117 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2118 responseBuilder.setResponseCode("403");
2119 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
2120 responseBuilder.setAckFinalIndicator("Y");
2121 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2122 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2123 return Futures.immediateFuture(rpcResult);
2126 if (input.getSdncRequestHeader() != null) {
2127 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2130 VnfInstancePreloadDataBuilder vnfInstancePreloadDataBuilder = new VnfInstancePreloadDataBuilder();
2131 getVnfInstancePreloadData(preload_name, preload_type, vnfInstancePreloadDataBuilder);
2132 //preloadData = preloadDataBuilder.build();
2134 VnfInstancePreloadDataBuilder operDataBuilder = new VnfInstancePreloadDataBuilder();
2135 getVnfInstancePreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2138 // setup a preload-data object builder
2139 // ACTION vnf-topology-operation
2141 // USES sdnc-request-header;
2142 // USES request-information;
2143 // uses vnf-topology-information;
2145 // USES vnf-topology-response-body;
2147 // container preload-data
2148 // uses vnf-configuration-information;
2151 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2152 PreloadVnfInstanceTopologyOperationInputBuilder inputBuilder = new PreloadVnfInstanceTopologyOperationInputBuilder(input);
2153 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2154 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2155 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2157 // Call SLI sync method
2158 // Get SvcLogicService reference
2160 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2161 Properties respProps = null;
2163 String errorCode = "200";
2164 String errorMessage = null;
2165 String ackFinal = "Y";
2170 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2175 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vnfInstancePreloadDataBuilder, parms);
2179 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2180 errorMessage = e.getMessage();
2184 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2191 errorMessage = e.getMessage();
2192 log.error("Caught exception looking for service logic", e);
2196 if (respProps != null)
2198 errorCode = respProps.getProperty("error-code");
2199 errorMessage = respProps.getProperty("error-message");
2200 ackFinal = respProps.getProperty("ack-final", "Y");
2201 // internalError = respProps.getProperty("internal-error", "false");
2204 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2206 responseBuilder.setResponseCode(errorCode);
2207 responseBuilder.setResponseMessage(errorMessage);
2208 responseBuilder.setAckFinalIndicator(ackFinal);
2210 VnfInstancePreloadListBuilder vnfInstancePreloadListBuilder = new VnfInstancePreloadListBuilder();
2211 vnfInstancePreloadListBuilder.setVnfInstanceName(preload_name);
2212 vnfInstancePreloadListBuilder.setVnfModelId(preload_type);
2213 vnfInstancePreloadListBuilder.setVnfInstancePreloadData(vnfInstancePreloadDataBuilder.build());
2214 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2216 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
2217 } catch (Exception e) {
2218 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2220 log.debug("Sending Success rpc result due to external error");
2221 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2222 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2223 return Futures.immediateFuture(rpcResult);
2226 // Got success from SLI
2228 vnfInstancePreloadData = vnfInstancePreloadDataBuilder.build();
2229 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + vnfInstancePreloadData);
2230 // svc-configuration-list
2231 VnfInstancePreloadListBuilder vnfInstancePreloadListBuilder = new VnfInstancePreloadListBuilder();
2232 vnfInstancePreloadListBuilder.setVnfInstanceName(preload_name);
2233 vnfInstancePreloadListBuilder.setVnfModelId(preload_type);
2234 vnfInstancePreloadListBuilder.setVnfInstancePreloadData(vnfInstancePreloadData);
2236 // SDNGC-989 set merge flag to false
2237 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2238 log.info("Updating OPERATIONAL tree.");
2239 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2240 } catch (Exception e) {
2241 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2242 responseBuilder.setResponseCode("500");
2243 responseBuilder.setResponseMessage(e.toString());
2244 responseBuilder.setAckFinalIndicator("Y");
2245 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2246 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2247 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2248 return Futures.immediateFuture(rpcResult);
2252 responseBuilder.setResponseCode(errorCode);
2253 responseBuilder.setAckFinalIndicator(ackFinal);
2254 if (errorMessage != null)
2256 responseBuilder.setResponseMessage(errorMessage);
2258 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2259 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2261 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2262 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2263 return Futures.immediateFuture(rpcResult);
2267 //1610 preload-vf-module-topology-operation
2269 public Future<RpcResult<PreloadVfModuleTopologyOperationOutput>> preloadVfModuleTopologyOperation(
2270 PreloadVfModuleTopologyOperationInput input) {
2272 final String SVC_OPERATION = "preload-vf-module-topology-operation";
2273 VfModulePreloadData vfModulePreloadData = null;
2274 Properties parms = new Properties();
2276 log.info( SVC_OPERATION +" called." );
2277 // create a new response object
2278 PreloadVfModuleTopologyOperationOutputBuilder responseBuilder = new PreloadVfModuleTopologyOperationOutputBuilder();
2280 // Result from savePreloadData
2281 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2284 input.getVfModuleTopologyInformation() == null ||
2285 input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleName() == null ||
2286 input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleModelId() == null)
2288 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-name and vnf-model-id");
2289 responseBuilder.setResponseCode("403");
2290 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-name and vnf-model-id");
2291 responseBuilder.setAckFinalIndicator("Y");
2292 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2293 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2294 return Futures.immediateFuture(rpcResult);
2297 // Grab the name and type from the input buffer
2298 String preload_name = input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleName();
2299 String preload_type = input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleModelId();
2301 // Make sure we have a preload_name and preload_type
2302 if(preload_name == null || preload_name.length() == 0 ) {
2303 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2304 responseBuilder.setResponseCode("403");
2305 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
2306 responseBuilder.setAckFinalIndicator("Y");
2307 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2308 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2309 return Futures.immediateFuture(rpcResult);
2311 if(preload_type == null || preload_type.length() == 0 ) {
2312 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2313 responseBuilder.setResponseCode("403");
2314 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
2315 responseBuilder.setAckFinalIndicator("Y");
2316 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2317 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2318 return Futures.immediateFuture(rpcResult);
2321 if (input.getSdncRequestHeader() != null) {
2322 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2325 VfModulePreloadDataBuilder vfModulePreloadDataBuilder = new VfModulePreloadDataBuilder();
2326 getVfModulePreloadData(preload_name, preload_type, vfModulePreloadDataBuilder);
2327 //preloadData = preloadDataBuilder.build();
2329 VfModulePreloadDataBuilder operDataBuilder = new VfModulePreloadDataBuilder();
2330 getVfModulePreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2333 // setup a preload-data object builder
2334 // ACTION vnf-topology-operation
2336 // USES sdnc-request-header;
2337 // USES request-information;
2338 // uses vnf-topology-information;
2340 // USES vnf-topology-response-body;
2342 // container preload-data
2343 // uses vnf-configuration-information;
2346 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2347 PreloadVfModuleTopologyOperationInputBuilder inputBuilder = new PreloadVfModuleTopologyOperationInputBuilder(input);
2348 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2349 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2350 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2352 // Call SLI sync method
2353 // Get SvcLogicService reference
2355 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2356 Properties respProps = null;
2358 String errorCode = "200";
2359 String errorMessage = null;
2360 String ackFinal = "Y";
2365 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2370 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vfModulePreloadDataBuilder, parms);
2374 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2375 errorMessage = e.getMessage();
2379 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2386 errorMessage = e.getMessage();
2387 log.error("Caught exception looking for service logic", e);
2391 if (respProps != null)
2393 errorCode = respProps.getProperty("error-code");
2394 errorMessage = respProps.getProperty("error-message");
2395 ackFinal = respProps.getProperty("ack-final", "Y");
2396 // internalError = respProps.getProperty("internal-error", "false");
2399 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2401 responseBuilder.setResponseCode(errorCode);
2402 responseBuilder.setResponseMessage(errorMessage);
2403 responseBuilder.setAckFinalIndicator(ackFinal);
2405 VfModulePreloadListBuilder vfModulePreloadListBuilder = new VfModulePreloadListBuilder();
2406 vfModulePreloadListBuilder.setVfModuleName(preload_name);
2407 vfModulePreloadListBuilder.setVfModuleModelId(preload_type);
2408 vfModulePreloadListBuilder.setVfModulePreloadData(vfModulePreloadDataBuilder.build());
2409 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2411 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
2412 } catch (Exception e) {
2413 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2415 log.debug("Sending Success rpc result due to external error");
2416 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2417 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2418 return Futures.immediateFuture(rpcResult);
2421 // Got success from SLI
2423 vfModulePreloadData = vfModulePreloadDataBuilder.build();
2424 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + vfModulePreloadData);
2425 // svc-configuration-list
2426 VfModulePreloadListBuilder vfModulePreloadListBuilder = new VfModulePreloadListBuilder();
2427 vfModulePreloadListBuilder.setVfModuleName(preload_name);
2428 vfModulePreloadListBuilder.setVfModuleModelId(preload_type);
2429 vfModulePreloadListBuilder.setVfModulePreloadData(vfModulePreloadData);
2431 // SDNGC-989 set merge flag to false
2432 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2433 log.info("Updating OPERATIONAL tree.");
2434 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2435 } catch (Exception e) {
2436 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2437 responseBuilder.setResponseCode("500");
2438 responseBuilder.setResponseMessage(e.toString());
2439 responseBuilder.setAckFinalIndicator("Y");
2440 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2441 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2442 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2443 return Futures.immediateFuture(rpcResult);
2447 responseBuilder.setResponseCode(errorCode);
2448 responseBuilder.setAckFinalIndicator(ackFinal);
2449 if (errorMessage != null)
2451 responseBuilder.setResponseMessage(errorMessage);
2453 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2454 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2456 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2457 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2458 return Futures.immediateFuture(rpcResult);
2463 public Future<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
2464 PreloadNetworkTopologyOperationInput input) {
2466 final String SVC_OPERATION = "preload-network-topology-operation";
2467 PreloadData preloadData = null;
2468 Properties parms = new Properties();
2470 log.info( SVC_OPERATION +" called." );
2471 // create a new response object
2472 PreloadNetworkTopologyOperationOutputBuilder responseBuilder = new PreloadNetworkTopologyOperationOutputBuilder();
2474 // Result from savePreloadData
2475 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2477 if(input == null || input.getNetworkTopologyInformation() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType() == null) {
2478 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-name and vnf-type");
2479 responseBuilder.setResponseCode("403");
2480 responseBuilder.setResponseMessage("input, null or empty vnf-name and vnf-type");
2481 responseBuilder.setAckFinalIndicator("Y");
2482 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2483 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2484 return Futures.immediateFuture(rpcResult);
2487 // Grab the name and type from the input buffer
2488 String preload_name = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName();
2489 String preload_type = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType();
2491 // Make sure we have a preload_name and preload_type
2492 if(preload_name == null || preload_name.length() == 0 ) {
2493 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2494 responseBuilder.setResponseCode("403");
2495 responseBuilder.setResponseMessage("input, invalid preload-name");
2496 responseBuilder.setAckFinalIndicator("Y");
2497 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2498 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2499 return Futures.immediateFuture(rpcResult);
2501 if(preload_type == null || preload_type.length() == 0 ) {
2502 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2503 responseBuilder.setResponseCode("403");
2504 responseBuilder.setResponseMessage("input, invalid preload-type");
2505 responseBuilder.setAckFinalIndicator("Y");
2506 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2507 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2508 return Futures.immediateFuture(rpcResult);
2511 if (input.getSdncRequestHeader() != null) {
2512 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2515 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
2516 getPreloadData(preload_name, preload_type, preloadDataBuilder);
2518 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
2519 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2522 // setup a preload-data object builder
2523 // ACTION vnf-topology-operation
2525 // USES sdnc-request-header;
2526 // USES request-information;
2527 // uses vnf-topology-information;
2529 // USES vnf-topology-response-body;
2531 // container preload-data
2532 // uses vnf-configuration-information;
2535 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2536 PreloadNetworkTopologyOperationInputBuilder inputBuilder = new PreloadNetworkTopologyOperationInputBuilder(input);
2537 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2538 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2539 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2541 // Call SLI sync method
2542 // Get SvcLogicService reference
2544 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2545 Properties respProps = null;
2547 String errorCode = "200";
2548 String errorMessage = null;
2549 String ackFinal = "Y";
2554 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2559 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
2563 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2564 errorMessage = e.getMessage();
2568 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2575 errorMessage = e.getMessage();
2576 log.error("Caught exception looking for service logic", e);
2580 if (respProps != null)
2582 errorCode = respProps.getProperty("error-code");
2583 errorMessage = respProps.getProperty("error-message");
2584 ackFinal = respProps.getProperty("ack-final", "Y");
2585 // internalError = respProps.getProperty("internal-error", "false");
2588 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2590 responseBuilder.setResponseCode(errorCode);
2591 responseBuilder.setResponseMessage(errorMessage);
2592 responseBuilder.setAckFinalIndicator(ackFinal);
2594 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2595 preloadVnfListBuilder.setVnfName(preload_name);
2596 preloadVnfListBuilder.setVnfType(preload_type);
2597 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
2598 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2600 SavePreloadList (preloadVnfListBuilder.build(),true,LogicalDatastoreType.CONFIGURATION);
2601 } catch (Exception e) {
2602 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2605 log.debug("Sending Success rpc result due to external error");
2606 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2607 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2608 return Futures.immediateFuture(rpcResult);
2611 // Got success from SLI
2613 preloadData = preloadDataBuilder.build();
2614 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
2615 // svc-configuration-list
2616 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2617 preloadVnfListBuilder.setVnfName(preload_name);
2618 preloadVnfListBuilder.setVnfType(preload_type);
2619 preloadVnfListBuilder.setPreloadData(preloadData);
2621 // SDNGC-989 set merge flag to false
2622 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2623 log.info("Updating OPERATIONAL tree.");
2624 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2625 } catch (Exception e) {
2626 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2627 responseBuilder.setResponseCode("500");
2628 responseBuilder.setResponseMessage(e.toString());
2629 responseBuilder.setAckFinalIndicator("Y");
2630 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2631 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2632 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2633 return Futures.immediateFuture(rpcResult);
2637 responseBuilder.setResponseCode(errorCode);
2638 responseBuilder.setAckFinalIndicator(ackFinal);
2639 if (errorMessage != null)
2641 responseBuilder.setResponseMessage(errorMessage);
2643 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2644 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2646 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2647 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2648 return Futures.immediateFuture(rpcResult);