+ def create(name, vref = None):
+ logger.verbose('Sliver_VS:create - name=%s'%name)
+ if vref is None:
+ logger.log("creating %s : no vref attached, this is unexpected"%name)
+ vref='default'
+ # used to look in /etc/planetlab/family, now relies on the 'family' 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):
+ # find a resonable default
+ if os.path.isfile ("/etc/planetlab/slicefamily"):
+ default=file("/etc/planetlab/slicefamily").read().strip()
+ else:
+ default='default'
+ logger.log("creating %s : /etc/planetlab/slicefamily not found, this is unexpected"%name)
+ logger.log("creating %s - vref %s not found, using default %s"%(name,vref,default))
+ vref=default
+
+ # guess arch
+ try:
+ (x,y,arch)=vref.split('-')
+ except:
+ arch='i386'
+
+ def personality (arch):
+ personality="linux32"
+ if arch.find("64")>=0:
+ personality="linux64"
+ return personality
+
+ logger.log_call('/usr/sbin/vuseradd', '-t', vref, name)
+ # 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))
+ logger.log('%s: set personality to %s'%(name,personality(arch)))