first draft at a scenario where SFA stuff gets created independently
authorThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 11 May 2012 18:22:19 +0000 (20:22 +0200)
committerThierry Parmentelat <thierry.parmentelat@sophia.inria.fr>
Fri, 11 May 2012 18:22:19 +0000 (20:22 +0200)
from myplc, ussing sfaadmin to bootstrap the site & pi

system/TestPlc.py
system/TestSliceSfa.py
system/config_default.py
system/macros.py

index eb7a15e..739cd61 100644 (file)
@@ -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"
index 30e60f6..67a42f0 100644 (file)
@@ -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()
index 0938240..b62ef5c 100644 (file)
@@ -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') ],
index 78d8cb0..9f6cebd 100644 (file)
@@ -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',