MRI version bumpup for Aluminium
[netvirt.git] / vpnmanager / shell / src / main / java / org / opendaylight / netvirt / vpnmanager / shell / ShowVpnInstanceOpData.java
1 /*
2  * Copyright © 2016, 2017 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.netvirt.vpnmanager.shell;
9
10 import java.util.ArrayList;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
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;
33
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 {
37
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<>();
45
46     public void setDataBroker(DataBroker broker) {
47         this.dataBroker = broker;
48     }
49
50     @Override
51     @Nullable
52     protected Object doExecute() {
53         if (detail == null) {
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());
58                 if (check != null) {
59                     session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
60                 }
61             }
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());
65                 if (check == null) {
66                     session.getConsole().println(vpnInstance.getVpnInstanceName() + "\n");
67                 }
68             }
69             session.getConsole().println(getshowVpnCLIHelp());
70         } else {
71             getVpnInstanceOpData();
72             session.getConsole().println("Fetching details of given vpnInstance\n");
73             session.getConsole().println(
74                     "------------------------------------------------------------------------------");
75             VpnInstanceOpDataEntry check = vpnInstanceOpDataEntryMap.get(detail);
76             Long intfCount = 0L;
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();
82                     }
83                 }
84             }
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                     "------------------------------------------------------------------------------");
91         }
92
93         return null;
94     }
95
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);
102
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.");
107         } else {
108             vpnInstanceList = new ArrayList<VpnInstance>(optionalVpnInstances.get().getVpnInstance().values());
109         }
110
111         Optional<VpnInstanceOpData> optionalOpData = read(LogicalDatastoreType.OPERATIONAL,
112                 vpnInstanceOpDataEntryIdentifier);
113
114         if (!optionalOpData.isPresent()) {
115             LOG.trace("No VPNInstanceOpDataEntry present.");
116             session.getConsole().println("No VPNInstanceOpDataEntry present.");
117         } else {
118             vpnInstanceOpDataEntryList = new ArrayList<VpnInstanceOpDataEntry>(optionalOpData.get()
119                     .getVpnInstanceOpDataEntry().values());
120         }
121
122         for (VpnInstanceOpDataEntry vpnInstanceOpDataEntry : vpnInstanceOpDataEntryList) {
123             vpnInstanceOpDataEntryMap.put(vpnInstanceOpDataEntry.getVpnInstanceName(), vpnInstanceOpDataEntry);
124         }
125     }
126
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);
133         }
134     }
135
136     private String getshowVpnCLIHelp() {
137         return "\nUsage:"
138                 + "To display vpn-instance-op-data for given vpnInstanceName vpnInstanceOpData-show --detail "
139                 + "[<vpnInstanceName>]";
140     }
141 }