1 package org.onap.ccsdk.sli.northbound;
3 * ============LICENSE_START=======================================================
5 * ================================================================================
6 * Copyright (C) 2017 AT&T Intellectual Property. All rights
8 * Modifications Copyright © 2018 IBM.
9 * ================================================================================
10 * Licensed under the Apache License, Version 2.0 (the "License");
11 * you may not use this file except in compliance with the License.
12 * You may obtain a copy of the License at
14 * http://www.apache.org/licenses/LICENSE-2.0
16 * Unless required by applicable law or agreed to in writing, software
17 * distributed under the License is distributed on an "AS IS" BASIS,
18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19 * See the License for the specific language governing permissions and
20 * limitations under the License.
21 * ============LICENSE_END=========================================================
24 import java.text.SimpleDateFormat;
25 import java.util.Date;
26 import java.util.Properties;
27 import java.util.concurrent.ExecutorService;
28 import java.util.concurrent.Executors;
29 import java.util.concurrent.Future;
30 import org.onap.ccsdk.sli.core.sli.provider.MdsalHelper;
31 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
32 import org.opendaylight.controller.md.sal.binding.api.NotificationPublishService;
33 import org.opendaylight.controller.md.sal.binding.impl.AbstractForwardedDataBroker;
34 import org.opendaylight.controller.md.sal.dom.api.DOMDataBroker;
35 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
36 import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry;
37 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.northbound.lcm.rev180329.*;
38 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.northbound.lcm.rev180329.common.header.CommonHeaderBuilder;
39 import org.opendaylight.yang.gen.v1.org.onap.ccsdk.sli.northbound.lcm.rev180329.status.StatusBuilder;
40 import org.opendaylight.yangtools.yang.common.RpcResult;
41 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
45 import com.google.common.util.concurrent.Futures;
46 import com.google.common.util.concurrent.ListenableFuture;
48 import org.onap.ccsdk.sli.northbound.LcmResponseCode.*;
51 * Defines a base implementation for your provider. This class extends from a
52 * helper class which provides storage for the most commonly used components of
53 * the MD-SAL. Additionally the base class provides some basic logging and
54 * initialization / clean up methods.
57 public class LcmProvider implements AutoCloseable, LCMService {
59 private class CommonLcmFields {
60 private StatusBuilder statusBuilder;
61 private CommonHeaderBuilder commonHeaderBuilder;
62 private Payload payload;
64 public CommonLcmFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder) {
65 this.statusBuilder = statusBuilder;
66 this.commonHeaderBuilder = commonHeaderBuilder;
70 public CommonLcmFields(StatusBuilder statusBuilder, CommonHeaderBuilder commonHeaderBuilder, Payload payload) {
71 this.statusBuilder = statusBuilder;
72 this.commonHeaderBuilder = commonHeaderBuilder;
73 this.payload = payload;
76 public StatusBuilder getStatusBuilder() {
80 public CommonHeaderBuilder getCommonHeaderBuilder() {
81 return commonHeaderBuilder;
84 public Payload getPayload() {
89 private static final Logger LOG = LoggerFactory.getLogger(LcmProvider.class);
91 private static final String exceptionMessage = "Caught exception";
93 private static final String APPLICATION_NAME = "LCM";
95 private final ExecutorService executor;
96 protected DataBroker dataBroker;
97 protected DOMDataBroker domDataBroker;
98 protected NotificationPublishService notificationService;
99 protected RpcProviderRegistry rpcRegistry;
100 private final LcmSliClient lcmSliClient;
102 protected BindingAwareBroker.RpcRegistration<LCMService> rpcRegistration;
104 public LcmProvider(final DataBroker dataBroker, final NotificationPublishService notificationPublishService,
105 final RpcProviderRegistry rpcProviderRegistry, final LcmSliClient lcmSliClient) {
107 LOG.info("Creating provider for {}", APPLICATION_NAME);
108 executor = Executors.newFixedThreadPool(1);
109 this.dataBroker = dataBroker;
110 if (dataBroker instanceof AbstractForwardedDataBroker) {
111 domDataBroker = ((AbstractForwardedDataBroker) dataBroker).getDelegate();
113 notificationService = notificationPublishService;
114 rpcRegistry = rpcProviderRegistry;
115 this.lcmSliClient = lcmSliClient;
119 public void initialize() {
120 LOG.info("Initializing {} for {}", this.getClass().getName(), APPLICATION_NAME);
122 if (rpcRegistration == null) {
123 if (rpcRegistry != null) {
124 rpcRegistration = rpcRegistry.addRpcImplementation(LCMService.class, this);
125 LOG.info("Initialization complete for {}", APPLICATION_NAME);
127 LOG.warn("Error initializing {} : rpcRegistry unset", APPLICATION_NAME);
132 protected void initializeChild() {
133 // Override if you have custom initialization intelligence
137 public void close() throws Exception {
138 LOG.info("Closing provider for " + APPLICATION_NAME);
140 rpcRegistration.close();
141 LOG.info("Successfully closed provider for " + APPLICATION_NAME);
147 public ListenableFuture<RpcResult<CheckLockOutput>> checkLock(CheckLockInput input) {
148 CheckLockInputBuilder iBuilder = new CheckLockInputBuilder(input);
149 CheckLockOutputBuilder oBuilder = new CheckLockOutputBuilder();
152 CommonLcmFields retval = callDG("check-lock", iBuilder.build());
153 oBuilder.setStatus(retval.getStatusBuilder().build());
154 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
155 } catch (LcmRpcInvocationException e) {
156 LOG.debug(exceptionMessage, e);
157 oBuilder.setCommonHeader(e.getCommonHeader());
158 oBuilder.setStatus(e.getStatus());
161 RpcResult<CheckLockOutput> rpcResult =
162 RpcResultBuilder.<CheckLockOutput> status(true).withResult(oBuilder.build()).build();
164 return Futures.immediateFuture(rpcResult);
169 public ListenableFuture<RpcResult<RebootOutput>> reboot(RebootInput input) {
170 RebootInputBuilder iBuilder = new RebootInputBuilder(input);
171 RebootOutputBuilder oBuilder = new RebootOutputBuilder();
174 CommonLcmFields retval = callDG("reboot", iBuilder.build());
175 oBuilder.setStatus(retval.getStatusBuilder().build());
176 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
177 } catch (LcmRpcInvocationException e) {
178 LOG.debug(exceptionMessage, e);
179 oBuilder.setCommonHeader(e.getCommonHeader());
180 oBuilder.setStatus(e.getStatus());
183 RpcResult<RebootOutput> rpcResult =
184 RpcResultBuilder.<RebootOutput> status(true).withResult(oBuilder.build()).build();
186 return Futures.immediateFuture(rpcResult);
190 public ListenableFuture<RpcResult<UpgradeBackupOutput>> upgradeBackup(UpgradeBackupInput input) {
191 UpgradeBackupInputBuilder iBuilder = new UpgradeBackupInputBuilder(input);
192 UpgradeBackupOutputBuilder oBuilder = new UpgradeBackupOutputBuilder();
195 CommonLcmFields retval = callDG("upgrade-backup", iBuilder.build());
196 oBuilder.setStatus(retval.getStatusBuilder().build());
197 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
199 } catch (LcmRpcInvocationException e) {
200 LOG.debug(exceptionMessage, e);
201 oBuilder.setCommonHeader(e.getCommonHeader());
202 oBuilder.setStatus(e.getStatus());
205 RpcResult<UpgradeBackupOutput> rpcResult =
206 RpcResultBuilder.<UpgradeBackupOutput> status(true).withResult(oBuilder.build()).build();
208 return Futures.immediateFuture(rpcResult);
212 public ListenableFuture<RpcResult<RollbackOutput>> rollback(RollbackInput input) {
213 RollbackInputBuilder iBuilder = new RollbackInputBuilder(input);
214 RollbackOutputBuilder oBuilder = new RollbackOutputBuilder();
217 CommonLcmFields retval = callDG("rollback", iBuilder.build());
218 oBuilder.setStatus(retval.getStatusBuilder().build());
219 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
220 if (retval.getPayload() != null) {
221 oBuilder.setPayload(retval.getPayload());
223 } catch (LcmRpcInvocationException e) {
224 LOG.debug(exceptionMessage, e);
225 oBuilder.setCommonHeader(e.getCommonHeader());
226 oBuilder.setStatus(e.getStatus());
229 RpcResult<RollbackOutput> rpcResult =
230 RpcResultBuilder.<RollbackOutput> status(true).withResult(oBuilder.build()).build();
232 return Futures.immediateFuture(rpcResult);
236 public ListenableFuture<RpcResult<SyncOutput>> sync(SyncInput input) {
237 SyncInputBuilder iBuilder = new SyncInputBuilder(input);
238 SyncOutputBuilder oBuilder = new SyncOutputBuilder();
241 CommonLcmFields retval = callDG("sync", iBuilder.build());
242 oBuilder.setStatus(retval.getStatusBuilder().build());
243 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
244 } catch (LcmRpcInvocationException e) {
245 LOG.debug(exceptionMessage, e);
246 oBuilder.setCommonHeader(e.getCommonHeader());
247 oBuilder.setStatus(e.getStatus());
250 RpcResult<SyncOutput> rpcResult =
251 RpcResultBuilder.<SyncOutput> status(true).withResult(oBuilder.build()).build();
253 return Futures.immediateFuture(rpcResult);
257 public ListenableFuture<RpcResult<QueryOutput>> query(QueryInput input) {
258 QueryInputBuilder iBuilder = new QueryInputBuilder(input);
259 QueryOutputBuilder oBuilder = new QueryOutputBuilder();
262 CommonLcmFields retval = callDG("query", iBuilder.build());
263 oBuilder.setStatus(retval.getStatusBuilder().build());
264 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
265 } catch (LcmRpcInvocationException e) {
266 LOG.debug(exceptionMessage, e);
267 oBuilder.setCommonHeader(e.getCommonHeader());
268 oBuilder.setStatus(e.getStatus());
271 RpcResult<QueryOutput> rpcResult =
272 RpcResultBuilder.<QueryOutput> status(true).withResult(oBuilder.build()).build();
274 return Futures.immediateFuture(rpcResult);
278 public ListenableFuture<RpcResult<ConfigExportOutput>> configExport(ConfigExportInput input) {
279 ConfigExportInputBuilder iBuilder = new ConfigExportInputBuilder(input);
280 ConfigExportOutputBuilder oBuilder = new ConfigExportOutputBuilder();
283 CommonLcmFields retval = callDG("config-export", iBuilder.build());
284 oBuilder.setStatus(retval.getStatusBuilder().build());
285 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
286 } catch (LcmRpcInvocationException e) {
287 LOG.debug(exceptionMessage, e);
288 oBuilder.setCommonHeader(e.getCommonHeader());
289 oBuilder.setStatus(e.getStatus());
292 RpcResult<ConfigExportOutput> rpcResult =
293 RpcResultBuilder.<ConfigExportOutput> status(true).withResult(oBuilder.build()).build();
295 return Futures.immediateFuture(rpcResult);
299 public ListenableFuture<RpcResult<StopApplicationOutput>> stopApplication(StopApplicationInput input) {
300 StopApplicationInputBuilder iBuilder = new StopApplicationInputBuilder(input);
301 StopApplicationOutputBuilder oBuilder = new StopApplicationOutputBuilder();
304 CommonLcmFields retval = callDG("stop-application", iBuilder.build());
305 oBuilder.setStatus(retval.getStatusBuilder().build());
306 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
307 } catch (LcmRpcInvocationException e) {
308 LOG.debug(exceptionMessage, e);
309 oBuilder.setCommonHeader(e.getCommonHeader());
310 oBuilder.setStatus(e.getStatus());
313 RpcResult<StopApplicationOutput> rpcResult =
314 RpcResultBuilder.<StopApplicationOutput> status(true).withResult(oBuilder.build()).build();
316 return Futures.immediateFuture(rpcResult);
320 public ListenableFuture<RpcResult<SoftwareUploadOutput>> softwareUpload(SoftwareUploadInput input) {
321 SoftwareUploadInputBuilder iBuilder = new SoftwareUploadInputBuilder(input);
322 SoftwareUploadOutputBuilder oBuilder = new SoftwareUploadOutputBuilder();
325 CommonLcmFields retval = callDG("software-upload", iBuilder.build());
326 oBuilder.setStatus(retval.getStatusBuilder().build());
327 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
328 } catch (LcmRpcInvocationException e) {
329 LOG.debug(exceptionMessage, e);
330 oBuilder.setCommonHeader(e.getCommonHeader());
331 oBuilder.setStatus(e.getStatus());
334 RpcResult<SoftwareUploadOutput> rpcResult =
335 RpcResultBuilder.<SoftwareUploadOutput> status(true).withResult(oBuilder.build()).build();
337 return Futures.immediateFuture(rpcResult);
341 public ListenableFuture<RpcResult<ResumeTrafficOutput>> resumeTraffic(ResumeTrafficInput input) {
342 ResumeTrafficInputBuilder iBuilder = new ResumeTrafficInputBuilder(input);
343 ResumeTrafficOutputBuilder oBuilder = new ResumeTrafficOutputBuilder();
346 CommonLcmFields retval = callDG("resume-traffic", iBuilder.build());
347 oBuilder.setStatus(retval.getStatusBuilder().build());
348 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
349 } catch (LcmRpcInvocationException e) {
350 LOG.debug(exceptionMessage, e);
351 oBuilder.setCommonHeader(e.getCommonHeader());
352 oBuilder.setStatus(e.getStatus());
355 RpcResult<ResumeTrafficOutput> rpcResult =
356 RpcResultBuilder.<ResumeTrafficOutput> status(true).withResult(oBuilder.build()).build();
358 return Futures.immediateFuture(rpcResult);
362 public ListenableFuture<RpcResult<DistributeTrafficOutput>> distributeTraffic(DistributeTrafficInput input) {
363 DistributeTrafficInputBuilder iBuilder = new DistributeTrafficInputBuilder(input);
364 DistributeTrafficOutputBuilder oBuilder = new DistributeTrafficOutputBuilder();
367 CommonLcmFields retval = callDG("distribute-traffic", iBuilder.build());
368 oBuilder.setStatus(retval.getStatusBuilder().build());
369 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
370 } catch (LcmRpcInvocationException e) {
371 LOG.debug(exceptionMessage, e);
372 oBuilder.setCommonHeader(e.getCommonHeader());
373 oBuilder.setStatus(e.getStatus());
376 RpcResult<DistributeTrafficOutput> rpcResult =
377 RpcResultBuilder.<DistributeTrafficOutput> status(true).withResult(oBuilder.build()).build();
379 return Futures.immediateFuture(rpcResult);
383 public ListenableFuture<RpcResult<ConfigureOutput>> configure(ConfigureInput input) {
384 ConfigureInputBuilder iBuilder = new ConfigureInputBuilder(input);
385 ConfigureOutputBuilder oBuilder = new ConfigureOutputBuilder();
388 CommonLcmFields retval = callDG("configure", iBuilder.build());
389 oBuilder.setStatus(retval.getStatusBuilder().build());
390 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
391 } catch (LcmRpcInvocationException e) {
392 LOG.debug(exceptionMessage, e);
393 oBuilder.setCommonHeader(e.getCommonHeader());
394 oBuilder.setStatus(e.getStatus());
397 RpcResult<ConfigureOutput> rpcResult =
398 RpcResultBuilder.<ConfigureOutput> status(true).withResult(oBuilder.build()).build();
400 return Futures.immediateFuture(rpcResult);
404 public ListenableFuture<RpcResult<ActionStatusOutput>> actionStatus(ActionStatusInput input) {
405 ActionStatusInputBuilder iBuilder = new ActionStatusInputBuilder(input);
406 ActionStatusOutputBuilder oBuilder = new ActionStatusOutputBuilder();
409 CommonLcmFields retval = callDG("action-status", iBuilder.build());
410 oBuilder.setStatus(retval.getStatusBuilder().build());
411 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
412 } catch (LcmRpcInvocationException e) {
413 LOG.debug(exceptionMessage, e);
414 oBuilder.setCommonHeader(e.getCommonHeader());
415 oBuilder.setStatus(e.getStatus());
418 RpcResult<ActionStatusOutput> rpcResult =
419 RpcResultBuilder.<ActionStatusOutput> status(true).withResult(oBuilder.build()).build();
421 return Futures.immediateFuture(rpcResult);
425 public ListenableFuture<RpcResult<UpgradePreCheckOutput>> upgradePreCheck(UpgradePreCheckInput input) {
426 UpgradePreCheckInputBuilder iBuilder = new UpgradePreCheckInputBuilder(input);
427 UpgradePreCheckOutputBuilder oBuilder = new UpgradePreCheckOutputBuilder();
430 CommonLcmFields retval = callDG("upgrade-pre-check", iBuilder.build());
431 oBuilder.setStatus(retval.getStatusBuilder().build());
432 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
433 if (retval.getPayload() != null) {
434 oBuilder.setPayload(retval.getPayload());
436 } catch (LcmRpcInvocationException e) {
437 LOG.debug(exceptionMessage, e);
438 oBuilder.setCommonHeader(e.getCommonHeader());
439 oBuilder.setStatus(e.getStatus());
442 RpcResult<UpgradePreCheckOutput> rpcResult =
443 RpcResultBuilder.<UpgradePreCheckOutput> status(true).withResult(oBuilder.build()).build();
445 return Futures.immediateFuture(rpcResult);
449 public ListenableFuture<RpcResult<LiveUpgradeOutput>> liveUpgrade(LiveUpgradeInput input) {
450 LiveUpgradeInputBuilder iBuilder = new LiveUpgradeInputBuilder(input);
451 LiveUpgradeOutputBuilder oBuilder = new LiveUpgradeOutputBuilder();
454 CommonLcmFields retval = callDG("live-upgrade", iBuilder.build());
455 oBuilder.setStatus(retval.getStatusBuilder().build());
456 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
457 } catch (LcmRpcInvocationException e) {
458 LOG.debug(exceptionMessage, e);
459 oBuilder.setCommonHeader(e.getCommonHeader());
460 oBuilder.setStatus(e.getStatus());
463 RpcResult<LiveUpgradeOutput> rpcResult =
464 RpcResultBuilder.<LiveUpgradeOutput> status(true).withResult(oBuilder.build()).build();
466 return Futures.immediateFuture(rpcResult);
470 public ListenableFuture<RpcResult<ConfigModifyOutput>> configModify(ConfigModifyInput input) {
471 ConfigModifyInputBuilder iBuilder = new ConfigModifyInputBuilder(input);
472 ConfigModifyOutputBuilder oBuilder = new ConfigModifyOutputBuilder();
475 CommonLcmFields retval = callDG("config-modify", iBuilder.build());
476 oBuilder.setStatus(retval.getStatusBuilder().build());
477 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
478 } catch (LcmRpcInvocationException e) {
479 LOG.debug(exceptionMessage, e);
480 oBuilder.setCommonHeader(e.getCommonHeader());
481 oBuilder.setStatus(e.getStatus());
484 RpcResult<ConfigModifyOutput> rpcResult =
485 RpcResultBuilder.<ConfigModifyOutput> status(true).withResult(oBuilder.build()).build();
487 return Futures.immediateFuture(rpcResult);
491 public ListenableFuture<RpcResult<RestartOutput>> restart(RestartInput input) {
492 RestartInputBuilder iBuilder = new RestartInputBuilder(input);
493 RestartOutputBuilder oBuilder = new RestartOutputBuilder();
496 CommonLcmFields retval = callDG("restart", iBuilder.build());
497 oBuilder.setStatus(retval.getStatusBuilder().build());
498 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
499 } catch (LcmRpcInvocationException e) {
500 LOG.debug(exceptionMessage, e);
501 oBuilder.setCommonHeader(e.getCommonHeader());
502 oBuilder.setStatus(e.getStatus());
505 RpcResult<RestartOutput> rpcResult =
506 RpcResultBuilder.<RestartOutput> status(true).withResult(oBuilder.build()).build();
508 return Futures.immediateFuture(rpcResult);
512 public ListenableFuture<RpcResult<HealthCheckOutput>> healthCheck(HealthCheckInput input) {
513 HealthCheckInputBuilder iBuilder = new HealthCheckInputBuilder(input);
514 HealthCheckOutputBuilder oBuilder = new HealthCheckOutputBuilder();
517 CommonLcmFields retval = callDG("health-check", iBuilder.build());
518 oBuilder.setStatus(retval.getStatusBuilder().build());
519 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
520 } catch (LcmRpcInvocationException e) {
521 LOG.debug(exceptionMessage, e);
522 oBuilder.setCommonHeader(e.getCommonHeader());
523 oBuilder.setStatus(e.getStatus());
526 RpcResult<HealthCheckOutput> rpcResult =
527 RpcResultBuilder.<HealthCheckOutput> status(true).withResult(oBuilder.build()).build();
529 return Futures.immediateFuture(rpcResult);
533 public ListenableFuture<RpcResult<LockOutput>> lock(LockInput input) {
534 LockInputBuilder iBuilder = new LockInputBuilder(input);
535 LockOutputBuilder oBuilder = new LockOutputBuilder();
538 CommonLcmFields retval = callDG("lock", iBuilder.build());
539 oBuilder.setStatus(retval.getStatusBuilder().build());
540 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
541 } catch (LcmRpcInvocationException e) {
542 LOG.debug(exceptionMessage, e);
543 oBuilder.setCommonHeader(e.getCommonHeader());
544 oBuilder.setStatus(e.getStatus());
547 RpcResult<LockOutput> rpcResult =
548 RpcResultBuilder.<LockOutput> status(true).withResult(oBuilder.build()).build();
550 return Futures.immediateFuture(rpcResult);
554 public ListenableFuture<RpcResult<TerminateOutput>> terminate(TerminateInput input) {
555 TerminateInputBuilder iBuilder = new TerminateInputBuilder(input);
556 TerminateOutputBuilder oBuilder = new TerminateOutputBuilder();
559 CommonLcmFields retval = callDG("terminate", iBuilder.build());
560 oBuilder.setStatus(retval.getStatusBuilder().build());
561 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
562 } catch (LcmRpcInvocationException e) {
563 LOG.debug(exceptionMessage, e);
564 oBuilder.setCommonHeader(e.getCommonHeader());
565 oBuilder.setStatus(e.getStatus());
568 RpcResult<TerminateOutput> rpcResult =
569 RpcResultBuilder.<TerminateOutput> status(true).withResult(oBuilder.build()).build();
571 return Futures.immediateFuture(rpcResult);
575 public ListenableFuture<RpcResult<AttachVolumeOutput>> attachVolume(AttachVolumeInput input) {
576 AttachVolumeInputBuilder iBuilder = new AttachVolumeInputBuilder(input);
577 AttachVolumeOutputBuilder oBuilder = new AttachVolumeOutputBuilder();
580 CommonLcmFields retval = callDG("attach-volume", iBuilder.build());
581 oBuilder.setStatus(retval.getStatusBuilder().build());
582 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
583 } catch (LcmRpcInvocationException e) {
584 LOG.debug(exceptionMessage, e);
585 oBuilder.setCommonHeader(e.getCommonHeader());
586 oBuilder.setStatus(e.getStatus());
589 RpcResult<AttachVolumeOutput> rpcResult =
590 RpcResultBuilder.<AttachVolumeOutput> status(true).withResult(oBuilder.build()).build();
592 return Futures.immediateFuture(rpcResult);
596 public ListenableFuture<RpcResult<MigrateOutput>> migrate(MigrateInput input) {
597 MigrateInputBuilder iBuilder = new MigrateInputBuilder(input);
598 MigrateOutputBuilder oBuilder = new MigrateOutputBuilder();
601 CommonLcmFields retval = callDG("migrate", iBuilder.build());
602 oBuilder.setStatus(retval.getStatusBuilder().build());
603 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
604 } catch (LcmRpcInvocationException e) {
605 LOG.debug(exceptionMessage, e);
606 oBuilder.setCommonHeader(e.getCommonHeader());
607 oBuilder.setStatus(e.getStatus());
610 RpcResult<MigrateOutput> rpcResult =
611 RpcResultBuilder.<MigrateOutput> status(true).withResult(oBuilder.build()).build();
613 return Futures.immediateFuture(rpcResult);
617 public ListenableFuture<RpcResult<QuiesceTrafficOutput>> quiesceTraffic(QuiesceTrafficInput input) {
618 QuiesceTrafficInputBuilder iBuilder = new QuiesceTrafficInputBuilder(input);
619 QuiesceTrafficOutputBuilder oBuilder = new QuiesceTrafficOutputBuilder();
622 CommonLcmFields retval = callDG("quiesce-traffic", iBuilder.build());
623 oBuilder.setStatus(retval.getStatusBuilder().build());
624 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
625 } catch (LcmRpcInvocationException e) {
626 LOG.debug(exceptionMessage, e);
627 oBuilder.setCommonHeader(e.getCommonHeader());
628 oBuilder.setStatus(e.getStatus());
631 RpcResult<QuiesceTrafficOutput> rpcResult =
632 RpcResultBuilder.<QuiesceTrafficOutput> status(true).withResult(oBuilder.build()).build();
634 return Futures.immediateFuture(rpcResult);
638 public ListenableFuture<RpcResult<ConfigRestoreOutput>> configRestore(ConfigRestoreInput input) {
639 ConfigRestoreInputBuilder iBuilder = new ConfigRestoreInputBuilder(input);
640 ConfigRestoreOutputBuilder oBuilder = new ConfigRestoreOutputBuilder();
643 CommonLcmFields retval = callDG("config-restore", iBuilder.build());
644 oBuilder.setStatus(retval.getStatusBuilder().build());
645 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
646 } catch (LcmRpcInvocationException e) {
647 LOG.debug(exceptionMessage, e);
648 oBuilder.setCommonHeader(e.getCommonHeader());
649 oBuilder.setStatus(e.getStatus());
652 RpcResult<ConfigRestoreOutput> rpcResult =
653 RpcResultBuilder.<ConfigRestoreOutput> status(true).withResult(oBuilder.build()).build();
655 return Futures.immediateFuture(rpcResult);
659 public ListenableFuture<RpcResult<UpgradeBackoutOutput>> upgradeBackout(UpgradeBackoutInput input) {
660 UpgradeBackoutInputBuilder iBuilder = new UpgradeBackoutInputBuilder(input);
661 UpgradeBackoutOutputBuilder oBuilder = new UpgradeBackoutOutputBuilder();
664 CommonLcmFields retval = callDG("upgrade-backout", iBuilder.build());
665 oBuilder.setStatus(retval.getStatusBuilder().build());
666 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
667 } catch (LcmRpcInvocationException e) {
668 LOG.debug(exceptionMessage, e);
669 oBuilder.setCommonHeader(e.getCommonHeader());
670 oBuilder.setStatus(e.getStatus());
673 RpcResult<UpgradeBackoutOutput> rpcResult =
674 RpcResultBuilder.<UpgradeBackoutOutput> status(true).withResult(oBuilder.build()).build();
676 return Futures.immediateFuture(rpcResult);
680 public ListenableFuture<RpcResult<EvacuateOutput>> evacuate(EvacuateInput input) {
681 EvacuateInputBuilder iBuilder = new EvacuateInputBuilder(input);
682 EvacuateOutputBuilder oBuilder = new EvacuateOutputBuilder();
685 CommonLcmFields retval = callDG("evacuate", iBuilder.build());
686 oBuilder.setStatus(retval.getStatusBuilder().build());
687 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
688 } catch (LcmRpcInvocationException e) {
689 LOG.debug(exceptionMessage, e);
690 oBuilder.setCommonHeader(e.getCommonHeader());
691 oBuilder.setStatus(e.getStatus());
694 RpcResult<EvacuateOutput> rpcResult =
695 RpcResultBuilder.<EvacuateOutput> status(true).withResult(oBuilder.build()).build();
697 return Futures.immediateFuture(rpcResult);
701 public ListenableFuture<RpcResult<UnlockOutput>> unlock(UnlockInput input) {
702 UnlockInputBuilder iBuilder = new UnlockInputBuilder(input);
703 UnlockOutputBuilder oBuilder = new UnlockOutputBuilder();
706 CommonLcmFields retval = callDG("unlock", iBuilder.build());
707 oBuilder.setStatus(retval.getStatusBuilder().build());
708 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
709 } catch (LcmRpcInvocationException e) {
710 LOG.debug(exceptionMessage, e);
711 oBuilder.setCommonHeader(e.getCommonHeader());
712 oBuilder.setStatus(e.getStatus());
715 RpcResult<UnlockOutput> rpcResult =
716 RpcResultBuilder.<UnlockOutput> status(true).withResult(oBuilder.build()).build();
718 return Futures.immediateFuture(rpcResult);
722 public ListenableFuture<RpcResult<ConfigBackupDeleteOutput>> configBackupDelete(ConfigBackupDeleteInput input) {
723 ConfigBackupDeleteInputBuilder iBuilder = new ConfigBackupDeleteInputBuilder(input);
724 ConfigBackupDeleteOutputBuilder oBuilder = new ConfigBackupDeleteOutputBuilder();
727 CommonLcmFields retval = callDG("config-backup-delete", iBuilder.build());
728 oBuilder.setStatus(retval.getStatusBuilder().build());
729 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
730 } catch (LcmRpcInvocationException e) {
731 LOG.debug(exceptionMessage, e);
732 oBuilder.setCommonHeader(e.getCommonHeader());
733 oBuilder.setStatus(e.getStatus());
736 RpcResult<ConfigBackupDeleteOutput> rpcResult =
737 RpcResultBuilder.<ConfigBackupDeleteOutput> status(true).withResult(oBuilder.build()).build();
739 return Futures.immediateFuture(rpcResult);
743 public ListenableFuture<RpcResult<UpgradeSoftwareOutput>> upgradeSoftware(UpgradeSoftwareInput input) {
744 UpgradeSoftwareInputBuilder iBuilder = new UpgradeSoftwareInputBuilder(input);
745 UpgradeSoftwareOutputBuilder oBuilder = new UpgradeSoftwareOutputBuilder();
748 CommonLcmFields retval = callDG("upgrade-software", iBuilder.build());
749 oBuilder.setStatus(retval.getStatusBuilder().build());
750 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
751 } catch (LcmRpcInvocationException e) {
752 LOG.debug(exceptionMessage, e);
753 oBuilder.setCommonHeader(e.getCommonHeader());
754 oBuilder.setStatus(e.getStatus());
757 RpcResult<UpgradeSoftwareOutput> rpcResult =
758 RpcResultBuilder.<UpgradeSoftwareOutput> status(true).withResult(oBuilder.build()).build();
760 return Futures.immediateFuture(rpcResult);
764 public ListenableFuture<RpcResult<DownloadNeSwOutput>> downloadNeSw(DownloadNeSwInput input) {
765 DownloadNeSwInputBuilder iBuilder = new DownloadNeSwInputBuilder(input);
766 DownloadNeSwOutputBuilder oBuilder = new DownloadNeSwOutputBuilder();
769 CommonLcmFields retval = callDG("download-ne-sw", iBuilder.build());
770 oBuilder.setStatus(retval.getStatusBuilder().build());
771 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
772 if (retval.getPayload() != null) {
773 oBuilder.setPayload(retval.getPayload());
775 } catch (LcmRpcInvocationException e) {
776 LOG.debug(exceptionMessage, e);
777 oBuilder.setCommonHeader(e.getCommonHeader());
778 oBuilder.setStatus(e.getStatus());
781 RpcResult<DownloadNeSwOutput> rpcResult =
782 RpcResultBuilder.<DownloadNeSwOutput> status(true).withResult(oBuilder.build()).build();
784 return Futures.immediateFuture(rpcResult);
788 public ListenableFuture<RpcResult<ActivateNeSwOutput>> activateNeSw(ActivateNeSwInput input) {
789 ActivateNeSwInputBuilder iBuilder = new ActivateNeSwInputBuilder(input);
790 ActivateNeSwOutputBuilder oBuilder = new ActivateNeSwOutputBuilder();
793 CommonLcmFields retval = callDG("activate-ne-sw", iBuilder.build());
794 oBuilder.setStatus(retval.getStatusBuilder().build());
795 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
796 if (retval.getPayload() != null) {
797 oBuilder.setPayload(retval.getPayload());
799 } catch (LcmRpcInvocationException e) {
800 LOG.debug(exceptionMessage, e);
801 oBuilder.setCommonHeader(e.getCommonHeader());
802 oBuilder.setStatus(e.getStatus());
805 RpcResult<ActivateNeSwOutput> rpcResult =
806 RpcResultBuilder.<ActivateNeSwOutput> status(true).withResult(oBuilder.build()).build();
808 return Futures.immediateFuture(rpcResult);
812 public ListenableFuture<RpcResult<StopOutput>> stop(StopInput input) {
813 StopInputBuilder iBuilder = new StopInputBuilder(input);
814 StopOutputBuilder oBuilder = new StopOutputBuilder();
817 CommonLcmFields retval = callDG("stop", iBuilder.build());
818 oBuilder.setStatus(retval.getStatusBuilder().build());
819 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
820 } catch (LcmRpcInvocationException e) {
821 LOG.debug(exceptionMessage, e);
822 oBuilder.setCommonHeader(e.getCommonHeader());
823 oBuilder.setStatus(e.getStatus());
826 RpcResult<StopOutput> rpcResult =
827 RpcResultBuilder.<StopOutput> status(true).withResult(oBuilder.build()).build();
829 return Futures.immediateFuture(rpcResult);
833 public ListenableFuture<RpcResult<DetachVolumeOutput>> detachVolume(DetachVolumeInput input) {
834 DetachVolumeInputBuilder iBuilder = new DetachVolumeInputBuilder(input);
835 DetachVolumeOutputBuilder oBuilder = new DetachVolumeOutputBuilder();
838 CommonLcmFields retval = callDG("detach-volume", iBuilder.build());
839 oBuilder.setStatus(retval.getStatusBuilder().build());
840 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
841 } catch (LcmRpcInvocationException e) {
842 LOG.debug(exceptionMessage, e);
843 oBuilder.setCommonHeader(e.getCommonHeader());
844 oBuilder.setStatus(e.getStatus());
847 RpcResult<DetachVolumeOutput> rpcResult =
848 RpcResultBuilder.<DetachVolumeOutput> status(true).withResult(oBuilder.build()).build();
850 return Futures.immediateFuture(rpcResult);
854 public ListenableFuture<RpcResult<ConfigScaleOutOutput>> configScaleOut(ConfigScaleOutInput input) {
855 ConfigScaleOutInputBuilder iBuilder = new ConfigScaleOutInputBuilder(input);
856 ConfigScaleOutOutputBuilder oBuilder = new ConfigScaleOutOutputBuilder();
859 CommonLcmFields retval = callDG("config-scale-out", iBuilder.build());
860 oBuilder.setStatus(retval.getStatusBuilder().build());
861 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
862 } catch (LcmRpcInvocationException e) {
863 LOG.debug(exceptionMessage, e);
864 oBuilder.setCommonHeader(e.getCommonHeader());
865 oBuilder.setStatus(e.getStatus());
868 RpcResult<ConfigScaleOutOutput> rpcResult =
869 RpcResultBuilder.<ConfigScaleOutOutput> status(true).withResult(oBuilder.build()).build();
871 return Futures.immediateFuture(rpcResult);
875 public ListenableFuture<RpcResult<UpgradePostCheckOutput>> upgradePostCheck(UpgradePostCheckInput input) {
876 UpgradePostCheckInputBuilder iBuilder = new UpgradePostCheckInputBuilder(input);
877 UpgradePostCheckOutputBuilder oBuilder = new UpgradePostCheckOutputBuilder();
880 CommonLcmFields retval = callDG("upgrade-post-check", iBuilder.build());
881 oBuilder.setStatus(retval.getStatusBuilder().build());
882 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
883 if (retval.getPayload() != null) {
884 oBuilder.setPayload(retval.getPayload());
886 } catch (LcmRpcInvocationException e) {
887 LOG.debug(exceptionMessage, e);
888 oBuilder.setCommonHeader(e.getCommonHeader());
889 oBuilder.setStatus(e.getStatus());
892 RpcResult<UpgradePostCheckOutput> rpcResult =
893 RpcResultBuilder.<UpgradePostCheckOutput> status(true).withResult(oBuilder.build()).build();
895 return Futures.immediateFuture(rpcResult);
899 public ListenableFuture<RpcResult<TestOutput>> test(TestInput input) {
900 TestInputBuilder iBuilder = new TestInputBuilder(input);
901 TestOutputBuilder oBuilder = new TestOutputBuilder();
904 CommonLcmFields retval = callDG("test", iBuilder.build());
905 oBuilder.setStatus(retval.getStatusBuilder().build());
906 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
907 } catch (LcmRpcInvocationException e) {
908 LOG.debug(exceptionMessage, e);
909 oBuilder.setCommonHeader(e.getCommonHeader());
910 oBuilder.setStatus(e.getStatus());
913 RpcResult<TestOutput> rpcResult =
914 RpcResultBuilder.<TestOutput> status(true).withResult(oBuilder.build()).build();
916 return Futures.immediateFuture(rpcResult);
920 public ListenableFuture<RpcResult<StartApplicationOutput>> startApplication(StartApplicationInput input) {
921 StartApplicationInputBuilder iBuilder = new StartApplicationInputBuilder(input);
922 StartApplicationOutputBuilder oBuilder = new StartApplicationOutputBuilder();
925 CommonLcmFields retval = callDG("start-application", iBuilder.build());
926 oBuilder.setStatus(retval.getStatusBuilder().build());
927 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
928 } catch (LcmRpcInvocationException e) {
929 LOG.debug(exceptionMessage, e);
930 oBuilder.setCommonHeader(e.getCommonHeader());
931 oBuilder.setStatus(e.getStatus());
934 RpcResult<StartApplicationOutput> rpcResult =
935 RpcResultBuilder.<StartApplicationOutput> status(true).withResult(oBuilder.build()).build();
937 return Futures.immediateFuture(rpcResult);
941 public ListenableFuture<RpcResult<ConfigBackupOutput>> configBackup(ConfigBackupInput input) {
942 ConfigBackupInputBuilder iBuilder = new ConfigBackupInputBuilder(input);
943 ConfigBackupOutputBuilder oBuilder = new ConfigBackupOutputBuilder();
946 CommonLcmFields retval = callDG("config-backup", iBuilder.build());
947 oBuilder.setStatus(retval.getStatusBuilder().build());
948 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
949 } catch (LcmRpcInvocationException e) {
950 LOG.debug(exceptionMessage, e);
951 oBuilder.setCommonHeader(e.getCommonHeader());
952 oBuilder.setStatus(e.getStatus());
955 RpcResult<ConfigBackupOutput> rpcResult =
956 RpcResultBuilder.<ConfigBackupOutput> status(true).withResult(oBuilder.build()).build();
958 return Futures.immediateFuture(rpcResult);
962 public ListenableFuture<RpcResult<RebuildOutput>> rebuild(RebuildInput input) {
963 RebuildInputBuilder iBuilder = new RebuildInputBuilder(input);
964 RebuildOutputBuilder oBuilder = new RebuildOutputBuilder();
967 CommonLcmFields retval = callDG("rebuild", iBuilder.build());
968 oBuilder.setStatus(retval.getStatusBuilder().build());
969 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
970 } catch (LcmRpcInvocationException e) {
971 LOG.debug(exceptionMessage, e);
972 oBuilder.setCommonHeader(e.getCommonHeader());
973 oBuilder.setStatus(e.getStatus());
976 RpcResult<RebuildOutput> rpcResult =
977 RpcResultBuilder.<RebuildOutput> status(true).withResult(oBuilder.build()).build();
979 return Futures.immediateFuture(rpcResult);
983 public ListenableFuture<RpcResult<AuditOutput>> audit(AuditInput input) {
984 AuditInputBuilder iBuilder = new AuditInputBuilder(input);
985 AuditOutputBuilder oBuilder = new AuditOutputBuilder();
988 CommonLcmFields retval = callDG("audit", iBuilder.build());
989 oBuilder.setStatus(retval.getStatusBuilder().build());
990 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
991 } catch (LcmRpcInvocationException e) {
992 LOG.debug(exceptionMessage, e);
993 oBuilder.setCommonHeader(e.getCommonHeader());
994 oBuilder.setStatus(e.getStatus());
997 RpcResult<AuditOutput> rpcResult =
998 RpcResultBuilder.<AuditOutput> status(true).withResult(oBuilder.build()).build();
1000 return Futures.immediateFuture(rpcResult);
1004 public ListenableFuture<RpcResult<StartOutput>> start(StartInput input) {
1005 StartInputBuilder iBuilder = new StartInputBuilder(input);
1006 StartOutputBuilder oBuilder = new StartOutputBuilder();
1009 CommonLcmFields retval = callDG("start", iBuilder.build());
1010 oBuilder.setStatus(retval.getStatusBuilder().build());
1011 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
1012 } catch (LcmRpcInvocationException e) {
1013 LOG.debug(exceptionMessage, e);
1014 oBuilder.setCommonHeader(e.getCommonHeader());
1015 oBuilder.setStatus(e.getStatus());
1018 RpcResult<StartOutput> rpcResult =
1019 RpcResultBuilder.<StartOutput> status(true).withResult(oBuilder.build()).build();
1021 return Futures.immediateFuture(rpcResult);
1025 public ListenableFuture<RpcResult<SnapshotOutput>> snapshot(SnapshotInput input) {
1026 SnapshotInputBuilder iBuilder = new SnapshotInputBuilder(input);
1027 SnapshotOutputBuilder oBuilder = new SnapshotOutputBuilder();
1030 CommonLcmFields retval = callDG("snapshot", iBuilder.build());
1031 oBuilder.setStatus(retval.getStatusBuilder().build());
1032 oBuilder.setCommonHeader(retval.getCommonHeaderBuilder().build());
1033 } catch (LcmRpcInvocationException e) {
1034 LOG.debug(exceptionMessage, e);
1035 oBuilder.setCommonHeader(e.getCommonHeader());
1036 oBuilder.setStatus(e.getStatus());
1039 RpcResult<SnapshotOutput> rpcResult =
1040 RpcResultBuilder.<SnapshotOutput> status(true).withResult(oBuilder.build()).build();
1042 return Futures.immediateFuture(rpcResult);
1045 private CommonLcmFields callDG(String rpcName, Object input) throws LcmRpcInvocationException {
1047 StatusBuilder statusBuilder = new StatusBuilder();
1049 if (input == null) {
1050 LOG.debug("Rejecting " +rpcName+ " because of invalid input");
1051 statusBuilder.setCode(LcmResponseCode.REJECT_INVALID_INPUT.getValue());
1052 statusBuilder.setMessage("REJECT - INVALID INPUT. Missing input");
1053 CommonHeaderBuilder hBuilder = new CommonHeaderBuilder();
1054 hBuilder.setApiVer("1");
1055 hBuilder.setOriginatorId("unknown");
1056 hBuilder.setRequestId("unset");
1057 hBuilder.setTimestamp(new ZULU(new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").format(new Date())));
1058 throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
1061 CommonHeaderBuilder hBuilder = new CommonHeaderBuilder(((CommonHeader)input).getCommonHeader());
1063 // add input to parms
1064 LOG.info("Adding INPUT data for "+ rpcName +" input: " + input.toString());
1065 Properties inputProps = new Properties();
1066 MdsalHelper.toProperties(inputProps, input);
1068 Properties respProps = new Properties();
1070 // Call SLI sync method
1073 if (lcmSliClient.hasGraph("LCM", rpcName , null, "sync"))
1077 respProps = lcmSliClient.execute("LCM", rpcName, null, "sync", inputProps, domDataBroker);
1081 LOG.error("Caught exception executing service logic for "+ rpcName, e);
1082 statusBuilder.setCode(LcmResponseCode.FAILURE_DG_FAILURE.getValue());
1083 statusBuilder.setMessage("FAILURE - DG FAILURE ("+e.getMessage()+")");
1084 throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
1087 LOG.error("No service logic active for LCM: '" + rpcName + "'");
1089 statusBuilder.setCode(LcmResponseCode.REJECT_DG_NOT_FOUND.getValue());
1090 statusBuilder.setMessage("FAILURE - DG not found for action "+rpcName);
1091 throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
1096 LOG.error("Caught exception looking for service logic", e);
1098 statusBuilder.setCode(LcmResponseCode.FAILURE_DG_FAILURE.getValue());
1099 statusBuilder.setMessage("FAILURE - Unexpected error looking for DG ("+e.getMessage()+")");
1100 throw new LcmRpcInvocationException(statusBuilder.build(), hBuilder.build());
1104 StatusBuilder sBuilder = new StatusBuilder();
1105 MdsalHelper.toBuilder(respProps, sBuilder);
1106 MdsalHelper.toBuilder(respProps, hBuilder);
1108 Payload payload = null;
1109 String payloadValue = respProps.getProperty("payload");
1110 if (payloadValue != null) {
1111 payload = new Payload(payloadValue);
1114 String statusCode = sBuilder.getCode().toString();
1116 if (!"400".equals(statusCode)) {
1117 LOG.error("Returned FAILED for "+rpcName+" error code: '" + statusCode + "'");
1119 LOG.info("Returned SUCCESS for "+rpcName+" ");
1122 return new CommonLcmFields(sBuilder, hBuilder, payload);