@@ -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 ('\n Error migrating server' )
616+ raise SystemExit
617+
618+
527619class PauseServer (command .Command ):
528620 """Pause server"""
529621
0 commit comments