summaryrefslogtreecommitdiff
path: root/openstackclient/compute
diff options
context:
space:
mode:
authorDean Troyer <dtroyer@gmail.com>2013-07-26 15:00:21 -0500
committerDean Troyer <dtroyer@gmail.com>2013-07-29 18:43:16 -0500
commit3cc313a60db6d1a5a89c572ed10bca11402912d4 (patch)
tree22b77807cf2954c1e9d31f5fe3fd1e115ad411ea /openstackclient/compute
parent3ff6378c23ab103647310d5d64b1e51bf3cdcf04 (diff)
downloadpython-openstackclient-3cc313a60db6d1a5a89c572ed10bca11402912d4.tar.gz
Add server migrate command
Blueprint: nova-client Note: I've tested that the API calls are made correctly but do not have an environment with migration proerly enabled to watch it complete... Change-Id: Ideaf0985d43aa2be22390cf0d2850124c549632d
Diffstat (limited to 'openstackclient/compute')
-rw-r--r--openstackclient/compute/v2/server.py92
1 files changed, 92 insertions, 0 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index 009b4979..8c31e5d9 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -524,6 +524,98 @@ class LockServer(command.Command):
).lock()
+# FIXME(dtroyer): Here is what I want, how with argparse/cliff?
+# server migrate [--wait] \
+# [--live <hostname>
+# [--shared-migration | --block-migration]
+# [--disk-overcommit | --no-disk-overcommit]]
+# <server>
+#
+# live_parser = parser.add_argument_group(title='Live migration options')
+# then adding the groups doesn't seem to work
+
+class MigrateServer(command.Command):
+ """Migrate server to different host"""
+
+ log = logging.getLogger(__name__ + '.MigrateServer')
+
+ def get_parser(self, prog_name):
+ parser = super(MigrateServer, self).get_parser(prog_name)
+ parser.add_argument(
+ 'server',
+ metavar='<server>',
+ help='Server to migrate (name or ID)',
+ )
+ parser.add_argument(
+ '--wait',
+ action='store_true',
+ help='Wait for resize to complete',
+ )
+ parser.add_argument(
+ '--live',
+ metavar='<hostname>',
+ help='Target hostname',
+ )
+ migration_group = parser.add_mutually_exclusive_group()
+ migration_group.add_argument(
+ '--shared-migration',
+ dest='shared_migration',
+ action='store_true',
+ default=True,
+ help='Perform a shared live migration (default)',
+ )
+ migration_group.add_argument(
+ '--block-migration',
+ dest='shared_migration',
+ action='store_false',
+ help='Perform a block live migration',
+ )
+ disk_group = parser.add_mutually_exclusive_group()
+ disk_group.add_argument(
+ '--no-disk-overcommit',
+ dest='disk_overcommit',
+ action='store_false',
+ default=False,
+ help='Do not over-commit disk on the destination host (default)',
+ )
+ disk_group.add_argument(
+ '--disk-overcommit',
+ action='store_true',
+ default=False,
+ help='Allow disk over-commit on the destination host',
+ )
+ return parser
+
+ def take_action(self, parsed_args):
+ self.log.debug('take_action(%s)' % parsed_args)
+
+ compute_client = self.app.client_manager.compute
+
+ server = utils.find_resource(
+ compute_client.servers,
+ parsed_args.server,
+ )
+ if parsed_args.live:
+ server.live_migrate(
+ parsed_args.live,
+ parsed_args.shared_migration,
+ parsed_args.disk_overcommit,
+ )
+ else:
+ server.migrate()
+
+ if parsed_args.wait:
+ if utils.wait_for_status(
+ compute_client.servers.get,
+ server.id,
+ #callback=_show_progress,
+ ):
+ sys.stdout.write('Complete\n')
+ else:
+ sys.stdout.write('\nError migrating server')
+ raise SystemExit
+
+
class PauseServer(command.Command):
"""Pause server"""