Skip to content

Commit 3cc313a

Browse files
author
Dean Troyer
committed
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
1 parent 3ff6378 commit 3cc313a

2 files changed

Lines changed: 93 additions & 0 deletions

File tree

‎openstackclient/compute/v2/server.py‎

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,98 @@ def take_action(self, parsed_args):
524524
).lock()
525525

526526

527+
# FIXME(dtroyer): Here is what I want, how with argparse/cliff?
528+
# server migrate [--wait] \
529+
# [--live <hostname>
530+
# [--shared-migration | --block-migration]
531+
# [--disk-overcommit | --no-disk-overcommit]]
532+
# <server>
533+
#
534+
# live_parser = parser.add_argument_group(title='Live migration options')
535+
# then adding the groups doesn't seem to work
536+
537+
class MigrateServer(command.Command):
538+
"""Migrate server to different host"""
539+
540+
log = logging.getLogger(__name__ + '.MigrateServer')
541+
542+
def get_parser(self, prog_name):
543+
parser = super(MigrateServer, self).get_parser(prog_name)
544+
parser.add_argument(
545+
'server',
546+
metavar='<server>',
547+
help='Server to migrate (name or ID)',
548+
)
549+
parser.add_argument(
550+
'--wait',
551+
action='store_true',
552+
help='Wait for resize to complete',
553+
)
554+
parser.add_argument(
555+
'--live',
556+
metavar='<hostname>',
557+
help='Target hostname',
558+
)
559+
migration_group = parser.add_mutually_exclusive_group()
560+
migration_group.add_argument(
561+
'--shared-migration',
562+
dest='shared_migration',
563+
action='store_true',
564+
default=True,
565+
help='Perform a shared live migration (default)',
566+
)
567+
migration_group.add_argument(
568+
'--block-migration',
569+
dest='shared_migration',
570+
action='store_false',
571+
help='Perform a block live migration',
572+
)
573+
disk_group = parser.add_mutually_exclusive_group()
574+
disk_group.add_argument(
575+
'--no-disk-overcommit',
576+
dest='disk_overcommit',
577+
action='store_false',
578+
default=False,
579+
help='Do not over-commit disk on the destination host (default)',
580+
)
581+
disk_group.add_argument(
582+
'--disk-overcommit',
583+
action='store_true',
584+
default=False,
585+
help='Allow disk over-commit on the destination host',
586+
)
587+
return parser
588+
589+
def take_action(self, parsed_args):
590+
self.log.debug('take_action(%s)' % parsed_args)
591+
592+
compute_client = self.app.client_manager.compute
593+
594+
server = utils.find_resource(
595+
compute_client.servers,
596+
parsed_args.server,
597+
)
598+
if parsed_args.live:
599+
server.live_migrate(
600+
parsed_args.live,
601+
parsed_args.shared_migration,
602+
parsed_args.disk_overcommit,
603+
)
604+
else:
605+
server.migrate()
606+
607+
if parsed_args.wait:
608+
if utils.wait_for_status(
609+
compute_client.servers.get,
610+
server.id,
611+
#callback=_show_progress,
612+
):
613+
sys.stdout.write('Complete\n')
614+
else:
615+
sys.stdout.write('\nError migrating server')
616+
raise SystemExit
617+
618+
527619
class PauseServer(command.Command):
528620
"""Pause server"""
529621

‎setup.cfg‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ openstack.compute.v2 =
215215
server_delete = openstackclient.compute.v2.server:DeleteServer
216216
server_list = openstackclient.compute.v2.server:ListServer
217217
server_lock = openstackclient.compute.v2.server:LockServer
218+
server_migrate = openstackclient.compute.v2.server:MigrateServer
218219
server_pause = openstackclient.compute.v2.server:PauseServer
219220
server_reboot = openstackclient.compute.v2.server:RebootServer
220221
server_rebuild = openstackclient.compute.v2.server:RebuildServer

0 commit comments

Comments
 (0)