overall=True
slice_method = TestSliceSfa.__dict__[method.__name__]
for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
- site_spec = self.locate_site (slice_spec['sitename'])
- test_site = TestSite(self,site_spec)
- test_slice=TestSliceSfa(self,test_site,slice_spec)
+ test_slice=TestSliceSfa(self,slice_spec)
if not slice_method(test_slice,self.options): overall=False
return overall
# restore the doc text
'nodestate_reinstall', 'qemu_local_init','bootcd', 'qemu_local_config', SEP,
'qemu_export', 'qemu_kill_mine', 'qemu_start', 'timestamp_qemu', SEP,
'sfa_install_all', 'sfa_configure', 'cross_sfa_configure', 'sfa_start', 'sfa_import', SEPSFA,
- 'sfi_configure@1', 'sfa_add_user@1', 'sfa_add_slice@1', 'sfa_discover@1', SEPSFA,
+ 'sfi_configure@1', 'sfa_add_site@1','sfa_add_pi@1', SEPSFA,
+ 'sfa_add_user@1', 'sfa_add_slice@1', 'sfa_discover@1', SEPSFA,
'sfa_create_slice@1', 'sfa_check_slice_plc@1', SEPSFA,
'sfa_update_user@1', 'sfa_update_slice@1', 'sfa_view@1', 'sfa_utest@1',SEPSFA,
# we used to run plcsh_stress_test, and then ssh_node_debug and ssh_node_boot
def sfa_dbclean(self):
"thoroughly wipes off the SFA database"
- self.run_in_guest("sfa-nuke.py")==0 or \
- self.run_in_guest("sfa-nuke-plc.py") or \
- self.run_in_guest("sfaadmin.py registry nuke")
- return True
+ return self.run_in_guest("sfaadmin.py registry nuke")==0 or \
+ self.run_in_guest("sfa-nuke.py")==0 or \
+ self.run_in_guest("sfa-nuke-plc.py")==0
def sfa_plcclean(self):
"cleans the PLC entries that were created as a side effect of running the script"
sfa_spec=self.plc_spec['sfa']
for sfa_slice_spec in sfa_spec['sfa_slice_specs']:
- slicename='%s_%s'%(sfa_slice_spec['login_base'],sfa_slice_spec['slicename'])
- try: self.apiserver.DeleteSlice(self.auth_root(),slicename)
- except: print "Slice %s already absent from PLC db"%slicename
+ login_base=sfa_slice_spec['login_base']
+ try: self.apiserver.DeleteSite (self.auth.root(),login_base)
+ except: print "Site %s already absent from PLC db"%login_base
- username="%s@%s"%(sfa_slice_spec['regularuser'],sfa_slice_spec['domain'])
- try: self.apiserver.DeletePerson(self.auth_root(),username)
- except: print "User %s already absent from PLC db"%username
+ for key in ['piuser','regularuser']:
+ username="%s@%s"%(sfa_slice_spec[key],sfa_slice_spec['domain'])
+ try: self.apiserver.DeletePerson(self.auth_root(),username)
+ except: print "User %s already absent from PLC db"%username
print "REMEMBER TO RUN sfa_import AGAIN"
return True
sfa_spec=self.plc_spec['sfa']
# cannot use sfa_slice_mapper to pass dir_name
for slice_spec in self.plc_spec['sfa']['sfa_slice_specs']:
- site_spec = self.locate_site (slice_spec['sitename'])
- test_site = TestSite(self,site_spec)
- test_slice=TestSliceSfa(self,test_site,slice_spec)
+ test_slice=TestSliceSfa(self,slice_spec)
dir_name=self.confsubdir("dot-sfi/%s"%slice_spec['slicename'],clean=True,dry_run=self.options.dry_run)
test_slice.sfi_config(dir_name)
# push into the remote /root/sfi area
self.run_in_guest("rm -rf /root/sfi")
return True
+ @slice_sfa_mapper
+ def sfa_add_site (self):
+ "bootstrap a site using sfaadmin"
+ pass
+
+ @slice_sfa_mapper
+ def sfa_add_pi (self):
+ "bootstrap a PI user for that site"
+ pass
+
@slice_sfa_mapper
def sfa_add_user(self):
"run sfi.py add"
class TestSliceSfa:
- def __init__ (self,test_plc,test_site,sfa_slice_spec):
+ def __init__ (self,test_plc,sfa_slice_spec):
self.test_plc=test_plc
- self.test_site=test_site
self.sfa_slice_spec=sfa_slice_spec
self.test_ssh=TestSsh(self.test_plc.test_ssh)
# shortcuts
plc_spec=self.test_plc.plc_spec
sfa_spec=self.sfa_spec
sfa_slice_spec=self.sfa_slice_spec
- # store private key for sfa pi user
- file_name=dir_name + os.sep + self.qualified_hrn (self.piuser) + '.pkey'
- fileconf=open(file_name,'w')
- fileconf.write (plc_spec['keys'][0]['private'])
- fileconf.close()
- utils.header ("(Over)wrote %s"%file_name)
- # store private key for sfa regular user
- file_name=dir_name + os.sep + self.qualified_hrn(self.regularuser) + '.pkey'
- fileconf=open(file_name,'w')
- fileconf.write (plc_spec['keys'][1]['private'])
- fileconf.close()
- utils.header ("(Over)wrote %s"%file_name)
+ keys=plc_spec['keys']
+ for (contents,name) in [ (keys[0]['private'], self.piuser+'.pkey'),
+ (keys[0]['key_fields']['key'], self.piuser+'.pub'),
+ (keys[1]['private'], self.regularuser+'.pkey'),
+ (keys[0]['key_fields']['key'], self.regularuser+'.pub'),
+ ]:
+ file_name=os.path.join(dir_name,self.qualified_hrn(name))
+ fileconf=open(file_name,'w')
+ fileconf.write (contents)
+ fileconf.close()
+ utils.header ("(Over)wrote %s"%file_name)
#
file_name=dir_name + os.sep + self.addpersonfile()
fileconf=open(file_name,'w')
utils.header ("(Over)wrote %s"%file_name)
fileconf.close()
+ # using sfaadmin to bootstrap
+ def sfa_add_site (self, options):
+ command="sfaadmin reg register -t authority -x %s"%self.site_hrn()
+ return self.test_plc.run_in_guest(command)==0
+
+ def sfa_add_pi (self, options):
+ pi_hrn=self.qualified_hrn(self.piuser)
+ pi_mail=self.sfa_slice_spec['pimail']
+ # as installed by sfi_config
+ pi_key=os.path.join(self.sfi_path(),self.qualified_hrn(self.piuser+'.pub'))
+ command="sfaadmin reg register -t user -x %s --email %s --key %s"%(pi_hrn,pi_mail,pi_key)
+ if self.test_plc.run_in_guest(command)!=0: return False
+ command="sfaadmin reg update -t authority -x %s --pi %s"%(self.site_hrn(),pi_hrn)
+ return self.test_plc.run_in_guest(command)==0
+
# user management
def sfa_add_user (self, options):
return TestUserSfa(self.test_plc, self.sfa_slice_spec, self).add_user()
# index=3=>'sitea' 4=>'siteb'
else: return 'site%s'%chr(index+94)
+def sfa_login_base (index, rspec_style):
+ return "sfasite%s"%(rspec_style)
+
def sfa_root (index):
# use plt (planetlab test) instead of pl
# otherwise a triangular test ends up with 'plc'
-----END RSA PRIVATE KEY-----
"""
+### for a PI
+public_key3="""ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA9LrXvUvGZK092R+0+xNZAOUrywDmfdtOL2XqtO26PCjns2GmxLmphJkvBBtXCt4d8s9jdPILHKnTC0/8/WfrwhZ68AWHay1qnCnWjgMUFEg2J4+MsT0UpirQ7wQbA3KeuAVobRaMIdfgPwlgnmBu2VyPiS4eD4KDz2CgL2DIWzq+DzrakOSqS6eb5MMNS7rIDlxH0WV9bTueweoeWi77zpEtA4sA4EFRKZ21uNyceQ/ob8mKC1yAz2XGIKoLgaxRvd+d8Mmq52OLzbCPtDCnCAtWW2PJt8hEjR+RKwYhf0NcpMXhA5GsYAXUFmHUI0j0f/8qodWuIorE/5zr4EVVkQ== pi@test.onelab.eu
+"""
+
+private_key3="""
+-----BEGIN RSA PRIVATE KEY-----
+MIIEoQIBAAKCAQEA9LrXvUvGZK092R+0+xNZAOUrywDmfdtOL2XqtO26PCjns2Gm
+xLmphJkvBBtXCt4d8s9jdPILHKnTC0/8/WfrwhZ68AWHay1qnCnWjgMUFEg2J4+M
+sT0UpirQ7wQbA3KeuAVobRaMIdfgPwlgnmBu2VyPiS4eD4KDz2CgL2DIWzq+Dzra
+kOSqS6eb5MMNS7rIDlxH0WV9bTueweoeWi77zpEtA4sA4EFRKZ21uNyceQ/ob8mK
+C1yAz2XGIKoLgaxRvd+d8Mmq52OLzbCPtDCnCAtWW2PJt8hEjR+RKwYhf0NcpMXh
+A5GsYAXUFmHUI0j0f/8qodWuIorE/5zr4EVVkQIBIwKCAQAN/AxT9bOQuXE/m2lt
+btHiy0RUvjkOgY9wbDlMKtdxJuirKibJabHqUeVt8u8H729s9ehtFSU01oEWlttB
+riq6ojLpJOMqsiNZYXn5fITN9X9v+ZMC0EpSo1xlbfLqQRBiSXOudlEmgV1FbkAJ
+DNMiXQ+ELoVf+NRU/jUKBYfKssmuwptMuBUvAksTF/bq1P6vaYP2GluEAKSvZjhb
+jc78LMxd1G+rmVX7wmV1dzgscB+d5kvb4lO7gZdJQlGwDxIvGKfAU9oNoIHXt+x4
+TJrNq5+w3DD7VXZx/O2K382HJKmgxZsfHatBZDiEDPnwHYM5BEGa6EJpuKilpHUa
+CSkLAoGBAPvjOw6vSTdJPS11KRV3H+2PDxfqRRiHheZ1fXeL7SUQHaSLwJhCgB9Q
+gTGy6xbGvDLz557ninkh6I4EOaZBZBI3DIFxG/ZZcmEdMIrf4kpFF4yXW/ujjdHk
+uqUX09FBRBPodvZRuHNLXg6g/0uWd7sIuUx/GMQjo37v6W54TuXpAoGBAPi5si4j
+BgBLwkyhdpbHC3GBlqqUUyNfqnZO78yMEDCBY5ANxMZixdEjUpR+Sy6oqYwwo7ub
+2U5cIWCaZ8+3QIFOo6TZ8kyfeEpxbVqbEcezuF8s+nTl4tndmq8U5cOA/bA+zNAR
+UgQcTehuf3KizMERe2IL3F/Ex7689XwgViFpAoGAelhtJGPEefBfixumPaBCtTbb
+cgQS7qg5uRR+xQlzL0JXim/D8i7txhEozv8hupsK9C1TPo24SXbeq2EjUMCs8ueJ
+uzbwUxWAstOp3Q2obTeAd3y3phw9kdV/Oj7F9+yAJu1BGI4Xwvi4qAUOSUkVlVwC
+OxkpSVMjhsxMz0G/7AMCgYAcbP5rrDszO9uw/IKU44xHfIY/YWiWVBN7PDipqZtz
+QfzAAZLU2BabjwIfmWetj55ZKiFXRQLkYkz1GPXr2m3FopZb+6apq9M7tTERq1J9
+ORxipg3+uy/eYngUAmNmzOnK/9zklEPjNm9Nw3xHnZO+SyQLNI421KkdHOja/GGd
+awKBgQCLtk0+RpswH451PWyAJ6F+U4YDVaHR0s6pwp4TJAkDVlFBiRO28jEb5y0N
+bI1R7vrRdq07SgI3USLXqDokQ/pXJhC03w2r7W7niAkNaUll3YtJ2DZVSvuQguR9
+xwRNsuo0x60e7bivU+kNZtLn5FqWuGoBONZnbhgP6y7jPsNrig==
+-----END RSA PRIVATE KEY-----
+"""
+
def keys (options,index):
return [ {'name': 'key1',
'private' : private_key,
'private' : private_key2,
'key_fields' : {'key_type':'ssh',
'key': public_key2}}
-
]
############################## initscripts
for rspec_style in options.rspec_styles ]
}
-# subindex is 0 (pl slice) or 1 (pg slice)
+# rspecstyle is 'pl' for sfav1 or 'pg' for pgv2
def sfa_slice_spec (options,index,rspec_style):
- the_login_base=login_base(index)
- piuser='fake-pi%d'%index
+ the_login_base=sfa_login_base(index,rspec_style)
+ piuser='sfapi%d%s'%(index,rspec_style)
+ pimail=piuser+'@test.onelab.eu'
regularuser='sfauser%d%s'%(index,rspec_style)
slicename='slsfa%d%s'%(index,rspec_style)
prefix='%s.%s'%(sfa_root(index),the_login_base)
},
'login_base' : the_login_base,
'piuser' : piuser,
+ 'pimail' : pimail,
'regularuser':regularuser,
'domain':domain,
'usernames' : [ (regularuser,'key2') ],
"re-run a complete sfa cycle from a nightly test"
sequences['sfa'] = [
'sfa_restart',
+ 'sfa_add_site',
+ 'sfa_add_pi',
'sfa_add_user',
'sfa_add_slice',
'sfa_discover',