From 84c56ab4b28273e9f2a4b318895acb8224945fa9 Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Wed, 30 May 2012 12:03:34 +0200 Subject: [PATCH 1/1] user creation is done with new sfi options instead of xml-based --- system/TestPlc.py | 7 +++++-- system/TestSliceSfa.py | 10 +--------- system/TestUserSfa.py | 19 ++++++++++++++----- system/config_default.py | 20 ++++++++++++++++---- 4 files changed, 36 insertions(+), 20 deletions(-) diff --git a/system/TestPlc.py b/system/TestPlc.py index aabfe3e..aced650 100644 --- a/system/TestPlc.py +++ b/system/TestPlc.py @@ -1255,7 +1255,10 @@ class TestPlc: 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 + except: + # this in fact is expected as sites delete their members + #print "User %s already absent from PLC db"%username + pass print "REMEMBER TO RUN sfa_import AGAIN" return True @@ -1401,7 +1404,7 @@ class TestPlc: test_slice=TestSliceSfa(self,slice_spec) dir_basename=os.path.basename(test_slice.sfi_path()) dir_name=self.confsubdir("dot-sfi/%s"%dir_basename,clean=True,dry_run=self.options.dry_run) - test_slice.sfi_config(dir_name) + test_slice.sfi_configure(dir_name) # push into the remote /root/sfi area location = test_slice.sfi_path() remote="%s/%s"%(self.vm_root_in_host(),location) diff --git a/system/TestSliceSfa.py b/system/TestSliceSfa.py index 7874818..b206300 100644 --- a/system/TestSliceSfa.py +++ b/system/TestSliceSfa.py @@ -49,7 +49,6 @@ class TestSliceSfa: def resname (self,name,ext): return "%s.%s"%(name,ext) def addslicefile (self): return self.resname("slice_record","xml") - def addpersonfile (self): return self.resname("person_record","xml") def adfile (self): return self.resname("ad","rspec") def reqfile (self): return self.resname("req","rspec") def nodefile (self): return self.resname("nodes","txt") @@ -74,7 +73,7 @@ class TestSliceSfa: # dir_name is local and will be pushed later on by TestPlc # by default set SFI_USER to the pi, we'll overload this # on the command line when needed - def sfi_config (self,dir_name): + def sfi_configure (self,dir_name): plc_spec=self.test_plc.plc_spec sfa_spec=self.sfa_spec sfa_slice_spec=self.sfa_slice_spec @@ -90,13 +89,6 @@ class TestSliceSfa: fileconf.close() utils.header ("(Over)wrote %s"%file_name) # - file_name=dir_name + os.sep + self.addpersonfile() - fileconf=open(file_name,'w') - fileconf.write(sfa_slice_spec['person_record']) - fileconf.write('\n') - fileconf.close() - utils.header ("(Over)wrote %s"%file_name) - # file_name=dir_name + os.sep + 'sfi_config' fileconf=open(file_name,'w') SFI_AUTH="%s"%(self.site_hrn()) diff --git a/system/TestUserSfa.py b/system/TestUserSfa.py index d0a6f97..0ab2df6 100644 --- a/system/TestUserSfa.py +++ b/system/TestUserSfa.py @@ -19,16 +19,25 @@ class TestUserSfa: self.login_base=self.sfa_slice_spec['login_base'] def sfi_path(self): return self.test_slice_sfa.sfi_path() - def addpersonfile(self): return self.test_slice_sfa.addpersonfile() # xxx todo - not the right place any longer - or is it ? def add_user (self): - return self.test_plc.run_in_guest("sfi.py -d %s add %s"% - (self.sfi_path(),self.addpersonfile()))==0 + sfi_add_options = self.sfa_slice_spec['person_options'] + command="sfi -d %s add"%(self.sfi_path()) + for (opt,val) in sfi_add_options.items(): + command += " %s %s"%(opt,val) + # handle key separately because of embedded whitespace + # hack - the user's pubkey is avail from his hrn + hrn=sfi_add_options['-x'] + command += " -k %s/%s.pub"%(self.sfi_path(),hrn) + return self.test_plc.run_in_guest(command)==0 def update_user (self): - return self.test_plc.run_in_guest("sfi.py -d %s update %s"% - (self.sfi_path(),self.addpersonfile()))==0 + # xxx TODO now that we use sfi arguments + utils.header ("WARNING: TestUserSfa.update_user needs more work") + return True +# return self.test_plc.run_in_guest("sfi.py -d %s update %s"% +# (self.sfi_path(),self.addpersonfile()))==0 def delete_user(self): auth=self.sfa_spec['SFA_REGISTRY_ROOT_AUTH'] diff --git a/system/config_default.py b/system/config_default.py index 19bb8f4..8507d17 100644 --- a/system/config_default.py +++ b/system/config_default.py @@ -424,12 +424,22 @@ def sfa_slice_spec (options,index,rspec_style): hrn=prefix+'.'+slicename user_hrn=prefix+'.'+regularuser pi_hrn=prefix+'.'+piuser - key=public_key2 mail="%s@%s"%(regularuser,domain) + user_key=public_key2 + # xxx as compared with the xml-record-based approach + # is enabled=True needed here ? + # ditto for roles = user+tech + person_options = { '-t': 'user', + '-x': user_hrn, + '-e': mail, + '-f': "Fake", + '-l': "SFA-style-%s"%rspec_style, + } + person_record_xml =\ -''' -%(key)s +%(user_key)s user tech '''%locals() @@ -453,8 +463,10 @@ first_name="Fake" last_name="Sfa style=%(rspec_style)s" > 'nodenames' : all_nodenames(options,index), 'sitename' : the_login_base, 'slicename' : slicename, - 'slice_record' : slice_record_xml, + # handle key separately because of embedded whitespace + 'person_options': person_options, 'person_record' : person_record_xml, + 'slice_record' : slice_record_xml, 'rspec_style':rspec_style, } -- 2.43.0