From cc42e94c0c36eb33d1dadd0b45955ea3e39238d6 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 27 May 2016 14:33:29 -0600 Subject: [PATCH] Live migration auto schedule new host This change adds the option of using the nova scheduler to place a vm during live migration Change-Id: I136de833ab1b9e38c8077ad1b3ff156b761055d5 Closes-bug: #1586527 --- .../dashboards/admin/instances/forms.py | 10 ++++---- .../dashboards/admin/instances/tests.py | 23 +++++++++++++++++++ 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/openstack_dashboard/dashboards/admin/instances/forms.py b/openstack_dashboard/dashboards/admin/instances/forms.py index db76530139..f8532c3a41 100644 --- a/openstack_dashboard/dashboards/admin/instances/forms.py +++ b/openstack_dashboard/dashboards/admin/instances/forms.py @@ -29,7 +29,8 @@ class LiveMigrateForm(forms.SelfHandlingForm): widget=forms.TextInput( attrs={'readonly': 'readonly'})) host = forms.ChoiceField(label=_("New Host"), - help_text=_("Choose a Host to migrate to.")) + help_text=_("Choose a Host to migrate to."), + required=False) disk_over_commit = forms.BooleanField(label=_("Disk Over Commit"), initial=False, required=False) block_migration = forms.BooleanField(label=_("Block Migration"), @@ -53,7 +54,7 @@ class LiveMigrateForm(forms.SelfHandlingForm): if (host.service.startswith('compute') and host.host_name != current_host)] if host_list: - host_list.insert(0, ("", _("Select a new host"))) + host_list.insert(0, ("", _("Automatically schedule new host."))) else: host_list.insert(0, ("", _("No other hosts available"))) return sorted(host_list) @@ -62,13 +63,14 @@ class LiveMigrateForm(forms.SelfHandlingForm): try: block_migration = data['block_migration'] disk_over_commit = data['disk_over_commit'] + host = None if not data['host'] else data['host'] api.nova.server_live_migrate(request, data['instance_id'], - data['host'], + host, block_migration=block_migration, disk_over_commit=disk_over_commit) msg = _('The instance is preparing the live migration ' - 'to host "%s".') % data['host'] + 'to a new host.') messages.info(request, msg) return True except Exception: diff --git a/openstack_dashboard/dashboards/admin/instances/tests.py b/openstack_dashboard/dashboards/admin/instances/tests.py index e2b33d5a28..e15c3f2116 100644 --- a/openstack_dashboard/dashboards/admin/instances/tests.py +++ b/openstack_dashboard/dashboards/admin/instances/tests.py @@ -340,6 +340,29 @@ class InstanceViewTest(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) + @test.create_stubs({api.nova: ('host_list', + 'server_get', + 'server_live_migrate',)}) + def test_instance_live_migrate_auto_sched(self): + server = self.servers.first() + host = "" + api.nova.server_get(IsA(http.HttpRequest), server.id) \ + .AndReturn(server) + api.nova.host_list(IsA(http.HttpRequest)) \ + .AndReturn(self.hosts.list()) + api.nova.server_live_migrate(IsA(http.HttpRequest), server.id, None, + block_migration=False, + disk_over_commit=False) \ + .AndReturn([]) + + self.mox.ReplayAll() + + url = reverse('horizon:admin:instances:live_migrate', + args=[server.id]) + res = self.client.post(url, {'host': host, 'instance_id': server.id}) + self.assertNoFormErrors(res) + self.assertRedirectsNoFollow(res, INDEX_URL) + @test.create_stubs({api.nova: ('host_list', 'server_get', 'server_live_migrate',)})