summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChiradeep Vittal <chiradeep@chiradeep-lt2>2010-10-08 17:58:53 -0700
committerChiradeep Vittal <chiradeep@chiradeep-lt2>2010-10-08 17:58:53 -0700
commit6669b46ca91f462c96b033c6e04618c06fecb31f (patch)
treeb86281c8f067838bb090cd91a5469d72d8b21003
parent85c890e91f493f254801edd5e5aed115d8d9c4a6 (diff)
curl not available on Windows for s3 download. also os-agnostic local copy
-rw-r--r--nova/virt/images.py36
1 files changed, 27 insertions, 9 deletions
diff --git a/nova/virt/images.py b/nova/virt/images.py
index dc50764d9..90071107b 100644
--- a/nova/virt/images.py
+++ b/nova/virt/images.py
@@ -24,13 +24,15 @@ Handling of VM disk images.
import os.path
import time
import urlparse
+import shutil
from nova import flags
-from nova import process
from nova.auth import manager
from nova.auth import signer
-from nova.objectstore import image
+import logging
+import urllib2
+import os
FLAGS = flags.FLAGS
flags.DEFINE_bool('use_s3', True,
@@ -47,6 +49,7 @@ def fetch(image, path, user, project):
def _fetch_s3_image(image, path, user, project):
url = image_url(image)
+ logging.debug("About to retrieve %s and place it in %s", url, path)
# This should probably move somewhere else, like e.g. a download_as
# method on User objects and at the same time get rewritten to use
@@ -61,17 +64,32 @@ def _fetch_s3_image(image, path, user, project):
url_path)
headers['Authorization'] = 'AWS %s:%s' % (access, signature)
- cmd = ['/usr/bin/curl', '--fail', '--silent', url]
- for (k,v) in headers.iteritems():
- cmd += ['-H', '%s: %s' % (k,v)]
+ def urlretrieve(urlfile, fpath):
+ chunk = 1*1024*1024
+ f = open(fpath, "wb")
+ while 1:
+ data = urlfile.read(chunk)
+ if not data:
+ break
+ f.write(data)
- cmd += ['-o', path]
- return process.SharedPool().execute(executable=cmd[0], args=cmd[1:])
+ request = urllib2.Request(url)
+ for (k, v) in headers.iteritems():
+ request.add_header(k, v)
+
+ urlopened = urllib2.urlopen(request)
+
+ urlretrieve(urlopened, path)
+
+ logging.debug("Finished retreving %s -- placed in %s", url, path)
+
+ return
def _fetch_local_image(image, path, user, project):
- source = _image_path('%s/image' % image)
- return process.simple_execute('cp %s %s' % (source, path))
+ source = _image_path(os.path.join(image,'image'))
+ logging.debug("About to copy %s to %s", source, path)
+ return shutil.copy(source, path)
def _image_path(path):