Esempio n. 1
0
    def allocate(self, urn, rspec_string, expiration, options={}):
        xrn = Xrn(urn)
        aggregate = unigetestbedAggregate(self)
        slices = unigetestbedSlices(self)
        slice_record = None
        users = options.get('geni_users', [])
        if users:
            slice_record = users[0].get('slice_record', {})

        # parse rspec
        rspec = RSpec(rspec_string)
        requested_attributes = rspec.version.get_slice_attributes()

        # ensure slice record exists
        slice = slices.verify_slice(xrn.hrn,
                                    slice_record,
                                    expiration=expiration,
                                    options=options)
        # ensure person records exists
        #persons = slices.verify_persons(xrn.hrn, slice, users, peer, sfa_peer, options=options)

        # add/remove slice from nodes
        request_nodes = rspec.version.get_nodes_with_slivers()
        nodes = slices.verify_slice_nodes(urn, slice, request_nodes)

        return aggregate.describe([xrn.get_urn()], version=rspec.version)
Esempio n. 2
0
    def delete(self, urns, options={}):
        # collect sliver ids so we can update sliver allocation states after
        # we remove the slivers.
        aggregate = unigetestbedAggregate(self)
        slivers = aggregate.get_slivers(urns)
        if slivers:
            slice_id = slivers[0]['slice_id']
            node_ids = []
            sliver_ids = []
            for sliver in slivers:
                node_ids.append(sliver['node_id'])
                sliver_ids.append(sliver['sliver_id'])

            # determine if this is a peer slice
            # xxx I wonder if this would not need to use PlSlices.get_peer instead 
            # in which case plc.peers could be deprecated as this here
            # is the only/last call to this last method in plc.peers
            slice_hrn = unigetestbedXrn(auth=self.hrn, slicename=slivers[0]['slice_name']).get_hrn()
            try:
                self.shell.DeleteSliceFromNodes({'slice_id': slice_id, 'node_ids': node_ids})
                # delete sliver allocation states
                dbsession=self.api.dbsession()
                SliverAllocation.delete_allocations(sliver_ids,dbsession)
            finally:
                pass

        # prepare return struct
        geni_slivers = []
        for sliver in slivers:
            geni_slivers.append(
                {'geni_sliver_urn': sliver['sliver_id'],
                 'geni_allocation_status': 'geni_unallocated',
                 'geni_expires': datetime_to_string(utcparse(sliver['expires']))})  
        return geni_slivers
Esempio n. 3
0
 def status(self, urns, options={}):
     aggregate = unigetestbedAggregate(self)
     desc = aggregate.describe(urns, version='GENI 3')
     status = {
         'geni_urn': desc['geni_urn'],
         'geni_slivers': desc['geni_slivers']
     }
     return status
Esempio n. 4
0
 def renew (self, urns, expiration_time, options={}):
     aggregate = unigetestbedAggregate(self)
     slivers = aggregate.get_slivers(urns)
     if not slivers:
         raise SearchFailed(urns)
     slice = slivers[0]
     requested_time = utcparse(expiration_time)
     record = {'expires': int(datetime_to_epoch(requested_time))}
     self.shell.UpdateSlice({'slice_id': slice['slice_id'], 'fileds': record})
     description = self.describe(urns, 'GENI 3', options)
     return description['geni_slivers']
Esempio n. 5
0
 def renew(self, urns, expiration_time, options={}):
     aggregate = unigetestbedAggregate(self)
     slivers = aggregate.get_slivers(urns)
     if not slivers:
         raise SearchFailed(urns)
     slice = slivers[0]
     requested_time = utcparse(expiration_time)
     record = {'expires': int(datetime_to_epoch(requested_time))}
     self.shell.UpdateSlice({
         'slice_id': slice['slice_id'],
         'fileds': record
     })
     description = self.describe(urns, 'GENI 3', options)
     return description['geni_slivers']
Esempio n. 6
0
 def provision(self, urns, options={}):
     # update users
     slices = unigetestbedSlices(self)
     aggregate = unigetestbedAggregate(self)
     slivers = aggregate.get_slivers(urns)
     slice = slivers[0]
     geni_users = options.get('geni_users', [])
     #users = slices.verify_users(None, slice, geni_users, options=options)
     # update sliver allocation states and set them to geni_provisioned
     sliver_ids = [sliver['sliver_id'] for sliver in slivers]
     dbsession=self.api.dbsession()
     SliverAllocation.set_allocations(sliver_ids, 'geni_provisioned',dbsession)
     version_manager = VersionManager()
     rspec_version = version_manager.get_version(options['geni_rspec_version'])
     return self.describe(urns, rspec_version, options=options)
