Network checks updates

- Node specific network errors

Change-Id: I4cc830aeaa129db20895a6902a429facf8622b20
Related-PROD: PROD-28199
diff --git a/cfg_checker/modules/network/checker.py b/cfg_checker/modules/network/checker.py
index 29ccb41..aeb1e61 100644
--- a/cfg_checker/modules/network/checker.py
+++ b/cfg_checker/modules/network/checker.py
@@ -211,6 +211,21 @@
                             "... no data for the node"
                         )
                     )
+                    # add non-responsive node erorr
+                    self.errors.add_error(
+                        self.errors.NET_NODE_NON_RESPONSIVE,
+                        host=hostname
+                    )
+
+                    # print empty row
+                    _text = " # node non-responsive"
+                    logger_cli.info(
+                        "    {0:17} {1}".format(
+                            hostname.split('.')[0],
+                            _text
+                        )
+                    )
+                    continue
 
                 # get the gateway for current net
                 _routes = self.nodes[hostname]['routes']
@@ -235,10 +250,18 @@
                         # get proper reclass
                         _ip_str = str(_if.exploded)
                         _r = {}
-                        for _item in self.reclass_nets[network][hostname]:
-                            for _item_ifs in _item['ifs']:
-                                if _ip_str == str(_item_ifs.exploded):
-                                    _r = _item
+                        if hostname in self.reclass_nets[network]:
+                            for _item in self.reclass_nets[network][hostname]:
+                                for _item_ifs in _item['ifs']:
+                                    if _ip_str == str(_item_ifs.exploded):
+                                        _r = _item
+                        else:
+                            self.errors.add_error(
+                                self.errors.NET_NODE_UNEXPECTED_IF,
+                                host=hostname,
+                                if_name=_host['name'],
+                                if_ip=_ip_str
+                            )
 
                         # check if node is UP
                         if not self.is_node_available(hostname):
@@ -270,7 +293,7 @@
 
                         # IF status in reclass
                         if 'enabled' not in _r:
-                            _enabled = "no record!"
+                            _enabled = "(no record!)"
                         else:
                             _e = "enabled"
                             _d = "disabled"
@@ -292,8 +315,9 @@
                             # reclass is empty if MTU is untended to be 1500
                             _rc_mtu = "(-)"
                         elif _rc_mtu:
+                            _rc_mtu_s = str(_rc_mtu)
                             # if there is an MTU value, match it
-                            if _host['mtu'] != str(_rc_mtu):
+                            if _host['mtu'] != _rc_mtu_s:
                                 self.errors.add_error(
                                     self.errors.NET_MTU_MISMATCH,
                                     host=hostname,
@@ -317,7 +341,7 @@
                                     _name,
                                     _ip_str,
                                     _host['mtu'],
-                                    str(_rc_mtu) if _rc_mtu else "(No!)",
+                                    "("+_rc_mtu_s+")" if _rc_mtu else "(No!)",
                                     _host['state'],
                                     _enabled,
                                     _gate,
diff --git a/cfg_checker/modules/network/network_errors.py b/cfg_checker/modules/network/network_errors.py
index 2ec3d31..cb9dfef 100644
--- a/cfg_checker/modules/network/network_errors.py
+++ b/cfg_checker/modules/network/network_errors.py
@@ -13,6 +13,8 @@
     NET_DUPLICATE_IF = next(_c)
     NET_SUBNET_INTERSECT = next(_c)
     NET_MASK_MISMATCH = next(_c)
+    NET_NODE_NON_RESPONSIVE = next(_c)
+    NET_NODE_UNEXPECTED_IF = next(_c)
 
     def __init__(self):
         super(NetworkErrors, self).__init__("NET")
@@ -37,6 +39,14 @@
             self.NET_MASK_MISMATCH,
             "IFs mask settings for the same subnet is not the same"
         )
+        self.add_error_type(
+            self.NET_NODE_NON_RESPONSIVE,
+            "Node failed to respond on at least one non-ping salt call"
+        )
+        self.add_error_type(
+            self.NET_NODE_UNEXPECTED_IF,
+            "Node has unexpected IF with mapped IP"
+        )
 
 
 del _c