From 4e90ea2fbee46c85d78aad4bdf2e18c1b315f300 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 11 May 2012 20:22:19 +0200 Subject: [PATCH] first draft at a scenario where SFA stuff gets created independently from myplc, ussing sfaadmin to bootstrap the site & pi --- system/TestPlc.py | 41 ++++++++++++++++++++--------------- system/TestSliceSfa.py | 41 +++++++++++++++++++++++------------ system/config_default.py | 46 ++++++++++++++++++++++++++++++++++++---- system/macros.py | 2 ++ 4 files changed, 95 insertions(+), 35 deletions(-) diff --git a/system/TestPlc.py b/system/TestPlc.py index eb7a15e..739cd61 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -67,9 +67,7 @@ def slice_sfa_mapper (method): 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 @@ -90,7 +88,8 @@ class TestPlc: '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 @@ -1193,10 +1192,9 @@ class TestPlc: 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" @@ -1204,13 +1202,14 @@ class TestPlc: 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 @@ -1352,9 +1351,7 @@ class TestPlc: 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 @@ -1371,6 +1368,16 @@ class TestPlc: 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" diff --git a/system/TestSliceSfa.py b/system/TestSliceSfa.py index 30e60f6..67a42f0 100644 --- a/system/TestSliceSfa.py +++ b/system/TestSliceSfa.py @@ -14,9 +14,8 @@ from TestUserSfa import TestUserSfa 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 @@ -76,18 +75,17 @@ class TestSliceSfa: 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') @@ -120,6 +118,21 @@ class TestSliceSfa: 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() diff --git a/system/config_default.py b/system/config_default.py index 0938240..b62ef5c 100644 --- a/system/config_default.py +++ b/system/config_default.py @@ -19,6 +19,9 @@ def login_base (index): # 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' @@ -196,6 +199,40 @@ rUck4dxa0t30wUFK0XVQjNEArXqvU23EB8Z7bQQMRx0yhd4pF5k29Q== -----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, @@ -205,7 +242,6 @@ def keys (options,index): 'private' : private_key2, 'key_fields' : {'key_type':'ssh', 'key': public_key2}} - ] ############################## initscripts @@ -373,10 +409,11 @@ def sfa (options,index) : 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) @@ -405,6 +442,7 @@ first_name="Fake" last_name="Sfa style=%(rspec_style)s" > }, 'login_base' : the_login_base, 'piuser' : piuser, + 'pimail' : pimail, 'regularuser':regularuser, 'domain':domain, 'usernames' : [ (regularuser,'key2') ], diff --git a/system/macros.py b/system/macros.py index 78d8cb0..9f6cebd 100644 --- a/system/macros.py +++ b/system/macros.py @@ -20,6 +20,8 @@ sequences['sfa_restart'] = [ "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', -- 2.43.0