From 9b31d54aa2b08a59c7e7f67ba78a0e8e0ae3e88e Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Thu, 7 Jul 2011 13:33:17 -0500 Subject: [PATCH] Added migration functionality. --- README.rst | 1 + novaclient/servers.py | 14 ++++++++++++++ novaclient/shell.py | 5 +++++ tests/fakeserver.py | 2 ++ tests/test_servers.py | 7 +++++++ 5 files changed, 29 insertions(+) diff --git a/README.rst b/README.rst index 2c3febdca..e11709ba2 100644 --- a/README.rst +++ b/README.rst @@ -79,6 +79,7 @@ You'll find complete documentation on the shell by running ipgroup-list Show IP groups. ipgroup-show Show details about a particular IP group. list List active servers. + migrate Migrate a server to a new host in the same zone. reboot Reboot a server. rebuild Shutdown, re-image, and re-boot a server. rename Rename a server. diff --git a/novaclient/servers.py b/novaclient/servers.py index 29a71bfdc..c5181e28f 100644 --- a/novaclient/servers.py +++ b/novaclient/servers.py @@ -166,6 +166,12 @@ class Server(base.Resource): """ self.manager.revert_resize(self) + def migrate(self): + """ + Migrate a server to a new host in the same zone. + """ + self.manager.migrate(self) + @property def backup_schedule(self): """ @@ -432,6 +438,14 @@ class ServerManager(base.BootingManagerWithFind): """ self._action('revertResize', server) + def migrate(self, server): + """ + Migrate a server to a new host in the same zone. + + :param server: The :class:`Server` (or its ID). + """ + self._action('migrate', server) + def _action(self, action, server, info=None): """ Perform a server "action" -- reboot/rebuild/resize/etc. diff --git a/novaclient/shell.py b/novaclient/shell.py index 03fa2e1f1..eb78a371e 100644 --- a/novaclient/shell.py +++ b/novaclient/shell.py @@ -622,6 +622,11 @@ class OpenStackShell(object): flavor = self._find_flavor(args.flavor) server.resize(flavor) + @arg('server', metavar='', help='Name or ID of server.') + def do_migrate(self, args): + """Migrate a server.""" + self._find_server(args.server).migrate() + @arg('server', metavar='', help='Name or ID of server.') def do_pause(self, args): """Pause a server.""" diff --git a/tests/fakeserver.py b/tests/fakeserver.py index bc5e92672..60bc0b31e 100644 --- a/tests/fakeserver.py +++ b/tests/fakeserver.py @@ -273,6 +273,8 @@ class FakeClient(OpenStackClient): return (204, None) elif action == 'revertResize': assert_equal(body[action], None) + elif action == 'migrate': + assert_equal(body[action], None) else: fail("Unexpected server action: %s" % action) return (202, None) diff --git a/tests/test_servers.py b/tests/test_servers.py index 221c836dc..359bf3bef 100644 --- a/tests/test_servers.py +++ b/tests/test_servers.py @@ -148,3 +148,10 @@ def test_revert_resized_server(): cs.assert_called('POST', '/servers/1234/action') cs.servers.revert_resize(s) cs.assert_called('POST', '/servers/1234/action') + +def test_migrate_server(): + s = cs.servers.get(1234) + s.migrate() + cs.assert_called('POST', '/servers/1234/action') + cs.servers.migrate(s) + cs.assert_called('POST', '/servers/1234/action')