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.openecomp.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.openecomp.sdnctl.vnf.rev150720.NetworkTopologyOperationInput;
47 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.NetworkTopologyOperationInputBuilder;
48 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.NetworkTopologyOperationOutput;
49 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.NetworkTopologyOperationOutputBuilder;
50 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationInput;
51 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationInputBuilder;
52 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationOutput;
53 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadNetworkTopologyOperationOutputBuilder;
54 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationInput;
55 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationInputBuilder;
56 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationOutput;
57 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModuleTopologyOperationOutputBuilder;
58 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModules;
59 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVfModulesBuilder;
60 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationInput;
61 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationInputBuilder;
62 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationOutput;
63 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstanceTopologyOperationOutputBuilder;
64 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstances;
65 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfInstancesBuilder;
66 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationInput;
67 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationInputBuilder;
68 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationOutput;
69 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfTopologyOperationOutputBuilder;
70 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfs;
71 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.PreloadVnfsBuilder;
72 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VNFAPIService;
73 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModuleTopologyOperationInput;
74 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModuleTopologyOperationInputBuilder;
75 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModuleTopologyOperationOutput;
76 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModuleTopologyOperationOutputBuilder;
77 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModules;
78 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VfModulesBuilder;
79 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInput;
80 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationInputBuilder;
81 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutput;
82 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstanceTopologyOperationOutputBuilder;
83 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstances;
84 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfInstancesBuilder;
85 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfTopologyOperationInput;
86 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfTopologyOperationInputBuilder;
87 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfTopologyOperationOutput;
88 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfTopologyOperationOutputBuilder;
89 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.Vnfs;
90 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.VnfsBuilder;
91 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.network.information.NetworkInformationBuilder;
92 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.data.PreloadData;
93 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.data.PreloadDataBuilder;
94 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadList;
95 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadListBuilder;
96 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.model.information.VnfPreloadListKey;
97 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadList;
98 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadListBuilder;
99 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vf.module.model.information.VfModulePreloadListKey;
100 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadList;
101 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadListBuilder;
102 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.preload.vnf.instance.model.information.VnfInstancePreloadListKey;
103 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.request.information.RequestInformation;
104 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.sdnc.request.header.SdncRequestHeader;
105 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.sdnc.request.header.SdncRequestHeader.SvcAction;
106 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.data.ServiceData;
107 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.data.ServiceDataBuilder;
108 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus;
109 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus.RequestStatus;
110 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus.RpcAction;
111 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus.RpcName;
112 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus.VnfsdnAction;
113 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatus.VnfsdnSubaction;
114 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.service.status.ServiceStatusBuilder;
115 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.information.VfModuleInformationBuilder;
116 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleList;
117 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleListBuilder;
118 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.model.infrastructure.VfModuleListKey;
119 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.preload.data.VfModulePreloadData;
120 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.preload.data.VfModulePreloadDataBuilder;
121 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.service.data.VfModuleServiceData;
122 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vf.module.service.data.VfModuleServiceDataBuilder;
123 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.information.VnfInformationBuilder;
124 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.information.VnfInstanceInformationBuilder;
125 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceList;
126 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceListBuilder;
127 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.model.infrastructure.VnfInstanceListKey;
128 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.preload.data.VnfInstancePreloadData;
129 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.preload.data.VnfInstancePreloadDataBuilder;
130 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceData;
131 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.instance.service.data.VnfInstanceServiceDataBuilder;
132 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.model.infrastructure.VnfList;
133 import org.opendaylight.yang.gen.v1.org.openecomp.sdnctl.vnf.rev150720.vnf.model.infrastructure.VnfListBuilder;
134 import org.opendaylight.yang.gen.v1.org.openecomp.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");
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);
251 protected void initializeChild() {
252 //Override if you have custom initialization intelligence
256 public void close() throws Exception {
257 log.info( "Closing provider for " + appName );
259 rpcRegistration.close();
260 // dclServices.close();
261 log.info( "Successfully closed provider for " + appName );
264 // On data change not used
266 public void onDataChanged(
267 AsyncDataChangeEvent<InstanceIdentifier<?>, DataObject> change) {
268 boolean changed = false;
269 log.info(" IN ON DATA CHANGE: ");
270 WriteTransaction writeTransaction = dataBroker
271 .newWriteOnlyTransaction();
273 DataObject updatedSubTree = change.getUpdatedSubtree();
275 if (updatedSubTree != null) {
276 if (log.isDebugEnabled())
278 log.debug("updatedSubTree was non-null:" + updatedSubTree);
280 if ( updatedSubTree instanceof Vnfs ) {
281 ArrayList<VnfList> vnfList = (ArrayList<VnfList>) ((Vnfs) updatedSubTree).getVnfList();
282 if (vnfList != null) {
283 for (VnfList entry : vnfList) {
284 ServiceData serviceData = entry.getServiceData();
285 ServiceStatus serviceStatus = entry.getServiceStatus();
286 if (serviceData != null && serviceStatus != null) {
288 // ServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
290 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
291 if (log.isDebugEnabled())
293 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
295 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
302 if ( updatedSubTree instanceof PreloadVnfs ) {
303 ArrayList<VnfPreloadList> vnfList = (ArrayList<VnfPreloadList>) ((PreloadVnfs) updatedSubTree).getVnfPreloadList();
304 if (vnfList != null) {
305 for (VnfPreloadList entry : vnfList) {
306 PreloadData preloadData = entry.getPreloadData();
307 if (preloadData != null ) {
309 // PreloadData change detected
311 // handlePreloadDataUpdated(preloadData, writeTransaction);
318 if ( updatedSubTree instanceof PreloadVnfInstances ) {
319 ArrayList<VnfInstancePreloadList> vnfInstanceList = (ArrayList<VnfInstancePreloadList>) ((PreloadVnfInstances) updatedSubTree).getVnfInstancePreloadList();
320 if (vnfInstanceList != null) {
321 for (VnfInstancePreloadList entry : vnfInstanceList) {
322 VnfInstancePreloadData vnfInstancePreloadData = entry.getVnfInstancePreloadData();
323 if (vnfInstancePreloadData != null ) {
325 // PreloadData change detected
327 // handlePreloadDataUpdated(preloadData, writeTransaction);
334 if ( updatedSubTree instanceof VnfInstances ) {
335 ArrayList<VnfInstanceList> vnfInstanceList = (ArrayList<VnfInstanceList>) ((VnfInstances) updatedSubTree).getVnfInstanceList();
336 if (vnfInstanceList != null) {
337 for (VnfInstanceList entry : vnfInstanceList) {
338 VnfInstanceServiceData vnfInstanceServiceData = entry.getVnfInstanceServiceData();
339 ServiceStatus serviceStatus = entry.getServiceStatus();
340 if (vnfInstanceServiceData != null && serviceStatus != null) {
342 // VnfInstanceServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
344 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
345 if (log.isDebugEnabled())
347 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
349 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
357 if ( updatedSubTree instanceof PreloadVfModules ) {
358 ArrayList<VfModulePreloadList> vnfInstanceList = (ArrayList<VfModulePreloadList>) ((PreloadVfModules) updatedSubTree).getVfModulePreloadList();
359 if (vnfInstanceList != null) {
360 for (VfModulePreloadList entry : vnfInstanceList) {
361 VfModulePreloadData vnfInstancePreloadData = entry.getVfModulePreloadData();
362 if (vnfInstancePreloadData != null ) {
364 // PreloadData change detected
366 // handlePreloadDataUpdated(preloadData, writeTransaction);
373 if ( updatedSubTree instanceof VfModules ) {
374 ArrayList<VfModuleList> vfModuleList = (ArrayList<VfModuleList>) ((VfModules) updatedSubTree).getVfModuleList();
375 if (vfModuleList != null) {
376 for (VfModuleList entry : vfModuleList) {
377 VfModuleServiceData vfModuleServiceData = entry.getVfModuleServiceData();
378 ServiceStatus serviceStatus = entry.getServiceStatus();
379 if (vfModuleServiceData != null && serviceStatus != null) {
381 // VfModuleServiceData change detected, check the AckFinal indicator and request-status to see if we need to proceed.
383 if ((! "Y".equals(serviceStatus.getFinalIndicator())) && (RequestStatus.Synccomplete.equals(serviceStatus.getRequestStatus()))) {
384 if (log.isDebugEnabled())
386 log.debug("Final Indicator is not Y, calling handleServiceDataUpdated");
388 //handleServiceDataUpdated(serviceData, serviceStatus, writeTransaction);
396 // Do the write transaction only if something changed.
398 CheckedFuture<Void, TransactionCommitFailedException> checkedFuture = writeTransaction
400 Futures.addCallback(checkedFuture, new FutureCallback<Void>() {
403 public void onSuccess(Void arg0) {
404 log.debug("Successfully updated Service Status");
408 public void onFailure(Throwable ex) {
410 "Failed updating Service Status",
417 private static class Iso8601Util
419 private static TimeZone tz = TimeZone.getTimeZone("UTC");
420 private static DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
427 private static String now()
429 return df.format(new Date());
433 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, String errorCode, String errorMessage, String ackFinal)
435 serviceStatusBuilder.setResponseCode(errorCode);
436 serviceStatusBuilder.setResponseMessage(errorMessage);
437 serviceStatusBuilder.setFinalIndicator(ackFinal);
438 serviceStatusBuilder.setResponseTimestamp(Iso8601Util.now());
441 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, RequestInformation requestInformation)
443 if (requestInformation != null && requestInformation.getRequestAction() != null) {
444 switch (requestInformation.getRequestAction())
446 case VNFActivateRequest:
447 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VNFActivateRequest);
449 case ChangeVNFActivateRequest:
450 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVNFActivateRequest);
452 case DisconnectVNFRequest:
453 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVNFRequest);
455 case PreloadVNFRequest:
456 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVNFRequest);
458 case DeletePreloadVNFRequest:
459 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DeletePreloadVNFRequest);
461 // 1610 vnf-instance Requests
462 case VnfInstanceActivateRequest:
463 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VnfInstanceActivateRequest);
465 case ChangeVnfInstanceActivateRequest:
466 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVnfInstanceActivateRequest);
468 case DisconnectVnfInstanceRequest:
469 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVnfInstanceRequest);
471 case PreloadVnfInstanceRequest:
472 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVnfInstanceRequest);
474 // 1610 vf-module Requests
475 case VfModuleActivateRequest:
476 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.VfModuleActivateRequest);
478 case ChangeVfModuleActivateRequest:
479 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.ChangeVfModuleActivateRequest);
481 case DisconnectVfModuleRequest:
482 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.DisconnectVfModuleRequest);
484 case PreloadVfModuleRequest:
485 serviceStatusBuilder.setVnfsdnAction(VnfsdnAction.PreloadVfModuleRequest);
488 log.error("Unknown RequestAction: " + requestInformation.getRequestAction() );
492 if (requestInformation != null && requestInformation.getRequestSubAction() != null) {
493 switch (requestInformation.getRequestSubAction())
496 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.SUPP);
499 serviceStatusBuilder.setVnfsdnSubaction(VnfsdnSubaction.CANCEL);
502 log.error("Unknown RequestSubAction: " + requestInformation.getRequestSubAction() );
508 private void setServiceStatus(ServiceStatusBuilder serviceStatusBuilder, SdncRequestHeader requestHeader)
510 if (requestHeader != null && requestHeader.getSvcAction() != null) {
511 switch (requestHeader.getSvcAction())
514 serviceStatusBuilder.setRpcAction(RpcAction.Reserve);
517 serviceStatusBuilder.setRpcAction(RpcAction.Activate);
520 serviceStatusBuilder.setRpcAction(RpcAction.Assign);
523 serviceStatusBuilder.setRpcAction(RpcAction.Delete);
526 serviceStatusBuilder.setRpcAction(RpcAction.Changeassign);
529 serviceStatusBuilder.setRpcAction(RpcAction.Changedelete);
532 serviceStatusBuilder.setRpcAction(RpcAction.Rollback);
535 log.error("Unknown SvcAction: " + requestHeader.getSvcAction() );
541 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder)
544 getServiceData(siid,serviceDataBuilder,LogicalDatastoreType.CONFIGURATION);
548 private void getServiceData(String siid, ServiceDataBuilder serviceDataBuilder, LogicalDatastoreType type)
550 // See if any data exists yet for this siid, if so grab it.
551 InstanceIdentifier serviceInstanceIdentifier =
552 InstanceIdentifier.<Vnfs>builder(Vnfs.class)
553 .child(VnfList.class, new VnfListKey(siid)).toInstance();
554 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
555 Optional<VnfList> data = null;
557 data = (Optional<VnfList>) readTx.read(type, serviceInstanceIdentifier).get();
558 } catch (InterruptedException | ExecutionException e) {
559 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
562 if ( data.isPresent()) {
563 ServiceData serviceData = (ServiceData) data.get().getServiceData();
564 if (serviceData != null) {
565 log.info("Read MD-SAL ("+type+") data for ["+siid+"] ServiceData: " + serviceData);
566 serviceDataBuilder.setSdncRequestHeader(serviceData.getSdncRequestHeader());
567 serviceDataBuilder.setRequestInformation(serviceData.getRequestInformation());
568 serviceDataBuilder.setServiceInformation(serviceData.getServiceInformation());
569 serviceDataBuilder.setVnfRequestInformation(serviceData.getVnfRequestInformation());
570 serviceDataBuilder.setVnfId(serviceData.getVnfId());
571 serviceDataBuilder.setVnfTopologyInformation(serviceData.getVnfTopologyInformation());
572 serviceDataBuilder.setOperStatus(serviceData.getOperStatus());
574 log.info("No service-data found in MD-SAL ("+type+") for ["+siid+"] ");
577 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
582 private void getVnfInstanceServiceData(String siid, VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder)
585 getVnfInstanceServiceData(siid,vnfInstanceServiceDataBuilder,LogicalDatastoreType.CONFIGURATION);
588 private void getVnfInstanceServiceData(String siid, VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder, LogicalDatastoreType type)
590 // See if any data exists yet for this siid, if so grab it.
591 InstanceIdentifier vnfInstanceIdentifier =
592 InstanceIdentifier.<VnfInstances>builder(VnfInstances.class)
593 .child(VnfInstanceList.class, new VnfInstanceListKey(siid)).toInstance();
594 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
595 Optional<VnfInstanceList> data = null;
597 data = (Optional<VnfInstanceList>) readTx.read(type, vnfInstanceIdentifier).get();
598 } catch (InterruptedException | ExecutionException e) {
599 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
602 if ( data.isPresent()) {
603 VnfInstanceServiceData vnfInstanceServiceData = (VnfInstanceServiceData) data.get().getVnfInstanceServiceData();
604 if (vnfInstanceServiceData != null) {
605 log.info("Read MD-SAL ("+type+") data for ["+siid+"] VnfInstanceServiceData: " + vnfInstanceServiceData);
606 vnfInstanceServiceDataBuilder.setSdncRequestHeader(vnfInstanceServiceData.getSdncRequestHeader());
607 vnfInstanceServiceDataBuilder.setRequestInformation(vnfInstanceServiceData.getRequestInformation());
608 vnfInstanceServiceDataBuilder.setServiceInformation(vnfInstanceServiceData.getServiceInformation());
609 vnfInstanceServiceDataBuilder.setVnfInstanceRequestInformation(vnfInstanceServiceData.getVnfInstanceRequestInformation());
610 vnfInstanceServiceDataBuilder.setVnfInstanceId(vnfInstanceServiceData.getVnfInstanceId());
611 vnfInstanceServiceDataBuilder.setVnfInstanceTopologyInformation(vnfInstanceServiceData.getVnfInstanceTopologyInformation());
612 vnfInstanceServiceDataBuilder.setOperStatus(vnfInstanceServiceData.getOperStatus());
614 log.info("No vnf-instance-service-data found in MD-SAL ("+type+") for ["+siid+"] ");
617 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
622 private void getVfModuleServiceData(String siid, VfModuleServiceDataBuilder vfModuleServiceDataBuilder)
625 getVfModuleServiceData(siid,vfModuleServiceDataBuilder,LogicalDatastoreType.CONFIGURATION);
628 private void getVfModuleServiceData(String siid, VfModuleServiceDataBuilder vfModuleServiceDataBuilder, LogicalDatastoreType type)
630 // See if any data exists yet for this siid, if so grab it.
631 InstanceIdentifier vfModuleIdentifier =
632 InstanceIdentifier.<VfModules>builder(VfModules.class)
633 .child(VfModuleList.class, new VfModuleListKey(siid)).toInstance();
634 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
635 Optional<VfModuleList> data = null;
637 data = (Optional<VfModuleList>) readTx.read(type, vfModuleIdentifier).get();
638 } catch (InterruptedException | ExecutionException e) {
639 log.error("Caught Exception reading MD-SAL ("+type+") for ["+siid+"] " ,e);
642 if ( data.isPresent()) {
643 VfModuleServiceData vfModuleServiceData = (VfModuleServiceData) data.get().getVfModuleServiceData();
644 if (vfModuleServiceData != null) {
645 log.info("Read MD-SAL ("+type+") data for ["+siid+"] VfModuleServiceData: " + vfModuleServiceData);
646 vfModuleServiceDataBuilder.setSdncRequestHeader(vfModuleServiceData.getSdncRequestHeader());
647 vfModuleServiceDataBuilder.setRequestInformation(vfModuleServiceData.getRequestInformation());
648 vfModuleServiceDataBuilder.setServiceInformation(vfModuleServiceData.getServiceInformation());
649 vfModuleServiceDataBuilder.setVfModuleRequestInformation(vfModuleServiceData.getVfModuleRequestInformation());
650 vfModuleServiceDataBuilder.setVfModuleId(vfModuleServiceData.getVfModuleId());
651 vfModuleServiceDataBuilder.setVfModuleTopologyInformation(vfModuleServiceData.getVfModuleTopologyInformation());
652 vfModuleServiceDataBuilder.setOperStatus(vfModuleServiceData.getOperStatus());
654 log.info("No vf-module-service-data found in MD-SAL ("+type+") for ["+siid+"] ");
657 log.info("No data found in MD-SAL ("+type+") for ["+siid+"] ");
662 private void getPreloadData(String vnf_name, String vnf_type, PreloadDataBuilder preloadDataBuilder)
665 getPreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
668 private void getPreloadData(String preload_name, String preload_type, PreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
670 // See if any data exists yet for this name/type, if so grab it.
671 InstanceIdentifier preloadInstanceIdentifier =
672 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
673 .child(VnfPreloadList.class, new VnfPreloadListKey(preload_name, preload_type)).toInstance();
674 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
675 Optional<VnfPreloadList> data = null;
677 data = (Optional<VnfPreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
678 } catch (InterruptedException | ExecutionException e) {
679 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
682 if ( data.isPresent()) {
683 PreloadData preloadData = (PreloadData) data.get().getPreloadData();
684 if (preloadData != null) {
685 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] PreloadData: " + preloadData);
686 preloadDataBuilder.setVnfTopologyInformation(preloadData.getVnfTopologyInformation());
687 preloadDataBuilder.setNetworkTopologyInformation(preloadData.getNetworkTopologyInformation());
688 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
690 log.info("No preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
693 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
697 //1610 preload-vnf-instance
698 private void getVnfInstancePreloadData(String vnf_name, String vnf_type, VnfInstancePreloadDataBuilder preloadDataBuilder)
701 getVnfInstancePreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
704 //1610 preload-vnf-instance
705 private void getVnfInstancePreloadData(String preload_name, String preload_type, VnfInstancePreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
707 // See if any data exists yet for this name/type, if so grab it.
708 InstanceIdentifier preloadInstanceIdentifier =
709 InstanceIdentifier.<PreloadVnfInstances>builder(PreloadVnfInstances.class)
710 .child(VnfInstancePreloadList.class, new VnfInstancePreloadListKey(preload_name, preload_type)).toInstance();
711 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
712 Optional<VnfInstancePreloadList> data = null;
714 data = (Optional<VnfInstancePreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
715 } catch (InterruptedException | ExecutionException e) {
716 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
719 if ( data.isPresent()) {
720 VnfInstancePreloadData preloadData = (VnfInstancePreloadData) data.get().getVnfInstancePreloadData();
721 if (preloadData != null) {
722 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] VnfInstancePreloadData: " + preloadData);
723 preloadDataBuilder.setVnfInstanceTopologyInformation(preloadData.getVnfInstanceTopologyInformation());
724 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
726 log.info("No vnf-instance-preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
729 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
733 // 1610 preload-vf-module
734 private void getVfModulePreloadData(String vnf_name, String vnf_type, VfModulePreloadDataBuilder preloadDataBuilder)
737 getVfModulePreloadData(vnf_name, vnf_type ,preloadDataBuilder,LogicalDatastoreType.CONFIGURATION);
740 private void getVfModulePreloadData(String preload_name, String preload_type, VfModulePreloadDataBuilder preloadDataBuilder, LogicalDatastoreType type)
742 // See if any data exists yet for this name/type, if so grab it.
743 InstanceIdentifier preloadInstanceIdentifier =
744 InstanceIdentifier.<PreloadVfModules>builder(PreloadVfModules.class)
745 .child(VfModulePreloadList.class, new VfModulePreloadListKey(preload_name, preload_type)).toInstance();
746 ReadOnlyTransaction readTx = dataBroker.newReadOnlyTransaction();
747 Optional<VfModulePreloadList> data = null;
749 data = (Optional<VfModulePreloadList>) readTx.read(type, preloadInstanceIdentifier).get();
750 } catch (InterruptedException | ExecutionException e) {
751 log.error("Caught Exception reading MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] " ,e);
754 if ( data.isPresent()) {
755 VfModulePreloadData preloadData = (VfModulePreloadData) data.get().getVfModulePreloadData();
756 if (preloadData != null) {
757 log.info("Read MD-SAL ("+type+") data for ["+preload_name+","+preload_type+"] VfModulePreloadData: " + preloadData);
758 preloadDataBuilder.setVfModuleTopologyInformation(preloadData.getVfModuleTopologyInformation());
759 preloadDataBuilder.setOperStatus(preloadData.getOperStatus());
761 log.info("No preload-data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
764 log.info("No data found in MD-SAL ("+type+") for ["+preload_name+","+preload_type+"] ");
768 private void SaveVnfList (final VnfList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
769 // Each entry will be identifiable by a unique key, we have to create that identifier
770 InstanceIdentifier.InstanceIdentifierBuilder<VnfList> vnfListIdBuilder =
771 InstanceIdentifier.<Vnfs>builder(Vnfs.class)
772 .child(VnfList.class, entry.getKey());
773 InstanceIdentifier<VnfList> path = vnfListIdBuilder.toInstance();
778 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
780 tx.merge(storeType, path, entry);
782 tx.put(storeType, path, entry);
784 tx.submit().checkedGet();
785 log.debug("Update DataStore succeeded");
787 } catch (final TransactionCommitFailedException e) {
788 if(e instanceof OptimisticLockFailedException) {
790 log.debug("Got OptimisticLockFailedException on last try - failing ");
791 throw new IllegalStateException(e);
793 log.debug("Got OptimisticLockFailedException - trying again ");
795 log.debug("Update DataStore failed");
796 throw new IllegalStateException(e);
803 private void SaveVnfInstanceList (final VnfInstanceList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
804 // Each entry will be identifiable by a unique key, we have to create that identifier
805 InstanceIdentifier.InstanceIdentifierBuilder<VnfInstanceList> vnfInstanceListIdBuilder =
806 InstanceIdentifier.<VnfInstances>builder(VnfInstances.class)
807 .child(VnfInstanceList.class, entry.getKey());
808 InstanceIdentifier<VnfInstanceList> path = vnfInstanceListIdBuilder.toInstance();
813 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
815 tx.merge(storeType, path, entry);
817 tx.put(storeType, path, entry);
819 tx.submit().checkedGet();
820 log.debug("Update DataStore succeeded");
822 } catch (final TransactionCommitFailedException e) {
823 if(e instanceof OptimisticLockFailedException) {
825 log.debug("Got OptimisticLockFailedException on last try - failing ");
826 throw new IllegalStateException(e);
828 log.debug("Got OptimisticLockFailedException - trying again ");
830 log.debug("Update DataStore failed");
831 throw new IllegalStateException(e);
838 private void SaveVfModuleList (final VfModuleList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException {
839 // Each entry will be identifiable by a unique key, we have to create that identifier
840 InstanceIdentifier.InstanceIdentifierBuilder<VfModuleList> vfModuleListIdBuilder =
841 InstanceIdentifier.<VfModules>builder(VfModules.class)
842 .child(VfModuleList.class, entry.getKey());
843 InstanceIdentifier<VfModuleList> path = vfModuleListIdBuilder.toInstance();
848 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
850 tx.merge(storeType, path, entry);
852 tx.put(storeType, path, entry);
854 tx.submit().checkedGet();
855 log.debug("Update DataStore succeeded");
857 } catch (final TransactionCommitFailedException e) {
858 if(e instanceof OptimisticLockFailedException) {
860 log.debug("Got OptimisticLockFailedException on last try - failing ");
861 throw new IllegalStateException(e);
863 log.debug("Got OptimisticLockFailedException - trying again ");
865 log.debug("Update DataStore failed");
866 throw new IllegalStateException(e);
872 private void SavePreloadList(final VnfPreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
874 // Each entry will be identifiable by a unique key, we have to create that identifier
875 InstanceIdentifier.InstanceIdentifierBuilder<VnfPreloadList> vnfListIdBuilder =
876 InstanceIdentifier.<PreloadVnfs>builder(PreloadVnfs.class)
877 .child(VnfPreloadList.class, entry.getKey());
878 InstanceIdentifier<VnfPreloadList> path = vnfListIdBuilder.toInstance();
882 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
884 tx.merge(storeType, path, entry);
886 tx.put(storeType, path, entry);
888 tx.submit().checkedGet();
889 log.debug("Update DataStore succeeded");
891 } catch (final TransactionCommitFailedException e) {
892 if(e instanceof OptimisticLockFailedException) {
894 log.debug("Got OptimisticLockFailedException on last try - failing ");
895 throw new IllegalStateException(e);
897 log.debug("Got OptimisticLockFailedException - trying again ");
899 log.debug("Update DataStore failed");
900 throw new IllegalStateException(e);
906 //1610 preload vnf-instance
907 private void SaveVnfInstancePreloadList(final VnfInstancePreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
909 // Each entry will be identifiable by a unique key, we have to create that identifier
910 InstanceIdentifier.InstanceIdentifierBuilder<VnfInstancePreloadList> vnfInstanceListIdBuilder =
911 InstanceIdentifier.<PreloadVnfInstances>builder(PreloadVnfInstances.class)
912 .child(VnfInstancePreloadList.class, entry.getKey());
913 InstanceIdentifier<VnfInstancePreloadList> path = vnfInstanceListIdBuilder.toInstance();
917 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
919 tx.merge(storeType, path, entry);
921 tx.put(storeType, path, entry);
923 tx.submit().checkedGet();
924 log.debug("Update DataStore succeeded");
926 } catch (final TransactionCommitFailedException e) {
927 if(e instanceof OptimisticLockFailedException) {
929 log.debug("Got OptimisticLockFailedException on last try - failing ");
930 throw new IllegalStateException(e);
932 log.debug("Got OptimisticLockFailedException - trying again ");
934 log.debug("Update DataStore failed");
935 throw new IllegalStateException(e);
941 //1610 preload vf-module
942 private void SaveVfModulePreloadList(final VfModulePreloadList entry, boolean merge, LogicalDatastoreType storeType) throws IllegalStateException{
944 // Each entry will be identifiable by a unique key, we have to create that identifier
945 InstanceIdentifier.InstanceIdentifierBuilder<VfModulePreloadList> vfModuleListIdBuilder =
946 InstanceIdentifier.<PreloadVfModules>builder(PreloadVfModules.class)
947 .child(VfModulePreloadList.class, entry.getKey());
948 InstanceIdentifier<VfModulePreloadList> path = vfModuleListIdBuilder.toInstance();
952 WriteTransaction tx = dataBroker.newWriteOnlyTransaction();
954 tx.merge(storeType, path, entry);
956 tx.put(storeType, path, entry);
958 tx.submit().checkedGet();
959 log.debug("Update DataStore succeeded");
961 } catch (final TransactionCommitFailedException e) {
962 if(e instanceof OptimisticLockFailedException) {
964 log.debug("Got OptimisticLockFailedException on last try - failing ");
965 throw new IllegalStateException(e);
967 log.debug("Got OptimisticLockFailedException - trying again ");
969 log.debug("Update DataStore failed");
970 throw new IllegalStateException(e);
976 //1610 vnf-instance-topology-operation
978 public Future<RpcResult<VnfInstanceTopologyOperationOutput>> vnfInstanceTopologyOperation(
979 VnfInstanceTopologyOperationInput input) {
981 final String SVC_OPERATION = "vnf-instance-topology-operation";
982 VnfInstanceServiceData vnfInstanceServiceData = null;
983 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
984 Properties parms = new Properties();
986 log.info( SVC_OPERATION +" called." );
987 // create a new response object
988 VnfInstanceTopologyOperationOutputBuilder responseBuilder = new VnfInstanceTopologyOperationOutputBuilder();
990 //if(input == null || input.getVnfInstanceRequestInformation().getVnfInstanceTopologyIdentifier().getVnfInstanceId() == null )
992 input.getVnfInstanceRequestInformation() == null ||
993 input.getVnfInstanceRequestInformation().getVnfInstanceId() == null )
995 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-id");
996 responseBuilder.setResponseCode("403");
997 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
998 responseBuilder.setAckFinalIndicator("Y");
999 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1000 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1002 return Futures.immediateFuture(rpcResult);
1005 // Grab the service instance ID from the input buffer
1006 String viid = input.getVnfInstanceRequestInformation().getVnfInstanceId();
1007 String preload_name = input.getVnfInstanceRequestInformation().getVnfInstanceName();
1008 String preload_type = input.getVnfInstanceRequestInformation().getVnfModelId();
1010 // Make sure we have a valid viid
1011 if(viid == null || viid.length() == 0 ) {
1012 log.debug("exiting "+SVC_OPERATION+" because of invalid vnf-instance-id");
1013 responseBuilder.setResponseCode("403");
1014 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
1015 responseBuilder.setAckFinalIndicator("Y");
1016 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1017 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1019 return Futures.immediateFuture(rpcResult);
1022 if (input.getSdncRequestHeader() != null) {
1023 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1026 // Get vnf-instance-preload-data
1027 VnfInstancePreloadDataBuilder vnfInstancePreloadDataBuilder = new VnfInstancePreloadDataBuilder();
1028 getVnfInstancePreloadData(preload_name, preload_type, vnfInstancePreloadDataBuilder);
1031 VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder = new VnfInstanceServiceDataBuilder();
1032 getVnfInstanceServiceData(viid,vnfInstanceServiceDataBuilder);
1034 // Get operational-data
1035 VnfInstanceServiceDataBuilder operDataBuilder = new VnfInstanceServiceDataBuilder();
1036 getVnfInstanceServiceData(viid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1038 // Set the serviceStatus based on input
1039 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1040 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1043 // setup a service-data object builder
1044 // ACTION vnf-topology-operation
1046 // USES sdnc-request-header;
1047 // USES request-information;
1048 // USES service-information;
1049 // USES vnf-request-information
1051 // USES vnf-topology-response-body;
1052 // USES vnf-information
1053 // USES service-information
1055 // container service-data
1056 // uses vnf-configuration-information;
1057 // uses oper-status;
1059 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+viid+"] input: " + input);
1060 VnfInstanceTopologyOperationInputBuilder inputBuilder = new VnfInstanceTopologyOperationInputBuilder(input);
1061 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1063 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+viid+"] operational-data: " + operDataBuilder.build());
1064 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1066 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + vnfInstancePreloadDataBuilder.build());
1067 VnfSdnUtil.toProperties(parms, "vnf-instance-preload-data", vnfInstancePreloadDataBuilder);
1069 // Call SLI sync method
1070 // Get SvcLogicService reference
1072 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1073 Properties respProps = null;
1075 String errorCode = "200";
1076 String errorMessage = null;
1077 String ackFinal = "Y";
1082 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1087 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vnfInstanceServiceDataBuilder, parms);
1091 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1092 errorMessage = e.getMessage();
1096 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1103 errorMessage = e.getMessage();
1104 log.error("Caught exception looking for service logic", e);
1108 if (respProps != null)
1110 errorCode = respProps.getProperty("error-code");
1111 errorMessage = respProps.getProperty("error-message");
1112 ackFinal = respProps.getProperty("ack-final", "Y");
1115 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1116 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1117 serviceStatusBuilder.setRpcName(RpcName.VnfInstanceTopologyOperation);
1119 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1120 responseBuilder.setResponseCode(errorCode);
1121 responseBuilder.setResponseMessage(errorMessage);
1122 responseBuilder.setAckFinalIndicator(ackFinal);
1123 VnfInstanceListBuilder vnfInstanceListBuilder = new VnfInstanceListBuilder();
1124 vnfInstanceListBuilder.setVnfInstanceId(viid);
1125 vnfInstanceListBuilder.setServiceStatus(serviceStatusBuilder.build());
1127 SaveVnfInstanceList (vnfInstanceListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1128 } catch (Exception e) {
1129 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] \n",e);
1131 log.error("Returned FAILED for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1132 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1133 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1135 return Futures.immediateFuture(rpcResult);
1138 // Got success from SLI
1140 vnfInstanceServiceData = vnfInstanceServiceDataBuilder.build();
1141 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] VnfInstanceServiceData: " + vnfInstanceServiceData);
1142 // svc-configuration-list
1143 VnfInstanceListBuilder vnfInstanceListBuilder = new VnfInstanceListBuilder();
1144 vnfInstanceListBuilder.setVnfInstanceServiceData(vnfInstanceServiceData);
1145 vnfInstanceListBuilder.setVnfInstanceId(vnfInstanceServiceData.getVnfInstanceId());
1146 //siid = vnfInstanceServiceData.getVnfInstanceId();
1147 vnfInstanceListBuilder.setServiceStatus(serviceStatusBuilder.build());
1148 SaveVnfInstanceList (vnfInstanceListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1149 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1151 // Only update operational tree on Delete or Activate
1152 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1153 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1155 log.info("Updating OPERATIONAL tree.");
1156 SaveVnfInstanceList (vnfInstanceListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1159 VnfInstanceInformationBuilder vnfInstanceInformationBuilder = new VnfInstanceInformationBuilder();
1160 vnfInstanceInformationBuilder.setVnfInstanceId(viid);
1161 responseBuilder.setVnfInstanceInformation(vnfInstanceInformationBuilder.build());
1162 responseBuilder.setServiceInformation(vnfInstanceServiceData.getServiceInformation());
1163 } catch (Exception e) {
1164 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+viid+"] \n",e);
1165 responseBuilder.setResponseCode("500");
1166 responseBuilder.setResponseMessage(e.toString());
1167 responseBuilder.setAckFinalIndicator("Y");
1168 log.error("Returned FAILED for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1169 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1170 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1172 return Futures.immediateFuture(rpcResult);
1176 responseBuilder.setResponseCode(errorCode);
1177 responseBuilder.setAckFinalIndicator(ackFinal);
1178 if (errorMessage != null)
1180 responseBuilder.setResponseMessage(errorMessage);
1182 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+viid+"] ");
1183 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+viid+"] " + responseBuilder.build());
1185 RpcResult<VnfInstanceTopologyOperationOutput> rpcResult =
1186 RpcResultBuilder.<VnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1188 return Futures.immediateFuture(rpcResult);
1191 //1610 vf-module-topology-operation
1193 public Future<RpcResult<VfModuleTopologyOperationOutput>> vfModuleTopologyOperation(
1194 VfModuleTopologyOperationInput input) {
1196 final String SVC_OPERATION = "vf-module-topology-operation";
1197 VfModuleServiceData vfModuleServiceData = null;
1198 VnfInstanceServiceData vnfInstanceServiceData = null;
1199 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1200 Properties parms = new Properties();
1202 log.info( SVC_OPERATION +" called." );
1203 // create a new response object
1204 VfModuleTopologyOperationOutputBuilder responseBuilder = new VfModuleTopologyOperationOutputBuilder();
1206 // Validate vf-module-id from vf-module-request-information
1208 input.getVfModuleRequestInformation() == null ||
1209 input.getVfModuleRequestInformation().getVfModuleId() == null)
1211 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vf-module-id");
1212 responseBuilder.setResponseCode("403");
1213 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1214 responseBuilder.setAckFinalIndicator("Y");
1215 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1216 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1218 return Futures.immediateFuture(rpcResult);
1221 // Grab the vf-module-request-information.vf-module-id from the input buffer
1222 String vfid = input.getVfModuleRequestInformation().getVfModuleId();
1223 String preload_name = input.getVfModuleRequestInformation().getVfModuleName();
1224 String preload_type = input.getVfModuleRequestInformation().getVfModuleModelId();
1226 // Make sure we have a valid siid
1227 if(vfid == null || vfid.length() == 0 ) {
1228 log.debug("exiting "+SVC_OPERATION+" because of invalid vf-module-id");
1229 responseBuilder.setResponseCode("403");
1230 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1231 responseBuilder.setAckFinalIndicator("Y");
1232 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1233 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1235 return Futures.immediateFuture(rpcResult);
1238 // 1610 add vf-module-id to vnf-instance-list.vf-module-relationship-list
1239 String viid = input.getVfModuleRequestInformation().getVnfInstanceId();
1241 if(viid == null || viid.length() == 0 ) {
1242 log.debug("exiting "+SVC_OPERATION+" because of invalid vnf-instance-id");
1243 responseBuilder.setResponseCode("403");
1244 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-id");
1245 responseBuilder.setAckFinalIndicator("Y");
1246 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1247 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1249 return Futures.immediateFuture(rpcResult);
1252 if (input.getSdncRequestHeader() != null) {
1253 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1256 // Get vf-module-preload-data
1257 VfModulePreloadDataBuilder vfModulePreloadDataBuilder = new VfModulePreloadDataBuilder();
1258 getVfModulePreloadData(preload_name, preload_type, vfModulePreloadDataBuilder);
1260 // Get vf-module-service-data
1261 VfModuleServiceDataBuilder vfModuleServiceDataBuilder = new VfModuleServiceDataBuilder();
1262 getVfModuleServiceData(vfid,vfModuleServiceDataBuilder);
1264 // Get vf-module operation-data
1265 VfModuleServiceDataBuilder operDataBuilder = new VfModuleServiceDataBuilder();
1266 getVfModuleServiceData(vfid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1268 // save service-data builder object for rollback
1269 VfModuleServiceDataBuilder rb_vfModuleServiceDataBuilder = vfModuleServiceDataBuilder;
1270 VfModuleServiceDataBuilder rb_operDataBuilder = operDataBuilder;
1272 // 1610 Need to pull vnf-instance-list.vf-module-relationship-list from MD-SAL
1273 VnfInstanceServiceDataBuilder vnfInstanceServiceDataBuilder = new VnfInstanceServiceDataBuilder();
1274 getVnfInstanceServiceData(viid, vnfInstanceServiceDataBuilder);
1276 // vnf-instance operational-data
1277 VnfInstanceServiceDataBuilder vnfInstanceOperDataBuilder = new VnfInstanceServiceDataBuilder();
1278 getVnfInstanceServiceData(viid, vnfInstanceOperDataBuilder, LogicalDatastoreType.OPERATIONAL );
1280 // save operational builder object for rollback
1281 VnfInstanceServiceDataBuilder rb_vnfInstanceServiceDataBuilder = vnfInstanceServiceDataBuilder;
1282 VnfInstanceServiceDataBuilder rb_vnfInstanceOperDataBuilder = vnfInstanceOperDataBuilder;
1284 // Set the serviceStatus based on input
1285 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1286 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1289 // setup a service-data object builder
1290 // ACTION vnf-topology-operation
1292 // USES sdnc-request-header;
1293 // USES request-information;
1294 // USES service-information;
1295 // USES vnf-request-information
1297 // USES vnf-topology-response-body;
1298 // USES vnf-information
1299 // USES service-information
1301 // container service-data
1302 // uses vnf-configuration-information;
1303 // uses oper-status;
1305 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+vfid+"] input: " + input);
1306 VfModuleTopologyOperationInputBuilder inputBuilder = new VfModuleTopologyOperationInputBuilder(input);
1307 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1309 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+vfid+"] vf-module operational-data: " + operDataBuilder.build());
1310 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1312 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] vf-module-preload-data: " + vfModulePreloadDataBuilder.build());
1313 VnfSdnUtil.toProperties(parms, "vf-module-preload-data", vfModulePreloadDataBuilder);
1315 log.info("Adding vnf-instance CONFIG data for "+SVC_OPERATION+" ["+viid+"] vnf-instance-service-data: " + vnfInstanceServiceDataBuilder.build());
1316 VnfSdnUtil.toProperties(parms, "vnf-instance-service-data", vnfInstanceServiceDataBuilder);
1318 log.info("Adding vnf-instance OPERATIONAL data for "+SVC_OPERATION+" ["+viid+"] vnf-instance operational-data: " + vnfInstanceOperDataBuilder.build());
1319 VnfSdnUtil.toProperties(parms, "vnf-instance-operational-data", vnfInstanceOperDataBuilder);
1321 // Call SLI sync method
1322 // Get SvcLogicService reference
1324 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1325 Properties respProps = null;
1327 String errorCode = "200";
1328 String errorMessage = null;
1329 String ackFinal = "Y";
1334 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1339 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vfModuleServiceDataBuilder, parms);
1343 log.error("Caught exception executing service logic on vf-module for "+ SVC_OPERATION, e);
1344 errorMessage = e.getMessage();
1349 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1356 errorMessage = e.getMessage();
1357 log.error("Caught exception looking for service logic", e);
1361 if (respProps != null) {
1362 errorCode = respProps.getProperty("error-code");
1363 errorMessage = respProps.getProperty("error-message");
1364 ackFinal = respProps.getProperty("ack-final", "Y");
1367 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1368 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1369 serviceStatusBuilder.setRpcName(RpcName.VfModuleTopologyOperation);
1371 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1372 responseBuilder.setResponseCode(errorCode);
1373 responseBuilder.setResponseMessage(errorMessage);
1374 responseBuilder.setAckFinalIndicator(ackFinal);
1375 VfModuleListBuilder vfModuleListBuilder = new VfModuleListBuilder();
1376 vfModuleListBuilder.setVfModuleId(vfid);
1377 vfModuleListBuilder.setServiceStatus(serviceStatusBuilder.build());
1379 SaveVfModuleList (vfModuleListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1380 } catch (Exception e) {
1381 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] \n",e);
1383 log.error("Returned FAILED for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1384 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1385 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1387 return Futures.immediateFuture(rpcResult);
1390 // Got success from SLI
1391 // save vf-module-service-data in MD-SAL
1393 vfModuleServiceData = vfModuleServiceDataBuilder.build();
1394 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] VfModuleServiceData: " + vfModuleServiceData);
1396 VfModuleListBuilder vfModuleListBuilder = new VfModuleListBuilder();
1397 vfModuleListBuilder.setVfModuleServiceData(vfModuleServiceData);
1398 vfModuleListBuilder.setVfModuleId(vfModuleServiceData.getVfModuleId());
1399 //vfid = vfModuleServiceData.getVfModuleId();
1400 vfModuleListBuilder.setServiceStatus(serviceStatusBuilder.build());
1401 SaveVfModuleList (vfModuleListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1402 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1404 // Only update operational tree on Delete or Activate
1405 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1406 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1408 log.info("Updating OPERATIONAL tree.");
1409 SaveVfModuleList (vfModuleListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1412 VfModuleInformationBuilder vfModuleInformationBuilder = new VfModuleInformationBuilder();
1413 vfModuleInformationBuilder.setVfModuleId(vfid);
1414 responseBuilder.setVfModuleInformation(vfModuleInformationBuilder.build());
1415 responseBuilder.setServiceInformation(vfModuleServiceData.getServiceInformation());
1416 } catch (Exception e) {
1417 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+vfid+"] \n",e);
1418 responseBuilder.setResponseCode("500");
1419 responseBuilder.setResponseMessage(e.toString());
1420 responseBuilder.setAckFinalIndicator("Y");
1421 log.error("Returned FAILED for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1422 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1423 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1425 return Futures.immediateFuture(rpcResult);
1429 responseBuilder.setResponseCode(errorCode);
1430 responseBuilder.setAckFinalIndicator(ackFinal);
1431 if (errorMessage != null)
1433 responseBuilder.setResponseMessage(errorMessage);
1435 log.info("Updated vf-module in MD-SAL for "+SVC_OPERATION+" ["+vfid+"] ");
1436 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+vfid+"] " + responseBuilder.build());
1438 RpcResult<VfModuleTopologyOperationOutput> rpcResult =
1439 RpcResultBuilder.<VfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1441 return Futures.immediateFuture(rpcResult);
1446 public Future<RpcResult<VnfTopologyOperationOutput>> vnfTopologyOperation(
1447 VnfTopologyOperationInput input) {
1449 final String SVC_OPERATION = "vnf-topology-operation";
1450 ServiceData serviceData = null;
1451 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1452 Properties parms = new Properties();
1454 log.info( SVC_OPERATION +" called." );
1455 // create a new response object
1456 VnfTopologyOperationOutputBuilder responseBuilder = new VnfTopologyOperationOutputBuilder();
1459 input.getServiceInformation() == null ||
1460 input.getServiceInformation().getServiceInstanceId() == null ||
1461 input.getServiceInformation().getServiceInstanceId().length() == 0)
1463 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1464 responseBuilder.setResponseCode("403");
1465 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1466 responseBuilder.setAckFinalIndicator("Y");
1467 RpcResult<VnfTopologyOperationOutput> rpcResult =
1468 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1470 return Futures.immediateFuture(rpcResult);
1473 if(input.getVnfRequestInformation() == null ||
1474 input.getVnfRequestInformation().getVnfId() == null ||
1475 input.getVnfRequestInformation().getVnfId().length() == 0)
1477 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vf-module-id");
1478 responseBuilder.setResponseCode("403");
1479 responseBuilder.setResponseMessage("invalid input, null or empty vf-module-id");
1480 responseBuilder.setAckFinalIndicator("Y");
1481 RpcResult<VnfTopologyOperationOutput> rpcResult =
1482 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1484 return Futures.immediateFuture(rpcResult);
1487 // Grab the service instance ID from the input buffer
1488 String siid = input.getVnfRequestInformation().getVnfId();
1489 String preload_name = input.getVnfRequestInformation().getVnfName();
1490 String preload_type = input.getVnfRequestInformation().getVnfType();
1493 // Make sure we have a valid siid
1494 if(siid == null || siid.length() == 0 ) {
1495 log.debug("exiting "+SVC_OPERATION+" because of invalid siid");
1496 responseBuilder.setResponseCode("403");
1497 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1498 responseBuilder.setAckFinalIndicator("Y");
1499 RpcResult<VnfTopologyOperationOutput> rpcResult =
1500 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1502 return Futures.immediateFuture(rpcResult);
1506 if (input.getSdncRequestHeader() != null) {
1507 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1510 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1511 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1513 ServiceDataBuilder serviceDataBuilder = new ServiceDataBuilder();
1514 getServiceData(siid,serviceDataBuilder);
1516 ServiceDataBuilder operDataBuilder = new ServiceDataBuilder();
1517 getServiceData(siid,operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1519 // Set the serviceStatus based on input
1520 setServiceStatus(serviceStatusBuilder, input.getSdncRequestHeader());
1521 setServiceStatus(serviceStatusBuilder, input.getRequestInformation());
1524 // setup a service-data object builder
1525 // ACTION vnf-topology-operation
1527 // USES sdnc-request-header;
1528 // USES request-information;
1529 // USES service-information;
1530 // USES vnf-request-information
1532 // USES vnf-topology-response-body;
1533 // USES vnf-information
1534 // USES service-information
1536 // container service-data
1537 // uses vnf-configuration-information;
1538 // uses oper-status;
1540 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1541 VnfTopologyOperationInputBuilder inputBuilder = new VnfTopologyOperationInputBuilder(input);
1542 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1544 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
1545 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1547 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + preloadDataBuilder.build());
1548 VnfSdnUtil.toProperties(parms, "preload-data", preloadDataBuilder);
1550 // Call SLI sync method
1551 // Get SvcLogicService reference
1553 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1554 Properties respProps = null;
1556 String errorCode = "200";
1557 String errorMessage = null;
1558 String ackFinal = "Y";
1563 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1568 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", serviceDataBuilder, parms);
1572 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1573 errorMessage = e.getMessage();
1577 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1584 errorMessage = e.getMessage();
1585 log.error("Caught exception looking for service logic", e);
1589 if (respProps != null)
1591 errorCode = respProps.getProperty("error-code");
1592 errorMessage = respProps.getProperty("error-message");
1593 ackFinal = respProps.getProperty("ack-final", "Y");
1596 setServiceStatus(serviceStatusBuilder,errorCode, errorMessage, ackFinal);
1597 serviceStatusBuilder.setRequestStatus(RequestStatus.Synccomplete);
1598 serviceStatusBuilder.setRpcName(RpcName.VnfTopologyOperation);
1600 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1601 responseBuilder.setResponseCode(errorCode);
1602 responseBuilder.setResponseMessage(errorMessage);
1603 responseBuilder.setAckFinalIndicator(ackFinal);
1604 VnfListBuilder vnfListBuilder = new VnfListBuilder();
1605 vnfListBuilder.setVnfId(siid);
1606 vnfListBuilder.setServiceStatus(serviceStatusBuilder.build());
1608 SaveVnfList (vnfListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1609 } catch (Exception e) {
1610 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1612 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1613 RpcResult<VnfTopologyOperationOutput> rpcResult =
1614 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1616 return Futures.immediateFuture(rpcResult);
1619 // Got success from SLI
1621 serviceData = serviceDataBuilder.build();
1622 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] ServiceData: " + serviceData);
1623 // svc-configuration-list
1624 VnfListBuilder vnfListBuilder = new VnfListBuilder();
1625 vnfListBuilder.setServiceData(serviceData);
1626 vnfListBuilder.setVnfId(serviceData.getVnfId());
1627 siid = serviceData.getVnfId();
1628 vnfListBuilder.setServiceStatus(serviceStatusBuilder.build());
1629 SaveVnfList (vnfListBuilder.build(), false,LogicalDatastoreType.CONFIGURATION);
1630 if (input.getSdncRequestHeader() != null && input.getSdncRequestHeader().getSvcAction() != null)
1632 // Only update operational tree on Delete or Activate
1633 if (input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Delete) ||
1634 input.getSdncRequestHeader().getSvcAction().equals(SvcAction.Activate))
1636 log.info("Updating OPERATIONAL tree.");
1637 SaveVnfList (vnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
1640 VnfInformationBuilder vnfInformationBuilder = new VnfInformationBuilder();
1641 vnfInformationBuilder.setVnfId(siid);
1642 responseBuilder.setVnfInformation(vnfInformationBuilder.build());
1643 responseBuilder.setServiceInformation(serviceData.getServiceInformation());
1644 } catch (Exception e) {
1645 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1646 responseBuilder.setResponseCode("500");
1647 responseBuilder.setResponseMessage(e.toString());
1648 responseBuilder.setAckFinalIndicator("Y");
1649 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1650 RpcResult<VnfTopologyOperationOutput> rpcResult =
1651 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1653 return Futures.immediateFuture(rpcResult);
1657 responseBuilder.setResponseCode(errorCode);
1658 responseBuilder.setAckFinalIndicator(ackFinal);
1659 if (errorMessage != null)
1661 responseBuilder.setResponseMessage(errorMessage);
1663 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1664 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1666 RpcResult<VnfTopologyOperationOutput> rpcResult =
1667 RpcResultBuilder.<VnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1669 return Futures.immediateFuture(rpcResult);
1674 public Future<RpcResult<NetworkTopologyOperationOutput>> networkTopologyOperation(
1675 NetworkTopologyOperationInput input) {
1677 final String SVC_OPERATION = "network-topology-operation";
1678 ServiceData serviceData = null;
1679 ServiceStatusBuilder serviceStatusBuilder = new ServiceStatusBuilder();
1680 Properties parms = new Properties();
1682 log.info( SVC_OPERATION +" called." );
1683 // create a new response object
1684 NetworkTopologyOperationOutputBuilder responseBuilder = new NetworkTopologyOperationOutputBuilder();
1687 input.getServiceInformation() == null ||
1688 input.getServiceInformation().getServiceInstanceId() == null ||
1689 input.getServiceInformation().getServiceInstanceId().length() == 0)
1691 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1692 responseBuilder.setResponseCode("403");
1693 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1694 responseBuilder.setAckFinalIndicator("Y");
1695 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1696 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1698 return Futures.immediateFuture(rpcResult);
1701 if(input.getNetworkRequestInformation() == null || input.getNetworkRequestInformation().getNetworkName() == null) {
1702 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty service-instance-id");
1703 responseBuilder.setResponseCode("403");
1704 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1705 responseBuilder.setAckFinalIndicator("Y");
1706 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1707 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1709 return Futures.immediateFuture(rpcResult);
1712 // Grab the service instance ID from the input buffer
1714 if (input.getSdncRequestHeader().getSvcAction().equals("assign")) {
1715 siid = input.getNetworkRequestInformation().getNetworkName();
1718 siid = input.getNetworkRequestInformation().getNetworkId();
1720 String preload_name = input.getNetworkRequestInformation().getNetworkName();
1721 String preload_type = input.getNetworkRequestInformation().getNetworkType();
1724 if(siid == null || siid.length() == 0 ) {
1725 log.debug("exiting "+SVC_OPERATION+" because of invalid siid");
1726 responseBuilder.setResponseCode("403");
1727 responseBuilder.setResponseMessage("invalid input, null or empty service-instance-id");
1728 responseBuilder.setAckFinalIndicator("Y");
1729 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1730 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1732 return Futures.immediateFuture(rpcResult);
1736 if (input.getSdncRequestHeader() != null) {
1737 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1740 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1741 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1743 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+siid+"] input: " + input);
1744 NetworkTopologyOperationInputBuilder inputBuilder = new NetworkTopologyOperationInputBuilder(input);
1745 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1748 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+siid+"] operational-data: " + operDataBuilder.build());
1749 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1751 log.info("Adding CONFIG data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preload-data: " + preloadDataBuilder.build());
1752 VnfSdnUtil.toProperties(parms, "preload-data", preloadDataBuilder);
1755 // Call SLI sync method
1756 // Get SvcLogicService reference
1758 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1759 Properties respProps = null;
1761 String errorCode = "200";
1762 String errorMessage = null;
1763 String ackFinal = "Y";
1764 String networkId = "error";
1769 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1774 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1778 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1779 errorMessage = e.getMessage();
1783 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1790 errorMessage = e.getMessage();
1791 log.error("Caught exception looking for service logic", e);
1795 if (respProps != null)
1797 errorCode = respProps.getProperty("error-code");
1798 errorMessage = respProps.getProperty("error-message");
1799 ackFinal = respProps.getProperty("ack-final", "Y");
1800 networkId = respProps.getProperty("networkId","0");
1803 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1804 responseBuilder.setResponseCode(errorCode);
1805 responseBuilder.setResponseMessage(errorMessage);
1806 responseBuilder.setAckFinalIndicator(ackFinal);
1808 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1810 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1811 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1813 return Futures.immediateFuture(rpcResult);
1816 // Got success from SLI
1818 NetworkInformationBuilder networkInformationBuilder = new NetworkInformationBuilder();
1819 networkInformationBuilder.setNetworkId(networkId);
1820 responseBuilder.setNetworkInformation(networkInformationBuilder.build());
1821 responseBuilder.setServiceInformation(input.getServiceInformation());
1822 } catch (IllegalStateException e) {
1823 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+siid+"] \n",e);
1824 responseBuilder.setResponseCode("500");
1825 responseBuilder.setResponseMessage(e.toString());
1826 responseBuilder.setAckFinalIndicator("Y");
1827 log.error("Returned FAILED for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1828 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1829 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1831 return Futures.immediateFuture(rpcResult);
1835 responseBuilder.setResponseCode(errorCode);
1836 responseBuilder.setAckFinalIndicator(ackFinal);
1837 if (errorMessage != null)
1839 responseBuilder.setResponseMessage(errorMessage);
1841 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+siid+"] ");
1842 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+siid+"] " + responseBuilder.build());
1844 RpcResult<NetworkTopologyOperationOutput> rpcResult =
1845 RpcResultBuilder.<NetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1847 return Futures.immediateFuture(rpcResult);
1851 public Future<RpcResult<PreloadVnfTopologyOperationOutput>> preloadVnfTopologyOperation(
1852 PreloadVnfTopologyOperationInput input) {
1854 final String SVC_OPERATION = "preload-vnf-topology-operation";
1855 PreloadData preloadData = null;
1856 Properties parms = new Properties();
1858 log.info( SVC_OPERATION +" called." );
1859 // create a new response object
1860 PreloadVnfTopologyOperationOutputBuilder responseBuilder = new PreloadVnfTopologyOperationOutputBuilder();
1862 // Result from savePreloadData
1863 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
1865 if(input == null || input.getVnfTopologyInformation() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName() == null || input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType() == null) {
1866 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-name and vnf-type");
1867 responseBuilder.setResponseCode("403");
1868 responseBuilder.setResponseMessage("invalid input, null or empty vnf-name and vnf-type");
1869 responseBuilder.setAckFinalIndicator("Y");
1870 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1871 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1872 return Futures.immediateFuture(rpcResult);
1875 // Grab the name and type from the input buffer
1876 String preload_name = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfName();
1877 String preload_type = input.getVnfTopologyInformation().getVnfTopologyIdentifier().getVnfType();
1879 // Make sure we have a preload_name and preload_type
1880 if(preload_name == null || preload_name.length() == 0 ) {
1881 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
1882 responseBuilder.setResponseCode("403");
1883 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
1884 responseBuilder.setAckFinalIndicator("Y");
1885 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1886 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1887 return Futures.immediateFuture(rpcResult);
1889 if(preload_type == null || preload_type.length() == 0 ) {
1890 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
1891 responseBuilder.setResponseCode("403");
1892 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
1893 responseBuilder.setAckFinalIndicator("Y");
1894 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1895 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1896 return Futures.immediateFuture(rpcResult);
1899 if (input.getSdncRequestHeader() != null) {
1900 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
1903 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
1904 getPreloadData(preload_name, preload_type, preloadDataBuilder);
1905 //preloadData = preloadDataBuilder.build();
1907 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
1908 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
1911 // setup a preload-data object builder
1912 // ACTION vnf-topology-operation
1914 // USES sdnc-request-header;
1915 // USES request-information;
1916 // uses vnf-topology-information;
1918 // USES vnf-topology-response-body;
1920 // container preload-data
1921 // uses vnf-configuration-information;
1924 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
1925 PreloadVnfTopologyOperationInputBuilder inputBuilder = new PreloadVnfTopologyOperationInputBuilder(input);
1926 VnfSdnUtil.toProperties(parms, inputBuilder.build());
1927 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
1928 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
1930 // Call SLI sync method
1931 // Get SvcLogicService reference
1933 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
1934 Properties respProps = null;
1936 String errorCode = "200";
1937 String errorMessage = null;
1938 String ackFinal = "Y";
1943 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
1948 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
1952 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
1953 errorMessage = e.getMessage();
1957 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
1964 errorMessage = e.getMessage();
1965 log.error("Caught exception looking for service logic", e);
1969 if (respProps != null)
1971 errorCode = respProps.getProperty("error-code");
1972 errorMessage = respProps.getProperty("error-message");
1973 ackFinal = respProps.getProperty("ack-final", "Y");
1974 // internalError = respProps.getProperty("internal-error", "false");
1977 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
1979 responseBuilder.setResponseCode(errorCode);
1980 responseBuilder.setResponseMessage(errorMessage);
1981 responseBuilder.setAckFinalIndicator(ackFinal);
1983 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
1984 preloadVnfListBuilder.setVnfName(preload_name);
1985 preloadVnfListBuilder.setVnfType(preload_type);
1986 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
1987 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
1989 SavePreloadList (preloadVnfListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
1990 } catch (Exception e) {
1991 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
1993 log.debug("Sending Success rpc result due to external error");
1994 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
1995 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
1996 return Futures.immediateFuture(rpcResult);
1999 // Got success from SLI
2001 preloadData = preloadDataBuilder.build();
2002 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
2003 // svc-configuration-list
2004 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2005 preloadVnfListBuilder.setVnfName(preload_name);
2006 preloadVnfListBuilder.setVnfType(preload_type);
2007 preloadVnfListBuilder.setPreloadData(preloadData);
2009 // SDNGC-989 set merge flag to false
2010 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2011 log.info("Updating OPERATIONAL tree.");
2012 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2013 } catch (Exception e) {
2014 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2015 responseBuilder.setResponseCode("500");
2016 responseBuilder.setResponseMessage(e.toString());
2017 responseBuilder.setAckFinalIndicator("Y");
2018 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2019 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
2020 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2021 return Futures.immediateFuture(rpcResult);
2025 responseBuilder.setResponseCode(errorCode);
2026 responseBuilder.setAckFinalIndicator(ackFinal);
2027 if (errorMessage != null)
2029 responseBuilder.setResponseMessage(errorMessage);
2031 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2032 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2034 RpcResult<PreloadVnfTopologyOperationOutput> rpcResult =
2035 RpcResultBuilder.<PreloadVnfTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2036 return Futures.immediateFuture(rpcResult);
2039 //1610 preload-vnf-instance-topology-operation
2041 public Future<RpcResult<PreloadVnfInstanceTopologyOperationOutput>> preloadVnfInstanceTopologyOperation(
2042 PreloadVnfInstanceTopologyOperationInput input) {
2044 final String SVC_OPERATION = "preload-vnf-instance-topology-operation";
2045 VnfInstancePreloadData vnfInstancePreloadData = null;
2046 Properties parms = new Properties();
2048 log.info( SVC_OPERATION +" called." );
2049 // create a new response object
2050 PreloadVnfInstanceTopologyOperationOutputBuilder responseBuilder = new PreloadVnfInstanceTopologyOperationOutputBuilder();
2052 // Result from savePreloadData
2053 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2056 input.getVnfInstanceTopologyInformation() == null ||
2057 input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfInstanceName() == null ||
2058 input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfModelId() == null)
2060 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-name and vnf-model-id");
2061 responseBuilder.setResponseCode("403");
2062 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-name and vnf-model-id");
2063 responseBuilder.setAckFinalIndicator("Y");
2064 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2065 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2066 return Futures.immediateFuture(rpcResult);
2069 // Grab the name and type from the input buffer
2070 String preload_name = input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfInstanceName();
2071 String preload_type = input.getVnfInstanceTopologyInformation().getVnfInstanceIdentifiers().getVnfModelId();
2073 // Make sure we have a preload_name and preload_type
2074 if(preload_name == null || preload_name.length() == 0 ) {
2075 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2076 responseBuilder.setResponseCode("403");
2077 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
2078 responseBuilder.setAckFinalIndicator("Y");
2079 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2080 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2081 return Futures.immediateFuture(rpcResult);
2083 if(preload_type == null || preload_type.length() == 0 ) {
2084 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2085 responseBuilder.setResponseCode("403");
2086 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
2087 responseBuilder.setAckFinalIndicator("Y");
2088 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2089 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2090 return Futures.immediateFuture(rpcResult);
2093 if (input.getSdncRequestHeader() != null) {
2094 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2097 VnfInstancePreloadDataBuilder vnfInstancePreloadDataBuilder = new VnfInstancePreloadDataBuilder();
2098 getVnfInstancePreloadData(preload_name, preload_type, vnfInstancePreloadDataBuilder);
2099 //preloadData = preloadDataBuilder.build();
2101 VnfInstancePreloadDataBuilder operDataBuilder = new VnfInstancePreloadDataBuilder();
2102 getVnfInstancePreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2105 // setup a preload-data object builder
2106 // ACTION vnf-topology-operation
2108 // USES sdnc-request-header;
2109 // USES request-information;
2110 // uses vnf-topology-information;
2112 // USES vnf-topology-response-body;
2114 // container preload-data
2115 // uses vnf-configuration-information;
2118 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2119 PreloadVnfInstanceTopologyOperationInputBuilder inputBuilder = new PreloadVnfInstanceTopologyOperationInputBuilder(input);
2120 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2121 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2122 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2124 // Call SLI sync method
2125 // Get SvcLogicService reference
2127 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2128 Properties respProps = null;
2130 String errorCode = "200";
2131 String errorMessage = null;
2132 String ackFinal = "Y";
2137 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2142 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vnfInstancePreloadDataBuilder, parms);
2146 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2147 errorMessage = e.getMessage();
2151 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2158 errorMessage = e.getMessage();
2159 log.error("Caught exception looking for service logic", e);
2163 if (respProps != null)
2165 errorCode = respProps.getProperty("error-code");
2166 errorMessage = respProps.getProperty("error-message");
2167 ackFinal = respProps.getProperty("ack-final", "Y");
2168 // internalError = respProps.getProperty("internal-error", "false");
2171 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2173 responseBuilder.setResponseCode(errorCode);
2174 responseBuilder.setResponseMessage(errorMessage);
2175 responseBuilder.setAckFinalIndicator(ackFinal);
2177 VnfInstancePreloadListBuilder vnfInstancePreloadListBuilder = new VnfInstancePreloadListBuilder();
2178 vnfInstancePreloadListBuilder.setVnfInstanceName(preload_name);
2179 vnfInstancePreloadListBuilder.setVnfModelId(preload_type);
2180 vnfInstancePreloadListBuilder.setVnfInstancePreloadData(vnfInstancePreloadDataBuilder.build());
2181 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2183 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
2184 } catch (Exception e) {
2185 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2187 log.debug("Sending Success rpc result due to external error");
2188 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2189 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2190 return Futures.immediateFuture(rpcResult);
2193 // Got success from SLI
2195 vnfInstancePreloadData = vnfInstancePreloadDataBuilder.build();
2196 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + vnfInstancePreloadData);
2197 // svc-configuration-list
2198 VnfInstancePreloadListBuilder vnfInstancePreloadListBuilder = new VnfInstancePreloadListBuilder();
2199 vnfInstancePreloadListBuilder.setVnfInstanceName(preload_name);
2200 vnfInstancePreloadListBuilder.setVnfModelId(preload_type);
2201 vnfInstancePreloadListBuilder.setVnfInstancePreloadData(vnfInstancePreloadData);
2203 // SDNGC-989 set merge flag to false
2204 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2205 log.info("Updating OPERATIONAL tree.");
2206 SaveVnfInstancePreloadList (vnfInstancePreloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2207 } catch (Exception e) {
2208 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2209 responseBuilder.setResponseCode("500");
2210 responseBuilder.setResponseMessage(e.toString());
2211 responseBuilder.setAckFinalIndicator("Y");
2212 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2213 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2214 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2215 return Futures.immediateFuture(rpcResult);
2219 responseBuilder.setResponseCode(errorCode);
2220 responseBuilder.setAckFinalIndicator(ackFinal);
2221 if (errorMessage != null)
2223 responseBuilder.setResponseMessage(errorMessage);
2225 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2226 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2228 RpcResult<PreloadVnfInstanceTopologyOperationOutput> rpcResult =
2229 RpcResultBuilder.<PreloadVnfInstanceTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2230 return Futures.immediateFuture(rpcResult);
2234 //1610 preload-vf-module-topology-operation
2236 public Future<RpcResult<PreloadVfModuleTopologyOperationOutput>> preloadVfModuleTopologyOperation(
2237 PreloadVfModuleTopologyOperationInput input) {
2239 final String SVC_OPERATION = "preload-vf-module-topology-operation";
2240 VfModulePreloadData vfModulePreloadData = null;
2241 Properties parms = new Properties();
2243 log.info( SVC_OPERATION +" called." );
2244 // create a new response object
2245 PreloadVfModuleTopologyOperationOutputBuilder responseBuilder = new PreloadVfModuleTopologyOperationOutputBuilder();
2247 // Result from savePreloadData
2248 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2251 input.getVfModuleTopologyInformation() == null ||
2252 input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleName() == null ||
2253 input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleModelId() == null)
2255 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-instance-name and vnf-model-id");
2256 responseBuilder.setResponseCode("403");
2257 responseBuilder.setResponseMessage("invalid input, null or empty vnf-instance-name and vnf-model-id");
2258 responseBuilder.setAckFinalIndicator("Y");
2259 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2260 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2261 return Futures.immediateFuture(rpcResult);
2264 // Grab the name and type from the input buffer
2265 String preload_name = input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleName();
2266 String preload_type = input.getVfModuleTopologyInformation().getVfModuleIdentifiers().getVfModuleModelId();
2268 // Make sure we have a preload_name and preload_type
2269 if(preload_name == null || preload_name.length() == 0 ) {
2270 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2271 responseBuilder.setResponseCode("403");
2272 responseBuilder.setResponseMessage("invalid input, invalid preload-name");
2273 responseBuilder.setAckFinalIndicator("Y");
2274 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2275 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2276 return Futures.immediateFuture(rpcResult);
2278 if(preload_type == null || preload_type.length() == 0 ) {
2279 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2280 responseBuilder.setResponseCode("403");
2281 responseBuilder.setResponseMessage("invalid input, invalid preload-type");
2282 responseBuilder.setAckFinalIndicator("Y");
2283 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2284 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2285 return Futures.immediateFuture(rpcResult);
2288 if (input.getSdncRequestHeader() != null) {
2289 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2292 VfModulePreloadDataBuilder vfModulePreloadDataBuilder = new VfModulePreloadDataBuilder();
2293 getVfModulePreloadData(preload_name, preload_type, vfModulePreloadDataBuilder);
2294 //preloadData = preloadDataBuilder.build();
2296 VfModulePreloadDataBuilder operDataBuilder = new VfModulePreloadDataBuilder();
2297 getVfModulePreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2300 // setup a preload-data object builder
2301 // ACTION vnf-topology-operation
2303 // USES sdnc-request-header;
2304 // USES request-information;
2305 // uses vnf-topology-information;
2307 // USES vnf-topology-response-body;
2309 // container preload-data
2310 // uses vnf-configuration-information;
2313 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2314 PreloadVfModuleTopologyOperationInputBuilder inputBuilder = new PreloadVfModuleTopologyOperationInputBuilder(input);
2315 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2316 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2317 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2319 // Call SLI sync method
2320 // Get SvcLogicService reference
2322 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2323 Properties respProps = null;
2325 String errorCode = "200";
2326 String errorMessage = null;
2327 String ackFinal = "Y";
2332 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2337 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", vfModulePreloadDataBuilder, parms);
2341 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2342 errorMessage = e.getMessage();
2346 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2353 errorMessage = e.getMessage();
2354 log.error("Caught exception looking for service logic", e);
2358 if (respProps != null)
2360 errorCode = respProps.getProperty("error-code");
2361 errorMessage = respProps.getProperty("error-message");
2362 ackFinal = respProps.getProperty("ack-final", "Y");
2363 // internalError = respProps.getProperty("internal-error", "false");
2366 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2368 responseBuilder.setResponseCode(errorCode);
2369 responseBuilder.setResponseMessage(errorMessage);
2370 responseBuilder.setAckFinalIndicator(ackFinal);
2372 VfModulePreloadListBuilder vfModulePreloadListBuilder = new VfModulePreloadListBuilder();
2373 vfModulePreloadListBuilder.setVfModuleName(preload_name);
2374 vfModulePreloadListBuilder.setVfModuleModelId(preload_type);
2375 vfModulePreloadListBuilder.setVfModulePreloadData(vfModulePreloadDataBuilder.build());
2376 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2378 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), true,LogicalDatastoreType.CONFIGURATION);
2379 } catch (Exception e) {
2380 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2382 log.debug("Sending Success rpc result due to external error");
2383 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2384 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2385 return Futures.immediateFuture(rpcResult);
2388 // Got success from SLI
2390 vfModulePreloadData = vfModulePreloadDataBuilder.build();
2391 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + vfModulePreloadData);
2392 // svc-configuration-list
2393 VfModulePreloadListBuilder vfModulePreloadListBuilder = new VfModulePreloadListBuilder();
2394 vfModulePreloadListBuilder.setVfModuleName(preload_name);
2395 vfModulePreloadListBuilder.setVfModuleModelId(preload_type);
2396 vfModulePreloadListBuilder.setVfModulePreloadData(vfModulePreloadData);
2398 // SDNGC-989 set merge flag to false
2399 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2400 log.info("Updating OPERATIONAL tree.");
2401 SaveVfModulePreloadList (vfModulePreloadListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2402 } catch (Exception e) {
2403 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2404 responseBuilder.setResponseCode("500");
2405 responseBuilder.setResponseMessage(e.toString());
2406 responseBuilder.setAckFinalIndicator("Y");
2407 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2408 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2409 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2410 return Futures.immediateFuture(rpcResult);
2414 responseBuilder.setResponseCode(errorCode);
2415 responseBuilder.setAckFinalIndicator(ackFinal);
2416 if (errorMessage != null)
2418 responseBuilder.setResponseMessage(errorMessage);
2420 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2421 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2423 RpcResult<PreloadVfModuleTopologyOperationOutput> rpcResult =
2424 RpcResultBuilder.<PreloadVfModuleTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2425 return Futures.immediateFuture(rpcResult);
2430 public Future<RpcResult<PreloadNetworkTopologyOperationOutput>> preloadNetworkTopologyOperation(
2431 PreloadNetworkTopologyOperationInput input) {
2433 final String SVC_OPERATION = "preload-network-topology-operation";
2434 PreloadData preloadData = null;
2435 Properties parms = new Properties();
2437 log.info( SVC_OPERATION +" called." );
2438 // create a new response object
2439 PreloadNetworkTopologyOperationOutputBuilder responseBuilder = new PreloadNetworkTopologyOperationOutputBuilder();
2441 // Result from savePreloadData
2442 final SettableFuture<RpcResult<Void>> futureResult = SettableFuture.create();
2444 if(input == null || input.getNetworkTopologyInformation() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName() == null || input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType() == null) {
2445 log.debug("exiting " +SVC_OPERATION+ " because of invalid input, null or empty vnf-name and vnf-type");
2446 responseBuilder.setResponseCode("403");
2447 responseBuilder.setResponseMessage("input, null or empty vnf-name and vnf-type");
2448 responseBuilder.setAckFinalIndicator("Y");
2449 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2450 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2451 return Futures.immediateFuture(rpcResult);
2454 // Grab the name and type from the input buffer
2455 String preload_name = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkName();
2456 String preload_type = input.getNetworkTopologyInformation().getNetworkTopologyIdentifier().getNetworkType();
2458 // Make sure we have a preload_name and preload_type
2459 if(preload_name == null || preload_name.length() == 0 ) {
2460 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-name");
2461 responseBuilder.setResponseCode("403");
2462 responseBuilder.setResponseMessage("input, invalid preload-name");
2463 responseBuilder.setAckFinalIndicator("Y");
2464 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2465 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2466 return Futures.immediateFuture(rpcResult);
2468 if(preload_type == null || preload_type.length() == 0 ) {
2469 log.debug("exiting "+SVC_OPERATION+" because of invalid preload-type");
2470 responseBuilder.setResponseCode("403");
2471 responseBuilder.setResponseMessage("input, invalid preload-type");
2472 responseBuilder.setAckFinalIndicator("Y");
2473 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2474 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2475 return Futures.immediateFuture(rpcResult);
2478 if (input.getSdncRequestHeader() != null) {
2479 responseBuilder.setSvcRequestId(input.getSdncRequestHeader().getSvcRequestId());
2482 PreloadDataBuilder preloadDataBuilder = new PreloadDataBuilder();
2483 getPreloadData(preload_name, preload_type, preloadDataBuilder);
2485 PreloadDataBuilder operDataBuilder = new PreloadDataBuilder();
2486 getPreloadData(preload_name, preload_type, operDataBuilder, LogicalDatastoreType.OPERATIONAL );
2489 // setup a preload-data object builder
2490 // ACTION vnf-topology-operation
2492 // USES sdnc-request-header;
2493 // USES request-information;
2494 // uses vnf-topology-information;
2496 // USES vnf-topology-response-body;
2498 // container preload-data
2499 // uses vnf-configuration-information;
2502 log.info("Adding INPUT data for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] input: " + input);
2503 PreloadNetworkTopologyOperationInputBuilder inputBuilder = new PreloadNetworkTopologyOperationInputBuilder(input);
2504 VnfSdnUtil.toProperties(parms, inputBuilder.build());
2505 log.info("Adding OPERATIONAL data for "+SVC_OPERATION+" ["+preload_name+","+preload_type +"] operational-data: " + operDataBuilder.build());
2506 VnfSdnUtil.toProperties(parms, "operational-data", operDataBuilder);
2508 // Call SLI sync method
2509 // Get SvcLogicService reference
2511 VNFSDNSvcLogicServiceClient svcLogicClient = new VNFSDNSvcLogicServiceClient();
2512 Properties respProps = null;
2514 String errorCode = "200";
2515 String errorMessage = null;
2516 String ackFinal = "Y";
2521 if (svcLogicClient.hasGraph("VNF-API", SVC_OPERATION , null, "sync"))
2526 respProps = svcLogicClient.execute("VNF-API", SVC_OPERATION, null, "sync", preloadDataBuilder, parms);
2530 log.error("Caught exception executing service logic for "+ SVC_OPERATION, e);
2531 errorMessage = e.getMessage();
2535 errorMessage = "No service logic active for VNF-API: '" + SVC_OPERATION + "'";
2542 errorMessage = e.getMessage();
2543 log.error("Caught exception looking for service logic", e);
2547 if (respProps != null)
2549 errorCode = respProps.getProperty("error-code");
2550 errorMessage = respProps.getProperty("error-message");
2551 ackFinal = respProps.getProperty("ack-final", "Y");
2552 // internalError = respProps.getProperty("internal-error", "false");
2555 if ( errorCode != null && errorCode.length() != 0 && !( errorCode.equals("0")|| errorCode.equals("200"))) {
2557 responseBuilder.setResponseCode(errorCode);
2558 responseBuilder.setResponseMessage(errorMessage);
2559 responseBuilder.setAckFinalIndicator(ackFinal);
2561 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2562 preloadVnfListBuilder.setVnfName(preload_name);
2563 preloadVnfListBuilder.setVnfType(preload_type);
2564 preloadVnfListBuilder.setPreloadData(preloadDataBuilder.build());
2565 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] error code: '" + errorCode + "', Reason: '" + errorMessage + "'");
2567 SavePreloadList (preloadVnfListBuilder.build(),true,LogicalDatastoreType.CONFIGURATION);
2568 } catch (Exception e) {
2569 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2572 log.debug("Sending Success rpc result due to external error");
2573 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2574 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2575 return Futures.immediateFuture(rpcResult);
2578 // Got success from SLI
2580 preloadData = preloadDataBuilder.build();
2581 log.info("Updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] preloadData: " + preloadData);
2582 // svc-configuration-list
2583 VnfPreloadListBuilder preloadVnfListBuilder = new VnfPreloadListBuilder();
2584 preloadVnfListBuilder.setVnfName(preload_name);
2585 preloadVnfListBuilder.setVnfType(preload_type);
2586 preloadVnfListBuilder.setPreloadData(preloadData);
2588 // SDNGC-989 set merge flag to false
2589 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.CONFIGURATION);
2590 log.info("Updating OPERATIONAL tree.");
2591 SavePreloadList (preloadVnfListBuilder.build(), false, LogicalDatastoreType.OPERATIONAL);
2592 } catch (Exception e) {
2593 log.error("Caught Exception updating MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] \n",e);
2594 responseBuilder.setResponseCode("500");
2595 responseBuilder.setResponseMessage(e.toString());
2596 responseBuilder.setAckFinalIndicator("Y");
2597 log.error("Returned FAILED for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2598 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2599 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(false).withResult(responseBuilder.build()).build();
2600 return Futures.immediateFuture(rpcResult);
2604 responseBuilder.setResponseCode(errorCode);
2605 responseBuilder.setAckFinalIndicator(ackFinal);
2606 if (errorMessage != null)
2608 responseBuilder.setResponseMessage(errorMessage);
2610 log.info("Updated MD-SAL for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] ");
2611 log.info("Returned SUCCESS for "+SVC_OPERATION+" ["+preload_name+","+preload_type+"] " + responseBuilder.build());
2613 RpcResult<PreloadNetworkTopologyOperationOutput> rpcResult =
2614 RpcResultBuilder.<PreloadNetworkTopologyOperationOutput> status(true).withResult(responseBuilder.build()).build();
2615 return Futures.immediateFuture(rpcResult);