Additions and fixes to network check

- Per interface tree maps
- proper virtial nodes detection
- KVM nodes listing
- CPU count fix
- Basic service fail check (wip)

Change-Id: I62b68793404eeff957ef70468c954df2fda869a5
Related-PROD: PROD-38972
diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index ca4e261..0ca1e85 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -147,7 +147,7 @@
         }
         return _info
 
-    def get_cmd_for_nodes(self, cmd, target_key, target_dict=None):
+    def get_cmd_for_nodes(self, cmd, target_key, target_dict=None, nodes=None):
         """Function runs. cmd.run and parses result into place
         or into dict structure provided
 
@@ -160,8 +160,9 @@
             _nodes = target_dict
         else:
             _nodes = self.nodes
-        _result = self.execute_cmd_on_active_nodes(cmd)
+        _result = self.execute_cmd_on_active_nodes(cmd, nodes=nodes)
         for node, data in _nodes.iteritems():
+            
             if node in self.skip_list:
                 logger_cli.debug(
                     "... '{}' skipped while collecting '{}'".format(
@@ -176,6 +177,8 @@
             # Save data
             if data['status'] == const.NODE_DOWN:
                 data[target_key] = None
+            elif node not in _result:
+                continue
             elif not _result[node]:
                 logger_cli.debug(
                     "... '{}' not responded after '{}'".format(
@@ -369,11 +372,11 @@
         self.not_responded = [_n for _n in _r.keys() if not _r[_n]]
         return _r
 
-    def execute_cmd_on_active_nodes(self, cmd):
+    def execute_cmd_on_active_nodes(self, cmd, nodes=None):
         # execute cmd
         self.not_responded = []
         _r = self.salt.cmd(
-            self.active_nodes_compound,
+            nodes if nodes else self.active_nodes_compound,
             'cmd.run',
             param=cmd,
             expr_form="compound"