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