Refactoring workspace related commands to `project` group 09/34709/5
authorYujun Zhang <zhang.yujunz@zte.com.cn>
Sat, 13 May 2017 03:15:49 +0000 (11:15 +0800)
committerYujun Zhang <zhang.yujunz@zte.com.cn>
Mon, 15 May 2017 15:16:10 +0000 (15:16 +0000)
- renamed `workspace` to `project`, which is more accurate
- group create/setup/run/teardown into `project`
- shortcut for project commands, e.g. `qtip create` <=> `qtip project create`
- even shorter command alias, e.g. `qtip s` => `qtip setup`

Change-Id: I69ba5aa571bccc1cc4687481189c329b099bee91
Signed-off-by: Yujun Zhang <zhang.yujunz@zte.com.cn>
qtip/cli/commands/cmd_project.py [moved from qtip/cli/commands/cmd_workspace.py with 64% similarity]
qtip/cli/commands/cmd_setup.py [deleted file]
qtip/cli/entry.py
qtip/runner/project.py [moved from qtip/cli/commands/cmd_run.py with 65% similarity]

similarity index 64%
rename from qtip/cli/commands/cmd_workspace.py
rename to qtip/cli/commands/cmd_project.py
index a5b6828..0bf7d82 100644 (file)
@@ -12,15 +12,30 @@ import click
 import os
 
 from qtip.cli import utils
+from qtip.runner import project
 
 
-@click.group()
+class AliasedGroup(click.Group):
+
+    def get_command(self, ctx, cmd_name):
+        rv = click.Group.get_command(self, ctx, cmd_name)
+        if rv is not None:
+            return rv
+        matches = [x for x in self.list_commands(ctx)
+                   if x.startswith(cmd_name)]
+        if not matches:
+            return None
+        elif len(matches) == 1:
+            return click.Group.get_command(self, ctx, matches[0])
+        ctx.fail('Too many matches: %s' % ', '.join(sorted(matches)))
+
+
+@click.command(cls=AliasedGroup, help="Project commands")
 def cli():
-    """ Manage QTIP workspace """
     pass
 
 
-@cli.command("create", help="Create QTIP workspace")
+@cli.command(help="Create new testing project")
 @click.option('--pod', default='unknown', help='Name of pod under test')
 @click.option('--installer', help='OPNFV installer', required=True)
 @click.option('--master-host', help='Installer hostname', required=True)
@@ -43,3 +58,18 @@ def create(pod, installer, master_host, scenario, name):
               "".format(qtip_package=utils.QTIP_PACKAGE,
                         roles_path=utils.ROLES_PATH,
                         extra_vars=utils.join_vars(**extra_vars)))
+
+
+@cli.command(help='Setup testing environment')
+def setup():
+    project.setup()
+
+
+@cli.command(help='Execute testing plan')
+def run():
+    project.run()
+
+
+@cli.command(help='Teardown testing environment')
+def teardown():
+    project.teardown()
diff --git a/qtip/cli/commands/cmd_setup.py b/qtip/cli/commands/cmd_setup.py
deleted file mode 100644 (file)
index ac43456..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-##############################################################################
-# Copyright (c) 2017 taseer94@gmail.com and others.
-#
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Apache License, Version 2.0
-# which accompanies this distribution, and is available at
-# http://www.apache.org/licenses/LICENSE-2.0
-##############################################################################
-
-
-import click
-import os
-
-
-@click.command('setup', help='Setup QTIP workspace')
-def cli():
-    os.system('ansible-playbook {}/setup.yml'.format(os.getcwd()))
index b84a03d..b557047 100644 (file)
@@ -12,6 +12,7 @@ import os
 import pkg_resources as pkg
 import sys
 
+from qtip.cli.commands.cmd_project import cli as project_commands
 
 CONTEXT_SETTINGS = dict(help_option_names=['-h', '--help'])
 
@@ -28,7 +29,7 @@ cmd_folder = os.path.abspath(os.path.join(os.path.dirname(__file__),
                                           'commands'))
 
 
-class QtipCli(click.MultiCommand):
+class SubCommand(click.MultiCommand):
 
     def list_commands(self, ctx):
         rv = []
@@ -50,7 +51,15 @@ class QtipCli(click.MultiCommand):
         return mod.cli
 
 
-@click.command(cls=QtipCli, context_settings=CONTEXT_SETTINGS,
+@click.command(cls=SubCommand, context_settings=CONTEXT_SETTINGS,
+               invoke_without_command=True)
+def sub_commands(ctx, verbose, debug):
+    pass
+
+
+@click.command(cls=click.CommandCollection,
+               help="Platform performance benchmarking",
+               sources=[sub_commands, project_commands],
                invoke_without_command=True)
 @click.option('-v', '--verbose', is_flag=True, help='Enable verbose mode.')
 @click.option('-d', '--debug', is_flag=True, help='Enable debug mode.')
similarity index 65%
rename from qtip/cli/commands/cmd_run.py
rename to qtip/runner/project.py
index 56d416a..9eadc9d 100644 (file)
@@ -1,5 +1,5 @@
 ##############################################################################
-# Copyright (c) 2017 taseer94@gmail.com and others.
+# Copyright (c) 2017 ZTE corp. and others.
 #
 # All rights reserved. This program and the accompanying materials
 # are made available under the terms of the Apache License, Version 2.0
@@ -7,11 +7,16 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 ##############################################################################
 
-
-import click
 import os
 
 
-@click.command('run', help='Run performance tests')
-def cli():
-    os.system('ansible-playbook {}/run.yml'.format(os.getcwd()))
+def setup():
+    os.system('ansible-playbook setup.yml')
+
+
+def run():
+    os.system('ansible-playbook run.yml')
+
+
+def teardown():
+    os.system('ansible-playbook teardown.yml')