Freeze upstream versions
[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.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.Collections;
16 import java.util.HashMap;
17 import java.util.List;
18 import java.util.Locale;
19 import java.util.Map;
20 import java.util.Optional;
21 import java.util.concurrent.ExecutionException;
22 import org.apache.karaf.shell.commands.Argument;
23 import org.apache.karaf.shell.commands.Command;
24 import org.apache.karaf.shell.commands.Option;
25 import org.apache.karaf.shell.console.OsgiCommandSupport;
26 import org.opendaylight.mdsal.binding.api.DataBroker;
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                 Collections.singleton(optionalSubnetOpDataEntries.get()).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
188                         = new ArrayList<SubnetOpDataEntry>(optionalSubnetOpData.get().getSubnetOpDataEntry().values());
189                 System.out.println("number of subnetOpDataEntry found are : " + subnetOpDataEntryList + "\n");
190                 subnetOpDataEntryList.forEach(subnetOpDataEntry -> {
191                     SubnetOpDataEntry data = subnetOpDataEntry;
192                     System.out.println("Fetching subnetmap for given subnetId\n");
193                     System.out.println("------------------------"
194                                   + "------------------------------------------------------");
195                     System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
196                         + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
197                         + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
198                         + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
199                         + data.getVpnName() + "\n");
200                     System.out.println("------------------------"
201                                   + "------------------------------------------------------");
202                 });
203             } else {
204                 System.out.println("No SubnetOpDataEntry present in Oper DS");
205             }
206         }
207         if (optionsSubnetmapall) {
208             InstanceIdentifier<Subnetmaps> subMapIdentifier = InstanceIdentifier.builder(Subnetmaps.class).build();
209             Optional<Subnetmaps> optionalSubnetmaps =  syncReadOptional(dataBroker, CONFIGURATION, subMapIdentifier);
210             if (optionalSubnetmaps.isPresent()) {
211                 Map<SubnetmapKey, Subnetmap> keySubnetmapMap = optionalSubnetmaps.get().getSubnetmap();
212                 System.out.println("number of subnetmaps found are : " + keySubnetmapMap.size() + "\n");
213                 keySubnetmapMap.values().forEach(sn -> {
214                     if (sn != null) {
215                         System.out.println("Fetching subnetmap for given subnetId\n");
216                         System.out.println("------------------------"
217                                       + "------------------------------------------------------");
218                         System.out.println("Uuid: " + sn.getId() + "\n" + "SubnetIp: " + sn.getSubnetIp() + "\n"
219                             + "NetworkId: " + sn.getNetworkId() + "\n" + "NetworkType: " + sn.getNetworkType()
220                             + "\nSegmentationId: " + sn.getSegmentationId() + "\n" + "TenantId: " + sn.getTenantId()
221                             + "\n" + "RouterId: " + sn.getRouterId() + "\n" + "RouterInterfacePortId: "
222                             + sn.getRouterInterfacePortId() + "\nRouterIntfMacAddress: "
223                             + sn.getRouterIntfMacAddress() + "\n"
224                             + "RouterInterfaceFixedIp: " + sn.getRouterInterfaceFixedIp() + "\n"
225                             + "VpnId: " + sn.getVpnId() + "\n"
226                             + "InternetVpnId: " + sn.getInternetVpnId() + "\n");
227                         if (sn.getPortList() != null) {
228                             System.out.println("There are " + sn.getPortList().size()
229                                             + " port in the port-list");
230                             for (int i = 0; i < sn.getPortList().size(); i++) {
231                                 System.out.println("\tport num " + i + " :\t" + sn.getPortList().get(i));
232                             }
233                         }
234                         if (sn.getDirectPortList() != null) {
235                             System.out.println("There are " + sn.getDirectPortList().size()
236                                     + " port in the list of direct-port");
237                             for (int i = 0; i < sn.getDirectPortList().size(); i++) {
238                                 System.out.println("\tdirect port num " + i
239                                         + " :\t" + sn.getDirectPortList().get(i));
240                             }
241                         }
242                         System.out.println("------------------------"
243                                       + "------------------------------------------------------");
244                     }
245                 });
246             } else {
247                 System.out.println("No Subnetmap present in Config DS");
248             }
249         }
250         getshowVpnCLIHelp();
251         return null;
252     }
253
254     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
255     private void getSubnet() throws ExecutionException, InterruptedException {
256         List<SubnetOpDataEntry> subnetOpDataEntryList = new ArrayList<>();
257         InstanceIdentifier<Subnetmaps> subnetmapsid = InstanceIdentifier.builder(Subnetmaps.class).build();
258         InstanceIdentifier<SubnetOpData> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class).build();
259         Optional<Subnetmaps> optionalSubnetmaps = syncReadOptional(dataBroker, CONFIGURATION, subnetmapsid);
260         if (!optionalSubnetmaps.isPresent()) {
261             System.out.println("No Subnetmaps configured.");
262         } else {
263             subnetmapList = new ArrayList<Subnetmap>(optionalSubnetmaps.get().getSubnetmap().values());
264         }
265
266         Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
267         if (!optionalSubnetOpData.isPresent()) {
268             System.out.println("No SubnetOpData configured.");
269         } else {
270             subnetOpDataEntryList
271                     = new ArrayList<SubnetOpDataEntry>(optionalSubnetOpData.get().getSubnetOpDataEntry().values());
272         }
273
274         for (SubnetOpDataEntry subnetOpDataEntry : subnetOpDataEntryList) {
275             subnetOpDataEntryMap.put(subnetOpDataEntry.getSubnetId(), subnetOpDataEntry);
276         }
277     }
278
279     // TODO Clean up the console output
280     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
281     private void getshowVpnCLIHelp() {
282         System.out.println("\nUsage 1: "
283             + "To display subnetMaps for a given subnetId subnet-show --subnetmap [<subnetId>]");
284         System.out.println("\nUsage 2: "
285             + "To display subnetOpDataEntry for a given subnetId subnet-show --subnetopdata [<subnetId>]");
286         System.out.println("\nUsage 3 : To display all subnetopdata or all subnetmap"
287                 + " use these options subnetopdataall or subnetmapall");
288     }
289 }