Merge "xenapi: ensure all calls to agent get logged"

This commit is contained in:
Jenkins 2012-08-13 15:03:11 +00:00 committed by Gerrit Code Review
commit 726bd9bb3f
2 changed files with 14 additions and 11 deletions

View File

@ -100,6 +100,8 @@ def _get_agent_version(session, instance, vm_ref):
def get_agent_version(session, instance, vm_ref):
"""Get the version of the agent running on the VM instance."""
LOG.debug(_('Querying agent version'), instance=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
@ -118,11 +120,14 @@ def get_agent_version(session, instance, vm_ref):
return None
def agent_update(session, instance, vm_ref, url, md5sum):
def agent_update(session, instance, vm_ref, agent_build):
"""Update agent on the VM instance."""
LOG.info(_('Updating agent to %s'), agent_build['version'],
instance=instance)
# Send the encrypted password
args = {'url': url, 'md5sum': md5sum}
args = {'url': agent_build['url'], 'md5sum': agent_build['md5hash']}
resp = _call_agent(session, instance, vm_ref, 'agentupdate', args)
if resp['returncode'] != '0':
LOG.error(_('Failed to update agent: %(resp)r'), locals(),
@ -140,6 +145,8 @@ def set_admin_password(session, instance, vm_ref, new_pass):
We're using a simple Diffie-Hellman class instead of a more advanced
library (such as M2Crypto) for compatibility with the agent code.
"""
LOG.debug(_('Setting admin password'), instance=instance)
dh = SimpleDH()
# Exchange keys
@ -175,6 +182,8 @@ def set_admin_password(session, instance, vm_ref, new_pass):
def inject_file(session, instance, vm_ref, path, contents):
LOG.debug(_('Injecting file path: %r'), path, instance=instance)
# Files/paths must be base64-encoded for transmission to agent
b64_path = base64.b64encode(path)
b64_contents = base64.b64encode(contents)
@ -193,6 +202,8 @@ def inject_file(session, instance, vm_ref, path, contents):
def resetnetwork(session, instance, vm_ref):
LOG.debug(_('Resetting network'), instance=instance)
resp = _call_agent(session, instance, vm_ref, 'resetnetwork')
if resp['returncode'] != '0':
LOG.error(_('Failed to reset network: %(resp)r'), locals(),

View File

@ -494,7 +494,6 @@ class VMOps(object):
# Update agent, if necessary
# This also waits until the agent starts
LOG.debug(_("Querying agent version"), instance=instance)
version = agent.get_agent_version(self._session, instance, vm_ref)
if version:
LOG.info(_('Instance agent version: %s'), version,
@ -502,10 +501,7 @@ class VMOps(object):
if (version and agent_build and
cmp_version(version, agent_build['version']) < 0):
LOG.info(_('Updating Agent to %s'), agent_build['version'],
instance=instance)
agent.agent_update(self._session, instance, vm_ref,
agent_build['url'], agent_build['md5hash'])
agent.agent_update(self._session, instance, vm_ref, agent_build)
# if the guest agent is not available, configure the
# instance, but skip the admin password configuration
@ -524,20 +520,16 @@ class VMOps(object):
injected_files = []
# Inject any files, if specified
for path, contents in instance['injected_files']:
LOG.debug(_("Injecting file path: '%s'") % path,
instance=instance)
agent.inject_file(self._session, instance, vm_ref,
path, contents)
admin_password = instance['admin_pass']
# Set admin password, if necessary
if admin_password and not no_agent:
LOG.debug(_("Setting admin password"), instance=instance)
agent.set_admin_password(self._session, instance, vm_ref,
admin_password)
# Reset network config
LOG.debug(_("Resetting network"), instance=instance)
agent.resetnetwork(self._session, instance, vm_ref)
# Set VCPU weight