25449f51cb248e8e0c93955f73d38f906b763d1a
[netvirt.git] / neutronvpn / shell / src / main / java / org / opendaylight / netvirt / neutronvpn / shell / ShowSubnet.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.HashMap;
17 import java.util.List;
18 import java.util.Locale;
19 import java.util.Map;
20
21 import org.apache.karaf.shell.commands.Argument;
22 import org.apache.karaf.shell.commands.Command;
23 import org.apache.karaf.shell.commands.Option;
24 import org.apache.karaf.shell.console.OsgiCommandSupport;
25 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
26 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
34 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
35 import org.slf4j.Logger;
36 import org.slf4j.LoggerFactory;
37
38 @Command(scope = "vpnservice", name = "subnet-show",
39     description = "Comparison of data present in subnetMap and subnetOpDataEntry")
40 public class ShowSubnet extends OsgiCommandSupport {
41
42     private static final Logger LOG = LoggerFactory.getLogger(ShowSubnet.class);
43
44     @Option(name = "--subnetmap", aliases = {"--subnetmap"},
45         description = "Display subnetMap details for given subnetId", required = false, multiValued = false)
46     String subnetmap;
47
48     @Option(name = "--subnetopdata", aliases = {"--subnetopdata"},
49         description = "Display subnetOpData details for given subnetId", required = false, multiValued = false)
50     String subnetopdata;
51
52     @Argument(name = "subnetopdataall|subnetmapall", description = "Display subnetOpData details or subnetmap details"
53             + "for all subnet", required = false, multiValued = true)
54     private final List<String> options = null;
55
56     private DataBroker dataBroker;
57     private List<Subnetmap> subnetmapList = new ArrayList<>();
58     private final Map<Uuid, SubnetOpDataEntry> subnetOpDataEntryMap = new HashMap<>();
59
60     public void setDataBroker(DataBroker broker) {
61         this.dataBroker = broker;
62     }
63
64     @Override
65     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
66     protected Object doExecute() throws Exception {
67         if (subnetmap == null && subnetopdata == null && (options == null || options.isEmpty())) {
68             getSubnet();
69             System.out.println("Following subnetId is present in both subnetMap and subnetOpDataEntry\n");
70             for (Subnetmap candidateSubnetmap : subnetmapList) {
71                 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
72                 if (data != null) {
73                     System.out.println(candidateSubnetmap.getId().toString() + "\n");
74                 }
75             }
76             System.out.println("\n\nFollowing subnetId is present in subnetMap but not in subnetOpDataEntry\n");
77             for (Subnetmap candidateSubnetmap : subnetmapList) {
78                 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
79                 if (data == null) {
80                     System.out.println(candidateSubnetmap.getId().toString() + "\n");
81                 }
82             }
83             getshowVpnCLIHelp();
84         } else if (subnetmap == null) {
85             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
86                 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
87             Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
88             SubnetOpDataEntry data = optionalSubs.get();
89             System.out.println("Fetching subnetmap for given subnetId\n");
90             System.out.println("------------------------------------------------------------------------------");
91             System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
92                 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
93                 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
94                 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
95             System.out.println("------------------------------------------------------------------------------");
96         }
97         if (subnetmap == null && subnetopdata != null) {
98             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
99                 .child(SubnetOpDataEntry.class).build();
100             Optional<SubnetOpDataEntry> optionalSubnetOpDataEntries =
101                 syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
102             if (optionalSubnetOpDataEntries.isPresent()) {
103                 optionalSubnetOpDataEntries.asSet().forEach(subnetOpDataEntry -> {
104                     SubnetOpDataEntry data = subnetOpDataEntry;
105                     System.out.println("Fetching subnetmapdataentry for given subnetId\n");
106                     System.out.println("------------------------"
107                                   + "------------------------------------------------------");
108                     System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
109                         + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
110                         + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
111                         + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
112                         + data.getVpnName() + "\n");
113                     System.out.println("------------------------"
114                                   + "------------------------------------------------------");
115                 });
116             }
117         }
118         if (subnetmap != null && subnetopdata == null) {
119             InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
120                     .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
121             Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
122             Subnetmap data = sn.get();
123             System.out.println("Fetching subnetopdata for given subnetId\n");
124             System.out.println("------------------------------------------------------------------------------");
125             String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
126                        ? data.getRouterInterfacePortId().getValue() : "null");
127             System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
128                     + "InternetVpnId: " + data.getInternetVpnId() + "\n"
129                     + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
130                     + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
131                     + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
132                     + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
133                     + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
134                     + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
135                     + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
136             System.out.println("------------------------------------------------------------------------------");
137         } else if (subnetopdata == null) {
138             InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
139                     .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
140             Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
141             Subnetmap data = sn.get();
142             System.out.println("Fetching subnetopdata for given subnetId\n");
143             System.out.println("------------------------------------------------------------------------------");
144             String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
145                        ? data.getRouterInterfacePortId().getValue() : "null");
146             System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
147                     + "InternetVpnId: " + data.getInternetVpnId() + "\n"
148                     + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
149                     + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
150                     + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
151                     + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
152                     + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
153                     + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
154                     + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
155             System.out.println("------------------------------------------------------------------------------");
156         } else {
157             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
158                 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
159             Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
160             SubnetOpDataEntry data = optionalSubs.get();
161             System.out.println("Fetching subnetmap for given subnetId\n");
162             System.out.println("------------------------------------------------------------------------------");
163             System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
164                 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
165                 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
166                 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
167             System.out.println("------------------------------------------------------------------------------");
168         }
169         Boolean optionsSubnetopdataall = false;
170         Boolean optionsSubnetmapall = false;
171         if (options != null && !options.isEmpty()) {
172             for (String opt : options) {
173                 String optLowCase = opt == null ? "" : opt.toLowerCase(Locale.ENGLISH);
174                 if (optLowCase.startsWith("subnetop")) {
175                     optionsSubnetopdataall = true;
176                 }
177                 if (optLowCase.startsWith("subnetmap")) {
178                     optionsSubnetmapall = true;
179                 }
180             }
181         }
182         if (optionsSubnetopdataall) {
183             InstanceIdentifier<SubnetOpData> subOpIdentifier =
184                     InstanceIdentifier.builder(SubnetOpData.class).build();
185             Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
186             if (optionalSubnetOpData.isPresent()) {
187                 List<SubnetOpDataEntry> subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
188                 System.out.println("number of subnetOpDataEntry found are : " + subnetOpDataEntryList + "\n");
189                 subnetOpDataEntryList.forEach(subnetOpDataEntry -> {
190                     SubnetOpDataEntry data = subnetOpDataEntry;
191                     System.out.println("Fetching subnetmap for given subnetId\n");
192                     System.out.println("------------------------"
193                                   + "------------------------------------------------------");
194                     System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
195                         + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
196                         + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
197                         + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
198                         + data.getVpnName() + "\n");
199                     System.out.println("------------------------"
200                                   + "------------------------------------------------------");
201                 });
202             } else {
203                 System.out.println("No SubnetOpDataEntry present in Oper DS");
204             }
205         }
206         if (optionsSubnetmapall) {
207             InstanceIdentifier<Subnetmaps> subMapIdentifier = InstanceIdentifier.builder(Subnetmaps.class).build();
208             Optional<Subnetmaps> optionalSubnetmaps =  syncReadOptional(dataBroker, CONFIGURATION, subMapIdentifier);
209             if (optionalSubnetmaps.isPresent()) {
210                 List<Subnetmap> subnetMapList = optionalSubnetmaps.get().getSubnetmap();
211                 System.out.println("number of subnetmaps found are : " + subnetMapList.size() + "\n");
212                 subnetMapList.forEach(sn -> {
213                     if (sn != null) {
214                         System.out.println("Fetching subnetmap for given subnetId\n");
215                         System.out.println("------------------------"
216                                       + "------------------------------------------------------");
217                         System.out.println("Uuid: " + sn.getId() + "\n" + "SubnetIp: " + sn.getSubnetIp() + "\n"
218                             + "NetworkId: " + sn.getNetworkId() + "\n" + "NetworkType: " + sn.getNetworkType()
219                             + "\nSegmentationId: " + sn.getSegmentationId() + "\n" + "TenantId: " + sn.getTenantId()
220                             + "\n" + "RouterId: " + sn.getRouterId() + "\n" + "RouterInterfacePortId: "
221                             + sn.getRouterInterfacePortId() + "\nRouterIntfMacAddress: "
222                             + sn.getRouterIntfMacAddress() + "\n"
223                             + "RouterInterfaceFixedIp: " + sn.getRouterInterfaceFixedIp() + "\n"
224                             + "VpnId: " + sn.getVpnId() + "\n"
225                             + "InternetVpnId: " + sn.getInternetVpnId() + "\n");
226                         if (sn.getPortList() != null) {
227                             System.out.println("There are " + sn.getPortList().size()
228                                             + " port in the port-list");
229                             for (int i = 0; i < sn.getPortList().size(); i++) {
230                                 System.out.println("\tport num " + i + " :\t" + sn.getPortList().get(i));
231                             }
232                         }
233                         if (sn.getDirectPortList() != null) {
234                             System.out.println("There are " + sn.getDirectPortList().size()
235                                     + " port in the list of direct-port");
236                             for (int i = 0; i < sn.getDirectPortList().size(); i++) {
237                                 System.out.println("\tdirect port num " + i
238                                         + " :\t" + sn.getDirectPortList().get(i));
239                             }
240                         }
241                         System.out.println("------------------------"
242                                       + "------------------------------------------------------");
243                     }
244                 });
245             } else {
246                 System.out.println("No Subnetmap present in Config DS");
247             }
248         }
249         getshowVpnCLIHelp();
250         return null;
251     }
252
253     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
254     private void getSubnet() throws ReadFailedException {
255         List<SubnetOpDataEntry> subnetOpDataEntryList = new ArrayList<>();
256         InstanceIdentifier<Subnetmaps> subnetmapsid = InstanceIdentifier.builder(Subnetmaps.class).build();
257         InstanceIdentifier<SubnetOpData> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class).build();
258         Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subnetmapsid);
259         if (!optionalSubnetmaps.isPresent()) {
260             System.out.println("No Subnetmaps configured.");
261         } else {
262             subnetmapList = optionalSubnetmaps.get().getSubnetmap();
263         }
264
265         Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
266         if (!optionalSubnetOpData.isPresent()) {
267             System.out.println("No SubnetOpData configured.");
268         } else {
269             subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
270         }
271
272         for (SubnetOpDataEntry subnetOpDataEntry : subnetOpDataEntryList) {
273             subnetOpDataEntryMap.put(subnetOpDataEntry.getSubnetId(), subnetOpDataEntry);
274         }
275     }
276
277     // TODO Clean up the console output
278     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
279     private void getshowVpnCLIHelp() {
280         System.out.println("\nUsage 1: "
281             + "To display subnetMaps for a given subnetId subnet-show --subnetmap [<subnetId>]");
282         System.out.println("\nUsage 2: "
283             + "To display subnetOpDataEntry for a given subnetId subnet-show --subnetopdata [<subnetId>]");
284         System.out.println("\nUsage 3 : To display all subnetopdata or all subnetmap"
285                 + " use these options subnetopdataall or subnetmapall");
286     }
287 }