- ### locating the right slicefamily
- # this is a first draft, and more a proof of concept thing
- # the idea is to parse vref for dash-separated wishes,
- # and to project these against the defaults
- # however for cases like when vref is 'planetflow', if we do not understand
- # any of the wishes we take vref as is
- # this could be improved by having the vserver-reference init script be a bit smarter
- # so we could take planetflow as the pldistro part here
- as_is=None
- # defaults
- default=file("/etc/planetlab/defaultvref").read()
- (pldistro,fcdistro,arch) = default.split("-")
- # from the slice attribute: cut dashes and try to figure the meaning
- slice_wishes = vref.split("-")
- for wish in slice_wishes:
- if wish == "i386" or wish == "x86_64":
- arch=wish
- elif wish == "planetlab" or wish == "onelab" or wish == "vini":
- pldistro=wish
- elif wish == "f8" or wish == "centos5" :
- fcdistro=wish
- else:
- # if we find something like e.g. planetflow, use it as-is
- as_is=vref
- break
- if as_is:
- refname=as_is
- else:
- refname="-".join( (pldistro,fcdistro,arch) )
- # check the templates exists -- there's probably a better way..
- if not os.path.isdir ("/vservers/.vref/%s"%refname):
- log.verbose("%s (%s) : vref %s not found, using default %s"%(
- name,vref,refname,default))
- refname=default
- except IOError:
- # have not found defaultvref
- logger.verbose("%s (%s): using fallback vrefname 'default'"%(name,vref))
- # for legacy nodes
- refname="default"
- except:
- import traceback
- logger.log("%s (%s) : unexpected error follows - using 'default'"%(
- name,vref))
- logger.log(traceback.format_exc())
-
- logger.log_call('/usr/sbin/vuseradd', '-t', refname, name)
- open('/vservers/%s/etc/slicename' % name, 'w').write(name)
+ (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):
+ personality="linux32"
+ if arch.find("64")>=0:
+ personality="linux64"
+ return personality
+
+ 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)))