from invirt import database
import os
+import sys
import subprocess
import random
import string
"""
full_uri = os.path.join(cdrom.mirror.uri_prefix, cdrom.uri_suffix)
temp_file = tempfile.mkstemp()[1]
+ if verbosity > 0:
+ print >>sys.stderr, "Fetching image %s from %s to %s" % (cdrom.cdrom_id, full_uri, temp_file)
try:
if full_uri.startswith('rsync://'):
if subprocess.call(['rsync', '--no-motd', '-tLP', full_uri, temp_file],
"""
if cdrom.mirror_id is None:
return
- temp_file = fetch_image(cdrom)
try:
- cdrom_size = '%sM' % math.ceil((float(os.stat(temp_file).st_size) / (1024 * 1024)))
+ temp_file = fetch_image(cdrom)
+ except InvirtImageException, e:
+ print >>sys.stderr, 'ERROR: %s. Skipping.' % e
+ return
+
+ try:
+ st_size = os.stat(temp_file).st_size
+ if not st_size:
+ print >>sys.stderr, "Failed to fetch %s" % cdrom.cdrom_id
+ return
+ cdrom_size = '%sM' % math.ceil((float(st_size) / (1024 * 1024)))
new_lv = lvcreate_random('image-new_%s_%%s' % cdrom.cdrom_id, cdrom_size)
copy_file(temp_file, '/dev/xenvg/%s' % new_lv)
lvrename_random('image_%s' % cdrom.cdrom_id, 'image-old_%s_%%s' % cdrom.cdrom_id)
global verbosity
database.connect()
-
+ database.session.begin()
+
usage = """%prog [options] --add [--cdrom] cdrom_id description mirror_id uri_suffix
%prog [options] --add --mirror mirror_id uri_prefix
attrs = dict(zip(('cdrom_id', 'description', 'mirror_id', 'uri_suffix'),
args))
cdrom = database.CDROM(**attrs)
- database.session.save(cdrom)
- database.session.flush()
+ database.session.add(cdrom)
+ database.session.commit()
load_image(cdrom)
attrs = dict(zip(('mirror_id', 'uri_prefix'),
args))
mirror = database.Mirror(**attrs)
- database.session.save(mirror)
- database.session.flush()
+ database.session.add(mirror)
+ database.session.commit()
elif options.action == 'update':
if len(args) > 0:
images = [database.CDROM.query().get(arg) for arg in args]