Skip to content

Commit

Permalink
Merge "Naming instance directory by uuid in VMware Hyper." into stabl…
Browse files Browse the repository at this point in the history
…e/grizzly
  • Loading branch information
Jenkins authored and openstack-gerrit committed Jul 24, 2013
2 parents 767c850 + 7ad1db6 commit 0b45996
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 93 deletions.
57 changes: 35 additions & 22 deletions nova/tests/test_vmwareapi.py
Expand Up @@ -91,6 +91,7 @@ def tearDown(self):
def _create_instance_in_the_db(self):
values = {'name': 1,
'id': 1,
'uuid': "fake-uuid",
'project_id': self.project_id,
'user_id': self.user_id,
'image_ref': "1",
Expand Down Expand Up @@ -120,7 +121,8 @@ def _check_vm_record(self):
self.assertEquals(len(instances), 1)

# Get Nova record for VM
vm_info = self.conn.get_info({'name': 1})
vm_info = self.conn.get_info({'uuid': 'fake-uuid',
'name': 1})

# Get record for VM
vms = vmwareapi_fake._get_objects("VirtualMachine")
Expand Down Expand Up @@ -177,7 +179,7 @@ def test_list_instances_1(self):

def test_spawn(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_snapshot(self):
Expand All @@ -191,11 +193,11 @@ def test_snapshot(self):
'expected_state': task_states.IMAGE_PENDING_UPLOAD}}]
func_call_matcher = matchers.FunctionCallMatcher(expected_calls)
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.conn.snapshot(self.context, self.instance, "Test-Snapshot",
func_call_matcher.call)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.assertIsNone(func_call_matcher.match())

Expand All @@ -207,12 +209,23 @@ def test_snapshot_non_existent(self):

def test_reboot(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'name': 1, 'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
reboot_type = "SOFT"
self.conn.reboot(self.context, self.instance, self.network_info,
reboot_type)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'name': 1, 'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_reboot_with_uuid(self):
"""Test fall back to use name when can't find by uuid."""
self._create_vm()
info = self.conn.get_info({'name': 'fake-uuid', 'uuid': 'wrong-uuid'})
self._check_vm_info(info, power_state.RUNNING)
reboot_type = "SOFT"
self.conn.reboot(self.context, self.instance, self.network_info,
reboot_type)
info = self.conn.get_info({'name': 'fake-uuid', 'uuid': 'wrong-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_reboot_non_existent(self):
Expand All @@ -223,21 +236,21 @@ def test_reboot_non_existent(self):

def test_reboot_not_poweredon(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.conn.suspend(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SUSPENDED)
self.assertRaises(exception.InstanceRebootFailure, self.conn.reboot,
self.context, self.instance, self.network_info,
'SOFT')

def test_suspend(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': "fake-uuid"})
self._check_vm_info(info, power_state.RUNNING)
self.conn.suspend(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SUSPENDED)

def test_suspend_non_existent(self):
Expand All @@ -247,13 +260,13 @@ def test_suspend_non_existent(self):

def test_resume(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.conn.suspend(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SUSPENDED)
self.conn.resume(self.instance, self.network_info)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_resume_non_existent(self):
Expand All @@ -263,20 +276,20 @@ def test_resume_non_existent(self):

def test_resume_not_suspended(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.assertRaises(exception.InstanceResumeFailure, self.conn.resume,
self.instance, self.network_info)

def test_power_on(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.conn.power_off(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SHUTDOWN)
self.conn.power_on(self.context, self.instance, self.network_info)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_power_on_non_existent(self):
Expand All @@ -286,10 +299,10 @@ def test_power_on_non_existent(self):

def test_power_off(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
self.conn.power_off(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SHUTDOWN)

def test_power_off_non_existent(self):
Expand All @@ -300,19 +313,19 @@ def test_power_off_non_existent(self):
def test_power_off_suspended(self):
self._create_vm()
self.conn.suspend(self.instance)
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.SUSPENDED)
self.assertRaises(exception.InstancePowerOffFailure,
self.conn.power_off, self.instance)

def test_get_info(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)

def test_destroy(self):
self._create_vm()
info = self.conn.get_info({'name': 1})
info = self.conn.get_info({'uuid': 'fake-uuid'})
self._check_vm_info(info, power_state.RUNNING)
instances = self.conn.list_instances()
self.assertEquals(len(instances), 1)
Expand Down
3 changes: 1 addition & 2 deletions nova/tests/vmwareapi/db_fakes.py
Expand Up @@ -20,7 +20,6 @@
"""

import time
import uuid

from nova.compute import task_states
from nova.compute import vm_states
Expand Down Expand Up @@ -63,7 +62,7 @@ def fake_instance_create(context, values):
base_options = {
'name': values['name'],
'id': values['id'],
'uuid': uuid.uuid4(),
'uuid': values['uuid'],
'reservation_id': utils.generate_uid('r'),
'image_ref': values['image_ref'],
'kernel_id': values['kernel_id'],
Expand Down
21 changes: 20 additions & 1 deletion nova/virt/vmwareapi/vm_util.py
Expand Up @@ -47,7 +47,7 @@ def get_vm_create_spec(client_factory, instance, data_store_name,
vif_infos, os_type="otherGuest"):
"""Builds the VM Create spec."""
config_spec = client_factory.create('ns0:VirtualMachineConfigSpec')
config_spec.name = instance['name']
config_spec.name = instance['uuid']
config_spec.guestId = os_type

vm_file_info = client_factory.create('ns0:VirtualMachineFileInfo')
Expand Down Expand Up @@ -503,6 +503,25 @@ def get_vm_ref_from_name(session, vm_name):
return None


def get_vm_ref_from_uuid(session, instance_uuid):
"""Get reference to the VM with the uuid specified."""
vms = session._call_method(vim_util, "get_objects",
"VirtualMachine", ["name"])
for vm in vms:
if vm.propSet[0].val == instance_uuid:
return vm.obj


def get_vm_ref(session, instance):
"""Get reference to the VM through uuid or vm name."""
vm_ref = get_vm_ref_from_uuid(session, instance['uuid'])
if not vm_ref:
vm_ref = get_vm_ref_from_name(session, instance['name'])
if vm_ref is None:
raise exception.InstanceNotFound(instance_id=instance['uuid'])
return vm_ref


def get_cluster_ref_from_name(session, cluster_name):
"""Get reference to the cluster with the name specified."""
cls = session._call_method(vim_util, "get_objects",
Expand Down

0 comments on commit 0b45996

Please sign in to comment.