From: Thierry Parmentelat Date: Mon, 13 Feb 2012 19:01:40 +0000 (+0100) Subject: cleanup in the federica area X-Git-Tag: sfa-2.1-3~12 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=e252a445e0fca9d358f60b58b6627a1e1896e60d;p=sfa.git cleanup in the federica area --- diff --git a/sfa/federica/fddriver.py b/sfa/federica/fddriver.py index cac050c7..6e48284a 100644 --- a/sfa/federica/fddriver.py +++ b/sfa/federica/fddriver.py @@ -10,6 +10,17 @@ from sfa.federica.fdshell import FdShell # this could/should be obtained by issuing getRSpecVersion federica_version_string="RSpecV2" +#### avail. methods on the federica side as of 2012/02/13 +# listAvailableResources(String credentials, String rspecVersion) +# listSliceResources(String credentials, String rspecVersion, String sliceUrn) +# createSlice(String credentials, String sliceUrn, String rspecVersion, String rspecString) +# deleteSlice(String credentials, String sliceUrn) +# listSlices() +# getRSpecVersion() +##### all return +# Result: {'code': 0, 'value': RSpec} if success +# {'code': code_id, 'output': Error message} if error + class FdDriver (PlDriver): def __init__ (self,config): @@ -31,7 +42,13 @@ class FdDriver (PlDriver): return from_xmlrpc def aggregate_version (self): - return { 'federica_version_string' : federica_version_string, } + result=[] + federica_version_string_api = self.shell.getRSpecVersion() + result ['federica_version_string_api']=federica_version_string_api + if federica_version_string_api != federica_version_string: + result['WARNING']="hard-wired rspec version %d differs from what the API currently exposes"%\ + federica_version_string + return result def testbed_name (self): return "federica" @@ -57,7 +74,8 @@ class FdDriver (PlDriver): logger.debug("FdDriver.ListResources: returning cached advertisement") return self.response(rspec) # otherwise, need to get it - rspec = self.shell.listAvailableResources (federica_version_string) + rspec = self.shell.listAvailableResources (creds, federica_version_string) +# rspec = self.shell.listAvailableResources (federica_version_string) # cache it for future use if self.cache: logger.debug("FdDriver.ListResources: stores advertisement in cache") @@ -65,25 +83,13 @@ class FdDriver (PlDriver): return self.response(rspec) # about a given slice : don't cache else: -# that's what the final version would look like - return self.response(self.shell.listSliceResources(federica_version_string, slice_urn)) -# # just to see how the ad shows up in sface -# # caching it for convenience as it's the ad anyways -# if cached_requested and self.cache: -# rspec = self.cache.get(federica_version_string) -# if rspec: -# logger.debug("FdDriver.ListResources: returning cached advertisement") -# return rspec -# -# return self.shell.listAvailableResources(federica_version_string) + return self.response(self.shell.listSliceResources(creds, federica_version_string, slice_urn)) -#String createSlice(String credentials, String sliceUrn, String rspecVersion, String rspecString): def create_sliver (self, slice_urn, slice_hrn, creds, rspec_string, users, options): # right now version_string is ignored on the federica side # we normally derive it from options return self.response(self.shell.createSlice(creds, slice_urn, federica_version_string, rspec_string)) -#String deleteSlice(String credentials, String sliceUrn): def delete_sliver (self, slice_urn, slice_hrn, creds, options): # right now version_string is ignored on the federica side # we normally derive it from options diff --git a/sfa/federica/fdshell.py b/sfa/federica/fdshell.py index d362c7fd..7195b565 100644 --- a/sfa/federica/fdshell.py +++ b/sfa/federica/fdshell.py @@ -13,6 +13,8 @@ class FdShell: 'listSliceResources', 'createSlice', 'deleteSlice', + 'getRSpecVersion', + 'listSlices', ] def __init__ ( self, config ) : diff --git a/sfa/storage/migrations/versions/001_slice_researchers.py b/sfa/storage/migrations/versions/001_slice_researchers.py new file mode 100644 index 00000000..eb1d3b7e --- /dev/null +++ b/sfa/storage/migrations/versions/001_slice_researchers.py @@ -0,0 +1,28 @@ +# this move is about adding a slice x users many to many relation ship for modelling +# regular "membership" of users in a slice + +from sqlalchemy import Table, MetaData, Column, ForeignKey +from sqlalchemy import Integer, String + +metadata=MetaData() + +# this is needed my migrate so it can locate 'records.record_id' +records = \ + Table ( 'records', metadata, + Column ('record_id', Integer, primary_key=True), + ) + +# slice x user (researchers) association +slice_researcher_table = \ + Table ( 'slice_researcher', metadata, + Column ('slice_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + Column ('researcher_id', Integer, ForeignKey ('records.record_id'), primary_key=True), + ) + +def upgrade(migrate_engine): + metadata.bind = migrate_engine + slice_researcher_table.create() + +def downgrade(migrate_engine): + metadata.bind = migrate_engine + slice_researcher_table.drop()