Package report/repo parser integration

 - parser able to filter package versions using keywords
 - warning message on missing tag
 - on the fly versions lookup (excluding '*.hotfix')
 - updated versions compare routine
 - lexical compare uses numbers, not ordinal values
 - updated release version detection
 - final report lists pkg section/app if no description given
 - final report shows repo info for detected release version

Fixes:
 - shorter alternate entrpoints: mcp-pkg, mcp-net, cmp-reclass
 - flake8 syntax
 - proper mirantis/non-mirantis versions getting
 - exit on unexpected arguments
 - salt-master class now gets linux codename by default and architecture

Change-Id: I0a2daadca8a1acaecafc8680226dc00d20cc24ce
Related-PROD: PROD-28199
diff --git a/cfg_checker/nodes.py b/cfg_checker/nodes.py
index 9a1fd48..d752655 100644
--- a/cfg_checker/nodes.py
+++ b/cfg_checker/nodes.py
@@ -64,7 +64,6 @@
         # in case API not listed minions, we need all that answer ping
         _active = self.salt.get_active_nodes()
         logger_cli.info("-> nodes responded: {}".format(len(_active)))
-        # just inventory for faster interaction
         # iterate through all accepted nodes and create a dict for it
         self.nodes = {}
         self.skip_list = []
@@ -113,6 +112,14 @@
             self.salt.master_node,
             "_param:openstack_version"
         )[self.salt.master_node]
+        # Preload codenames
+        # do additional queries to get linux codename and arch for each node
+        self.get_specific_pillar_for_nodes("_param:linux_system_codename")
+        self.get_specific_pillar_for_nodes("_param:linux_system_architecture")
+        for _name in self.nodes.keys():
+            _p = self.nodes[_name]['pillars']['_param']
+            self.nodes[_name]['linux_codename'] = _p['linux_system_codename']
+            self.nodes[_name]['linux_arch'] = _p['linux_system_architecture']
 
     def skip_node(self, node):
         # Add node to skip list
@@ -298,7 +305,7 @@
         )
 
         # execute script
-        logger.debug("... running script")
+        logger_cli.debug("... running script")
         # handle results for each node
         _script_arguments = " ".join(args) if args else ""
         self.not_responded = []