summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohannes Erdfelt <johannes.erdfelt@rackspace.com>2011-09-18 18:34:09 +0000
committerTarmac <>2011-09-18 18:34:09 +0000
commit9741f5ad231e1e759955ad6952af148227300cd7 (patch)
treea7f6ffb3208958002fcbadad3214115d02f65e14
parent7f80909f4818a5a8d9b61816a3ce23792cdba8a0 (diff)
parentf30d986eb28821d68447aa0fe40956d7b84c023b (diff)
Some Linux systems can also be slow to start the guest agent. This branch extends the windows agent timeout to apply to all systems.
-rw-r--r--nova/virt/xenapi/vmops.py64
1 files changed, 31 insertions, 33 deletions
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index 6b56d668e..8f7eb3795 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -48,9 +48,9 @@ XenAPI = None
LOG = logging.getLogger("nova.virt.xenapi.vmops")
FLAGS = flags.FLAGS
-flags.DEFINE_integer('windows_version_timeout', 300,
- 'number of seconds to wait for windows agent to be '
- 'fully operational')
+flags.DEFINE_integer('agent_version_timeout', 300,
+ 'number of seconds to wait for agent to be fully '
+ 'operational')
flags.DEFINE_string('xenapi_vif_driver',
'nova.virt.xenapi.vif.XenAPIBridgeDriver',
'The XenAPI VIF driver using XenServer Network APIs.')
@@ -322,15 +322,8 @@ class VMOps(object):
def _check_agent_version():
LOG.debug(_("Querying agent version"))
- if instance.os_type == 'windows':
- # Windows will generally perform a setup process on first boot
- # that can take a couple of minutes and then reboot. So we
- # need to be more patient than normal as well as watch for
- # domid changes
- version = self.get_agent_version(instance,
- timeout=FLAGS.windows_version_timeout)
- else:
- version = self.get_agent_version(instance)
+
+ version = self.get_agent_version(instance)
if not version:
return
@@ -637,9 +630,15 @@ class VMOps(object):
self._session.wait_for_task(task, instance.id)
- def get_agent_version(self, instance, timeout=None):
+ def get_agent_version(self, instance):
"""Get the version of the agent running on the VM instance."""
+ # The agent can be slow to start for a variety of reasons. On Windows,
+ # it will generally perform a setup process on first boot that can
+ # take a couple of minutes and then reboot. On Linux, the system can
+ # also take a while to boot. So we need to be more patient than
+ # normal as well as watch for domid changes
+
def _call():
# Send the encrypted password
transaction_id = str(uuid.uuid4())
@@ -653,27 +652,26 @@ class VMOps(object):
# (ie CRLF escaped) for some reason. Strip that off.
return resp['message'].replace('\\r\\n', '')
- if timeout:
- vm_ref = self._get_vm_opaque_ref(instance)
- vm_rec = self._session.get_xenapi().VM.get_record(vm_ref)
+ vm_ref = self._get_vm_opaque_ref(instance)
+ vm_rec = self._session.get_xenapi().VM.get_record(vm_ref)
- domid = vm_rec['domid']
-
- expiration = time.time() + timeout
- while time.time() < expiration:
- ret = _call()
- if ret:
- return ret
-
- vm_rec = self._session.get_xenapi().VM.get_record(vm_ref)
- if vm_rec['domid'] != domid:
- LOG.info(_('domid changed from %(olddomid)s to '
- '%(newdomid)s') % {
- 'olddomid': domid,
- 'newdomid': vm_rec['domid']})
- domid = vm_rec['domid']
- else:
- return _call()
+ domid = vm_rec['domid']
+
+ expiration = time.time() + FLAGS.agent_version_timeout
+ while time.time() < expiration:
+ ret = _call()
+ if ret:
+ return ret
+
+ vm_rec = self._session.get_xenapi().VM.get_record(vm_ref)
+ if vm_rec['domid'] != domid:
+ LOG.info(_('domid changed from %(olddomid)s to '
+ '%(newdomid)s') % {
+ 'olddomid': domid,
+ 'newdomid': vm_rec['domid']})
+ domid = vm_rec['domid']
+
+ return None
def agent_update(self, instance, url, md5sum):
"""Update agent on the VM instance."""