NETVIRT-1630 migrate to md-sal APIs
[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
23 import org.apache.karaf.shell.commands.Argument;
24 import org.apache.karaf.shell.commands.Command;
25 import org.apache.karaf.shell.commands.Option;
26 import org.apache.karaf.shell.console.OsgiCommandSupport;
27 import org.opendaylight.mdsal.binding.api.DataBroker;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.SubnetOpData;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntry;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.l3vpn.rev130911.subnet.op.data.SubnetOpDataEntryKey;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.Subnetmaps;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.Subnetmap;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.netvirt.neutronvpn.rev150602.subnetmaps.SubnetmapKey;
35 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
36 import org.slf4j.Logger;
37 import org.slf4j.LoggerFactory;
38
39 @Command(scope = "vpnservice", name = "subnet-show",
40     description = "Comparison of data present in subnetMap and subnetOpDataEntry")
41 public class ShowSubnet extends OsgiCommandSupport {
42
43     private static final Logger LOG = LoggerFactory.getLogger(ShowSubnet.class);
44
45     @Option(name = "--subnetmap", aliases = {"--subnetmap"},
46         description = "Display subnetMap details for given subnetId", required = false, multiValued = false)
47     String subnetmap;
48
49     @Option(name = "--subnetopdata", aliases = {"--subnetopdata"},
50         description = "Display subnetOpData details for given subnetId", required = false, multiValued = false)
51     String subnetopdata;
52
53     @Argument(name = "subnetopdataall|subnetmapall", description = "Display subnetOpData details or subnetmap details"
54             + "for all subnet", required = false, multiValued = true)
55     private final List<String> options = null;
56
57     private DataBroker dataBroker;
58     private List<Subnetmap> subnetmapList = new ArrayList<>();
59     private final Map<Uuid, SubnetOpDataEntry> subnetOpDataEntryMap = new HashMap<>();
60
61     public void setDataBroker(DataBroker broker) {
62         this.dataBroker = broker;
63     }
64
65     @Override
66     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
67     protected Object doExecute() throws Exception {
68         if (subnetmap == null && subnetopdata == null && (options == null || options.isEmpty())) {
69             getSubnet();
70             System.out.println("Following subnetId is present in both subnetMap and subnetOpDataEntry\n");
71             for (Subnetmap candidateSubnetmap : subnetmapList) {
72                 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
73                 if (data != null) {
74                     System.out.println(candidateSubnetmap.getId().toString() + "\n");
75                 }
76             }
77             System.out.println("\n\nFollowing subnetId is present in subnetMap but not in subnetOpDataEntry\n");
78             for (Subnetmap candidateSubnetmap : subnetmapList) {
79                 SubnetOpDataEntry data = subnetOpDataEntryMap.get(candidateSubnetmap.getId());
80                 if (data == null) {
81                     System.out.println(candidateSubnetmap.getId().toString() + "\n");
82                 }
83             }
84             getshowVpnCLIHelp();
85         } else if (subnetmap == null) {
86             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
87                 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
88             Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
89             SubnetOpDataEntry data = optionalSubs.get();
90             System.out.println("Fetching subnetmap for given subnetId\n");
91             System.out.println("------------------------------------------------------------------------------");
92             System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
93                 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
94                 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
95                 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
96             System.out.println("------------------------------------------------------------------------------");
97         }
98         if (subnetmap == null && subnetopdata != null) {
99             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
100                 .child(SubnetOpDataEntry.class).build();
101             Optional<SubnetOpDataEntry> optionalSubnetOpDataEntries =
102                 syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
103             if (optionalSubnetOpDataEntries.isPresent()) {
104                 Collections.singleton(optionalSubnetOpDataEntries.get()).forEach(subnetOpDataEntry -> {
105                     SubnetOpDataEntry data = subnetOpDataEntry;
106                     System.out.println("Fetching subnetmapdataentry for given subnetId\n");
107                     System.out.println("------------------------"
108                                   + "------------------------------------------------------");
109                     System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n"
110                         + "ElanTag: " + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n"
111                         + "RouteAdvState: " + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr()
112                         + "\n" + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: "
113                         + data.getVpnName() + "\n");
114                     System.out.println("------------------------"
115                                   + "------------------------------------------------------");
116                 });
117             }
118         }
119         if (subnetmap != null && subnetopdata == null) {
120             InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
121                     .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
122             Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
123             Subnetmap data = sn.get();
124             System.out.println("Fetching subnetopdata for given subnetId\n");
125             System.out.println("------------------------------------------------------------------------------");
126             String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
127                        ? data.getRouterInterfacePortId().getValue() : "null");
128             System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
129                     + "InternetVpnId: " + data.getInternetVpnId() + "\n"
130                     + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
131                     + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
132                     + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
133                     + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
134                     + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
135                     + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
136                     + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
137             System.out.println("------------------------------------------------------------------------------");
138         } else if (subnetopdata == null) {
139             InstanceIdentifier<Subnetmap> id = InstanceIdentifier.builder(Subnetmaps.class)
140                     .child(Subnetmap.class, new SubnetmapKey(new Uuid(subnetmap))).build();
141             Optional<Subnetmap> sn = syncReadOptional(dataBroker, CONFIGURATION, id);
142             Subnetmap data = sn.get();
143             System.out.println("Fetching subnetopdata for given subnetId\n");
144             System.out.println("------------------------------------------------------------------------------");
145             String getRouterInterfacePortId = (data.getRouterInterfacePortId() != null
146                        ? data.getRouterInterfacePortId().getValue() : "null");
147             System.out.println("Key: " + data.key() + "\n" + "VpnId: " + data.getVpnId() + "\n"
148                     + "InternetVpnId: " + data.getInternetVpnId() + "\n"
149                     + "DirectPortList: " + data.getDirectPortList() + "\n" + "NetworkId: " + data.getNetworkId()
150                     + "\n" + "Network-type: " + data.getNetworkType() + "\n" + "Network-segmentation-Id: "
151                     + data.getSegmentationId() + "\n" + "PortList: " + data.getPortList() + "\n"
152                     + "RouterInterfaceFixedIp: " + data.getRouterInterfaceFixedIp() + "\n"
153                     + "RouterInterfacePortId: " + getRouterInterfacePortId + "\n"
154                     + "RouterIntfMacAddress: " + data.getRouterIntfMacAddress() + "\n" + "SubnetIp: "
155                     + data.getSubnetIp() + "\n" + "TenantId: " + data.getTenantId() + "\n");
156             System.out.println("------------------------------------------------------------------------------");
157         } else {
158             InstanceIdentifier<SubnetOpDataEntry> subOpIdentifier = InstanceIdentifier.builder(SubnetOpData.class)
159                 .child(SubnetOpDataEntry.class, new SubnetOpDataEntryKey(new Uuid(subnetopdata))).build();
160             Optional<SubnetOpDataEntry> optionalSubs = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
161             SubnetOpDataEntry data = optionalSubs.get();
162             System.out.println("Fetching subnetmap for given subnetId\n");
163             System.out.println("------------------------------------------------------------------------------");
164             System.out.println("Key: " + data.key() + "\n" + "VrfId: " + data.getVrfId() + "\n" + "ElanTag: "
165                 + "" + data.getElanTag() + "\n" + "NhDpnId: " + data.getNhDpnId() + "\n" + "RouteAdvState: "
166                 + data.getRouteAdvState() + "\n" + "SubnetCidr: " + data.getSubnetCidr() + "\n"
167                 + "SubnetToDpnList: " + data.getSubnetToDpn() + "\n" + "VpnName: " + data.getVpnName() + "\n");
168             System.out.println("------------------------------------------------------------------------------");
169         }
170         Boolean optionsSubnetopdataall = false;
171         Boolean optionsSubnetmapall = false;
172         if (options != null && !options.isEmpty()) {
173             for (String opt : options) {
174                 String optLowCase = opt == null ? "" : opt.toLowerCase(Locale.ENGLISH);
175                 if (optLowCase.startsWith("subnetop")) {
176                     optionsSubnetopdataall = true;
177                 }
178                 if (optLowCase.startsWith("subnetmap")) {
179                     optionsSubnetmapall = true;
180                 }
181             }
182         }
183         if (optionsSubnetopdataall) {
184             InstanceIdentifier<SubnetOpData> subOpIdentifier =
185                     InstanceIdentifier.builder(SubnetOpData.class).build();
186             Optional<SubnetOpData> optionalSubnetOpData = syncReadOptional(dataBroker, OPERATIONAL, subOpIdentifier);
187             if (optionalSubnetOpData.isPresent()) {
188                 List<SubnetOpDataEntry> subnetOpDataEntryList = optionalSubnetOpData.get().getSubnetOpDataEntry();
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                 List<Subnetmap> subnetMapList = optionalSubnetmaps.get().getSubnetmap();
212                 System.out.println("number of subnetmaps found are : " + subnetMapList.size() + "\n");
213                 subnetMapList.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 = optionalSubnetmaps.get().getSubnetmap();
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 = optionalSubnetOpData.get().getSubnetOpDataEntry();
271         }
272
273         for (SubnetOpDataEntry subnetOpDataEntry : subnetOpDataEntryList) {
274             subnetOpDataEntryMap.put(subnetOpDataEntry.getSubnetId(), subnetOpDataEntry);
275         }
276     }
277
278     // TODO Clean up the console output
279     @SuppressWarnings("checkstyle:RegexpSinglelineJava")
280     private void getshowVpnCLIHelp() {
281         System.out.println("\nUsage 1: "
282             + "To display subnetMaps for a given subnetId subnet-show --subnetmap [<subnetId>]");
283         System.out.println("\nUsage 2: "
284             + "To display subnetOpDataEntry for a given subnetId subnet-show --subnetopdata [<subnetId>]");
285         System.out.println("\nUsage 3 : To display all subnetopdata or all subnetmap"
286                 + " use these options subnetopdataall or subnetmapall");
287     }
288 }