2 * Copyright © 2016, 2017 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.netvirt.vpnmanager.shell;
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.List;
14 import java.util.Optional;
15 import java.util.concurrent.ExecutionException;
16 import org.apache.karaf.shell.commands.Command;
17 import org.apache.karaf.shell.commands.Option;
18 import org.apache.karaf.shell.console.OsgiCommandSupport;
19 import org.eclipse.jdt.annotation.Nullable;
20 import org.opendaylight.mdsal.binding.api.DataBroker;
21 import org.opendaylight.mdsal.binding.api.ReadTransaction;
22 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.VpnInstanceOpData;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.VpnInstanceOpDataEntry;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnList;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInstances;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstance;
28 import org.opendaylight.yangtools.yang.binding.DataObject;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
33 @Command(scope = "vpnservice", name = "vpninstance-op-show", description = "List name of all vpnInstances that is "
34 + "present or absent in vpnInstanceOpDataEntry")
35 public class ShowVpnInstanceOpData extends OsgiCommandSupport {
37 @Option(name = "--detail", aliases = {"--vpnInstanceOp"}, description = "Display vpnInstanceOpDataEntry detail "
38 + "for given vpnInstanceName", required = false, multiValued = false)
39 private String detail;
40 private static final Logger LOG = LoggerFactory.getLogger(ShowVpnInstanceOpData.class);
41 private DataBroker dataBroker;
42 private List<VpnInstance> vpnInstanceList = new ArrayList<>();
43 private Map<String, VpnInstanceOpDataEntry> vpnInstanceOpDataEntryMap = new HashMap<>();
45 public void setDataBroker(DataBroker broker) {
46 this.dataBroker = broker;
51 protected Object doExecute() {
53 getVpnInstanceOpData();
54 session.getConsole().println("For following vpnInstances vpnInstanceOpDataEntry is present: \n");
55 for (VpnInstance vpnInstance : vpnInstanceList) {
56 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(vpnInstance.getVpnInstanceName());
58 session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
61 session.getConsole().println("\n\nFor following vpnInstances vpnInstanceOpDataEntry is not present: \n");
62 for (VpnInstance vpnInstance : vpnInstanceList) {
63 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(vpnInstance.getVpnInstanceName());
65 session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
68 session.getConsole().println(getshowVpnCLIHelp());
70 getVpnInstanceOpData();
71 session.getConsole().println("Fetching details of given vpnInstance\n");
72 session.getConsole().println(
73 "------------------------------------------------------------------------------");
74 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(detail);
76 List<VpnToDpnList> dpnToVpns = check.getVpnToDpnList();
77 if (dpnToVpns != null) {
78 for (VpnToDpnList dpn : dpnToVpns) {
79 if (dpn.getVpnInterfaces() != null) {
80 intfCount = intfCount + dpn.getVpnInterfaces().size();
84 session.getConsole().println(
85 "VpnInstanceName: " + check.getVpnInstanceName() + "\nVpnId: " + check.getVpnId() + "\nVrfId: "
86 + check.getVrfId() + "\nKey: " + check.key() + "\nVpnInterfaceCount: "
87 + intfCount + "\nVpnToDpnList: " + check.getVpnToDpnList() + "\n");
88 session.getConsole().println(
89 "------------------------------------------------------------------------------");
95 private void getVpnInstanceOpData() {
96 List<VpnInstanceOpDataEntry> vpnInstanceOpDataEntryList = new ArrayList<>();
97 InstanceIdentifier<VpnInstances> vpnsIdentifier = InstanceIdentifier.builder(VpnInstances.class).build();
98 InstanceIdentifier<VpnInstanceOpData> vpnInstanceOpDataEntryIdentifier =
99 InstanceIdentifier.builder(VpnInstanceOpData.class).build();
100 Optional<VpnInstances> optionalVpnInstances = read(LogicalDatastoreType.CONFIGURATION, vpnsIdentifier);
102 if (!optionalVpnInstances.isPresent() || optionalVpnInstances.get().getVpnInstance() == null
103 || optionalVpnInstances.get().getVpnInstance().isEmpty()) {
104 LOG.trace("No VPNInstances configured.");
105 session.getConsole().println("No VPNInstances configured.");
107 vpnInstanceList = optionalVpnInstances.get().getVpnInstance();
110 Optional<VpnInstanceOpData> optionalOpData = read(LogicalDatastoreType.OPERATIONAL,
111 vpnInstanceOpDataEntryIdentifier);
113 if (!optionalOpData.isPresent()) {
114 LOG.trace("No VPNInstanceOpDataEntry present.");
115 session.getConsole().println("No VPNInstanceOpDataEntry present.");
117 vpnInstanceOpDataEntryList = optionalOpData.get().getVpnInstanceOpDataEntry();
120 for (VpnInstanceOpDataEntry vpnInstanceOpDataEntry : vpnInstanceOpDataEntryList) {
121 vpnInstanceOpDataEntryMap.put(vpnInstanceOpDataEntry.getVpnInstanceName(), vpnInstanceOpDataEntry);
125 private <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType,
126 InstanceIdentifier<T> path) {
127 try (ReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
128 return tx.read(datastoreType, path).get();
129 } catch (InterruptedException | ExecutionException e) {
130 throw new RuntimeException(e);
134 private String getshowVpnCLIHelp() {
136 + "To display vpn-instance-op-data for given vpnInstanceName vpnInstanceOpData-show --detail "
137 + "[<vpnInstanceName>]";