From c5a9c7550299cde8d9c4a53f5959baa721ef7e53 Mon Sep 17 00:00:00 2001 From: Johannes Erdfelt Date: Thu, 3 May 2012 00:07:25 +0000 Subject: Ensure that the dom0 we're connected to is the right one The XenAPI driver requires the compute domU be running on the same host as specified by xenapi_connection_url. Check that we can find the compute domU on the host connected to before going too far. Change-Id: I2a56fa305b6379a7ea97f04240e627bb13223c9f --- nova/virt/xenapi/connection.py | 7 +++++++ nova/virt/xenapi/vm_utils.py | 14 ++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/nova/virt/xenapi/connection.py b/nova/virt/xenapi/connection.py index c02f3581d..5ba7a4d54 100644 --- a/nova/virt/xenapi/connection.py +++ b/nova/virt/xenapi/connection.py @@ -90,6 +90,10 @@ xenapi_opts = [ default=5.0, help='The interval used for polling of coalescing vhds. ' 'Used only if connection_type=xenapi.'), + cfg.BoolOpt('xenapi_check_host', + default=True, + help='Ensure compute service is running on host XenAPI ' + 'connects to.'), cfg.IntOpt('xenapi_vhd_coalesce_max_attempts', default=5, help='Max number of times to poll for VHD to coalesce. ' @@ -166,6 +170,9 @@ class XenAPIConnection(driver.ComputeDriver): return self._host_state def init_host(self, host): + if FLAGS.xenapi_check_host: + vm_utils.ensure_correct_host(self._session) + try: vm_utils.cleanup_attached_vdis(self._session) except Exception: diff --git a/nova/virt/xenapi/vm_utils.py b/nova/virt/xenapi/vm_utils.py index 540a144c8..83dc7180a 100644 --- a/nova/virt/xenapi/vm_utils.py +++ b/nova/virt/xenapi/vm_utils.py @@ -1819,3 +1819,17 @@ def _prepare_injectables(inst, networks_info): searchList=[{'interfaces': interfaces_info, 'use_ipv6': FLAGS.use_ipv6}])) return key, net, metadata + + +def ensure_correct_host(session): + """Ensure we're connected to the host we're running on. This is the + required configuration for anything that uses vdi_attached_here.""" + this_vm_uuid = get_this_vm_uuid() + + try: + session.call_xenapi('VM.get_by_uuid', this_vm_uuid) + except session.XenAPI.Failure as exc: + if exc.details[0] != 'UUID_INVALID': + raise + raise Exception(_('This domU must be running on the host ' + 'specified by xenapi_connection_url')) -- cgit