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/cli/command.py b/cfg_checker/cli/command.py
index e6d9cd9..8e715f2 100644
--- a/cfg_checker/cli/command.py
+++ b/cfg_checker/cli/command.py
@@ -33,10 +33,11 @@
 def execute_command(args, command):
     # Validate the commands
     # check command
+    _type = args.type.replace("-", "_") if "-" in args.type else args.type
     if command not in commands:
         logger_cli.info("\n# Please, type a command listed above")
         return 0
-    elif args.type not in commands[command]:
+    elif _type not in commands[command]:
         # check type
         logger_cli.info(
             "\n# Please, select '{}' command type listed above".format(
@@ -46,7 +47,7 @@
         return 0
     else:
         # form function name to call
-        _method_name = "do_" + args.type
+        _method_name = "do_" + _type
         _target_module = __import__(
             mods_prefix + command,
             fromlist=[""]
@@ -79,11 +80,19 @@
 
     # parse arguments
     try:
-        args = my_parser.parse_args()
+        args, unknown = my_parser.parse_known_args()
     except TypeError:
         logger_cli.info("\n# Please, check arguments")
         sys.exit(0)
 
+    if unknown:
+        logger_cli.error(
+            "# Unexpected arguments: {}".format(
+                ", ".join(["'{}'".format(a) for a in unknown])
+            )
+        )
+        sys.exit(1)
+
     # force use of sudo
     config.ssh_uses_sudo = True