Skip nodes functionality for Package and Network modules

Added to main entrypoint
- Skip nodes using simple argument with '*' as a trailing wildcard
- Skip nodes using file list

Usability improovement
- Node list preview in status line
- Node stats alignment in net report

Minor fixes:
- Python version detection (3.5+)
- Node counter for each status
- Proper node skip handling

Change-Id: I086ef501bc06f0e739df25349257f1c63a2e2fcf
Related-PROD: PROD-35009
diff --git a/cfg_checker/modules/network/__init__.py b/cfg_checker/modules/network/__init__.py
index 71df82d..28d08c4 100644
--- a/cfg_checker/modules/network/__init__.py
+++ b/cfg_checker/modules/network/__init__.py
@@ -71,7 +71,11 @@
     # should not print map, etc...
     # Just bare summary and errors
     logger_cli.info("# Network check to console")
-    netChecker = checker.NetworkChecker()
+    _skip, _skip_file = args_utils.get_skip_args(args)
+    netChecker = checker.NetworkChecker(
+        skip_list=_skip,
+        skip_list_file=_skip_file
+    )
     netChecker.check_networks()
 
     # save what was collected
@@ -93,8 +97,11 @@
     logger_cli.info("# Network report (check, node map")
 
     _filename = args_utils.get_arg(args, 'html')
-
-    netChecker = checker.NetworkChecker()
+    _skip, _skip_file = args_utils.get_skip_args(args)
+    netChecker = checker.NetworkChecker(
+        skip_list=_skip,
+        skip_list_file=_skip_file
+    )
     netChecker.check_networks(map=False)
 
     # save what was collected
@@ -108,8 +115,11 @@
     # Network Map
     # Should generate network map to console or HTML
     logger_cli.info("# Network report")
-
-    networkMap = mapper.NetworkMapper()
+    _skip, _skip_file = args_utils.get_skip_args(args)
+    networkMap = mapper.NetworkMapper(
+        skip_list=_skip,
+        skip_list_file=_skip_file
+    )
     networkMap.prepare_all_maps()
     networkMap.create_map()
     networkMap.print_map()
@@ -120,7 +130,11 @@
 def do_list(args):
     # Network List
     # Should generate network map to console or HTML
-    _map = mapper.NetworkMapper()
+    _skip, _skip_file = args_utils.get_skip_args(args)
+    _map = mapper.NetworkMapper(
+        skip_list=_skip,
+        skip_list_file=_skip_file
+    )
     reclass = _map.map_network(_map.RECLASS)
     runtime = _map.map_network(_map.RUNTIME)
 
@@ -141,7 +155,13 @@
     if not args.cidr:
         logger_cli.error("\n# Use mcp-check network list to get list of CIDRs")
     _cidr = args_utils.get_arg(args, "cidr")
-    _pinger = pinger.NetworkPinger(mtu=args.mtu, detailed=args.detailed)
+    _skip, _skip_file = args_utils.get_skip_args(args)
+    _pinger = pinger.NetworkPinger(
+        mtu=args.mtu,
+        detailed=args.detailed,
+        skip_list=_skip,
+        skip_list_file=_skip_file
+    )
 
     _ret = _pinger.ping_nodes(_cidr)
 
diff --git a/cfg_checker/modules/network/checker.py b/cfg_checker/modules/network/checker.py
index acd3bb1..c590d13 100644
--- a/cfg_checker/modules/network/checker.py
+++ b/cfg_checker/modules/network/checker.py
@@ -5,10 +5,18 @@
 
 
 class NetworkChecker(object):
-    def __init__(self):
+    def __init__(
+        self,
+        skip_list=None,
+        skip_list_file=None
+    ):
         logger_cli.debug("... init error logs folder")
         self.errors = NetworkErrors()
-        self.mapper = NetworkMapper(self.errors)
+        self.mapper = NetworkMapper(
+            self.errors,
+            skip_list=skip_list,
+            skip_list_file=skip_list_file
+        )
 
     def check_networks(self, map=True):
         self.mapper.map_network(self.mapper.RECLASS)
@@ -41,6 +49,7 @@
             filename
         )
         _report({
+            "domain": self.mapper.domain,
             "nodes": self.mapper.nodes,
             "map": self.mapper.map,
             "mcp_release": self.mapper.cluster['mcp_release'],
diff --git a/cfg_checker/modules/network/mapper.py b/cfg_checker/modules/network/mapper.py
index 483c11f..51f52bb 100644
--- a/cfg_checker/modules/network/mapper.py
+++ b/cfg_checker/modules/network/mapper.py
@@ -31,12 +31,21 @@
     CONFIG = "config"
     RUNTIME = "runtime"
 
-    def __init__(self, errors_class=None):
+    def __init__(
+        self,
+        errors_class=None,
+        skip_list=None,
+        skip_list_file=None
+    ):
         logger_cli.info("# Initializing mapper")
         # init networks and nodes
         self.networks = {}
-        self.nodes = salt_master.get_nodes()
+        self.nodes = salt_master.get_nodes(
+            skip_list=skip_list,
+            skip_list_file=skip_list_file
+        )
         self.cluster = salt_master.get_info()
+        self.domain = salt_master.domain
         # init and pre-populate interfaces
         self.interfaces = {k: {} for k in self.nodes}
         # Init errors class
diff --git a/cfg_checker/modules/network/pinger.py b/cfg_checker/modules/network/pinger.py
index 0500284..5b12a94 100644
--- a/cfg_checker/modules/network/pinger.py
+++ b/cfg_checker/modules/network/pinger.py
@@ -10,10 +10,21 @@
 
 # This is independent class with a salt.nodes input
 class NetworkPinger(object):
-    def __init__(self, mtu=None, detailed=False, errors_class=None):
+    def __init__(
+        self,
+        mtu=None,
+        detailed=False,
+        errors_class=None,
+        skip_list=None,
+        skip_list_file=None
+    ):
         logger_cli.info("# Initializing")
         # all active nodes in the cloud
-        self.target_nodes = salt_master.get_nodes()
+        self.target_nodes = salt_master.get_nodes(
+            skip_list=skip_list,
+            skip_list_file=skip_list_file
+        )
+
         # default MTU value
         self.target_mtu = mtu if mtu else 64
         # only data