summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2010-08-05 12:34:22 -0700
committerVishvananda Ishaya <vishvananda@gmail.com>2010-08-05 12:34:22 -0700
commit98ea9c02f60dc6734707bfc3827e6fe82dfde127 (patch)
tree58e0940db156376d33a4275fba76eb6ce1dad021 /nova/virt
parentd79fd0df0bf9c59483b30c0d8c3a811580a1ee39 (diff)
parent85b73194c2f8432a7e9ab5d24574746f209846ee (diff)
merged trunk
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/images.py14
-rw-r--r--nova/virt/libvirt_conn.py12
2 files changed, 18 insertions, 8 deletions
diff --git a/nova/virt/images.py b/nova/virt/images.py
index 92210e242..872eb6d6a 100644
--- a/nova/virt/images.py
+++ b/nova/virt/images.py
@@ -27,6 +27,7 @@ import time
from nova import flags
from nova import process
from nova.auth import signer
+from nova.auth import manager
FLAGS = flags.FLAGS
@@ -34,14 +35,14 @@ flags.DEFINE_bool('use_s3', True,
'whether to get images from s3 or use local copy')
-def fetch(image, path, user):
+def fetch(image, path, user, project):
if FLAGS.use_s3:
f = _fetch_s3_image
else:
f = _fetch_local_image
- return f(image, path, user)
+ return f(image, path, user, project)
-def _fetch_s3_image(image, path, user):
+def _fetch_s3_image(image, path, user, project):
url = _image_url('%s/image' % image)
# This should probably move somewhere else, like e.g. a download_as
@@ -51,8 +52,11 @@ def _fetch_s3_image(image, path, user):
headers['Date'] = time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime())
uri = '/' + url.partition('/')[2]
- auth = signer.Signer(user.secret.encode()).s3_authorization(headers, 'GET', uri)
- headers['Authorization'] = 'AWS %s:%s' % (user.access, auth)
+ access = manager.AuthManager().get_access_key(user, project)
+ signature = signer.Signer(user.secret.encode()).s3_authorization(headers,
+ 'GET',
+ uri)
+ headers['Authorization'] = 'AWS %s:%s' % (access, signature)
cmd = ['/usr/bin/curl', '--silent', url]
for (k,v) in headers.iteritems():
diff --git a/nova/virt/libvirt_conn.py b/nova/virt/libvirt_conn.py
index 7b44d72b5..fd079f766 100644
--- a/nova/virt/libvirt_conn.py
+++ b/nova/virt/libvirt_conn.py
@@ -47,6 +47,10 @@ flags.DEFINE_string('libvirt_xml_template',
utils.abspath('compute/libvirt.xml.template'),
'Libvirt XML Template')
+flags.DEFINE_string('libvirt_type',
+ 'kvm',
+ 'Libvirt domain type (kvm, qemu, etc)')
+
def get_connection(read_only):
# These are loaded late so that there's no need to install these
# libraries when not using libvirt.
@@ -187,12 +191,13 @@ class LibvirtConnection(object):
f.close()
user = manager.AuthManager().get_user(data['user_id'])
+ project = manager.AuthManager().get_project(data['project_id'])
if not os.path.exists(basepath('disk')):
- yield images.fetch(data['image_id'], basepath('disk-raw'), user)
+ yield images.fetch(data['image_id'], basepath('disk-raw'), user, project)
if not os.path.exists(basepath('kernel')):
- yield images.fetch(data['kernel_id'], basepath('kernel'), user)
+ yield images.fetch(data['kernel_id'], basepath('kernel'), user, project)
if not os.path.exists(basepath('ramdisk')):
- yield images.fetch(data['ramdisk_id'], basepath('ramdisk'), user)
+ yield images.fetch(data['ramdisk_id'], basepath('ramdisk'), user, project)
execute = lambda cmd, input=None: \
process.simple_execute(cmd=cmd,
@@ -235,6 +240,7 @@ class LibvirtConnection(object):
# TODO(termie): lazy lazy hack because xml is annoying
xml_info['nova'] = json.dumps(instance.datamodel.copy())
+ xml_info['type'] = FLAGS.libvirt_type
libvirt_xml = libvirt_xml % xml_info
logging.debug("Finished the toXML method")