summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/context.py5
-rw-r--r--nova/virt/xenapi/vmops.py18
2 files changed, 21 insertions, 2 deletions
diff --git a/nova/context.py b/nova/context.py
index b0c0603a8..d9735e3d2 100644
--- a/nova/context.py
+++ b/nova/context.py
@@ -51,6 +51,8 @@ class RequestContext(object):
self.is_admin = is_admin
if self.is_admin is None:
self.is_admin = 'admin' in [x.lower() for x in self.roles]
+ elif self.is_admin and 'admin' not in self.roles:
+ self.roles.append('admin')
self.read_deleted = read_deleted
self.remote_address = remote_address
if not timestamp:
@@ -87,6 +89,9 @@ class RequestContext(object):
context = copy.copy(self)
context.is_admin = True
+ if 'admin' not in context.roles:
+ context.roles.append('admin')
+
if read_deleted is not None:
context.read_deleted = read_deleted
diff --git a/nova/virt/xenapi/vmops.py b/nova/virt/xenapi/vmops.py
index b9461eba8..f781a39a7 100644
--- a/nova/virt/xenapi/vmops.py
+++ b/nova/virt/xenapi/vmops.py
@@ -1372,8 +1372,22 @@ class VMOps(object):
"older than %(confirm_window)d seconds") % migrations_info)
for migration in migrations:
- LOG.info(_("Automatically confirming migration %d"), migration.id)
- self.compute_api.confirm_resize(ctxt, migration.instance_uuid)
+ LOG.info(_("Automatically confirming migration %d"),
+ migration['id'])
+ try:
+ instance = self.compute_api.get(ctxt, migration.instance_uuid)
+ except exception.InstanceNotFound:
+ LOG.warn(_("Instance for migration %d not found, skipping"),
+ migration.id)
+
+ # NOTE(sirp): setting to error so we don't keep trying to auto
+ # confirm this resize
+ db.migration_update(
+ ctxt, migration['id'], {'status': 'error'})
+
+ continue
+ else:
+ self.compute_api.confirm_resize(ctxt, instance)
def get_info(self, instance):
"""Return data about VM instance."""