+ def create(name, rec = None):
+ logger.verbose('sliver_vs: %s: create'%name)
+ vref = rec['vref']
+ if vref is None:
+ # added by caglar
+ # band-aid for short period as old API doesn't have GetSliceFamily function
+ vref = "planetlab-f8-i386"
+ logger.log("sliver_vs: %s: ERROR - no vref attached, using hard-wired default %s"%(name,vref))
+
+ # used to look in /etc/planetlab/family,
+ # now relies on the 'GetSliceFamily' extra attribute in GetSlivers()
+ # which for legacy is still exposed here as the 'vref' key
+
+ # check the template exists -- there's probably a better way..
+ if not os.path.isdir ("/vservers/.vref/%s"%vref):
+ logger.log ("sliver_vs: %s: ERROR Could not create sliver - vreference image %s not found"%(name,vref))
+ return
+
+ # compute guest personality
+ try:
+ (x,y,arch)=vref.split('-')
+ # mh, this of course applies when 'vref' is e.g. 'netflow'
+ # and that's not quite right
+ except:
+ arch='i386'
+
+ def personality (arch): return "linux64" if arch.find("64") >=0 else "linux32"
+
+ command=[]
+ # be verbose
+ command += ['/bin/bash','-x',]
+ command += ['/usr/sbin/vuseradd', ]
+ if 'attributes' in rec and 'isolate_loopback' in rec['attributes'] and rec['attributes']['isolate_loopback'] == '1':
+ command += [ "-i",]
+ # the vsliver imge to use
+ command += [ '-t', vref, ]
+ # slice name
+ command += [ name, ]
+ logger.log_call(command, timeout=15*60)
+ # export slicename to the slice in /etc/slicename
+ file('/vservers/%s/etc/slicename' % name, 'w').write(name)
+ file('/vservers/%s/etc/slicefamily' % name, 'w').write(vref)
+ # set personality: only if needed (if arch's differ)
+ if tools.root_context_arch() != arch:
+ file('/etc/vservers/%s/personality' % name, 'w').write(personality(arch)+"\n")
+ logger.log('sliver_vs: %s: set personality to %s'%(name,personality(arch)))