+ if node_ids:
+ node_ids = [
+ node_id for node_id in node_ids if node_id in slice['node_ids']]
+ slice['node_ids'] = node_ids
+ nodes_dict = self.get_slice_nodes(slice, options)
+ slivers = []
+ for node in nodes_dict.values():
+ node.update(slice)
+ sliver_hrn = '%s.%s-%s' % (self.driver.hrn,
+ slice['slice_id'], node['node_id'])
+ node['sliver_id'] = Xrn(sliver_hrn, type='sliver').urn
+ node['urn'] = node['sliver_id']
+ node['services_user'] = users
+ slivers.append(node)
+ return slivers
+
+ def node_to_rspec_node(self, node, options=None):
+ if options is None:
+ options = {}
+ rspec_node = NodeElement()
+ site = self.driver.testbedInfo
+ rspec_node['component_id'] = hostname_to_urn(
+ self.driver.hrn, site['name'], node['hostname'])
+ rspec_node['component_name'] = node['hostname']
+ rspec_node['component_manager_id'] = Xrn(
+ self.driver.hrn, 'authority+cm').get_urn()
+ rspec_node['authority_id'] = hrn_to_urn(DummyXrn.site_hrn(
+ self.driver.hrn, site['name']), 'authority+sa')
+ # distinguish between Shared and Reservable nodes
+ rspec_node['exclusive'] = 'false'
+
+ rspec_node['hardware_types'] = [HardwareType({'name': 'dummy-pc'}),
+ HardwareType({'name': 'pc'})]
+ if site['longitude'] and site['latitude']:
+ location = Location({'longitude': site['longitude'], 'latitude': site[
+ 'latitude'], 'country': 'unknown'})
+ rspec_node['location'] = location
+ return rspec_node
+
+ def sliver_to_rspec_node(self, sliver, sliver_allocations):
+ rspec_node = self.node_to_rspec_node(sliver)
+ rspec_node['expires'] = datetime_to_string(utcparse(sliver['expires']))
+ # add sliver info
+ rspec_sliver = Sliver({'sliver_id': sliver['urn'],
+ 'name': sliver['slice_name'],
+ 'type': 'dummy-vserver',
+ 'tags': []})
+ rspec_node['sliver_id'] = rspec_sliver['sliver_id']
+ if sliver['urn'] in sliver_allocations:
+ rspec_node['client_id'] = sliver_allocations[
+ sliver['urn']].client_id
+ if sliver_allocations[sliver['urn']].component_id:
+ rspec_node['component_id'] = sliver_allocations[
+ sliver['urn']].component_id
+ rspec_node['slivers'] = [rspec_sliver]
+
+ # slivers always provide the ssh service
+ login = Login({'authentication': 'ssh-keys',
+ 'hostname': sliver['hostname'],
+ 'port': '22',
+ 'username': sliver['slice_name'],
+ 'login': sliver['slice_name']
+ })
+ return rspec_node
+
+ def get_slice_nodes(self, slice, options=None):
+ if options is None:
+ options = {}
+ nodes_dict = {}
+ filter = {}
+ if slice and slice.get('node_ids'):
+ filter['node_ids'] = slice['node_ids']
+ else:
+ # there are no nodes to look up
+ return nodes_dict