X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Fdummy%2Fdummyaggregate.py;h=fcdca5d7d603f549414f622e16fe6fb753ec6b43;hb=4a9e6751f9f396f463932133b9d62fc925a99ef6;hp=c6381a6127f459f25dc8b7e85cfc49bad59d3b32;hpb=b54e90d0c3868fa5afb89ff784cba0d5d36265ad;p=sfa.git diff --git a/sfa/dummy/dummyaggregate.py b/sfa/dummy/dummyaggregate.py index c6381a61..fcdca5d7 100644 --- a/sfa/dummy/dummyaggregate.py +++ b/sfa/dummy/dummyaggregate.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/env python3 from sfa.util.xrn import Xrn, hrn_to_urn, urn_to_hrn from sfa.util.sfatime import utcparse, datetime_to_string from sfa.util.sfalogging import logger @@ -22,6 +22,7 @@ from sfa.dummy.dummyxrn import DummyXrn, hostname_to_urn, hrn_to_dummy_slicename from sfa.storage.model import SliverAllocation import time + class DummyAggregate: def __init__(self, driver): @@ -42,22 +43,27 @@ class DummyAggregate: if not slices: return (slice, slivers) slice = slices[0] - - # sort slivers by node id + + # sort slivers by node id slice_nodes = [] - if 'node_ids' in slice.keys(): - slice_nodes = self.driver.shell.GetNodes({'node_ids': slice['node_ids']}) + if 'node_ids' in list(slice.keys()): + slice_nodes = self.driver.shell.GetNodes( + {'node_ids': slice['node_ids']}) for node in slice_nodes: - slivers[node['node_id']] = node + slivers[node['node_id']] = node return (slice, slivers) - def get_nodes(self, options={}): + def get_nodes(self, options=None): + if options is None: + options = {} filter = {} nodes = self.driver.shell.GetNodes(filter) return nodes - def get_slivers(self, urns, options={}): + def get_slivers(self, urns, options=None): + if options is None: + options = {} slice_names = set() slice_ids = set() node_ids = [] @@ -86,13 +92,15 @@ class DummyAggregate: if not slices: return [] slice = slices[0] - slice['hrn'] = DummyXrn(auth=self.driver.hrn, slicename=slice['slice_name']).hrn + slice['hrn'] = DummyXrn(auth=self.driver.hrn, + slicename=slice['slice_name']).hrn # get sliver users users = [] user_ids = [] for slice in slices: - user_ids.extend(slice['user_ids']) + if 'user_ids' in list(slice.keys()): + user_ids.extend(slice['user_ids']) if user_ids: users = self.driver.shell.GetUsers({'user_ids': user_ids}) @@ -108,33 +116,41 @@ class DummyAggregate: users_list.append(user) if node_ids: - node_ids = [node_id for node_id in node_ids if node_id in slice['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(): + for node in list(nodes_dict.values()): node.update(slice) - sliver_hrn = '%s.%s-%s' % (self.driver.hrn, slice['slice_id'], node['node_id']) + 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={}): + 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']) + 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['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'}) + location = Location({'longitude': site['longitude'], 'latitude': site[ + 'latitude'], 'country': 'unknown'}) rspec_node['location'] = location return rspec_node @@ -143,26 +159,30 @@ class DummyAggregate: 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': []}) + '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 + 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['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', + 'port': '22', 'username': sliver['slice_name'], 'login': sliver['slice_name'] - }) + }) return rspec_node - def get_slice_nodes(self, slice, options={}): + def get_slice_nodes(self, slice, options=None): + if options is None: + options = {} nodes_dict = {} filter = {} if slice and slice.get('node_ids'): @@ -175,14 +195,16 @@ class DummyAggregate: nodes_dict[node['node_id']] = node return nodes_dict - def rspec_node_to_geni_sliver(self, rspec_node, sliver_allocations = {}): + def rspec_node_to_geni_sliver(self, rspec_node, sliver_allocations=None): + if sliver_allocations is None: + sliver_allocations = {} if rspec_node['sliver_id'] in sliver_allocations: # set sliver allocation and operational status sliver_allocation = sliver_allocations[rspec_node['sliver_id']] if sliver_allocation: allocation_status = sliver_allocation.allocation_state if allocation_status == 'geni_allocated': - op_status = 'geni_pending_allocation' + op_status = 'geni_pending_allocation' elif allocation_status == 'geni_provisioned': op_status = 'geni_ready' else: @@ -195,21 +217,24 @@ class DummyAggregate: # required fields geni_sliver = {'geni_sliver_urn': rspec_node['sliver_id'], 'geni_expires': rspec_node['expires'], - 'geni_allocation_status' : allocation_status, + 'geni_allocation_status': allocation_status, 'geni_operational_status': op_status, 'geni_error': '', } return geni_sliver - def list_resources(self, version = None, options={}): + def list_resources(self, version=None, options=None): + if options is None: + options = {} version_manager = VersionManager() version = version_manager.get_version(version) - rspec_version = version_manager._get_version(version.type, version.version, 'ad') + rspec_version = version_manager._get_version( + version.type, version.version, 'ad') rspec = RSpec(version=rspec_version, user_options=options) # get nodes - nodes = self.get_nodes(options) + nodes = self.get_nodes(options) nodes_dict = {} for node in nodes: nodes_dict[node['node_id']] = node @@ -223,10 +248,13 @@ class DummyAggregate: return rspec.toxml() - def describe(self, urns, version=None, options={}): + def describe(self, urns, version=None, options=None): + if options is None: + options = {} version_manager = VersionManager() version = version_manager.get_version(version) - rspec_version = version_manager._get_version(version.type, version.version, 'manifest') + rspec_version = version_manager._get_version( + version.type, version.version, 'manifest') rspec = RSpec(version=rspec_version, user_options=options) # get slivers @@ -242,11 +270,13 @@ class DummyAggregate: geni_urn = urns[0] sliver_ids = [sliver['sliver_id'] for sliver in slivers] constraint = SliverAllocation.sliver_id.in_(sliver_ids) - sliver_allocations = self.driver.api.dbsession().query(SliverAllocation).filter(constraint) + sliver_allocations = self.driver.api.dbsession().query( + SliverAllocation).filter(constraint) sliver_allocation_dict = {} for sliver_allocation in sliver_allocations: geni_urn = sliver_allocation.slice_urn - sliver_allocation_dict[sliver_allocation.sliver_id] = sliver_allocation + sliver_allocation_dict[ + sliver_allocation.sliver_id] = sliver_allocation # add slivers nodes_dict = {} @@ -254,13 +284,14 @@ class DummyAggregate: nodes_dict[sliver['node_id']] = sliver rspec_nodes = [] for sliver in slivers: - rspec_node = self.sliver_to_rspec_node(sliver, sliver_allocation_dict) + rspec_node = self.sliver_to_rspec_node( + sliver, sliver_allocation_dict) rspec_nodes.append(rspec_node) - geni_sliver = self.rspec_node_to_geni_sliver(rspec_node, sliver_allocation_dict) + geni_sliver = self.rspec_node_to_geni_sliver( + rspec_node, sliver_allocation_dict) geni_slivers.append(geni_sliver) rspec.version.add_nodes(rspec_nodes) return {'geni_urn': geni_urn, 'geni_rspec': rspec.toxml(), 'geni_slivers': geni_slivers} -