Updates for network checker

 - New checks for uniform MTU and Duplicate IPs
 - Updated mapping for K8s envs
 - K8s envs can skip networks using IF name keywords. Defaults to "docker"
 - Network listing now gives details on Names and used MTU

 Related-PROD: PROD-35288

Change-Id: Ida345ce1762038f744c460805d607d1439e434b8
diff --git a/cfg_checker/modules/network/mapper.py b/cfg_checker/modules/network/mapper.py
index fff6bb6..f0fd78d 100644
--- a/cfg_checker/modules/network/mapper.py
+++ b/cfg_checker/modules/network/mapper.py
@@ -196,7 +196,7 @@
             ))
         logger_cli.info("-> done collecting networks data")
 
-        logger_cli.info("-> mapping IPs")
+        logger_cli.info("-> mapping runtime network IPs")
         # match interfaces by IP subnets
         for host, node_data in self.master.nodes.items():
             if not self.master.is_node_available(host):
@@ -437,7 +437,9 @@
         return _result
 
     def map_networks(self):
+        logger_cli.info("-> Mapping reclass networks")
         self.map_network(self.RECLASS)
+        logger_cli.info("-> Mapping runtime networks")
         self.map_network(self.RUNTIME)
 
     def map_network(self, source):
@@ -455,7 +457,7 @@
         self.networks[source] = _networks
         return _networks
 
-    def create_map(self):
+    def create_map(self, skip_keywords=None):
         """Create all needed elements for map output
 
         :return: none
@@ -804,6 +806,7 @@
         return _result
 
     def map_networks(self):
+        logger_cli.info("-> Mapping runtime networks")
         self.map_network(self.RUNTIME)
 
     def map_network(self, source):
@@ -822,13 +825,15 @@
         self.networks[source] = _networks
         return _networks
 
-    def create_map(self):
+    def create_map(self, skip_keywords=None):
         """Create all needed elements for map output
 
         :return: none
         """
+        # shortcut
         _runtime = self.networks[self.RUNTIME]
-
+        # networks to skip
+        _net_skip_list = []
         # main networks, target vars
         _map = {}
         # No matter of proto, at least one IP will be present for the network
@@ -866,6 +871,11 @@
                 for _host in _a:
                     for _if in _host['ifs']:
                         _ip_str = str(_if.exploded)
+                        # Make sure we print VIP properly
+                        if _host['vip'] == _ip_str:
+                            _if_name = " "*7
+                            _if_name_suffix = ""
+                            _ip_str += " VIP"
 
                         # Save all data
                         _values = {
@@ -876,6 +886,7 @@
                             "ip_address": _ip_str,
                             "rt_mtu": _host['mtu'],
                             "status": _host['state'],
+                            "type": _host['type'],
                             "raw_data": _raw,
                         }
                         if node in _map[_net]:
@@ -884,7 +895,15 @@
                         else:
                             _map[_net][node] = [_values]
                         _notes = []
+                # process skips: if key substring found in interface name
+                # then skip the whole network.
+                if any([True for _w in skip_keywords if _w in _if_name]):
+                    _net_skip_list.append(_net)
 
+        # remove skipped networks from list
+        _net_skip_list = list(set(_net_skip_list))
+        for _net in _net_skip_list:
+            _map.pop(_net)
         # save map
         self.map = _map
         return
@@ -897,7 +916,7 @@
         """
         logger_cli.info("# Networks")
         logger_cli.info(
-            "    {0:8} {1:25} {2:25} {3:10} {4:10}".format(
+            "    {0:47} {1:12} {2:25} {3:5} {4:4}".format(
                 "Host",
                 "IF",
                 "IP",
@@ -912,7 +931,7 @@
                 _n = self.map[network][hostname]
                 for _i in _n:
                     # Host IF IP Proto MTU State Gate Def.Gate
-                    _text = "{:7} {:17} {:25} {:5} {:10}".format(
+                    _text = "{:10} {:2} {:25} {:5} {:4}".format(
                                 _i['interface'],
                                 _i['interface_note'],
                                 _i['ip_address'],
@@ -920,7 +939,7 @@
                                 _i['status']
                             )
                     logger_cli.info(
-                        "    {0:8} {1}".format(
+                        "    {0:47} {1}".format(
                             node,
                             _text
                         )