summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCory Wright <cory.wright@rackspace.com>2011-04-18 10:40:19 -0400
committerCory Wright <cory.wright@rackspace.com>2011-04-18 10:40:19 -0400
commita626c746f41e670a403d009f4f48a2bc73b65d2e (patch)
tree82ebd02db2a9dc75d1f8a27b437889d7c8409fc0
parente315007edc7cbcb287ab928139f059053cc1a165 (diff)
parent03840792687b915d9ffdced12f415b3d093b40b2 (diff)
downloadnova-a626c746f41e670a403d009f4f48a2bc73b65d2e.tar.gz
nova-a626c746f41e670a403d009f4f48a2bc73b65d2e.tar.xz
nova-a626c746f41e670a403d009f4f48a2bc73b65d2e.zip
merge trunk
-rw-r--r--nova/api/openstack/auth.py20
-rw-r--r--nova/compute/manager.py9
-rw-r--r--nova/version.py2
-rw-r--r--nova/virt/libvirt_conn.py23
-rw-r--r--nova/wsgi.py5
5 files changed, 43 insertions, 16 deletions
diff --git a/nova/api/openstack/auth.py b/nova/api/openstack/auth.py
index f3a9bdeca..311e6bde9 100644
--- a/nova/api/openstack/auth.py
+++ b/nova/api/openstack/auth.py
@@ -55,6 +55,9 @@ class AuthMiddleware(wsgi.Middleware):
user = self.get_user_by_authentication(req)
accounts = self.auth.get_projects(user=user)
if not user:
+ token = req.headers["X-Auth-Token"]
+ msg = _("%(user)s could not be found with token '%(token)s'")
+ LOG.warn(msg % locals())
return faults.Fault(webob.exc.HTTPUnauthorized())
if accounts:
@@ -66,6 +69,8 @@ class AuthMiddleware(wsgi.Middleware):
if not self.auth.is_admin(user) and \
not self.auth.is_project_member(user, account):
+ msg = _("%(user)s must be an admin or a member of %(account)s")
+ LOG.warn(msg % locals())
return faults.Fault(webob.exc.HTTPUnauthorized())
req.environ['nova.context'] = context.RequestContext(user, account)
@@ -82,12 +87,16 @@ class AuthMiddleware(wsgi.Middleware):
# honor it
path_info = req.path_info
if len(path_info) > 1:
- return faults.Fault(webob.exc.HTTPUnauthorized())
+ msg = _("Authentication requests must be made against a version "
+ "root (e.g. /v1.0 or /v1.1).")
+ LOG.warn(msg)
+ return faults.Fault(webob.exc.HTTPUnauthorized(explanation=msg))
try:
username = req.headers['X-Auth-User']
key = req.headers['X-Auth-Key']
- except KeyError:
+ except KeyError as ex:
+ LOG.warn(_("Could not find %s in request.") % ex)
return faults.Fault(webob.exc.HTTPUnauthorized())
token, user = self._authorize_user(username, key, req)
@@ -100,6 +109,7 @@ class AuthMiddleware(wsgi.Middleware):
res.headers['X-CDN-Management-Url'] = token.cdn_management_url
res.content_type = 'text/plain'
res.status = '204'
+ LOG.debug(_("Successfully authenticated '%s'") % username)
return res
else:
return faults.Fault(webob.exc.HTTPUnauthorized())
@@ -139,6 +149,7 @@ class AuthMiddleware(wsgi.Middleware):
try:
user = self.auth.get_user_from_access_key(key)
except exception.NotFound:
+ LOG.warn(_("User not found with provided API key."))
user = None
if user and user.name == username:
@@ -153,4 +164,9 @@ class AuthMiddleware(wsgi.Middleware):
token_dict['user_id'] = user.id
token = self.db.auth_token_create(ctxt, token_dict)
return token, user
+ elif user and user.name != username:
+ msg = _("Provided API key is valid, but not for user "
+ "'%(username)s'") % locals()
+ LOG.warn(msg)
+
return None, None
diff --git a/nova/compute/manager.py b/nova/compute/manager.py
index 68b163355..39d7af9c1 100644
--- a/nova/compute/manager.py
+++ b/nova/compute/manager.py
@@ -1111,6 +1111,9 @@ class ComputeManager(manager.SchedulerDependentManager):
# Are there VMs not in the DB?
for vm_not_found_in_db in vms_not_found_in_db:
name = vm_not_found_in_db
- # TODO(justinsb): What to do here? Adopt it? Shut it down?
- LOG.warning(_("Found VM not in DB: '%(name)s'. Ignoring")
- % locals())
+
+ # We only care about instances that compute *should* know about
+ if name.startswith("instance-"):
+ # TODO(justinsb): What to do here? Adopt it? Shut it down?
+ LOG.warning(_("Found VM not in DB: '%(name)s'. Ignoring")
+ % locals())
diff --git a/nova/version.py b/nova/version.py
index c3ecc2245..c43d12cf8 100644
--- a/nova/version.py
+++ b/nova/version.py
@@ -21,7 +21,7 @@ except ImportError:
'revision_id': 'LOCALREVISION',
'revno': 0}
-NOVA_VERSION = ['2011', '2']
+NOVA_VERSION = ['2011', '3']
YEAR, COUNT = NOVA_VERSION
FINAL = False # This becomes true at Release Candidate time
diff --git a/nova/virt/libvirt_conn.py b/nova/virt/libvirt_conn.py
index 94410003e..5da091920 100644
--- a/nova/virt/libvirt_conn.py
+++ b/nova/virt/libvirt_conn.py
@@ -58,7 +58,6 @@ from nova import db
from nova import exception
from nova import flags
from nova import log as logging
-#from nova import test
from nova import utils
from nova import vnc
from nova.auth import manager
@@ -211,7 +210,6 @@ class LibvirtConnection(driver.ComputeDriver):
self.libvirt_uri = self.get_uri()
self.libvirt_xml = open(FLAGS.libvirt_xml_template).read()
- self.interfaces_xml = open(FLAGS.injected_network_template).read()
self.cpuinfo_xml = open(FLAGS.cpuinfo_xml_template).read()
self._wrapped_conn = None
self.read_only = read_only
@@ -472,8 +470,8 @@ class LibvirtConnection(driver.ComputeDriver):
metadata = {'disk_format': base['disk_format'],
'container_format': base['container_format'],
'is_public': False,
+ 'name': '%s.%s' % (base['name'], image_id),
'properties': {'architecture': base['architecture'],
- 'name': '%s.%s' % (base['name'], image_id),
'kernel_id': instance['kernel_id'],
'image_location': 'snapshot',
'image_state': 'available',
@@ -500,12 +498,17 @@ class LibvirtConnection(driver.ComputeDriver):
# Export the snapshot to a raw image
temp_dir = tempfile.mkdtemp()
out_path = os.path.join(temp_dir, snapshot_name)
- qemu_img_cmd = '%s convert -f qcow2 -O raw -s %s %s %s' % (
- FLAGS.qemu_img,
- snapshot_name,
- disk_path,
- out_path)
- utils.execute(qemu_img_cmd)
+ qemu_img_cmd = (FLAGS.qemu_img,
+ 'convert',
+ '-f',
+ 'qcow2',
+ '-O',
+ 'raw',
+ '-s',
+ snapshot_name,
+ disk_path,
+ out_path)
+ utils.execute(*qemu_img_cmd)
# Upload that image to the image service
with open(out_path) as image_file:
@@ -606,7 +609,7 @@ class LibvirtConnection(driver.ComputeDriver):
# for xenapi(tr3buchet)
@exception.wrap_exception
def spawn(self, instance, network_info=None):
- xml = self.to_xml(instance, network_info)
+ xml = self.to_xml(instance, False, network_info)
db.instance_set_state(context.get_admin_context(),
instance['id'],
power_state.NOSTATE,
diff --git a/nova/wsgi.py b/nova/wsgi.py
index 72758e50e..de2e0749f 100644
--- a/nova/wsgi.py
+++ b/nova/wsgi.py
@@ -43,6 +43,7 @@ from nova import utils
FLAGS = flags.FLAGS
+LOG = logging.getLogger('nova.wsgi')
class WritableLogger(object):
@@ -346,6 +347,7 @@ class Controller(object):
arg_dict = req.environ['wsgiorg.routing_args'][1]
action = arg_dict['action']
method = getattr(self, action)
+ LOG.debug("%s %s" % (req.method, req.url))
del arg_dict['controller']
del arg_dict['action']
if 'format' in arg_dict:
@@ -361,6 +363,9 @@ class Controller(object):
response = webob.Response()
response.headers["Content-Type"] = content_type
response.body = body
+ msg_dict = dict(url=req.url, status=response.status_int)
+ msg = _("%(url)s returned with HTTP %(status)d") % msg_dict
+ LOG.debug(msg)
return response
else:
return result