From b921336b2495d77f494f4e106e29dd567d79fea8 Mon Sep 17 00:00:00 2001 From: Mohamed Larabi Date: Mon, 16 Sep 2013 15:42:41 +0200 Subject: [PATCH] Nitos: channels now have component_id (urn), which is used to address them into Leases (same as nodes) --- sfa/nitos/nitosaggregate.py | 4 +++- sfa/nitos/nitosslices.py | 4 ++-- sfa/nitos/nitosxrn.py | 12 +++++++++++- sfa/rspecs/elements/channel.py | 1 + sfa/rspecs/elements/versions/nitosv1Channel.py | 3 ++- sfa/rspecs/elements/versions/nitosv1Lease.py | 5 +++-- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/sfa/nitos/nitosaggregate.py b/sfa/nitos/nitosaggregate.py index 2e59d2e0..edf3d933 100644 --- a/sfa/nitos/nitosaggregate.py +++ b/sfa/nitos/nitosaggregate.py @@ -18,7 +18,7 @@ from sfa.rspecs.elements.granularity import Granularity from sfa.rspecs.elements.channel import Channel from sfa.rspecs.version_manager import VersionManager -from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn +from sfa.nitos.nitosxrn import NitosXrn, hostname_to_urn, hrn_to_nitos_slicename, slicename_to_hrn, channel_to_urn from sfa.planetlab.vlink import get_tc_rate from sfa.planetlab.topology import Topology @@ -163,6 +163,7 @@ class NitosAggregate: rspec_channel['channel_num'] = channel_number rspec_channel['start_time'] = channel['start_time'] rspec_channel['duration'] = (int(channel['end_time']) - int(channel['start_time'])) / int(grain) + rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel_number) # retreive slicename for slc in slices: @@ -238,6 +239,7 @@ class NitosAggregate: rspec_channel['channel_num'] = channel['channel'] rspec_channel['frequency'] = channel['frequency'] rspec_channel['standard'] = channel['modulation'] + rspec_channel['component_id'] = channel_to_urn(self.driver.hrn, self.driver.testbedInfo['name'], channel['channel']) rspec_channels.append(rspec_channel) return rspec_channels diff --git a/sfa/nitos/nitosslices.py b/sfa/nitos/nitosslices.py index 2edd2092..3eac8aa3 100644 --- a/sfa/nitos/nitosslices.py +++ b/sfa/nitos/nitosslices.py @@ -7,7 +7,7 @@ from sfa.util.xrn import Xrn, get_leaf, get_authority, urn_to_hrn from sfa.rspecs.rspec import RSpec -from sfa.nitos.nitosxrn import NitosXrn, hrn_to_nitos_slicename, xrn_to_hostname +from sfa.nitos.nitosxrn import NitosXrn, hrn_to_nitos_slicename, xrn_to_hostname, xrn_to_channel MAXINT = 2L**31-1 @@ -96,7 +96,7 @@ class NitosSlices: slice_name = hrn_to_nitos_slicename(channel['slice_id']) if slice_name != slice['slice_name']: continue - channel_num = channel['channel_num'] + channel_num = xrn_to_channel(channel['component_id']) nitos_channel = self.driver.filter_nitos_results(nitos_channels, {'channel': channel_num})[0] # fill the requested channel with nitos ids requested_channel['slice_id'] = slice['slice_id'] diff --git a/sfa/nitos/nitosxrn.py b/sfa/nitos/nitosxrn.py index 442e48b0..47d8aadf 100644 --- a/sfa/nitos/nitosxrn.py +++ b/sfa/nitos/nitosxrn.py @@ -23,6 +23,12 @@ def hrn_to_nitos_authname (hrn): return NitosXrn(xrn=hrn,type='any').nitos_authname() def xrn_to_hostname(hrn): return Xrn.unescape(NitosXrn(xrn=hrn, type='node').get_leaf()) +def channel_to_hrn (auth, login_base, channel): + return NitosXrn(auth=auth+'.'+login_base, channel=channel).get_hrn() +def channel_to_urn (auth, login_base, channel): + return NitosXrn(auth=auth+'.'+login_base, channel=channel).get_urn() +def xrn_to_channel(hrn): + return Xrn.unescape(NitosXrn(xrn=hrn, type='channel').get_leaf()) class NitosXrn (Xrn): @@ -30,7 +36,7 @@ class NitosXrn (Xrn): def site_hrn (auth, login_base): return '.'.join([auth,login_base]) - def __init__ (self, auth=None, hostname=None, slicename=None, email=None, interface=None, **kwargs): + def __init__ (self, auth=None, hostname=None, slicename=None, email=None, interface=None, channel=None, **kwargs): #def hostname_to_hrn(auth_hrn, login_base, hostname): if hostname is not None: self.type='node' @@ -54,6 +60,10 @@ class NitosXrn (Xrn): self.type = 'interface' self.hrn = auth + '.' + interface self.hrn_to_urn() + elif channel is not None: + self.type='channel' + self.hrn=".".join([auth] + [channel]) + self.hrn_to_urn() else: Xrn.__init__ (self,**kwargs) diff --git a/sfa/rspecs/elements/channel.py b/sfa/rspecs/elements/channel.py index 6ed328ed..96680544 100644 --- a/sfa/rspecs/elements/channel.py +++ b/sfa/rspecs/elements/channel.py @@ -10,4 +10,5 @@ class Channel(Element): 'slice_id', 'start_time', 'duration', + 'component_id', ] diff --git a/sfa/rspecs/elements/versions/nitosv1Channel.py b/sfa/rspecs/elements/versions/nitosv1Channel.py index 1ebf7ab6..60582e35 100644 --- a/sfa/rspecs/elements/versions/nitosv1Channel.py +++ b/sfa/rspecs/elements/versions/nitosv1Channel.py @@ -48,7 +48,7 @@ class NITOSv1Channel: channel_elems = [] for channel in channels: - channel_fields = ['channel_num', 'frequency', 'standard'] + channel_fields = ['channel_num', 'frequency', 'standard', 'component_id'] channel_elem = spectrum_elem.add_instance('channel', channel, channel_fields) channel_elems.append(channel_elem) @@ -67,6 +67,7 @@ class NITOSv1Channel: channel['channel_num'] = channel_elem.attrib['channel_num'] channel['frequency'] = channel_elem.attrib['frequency'] channel['standard'] = channel_elem.attrib['standard'] + channel['component_id'] = channel_elem.attrib['component_id'] channels.append(channel) return channels diff --git a/sfa/rspecs/elements/versions/nitosv1Lease.py b/sfa/rspecs/elements/versions/nitosv1Lease.py index f5334a74..9b2e8032 100644 --- a/sfa/rspecs/elements/versions/nitosv1Lease.py +++ b/sfa/rspecs/elements/versions/nitosv1Lease.py @@ -69,7 +69,7 @@ class NITOSv1Lease: for channel in channels: channel['start_time'] = datetime_to_string(utcparse(channel['start_time'])) if channel['slice_id'] == lease[0]['slice_id'] and channel['start_time'] == lease[0]['start_time'] and channel['duration'] == lease[0]['duration']: - lease_elem.add_instance('channel', channel, ['channel_num']) + lease_elem.add_instance('channel', channel, ['component_id']) @staticmethod @@ -99,7 +99,8 @@ class NITOSv1Lease: channel['slice_id'] = lease_elem.attrib['slice_id'] channel['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time'])) channel['duration'] = lease_elem.attrib['duration'] - channel['channel_num'] = channel_elem.attrib['channel_num'] + channel['component_id'] = channel_elem.attrib['component_id'] + channels.append(channel) return (leases, channels) -- 2.43.0