From a84e484d1401d7c82373203b6964c54ab7166dea Mon Sep 17 00:00:00 2001 From: Sandy Walsh Date: Thu, 12 May 2011 20:05:41 -0700 Subject: added flag lost in migration --- nova/compute/manager.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'nova/compute') diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 556b3b3b9..a2dffb16e 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -77,7 +77,8 @@ flags.DEFINE_integer("rescue_timeout", 0, " Set to 0 to disable.") flags.DEFINE_bool('auto_assign_floating_ip', False, 'Autoassigning floating ip to VM') - +flags.DEFINE_integer('host_state_interval', 120, + 'Interval in seconds for querying the host status') LOG = logging.getLogger('nova.compute.manager') -- cgit From 31820248e8d886d37add963f0709f3658fd6087d Mon Sep 17 00:00:00 2001 From: Dan Prince Date: Fri, 13 May 2011 10:22:04 -0400 Subject: Update the compute manager so that it breaks out of a loop if set_admin_password is not implemented by the driver. --- nova/compute/manager.py | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'nova/compute') diff --git a/nova/compute/manager.py b/nova/compute/manager.py index 556b3b3b9..149147460 100644 --- a/nova/compute/manager.py +++ b/nova/compute/manager.py @@ -426,6 +426,12 @@ class ComputeManager(manager.SchedulerDependentManager): LOG.audit(_("Instance %s: Root password set"), instance_ref["name"]) break + except NotImplementedError: + # NOTE(dprince): if the driver doesn't implement + # set_admin_password we break to avoid a loop + LOG.warn(_('set_admin_password is not implemented ' + 'by this driver.')) + break except Exception, e: # Catch all here because this could be anything. LOG.exception(e) -- cgit From a8941345c97cccb9171e3d1e172f607dc8d17e6a Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Fri, 13 May 2011 09:47:08 -0500 Subject: Make set_admin_password non-blocking to API. --- nova/compute/api.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nova/compute') diff --git a/nova/compute/api.py b/nova/compute/api.py index 63884be97..1c28b6a89 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -484,7 +484,7 @@ class API(base.Base): def _find_host(self, context, instance_id): """Find the host associated with an instance.""" - for attempts in xrange(10): + for attempts in xrange(30): instance = self.get(context, instance_id) host = instance["host"] if host: -- cgit From b4357fef25a0f6a402979d15c1ecbf4abb8643a8 Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Fri, 13 May 2011 10:04:37 -0500 Subject: Make host timeout configurable. --- nova/compute/api.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'nova/compute') diff --git a/nova/compute/api.py b/nova/compute/api.py index 1c28b6a89..29347bb4c 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -42,6 +42,8 @@ LOG = logging.getLogger('nova.compute.api') FLAGS = flags.FLAGS flags.DECLARE('vncproxy_topic', 'nova.vnc') +flags.DEFINE_integer('find_host_timeout', 30, + 'Timeout after NN seconds when looking for a host.') def generate_default_hostname(instance_id): @@ -484,7 +486,7 @@ class API(base.Base): def _find_host(self, context, instance_id): """Find the host associated with an instance.""" - for attempts in xrange(30): + for attempts in xrange(FLAGS.find_host_timeout): instance = self.get(context, instance_id) host = instance["host"] if host: -- cgit From 60dcc66db2a08bd4acfe2f3fc3e66cc382e7d008 Mon Sep 17 00:00:00 2001 From: Josh Kearney Date: Fri, 13 May 2011 10:26:50 -0500 Subject: Review feedback. --- nova/compute/api.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'nova/compute') diff --git a/nova/compute/api.py b/nova/compute/api.py index 29347bb4c..a12f8d515 100644 --- a/nova/compute/api.py +++ b/nova/compute/api.py @@ -19,6 +19,7 @@ """Handles all requests relating to instances (guest vms).""" import datetime +import eventlet import re import time @@ -495,6 +496,15 @@ class API(base.Base): raise exception.Error(_("Unable to find host for Instance %s") % instance_id) + def _set_admin_password(self, context, instance_id, password): + """Set the root/admin password for the given instance.""" + host = self._find_host(context, instance_id) + + rpc.cast(context, + self.db.queue_get_for(context, FLAGS.compute_topic, host), + {"method": "set_admin_password", + "args": {"instance_id": instance_id, "new_pass": password}}) + def snapshot(self, context, instance_id, name): """Snapshot the given instance. @@ -648,12 +658,8 @@ class API(base.Base): def set_admin_password(self, context, instance_id, password=None): """Set the root/admin password for the given instance.""" - host = self._find_host(context, instance_id) - - rpc.cast(context, - self.db.queue_get_for(context, FLAGS.compute_topic, host), - {"method": "set_admin_password", - "args": {"instance_id": instance_id, "new_pass": password}}) + eventlet.spawn_n(self._set_admin_password(context, instance_id, + password)) def inject_file(self, context, instance_id): """Write a file to the given instance.""" -- cgit