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.l3vpn.rev130911.vpn.instance.op.data.vpn.instance.op.data.entry.VpnToDpnListKey;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.VpnInstances;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.l3vpn.rev200204.vpn.instances.VpnInstance;
29 import org.opendaylight.yangtools.yang.binding.DataObject;
30 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
31 import org.slf4j.Logger;
32 import org.slf4j.LoggerFactory;
34 @Command(scope = "vpnservice", name = "vpninstance-op-show", description = "List name of all vpnInstances that is "
35 + "present or absent in vpnInstanceOpDataEntry")
36 public class ShowVpnInstanceOpData extends OsgiCommandSupport {
38 @Option(name = "--detail", aliases = {"--vpnInstanceOp"}, description = "Display vpnInstanceOpDataEntry detail "
39 + "for given vpnInstanceName", required = false, multiValued = false)
40 private String detail;
41 private static final Logger LOG = LoggerFactory.getLogger(ShowVpnInstanceOpData.class);
42 private DataBroker dataBroker;
43 private List<VpnInstance> vpnInstanceList = new ArrayList<>();
44 private Map<String, VpnInstanceOpDataEntry> vpnInstanceOpDataEntryMap = new HashMap<>();
46 public void setDataBroker(DataBroker broker) {
47 this.dataBroker = broker;
52 protected Object doExecute() {
54 getVpnInstanceOpData();
55 session.getConsole().println("For following vpnInstances vpnInstanceOpDataEntry is present: \n");
56 for (VpnInstance vpnInstance : vpnInstanceList) {
57 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(vpnInstance.getVpnInstanceName());
59 session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
62 session.getConsole().println("\n\nFor following vpnInstances vpnInstanceOpDataEntry is not present: \n");
63 for (VpnInstance vpnInstance : vpnInstanceList) {
64 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(vpnInstance.getVpnInstanceName());
66 session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
69 session.getConsole().println(getshowVpnCLIHelp());
71 getVpnInstanceOpData();
72 session.getConsole().println("Fetching details of given vpnInstance\n");
73 session.getConsole().println(
74 "------------------------------------------------------------------------------");
75 VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(detail);
77 Map<VpnToDpnListKey, VpnToDpnList> vpnToDpnListKeyVpnToDpnListMap = check.getVpnToDpnList();
78 if (vpnToDpnListKeyVpnToDpnListMap != null) {
79 for (VpnToDpnList dpn : vpnToDpnListKeyVpnToDpnListMap.values()) {
80 if (dpn.getVpnInterfaces() != null) {
81 intfCount = intfCount + dpn.getVpnInterfaces().size();
85 session.getConsole().println(
86 "VpnInstanceName: " + check.getVpnInstanceName() + "\nVpnId: " + check.getVpnId() + "\nVrfId: "
87 + check.getVrfId() + "\nKey: " + check.key() + "\nVpnInterfaceCount: "
88 + intfCount + "\nVpnToDpnList: " + check.getVpnToDpnList() + "\n");
89 session.getConsole().println(
90 "------------------------------------------------------------------------------");
96 private void getVpnInstanceOpData() {
97 List<VpnInstanceOpDataEntry> vpnInstanceOpDataEntryList = new ArrayList<>();
98 InstanceIdentifier<VpnInstances> vpnsIdentifier = InstanceIdentifier.builder(VpnInstances.class).build();
99 InstanceIdentifier<VpnInstanceOpData> vpnInstanceOpDataEntryIdentifier =
100 InstanceIdentifier.builder(VpnInstanceOpData.class).build();
101 Optional<VpnInstances> optionalVpnInstances = read(LogicalDatastoreType.CONFIGURATION, vpnsIdentifier);
103 if (!optionalVpnInstances.isPresent() || optionalVpnInstances.get().getVpnInstance() == null
104 || optionalVpnInstances.get().getVpnInstance().isEmpty()) {
105 LOG.trace("No VPNInstances configured.");
106 session.getConsole().println("No VPNInstances configured.");
108 vpnInstanceList = new ArrayList<VpnInstance>(optionalVpnInstances.get().getVpnInstance().values());
111 Optional<VpnInstanceOpData> optionalOpData = read(LogicalDatastoreType.OPERATIONAL,
112 vpnInstanceOpDataEntryIdentifier);
114 if (!optionalOpData.isPresent()) {
115 LOG.trace("No VPNInstanceOpDataEntry present.");
116 session.getConsole().println("No VPNInstanceOpDataEntry present.");
118 vpnInstanceOpDataEntryList = new ArrayList<VpnInstanceOpDataEntry>(optionalOpData.get()
119 .getVpnInstanceOpDataEntry().values());
122 for (VpnInstanceOpDataEntry vpnInstanceOpDataEntry : vpnInstanceOpDataEntryList) {
123 vpnInstanceOpDataEntryMap.put(vpnInstanceOpDataEntry.getVpnInstanceName(), vpnInstanceOpDataEntry);
127 private <T extends DataObject> Optional<T> read(LogicalDatastoreType datastoreType,
128 InstanceIdentifier<T> path) {
129 try (ReadTransaction tx = dataBroker.newReadOnlyTransaction()) {
130 return tx.read(datastoreType, path).get();
131 } catch (InterruptedException | ExecutionException e) {
132 throw new RuntimeException(e);
136 private String getshowVpnCLIHelp() {
138 + "To display vpn-instance-op-data for given vpnInstanceName vpnInstanceOpData-show --detail "
139 + "[<vpnInstanceName>]";