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
This commit is contained in:
eric 2016-05-27 14:33:29 -06:00 committed by Timur Sufiev
parent fedb991435
commit cc42e94c0c
2 changed files with 29 additions and 4 deletions

View File

@ -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:

View File

@ -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',)})