Example #1
0
 def __init__ (self,config): 
     PlDriver.__init__ (self, config)
     self.shell=FdShell(config)
Example #2
0
class FdDriver (PlDriver):

    def __init__ (self,config): 
        PlDriver.__init__ (self, config)
        self.shell=FdShell(config)

    # the agreement with the federica driver is for them to expose results in a way
    # compliant with the avpi v2 return code, i.e. a dict with 'code' 'value' 'output'
    # essentially, either 'code'==0, then 'value' is set to the actual result
    # otherwise, 'code' is set to an error code and 'output' holds an error message
    def response (self, from_xmlrpc):
        if isinstance (from_xmlrpc, dict) and 'code' in from_xmlrpc:
            if from_xmlrpc['code']==0:
                return from_xmlrpc['value']
            else:
                raise SfaFault(from_xmlrpc['code'],from_xmlrpc['output'])
        else:
            logger.warning("unexpected result from federica xmlrpc api")
            return from_xmlrpc

    def aggregate_version (self):
        result={}
        federica_version_string_api = self.response(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"

    def list_slices (self, creds, options):
        return self.response(self.shell.listSlices())

    def sliver_status (self, slice_urn, slice_hrn):
        return "fddriver.sliver_status: undefined/todo for slice %s"%slice_hrn

    def list_resources (self, slice_urn, slice_hrn, creds, options):
        # right now rspec_version is ignored on the federica side
        # we normally derive it from options
        # look in cache if client has requested so
        cached_requested = options.get('cached', True) 
        # global advertisement
        if not slice_hrn:
            # self.cache is initialized unless the global config has it turned off
            if cached_requested and self.cache:
                # using federica_version_string as the key into the cache
                rspec = self.cache.get(federica_version_string)
                if rspec:
                    logger.debug("FdDriver.ListResources: returning cached advertisement")
                    return self.response(rspec)
            # otherwise, need to get it
                # java code expects creds as a String
#            rspec = self.shell.listAvailableResources (creds, federica_version_string)
            rspec = self.shell.listAvailableResources ("", 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")
                self.cache.add(federica_version_string, rspec)
            return self.response(rspec)
        # about a given slice : don't cache
        else:
                # java code expects creds as a String
#            return self.response(self.shell.listSliceResources(creds, federica_version_string, slice_urn))
            return self.response(self.shell.listSliceResources("", federica_version_string, slice_urn))

    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
                # java code expects creds as a String
#        return self.response(self.shell.createSlice(creds, slice_urn, federica_version_string, rspec_string))
        return self.response(self.shell.createSlice("", slice_urn, federica_version_string, rspec_string))

    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
        # xxx not sure if that's currentl supported at all
                # java code expects creds as a String
#        return self.response(self.shell.deleteSlice(creds, slice_urn))
        return self.response(self.shell.deleteSlice("", slice_urn))
Example #3
0
class FdDriver(PlDriver):
    def __init__(self, api):
        PlDriver.__init__(self, api)
        config = api.config
        self.shell = FdShell(config)

    # the agreement with the federica driver is for them to expose results in a way
    # compliant with the avpi v2 return code, i.e. a dict with 'code' 'value' 'output'
    # essentially, either 'code'==0, then 'value' is set to the actual result
    # otherwise, 'code' is set to an error code and 'output' holds an error message
    def response(self, from_xmlrpc):
        if isinstance(from_xmlrpc, dict) and 'code' in from_xmlrpc:
            if from_xmlrpc['code'] == 0:
                return from_xmlrpc['value']
            else:
                raise SfaFault(from_xmlrpc['code'], from_xmlrpc['output'])
        else:
            logger.warning("unexpected result from federica xmlrpc api")
            return from_xmlrpc

    def aggregate_version(self):
        result = {}
        federica_version_string_api = self.response(
            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"

    def list_slices(self, creds, options):
        # the issue is that federica returns the list of slice's urn in a string format
        # this is why this dirty hack is needed until federica fixes it.
        slices_str = self.shell.listSlices()['value'][1:-1]
        slices_list = slices_str.split(", ")
        return slices_list

    def sliver_status(self, slice_urn, slice_hrn):
        return "fddriver.sliver_status: undefined/todo for slice %s" % slice_hrn

    def list_resources(self, slice_urn, slice_hrn, creds, options):
        # right now rspec_version is ignored on the federica side
        # we normally derive it from options
        # look in cache if client has requested so
        cached_requested = options.get('cached', True)
        # global advertisement
        if not slice_hrn:
            # self.cache is initialized unless the global config has it turned off
            if cached_requested and self.cache:
                # using federica_version_string as the key into the cache
                rspec = self.cache.get(federica_version_string)
                if rspec:
                    logger.debug(
                        "FdDriver.ListResources: returning cached advertisement"
                    )
                    return self.response(rspec)
            # otherwise, need to get it
            # java code expects creds as a String
#            rspec = self.shell.listAvailableResources (creds, federica_version_string)
            rspec = self.shell.listAvailableResources("",
                                                      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")
                self.cache.add(federica_version_string, rspec)
            return self.response(rspec)
        # about a given slice : don't cache
        else:
            # java code expects creds as a String
            #            return self.response(self.shell.listSliceResources(creds, federica_version_string, slice_urn))
            return self.response(
                self.shell.listSliceResources("", federica_version_string,
                                              slice_urn))

    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
        # java code expects creds as a String
        #        return self.response(self.shell.createSlice(creds, slice_urn, federica_version_string, rspec_string))
        return self.response(
            self.shell.createSlice("", slice_urn, federica_version_string,
                                   rspec_string))

    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
        # xxx not sure if that's currentl supported at all
        # java code expects creds as a String
        #        return self.response(self.shell.deleteSlice(creds, slice_urn))
        return self.response(self.shell.deleteSlice("", slice_urn))
Example #4
0
 def __init__(self, api):
     PlDriver.__init__(self, api)
     config = api.config
     self.shell = FdShell(config)
Example #5
0
 def __init__ (self,api): 
     PlDriver.__init__ (self, api)
     config = api.config
     self.shell=FdShell(config)