d311a86cf6df602dc9e6ecc93a0d941080cd384a
[netvirt.git] / neutronvpn / shell / src / main / java / org / opendaylight / netvirt / neutronvpn / shell / ShowVpnIpToPort.java
1 /*
2  * Copyright (c) 2016 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.neutronvpn.shell;
9
10 import static org.opendaylight.genius.datastoreutils.SingleTransactionDataBroker.syncReadOptional;
11 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.CONFIGURATION;
12 import static org.opendaylight.mdsal.common.api.LogicalDatastoreType.OPERATIONAL;
13
14 import java.util.ArrayList;
15 import java.util.List;
16 import java.util.Optional;
17 import java.util.concurrent.ExecutionException;
18
19 import org.apache.karaf.shell.commands.Argument;
20 import org.apache.karaf.shell.commands.Command;
21 import org.apache.karaf.shell.console.OsgiCommandSupport;
22 import org.opendaylight.mdsal.binding.api.DataBroker;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.LearntVpnVipToPortData;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPort;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.learnt.vpn.vip.to.port.data.LearntVpnVipToPortKey;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.NeutronVpnPortipPortData;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPort;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.neutron.vpn.portip.port.data.VpnPortipToPortKey;
29 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
30 import org.slf4j.Logger;
31 import org.slf4j.LoggerFactory;
32
33 @Command(scope = "vpnservice", name = "vpn-ipaddress-to-port-show",
34     description = "Displays the IPAddresses and Ports on which they are configured (or) discovered for "
35         + "VPN Instance(s)")
36 public class ShowVpnIpToPort extends OsgiCommandSupport {
37
38     private static final Logger LOG = LoggerFactory.getLogger(ShowVpnIpToPort.class);
39
40     @Argument(index = 0, name = "--vpn-name", description = "Name of the Vpn Instance", required = false,
41         multiValued = false)
42     private String vpnName;
43     @Argument(index = 1, name = "--ip-address", description = "Ip address to search for in the Vpn Instance",
44         required = false, multiValued = false)
45     private String portFixedIp;
46
47     private DataBroker dataBroker;
48     private List<VpnPortipToPort> vpnPortipToPortList = new ArrayList<>();
49     private List<LearntVpnVipToPort> vpnVipToPortList = new ArrayList<>();
50
51     public void setDataBroker(DataBroker broker) {
52         this.dataBroker = broker;
53     }
54
55     @Override
56     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
57     protected Object doExecute() throws Exception {
58         if (vpnName == null && portFixedIp == null) {
59             getNeutronVpnPort();
60             getLearntVpnVipPort();
61             System.out.println(vpnPortipToPortList.size() + " Entries are present: ");
62             System.out.println("-----------------------------------------------------------------------");
63             System.out.println(String.format("             %s   %24s   %20s   %32s", "VpnName", "IPAddress",
64                 "MacAddress", "Port"));
65             System.out.println("-----------------------------------------------------------------------");
66             for (VpnPortipToPort vpnPortipToPort : vpnPortipToPortList) {
67                 System.out.println(String.format("  %-32s  %-16s  %-16s  %-32s", vpnPortipToPort.getVpnName(),
68                         vpnPortipToPort.getPortFixedip(),
69                         vpnPortipToPort.getMacAddress(),
70                         vpnPortipToPort.getPortName()));
71             }
72             for (LearntVpnVipToPort learntVpnVipToPort : vpnVipToPortList) {
73                 System.out.println(String.format("* %-32s  %-16s  %-16s  %-32s", learntVpnVipToPort.getVpnName(),
74                         learntVpnVipToPort.getPortFixedip(),
75                         learntVpnVipToPort.getMacAddress(),
76                         learntVpnVipToPort.getPortName()));
77             }
78             System.out.println("\n * prefixed entries are Learned.");
79             System.out.println("\n" + getshowVpnCLIHelp());
80         } else if (portFixedIp == null || vpnName == null) {
81             System.out.println("Insufficient arguments"
82                 + "\nCorrect Usage : neutronvpn-port-show [<vpnName> <portFixedIp>]");
83         } else {
84             InstanceIdentifier<VpnPortipToPort> id =
85                 InstanceIdentifier.builder(NeutronVpnPortipPortData.class)
86                     .child(VpnPortipToPort.class, new VpnPortipToPortKey(portFixedIp, vpnName)).build();
87             Optional<VpnPortipToPort> vpnPortipToPortData = syncReadOptional(dataBroker, CONFIGURATION, id);
88             if (vpnPortipToPortData.isPresent()) {
89                 VpnPortipToPort data = vpnPortipToPortData.get();
90                 System.out.println("\n----------"
91                     + "---------------------------------------------------------------------------------");
92                 System.out.println("VpnName:   " + data.getVpnName() + "\nIPAddress: " + data.getPortFixedip()
93                     + "\nMacAddress: " + data.getMacAddress() + "\nPort: " + data.getPortName());
94                 System.out.println("\n----------"
95                     + "---------------------------------------------------------------------------------");
96             } else {
97                 InstanceIdentifier<LearntVpnVipToPort> learntId =
98                     InstanceIdentifier.builder(LearntVpnVipToPortData.class)
99                         .child(LearntVpnVipToPort.class, new LearntVpnVipToPortKey(portFixedIp, vpnName)).build();
100                 Optional<LearntVpnVipToPort> learntVpnVipToPortData =
101                         syncReadOptional(dataBroker, OPERATIONAL, learntId);
102                 if (!learntVpnVipToPortData.isPresent()) {
103                     System.out.println("Data not available");
104                     return null;
105                 }
106                 LearntVpnVipToPort data = learntVpnVipToPortData.get();
107                 System.out.println("\n----------"
108                     + "---------------------------------------------------------------------------------");
109                 System.out.println("VpnName: * " + data.getVpnName() + "\nIPAddress: " + data.getPortFixedip()
110                     + "\nMacAddress: " + data.getMacAddress() + "\nPort: " + data.getPortName());
111                 System.out.println("\n----------"
112                     + "---------------------------------------------------------------------------------");
113             }
114             System.out.println("\n" + getshowVpnCLIHelp());
115         }
116         return null;
117     }
118
119     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
120     private void getNeutronVpnPort() throws ExecutionException, InterruptedException {
121         InstanceIdentifier<NeutronVpnPortipPortData> neutronVpnPortipPortDataIdentifier = InstanceIdentifier
122                 .builder(NeutronVpnPortipPortData.class).build();
123         Optional<NeutronVpnPortipPortData> optionalNeutronVpnPort = syncReadOptional(dataBroker, CONFIGURATION,
124                 neutronVpnPortipPortDataIdentifier);
125         if (!optionalNeutronVpnPort.isPresent()) {
126             System.out.println("No NeutronVpnPortIpToPortData configured.");
127         } else {
128             vpnPortipToPortList = optionalNeutronVpnPort.get().getVpnPortipToPort();
129         }
130     }
131
132     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
133     private void getLearntVpnVipPort() throws ExecutionException, InterruptedException {
134         InstanceIdentifier<LearntVpnVipToPortData> learntVpnVipPortDataIdentifier = InstanceIdentifier
135                 .builder(LearntVpnVipToPortData.class).build();
136         Optional<LearntVpnVipToPortData> optionalLearntVpnPort = syncReadOptional(dataBroker, OPERATIONAL,
137                 learntVpnVipPortDataIdentifier);
138         if (!optionalLearntVpnPort.isPresent()) {
139             System.out.println("No LearntVpnVipToPortData discovered.");
140         } else {
141             vpnVipToPortList = optionalLearntVpnPort.get().getLearntVpnVipToPort();
142         }
143     }
144
145     private String getshowVpnCLIHelp() {
146         StringBuilder help = new StringBuilder("Usage:");
147         help.append("To display ports and their associated vpn instances "
148             + "neutronvpn-port-show [<vpnName> <portFixedIp>].\n");
149         return help.toString();
150     }
151 }