Esempio n. 7
0
 def provision(self, urns, options={}):
     # update users
     slices = unigetestbedSlices(self)
     aggregate = unigetestbedAggregate(self)
     slivers = aggregate.get_slivers(urns)
     slice = slivers[0]
     geni_users = options.get('geni_users', [])
     #users = slices.verify_users(None, slice, geni_users, options=options)
     # update sliver allocation states and set them to geni_provisioned
     sliver_ids = [sliver['sliver_id'] for sliver in slivers]
     dbsession = self.api.dbsession()
     SliverAllocation.set_allocations(sliver_ids, 'geni_provisioned',
                                      dbsession)
     version_manager = VersionManager()
     rspec_version = version_manager.get_version(
         options['geni_rspec_version'])
     return self.describe(urns, rspec_version, options=options)
Esempio n. 8
0
    def delete(self, urns, options={}):
        # collect sliver ids so we can update sliver allocation states after
        # we remove the slivers.
        aggregate = unigetestbedAggregate(self)
        slivers = aggregate.get_slivers(urns)
        if slivers:
            slice_id = slivers[0]['slice_id']
            node_ids = []
            sliver_ids = []
            for sliver in slivers:
                node_ids.append(sliver['node_id'])
                sliver_ids.append(sliver['sliver_id'])

            # determine if this is a peer slice
            # xxx I wonder if this would not need to use PlSlices.get_peer instead
            # in which case plc.peers could be deprecated as this here
            # is the only/last call to this last method in plc.peers
            slice_hrn = unigetestbedXrn(
                auth=self.hrn, slicename=slivers[0]['slice_name']).get_hrn()
            try:
                self.shell.DeleteSliceFromNodes({
                    'slice_id': slice_id,
                    'node_ids': node_ids
                })
                # delete sliver allocation states
                dbsession = self.api.dbsession()
                SliverAllocation.delete_allocations(sliver_ids, dbsession)
            finally:
                pass

        # prepare return struct
        geni_slivers = []
        for sliver in slivers:
            geni_slivers.append({
                'geni_sliver_urn':
                sliver['sliver_id'],
                'geni_allocation_status':
                'geni_unallocated',
                'geni_expires':
                datetime_to_string(utcparse(sliver['expires']))
            })
        return geni_slivers
Esempio n. 9
0
    def allocate (self, urn, rspec_string, expiration, options={}):
        xrn = Xrn(urn)
        aggregate = unigetestbedAggregate(self)
        slices = unigetestbedSlices(self)
        slice_record=None
        users = options.get('geni_users', [])
        if users:
            slice_record = users[0].get('slice_record', {})

        # parse rspec
        rspec = RSpec(rspec_string)
        requested_attributes = rspec.version.get_slice_attributes()

        # ensure slice record exists
        slice = slices.verify_slice(xrn.hrn, slice_record, expiration=expiration, options=options)
        # ensure person records exists
        #persons = slices.verify_persons(xrn.hrn, slice, users, peer, sfa_peer, options=options)

        # add/remove slice from nodes
        request_nodes = rspec.version.get_nodes_with_slivers()
        nodes = slices.verify_slice_nodes(urn, slice, request_nodes)

        return aggregate.describe([xrn.get_urn()], version=rspec.version)
Esempio n. 10
0
 def status (self, urns, options={}):
     aggregate = unigetestbedAggregate(self)
     desc =  aggregate.describe(urns, version='GENI 3')
     status = {'geni_urn': desc['geni_urn'],
               'geni_slivers': desc['geni_slivers']}
     return status
Esempio n. 11
0
 def describe(self, urns, version, options={}):
     aggregate = unigetestbedAggregate(self)
     return aggregate.describe(urns, version=version, options=options)
Esempio n. 12
0
 def list_resources (self, version=None, options={}):
     aggregate = unigetestbedAggregate(self)
     rspec =  aggregate.list_resources(version=version, options=options)
     return rspec
Esempio n. 13
0
 def describe(self, urns, version, options={}):
     aggregate = unigetestbedAggregate(self)
     return aggregate.describe(urns, version=version, options=options)
Esempio n. 14
0
 def list_resources(self, version=None, options={}):
     aggregate = unigetestbedAggregate(self)
     rspec = aggregate.list_resources(version=version, options=options)
     return rspec