X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Felements%2Fversions%2Fsfav1Lease.py;h=d4639042688dc3754c4f164ab32cd553f5ccb2e9;hb=1cc8e9613cab8b5b22478de369f259e591c54e6d;hp=f36418d8c5356cd5f2b8eec464ac53ac0a5d97e6;hpb=d4bf21b9cd5596d72d5c414444a8f3b9708366b5;p=sfa.git diff --git a/sfa/rspecs/elements/versions/sfav1Lease.py b/sfa/rspecs/elements/versions/sfav1Lease.py index f36418d8..d4639042 100644 --- a/sfa/rspecs/elements/versions/sfav1Lease.py +++ b/sfa/rspecs/elements/versions/sfav1Lease.py @@ -3,7 +3,7 @@ from sfa.util.xml import XpathFilter from sfa.util.xrn import Xrn from sfa.rspecs.elements.element import Element -from sfa.rspecs.elements.node import Node +from sfa.rspecs.elements.node import NodeElement from sfa.rspecs.elements.sliver import Sliver from sfa.rspecs.elements.location import Location from sfa.rspecs.elements.hardware_type import HardwareType @@ -22,7 +22,7 @@ class SFAv1Lease: @staticmethod def add_leases(xml, leases): - logger.debug("SFAV1LEASE \t add_lease ") + network_elems = xml.xpath('//network') if len(network_elems) > 0: network_elem = network_elems[0] @@ -32,12 +32,42 @@ class SFAv1Lease: else: network_elem = xml - lease_elems = [] - for lease in leases: - lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration'] - lease_elem = network_elem.add_instance('lease', lease, lease_fields) + # group the leases by slice and timeslots + grouped_leases = [] + + while leases: + slice_id = leases[0]['slice_id'] + start_time = leases[0]['start_time'] + duration = leases[0]['duration'] + group = [] + + for lease in leases: + if slice_id == lease['slice_id'] and start_time == lease['start_time'] and duration == lease['duration']: + group.append(lease) + + grouped_leases.append(group) + + for lease1 in group: + leases.remove(lease1) + + lease_elems = [] + for lease in grouped_leases: + #lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration'] + lease_fields = ['slice_id', 'start_time', 'duration'] + lease_elem = network_elem.add_instance('lease', lease[0], lease_fields) lease_elems.append(lease_elem) - logger.debug("SFAV1LEASE \t add_lease lease %s" %(lease)) + + # add nodes of this lease + for node in lease: + lease_elem.add_instance('node', node, ['component_id']) + + + +# lease_elems = [] +# for lease in leases: +# lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration'] +# lease_elem = network_elem.add_instance('lease', lease, lease_fields) +# lease_elems.append(lease_elem) @staticmethod @@ -48,16 +78,34 @@ class SFAv1Lease: @staticmethod def get_lease_objs(lease_elems): - leases = [] + leases = [] for lease_elem in lease_elems: - lease = Lease(lease_elem.attrib, lease_elem) - if lease.get('lease_id'): - lease['lease_id'] = lease_elem.attrib['lease_id'] - lease['component_id'] = lease_elem.attrib['component_id'] - lease['slice_id'] = lease_elem.attrib['slice_id'] - lease['start_time'] = lease_elem.attrib['start_time'] - lease['duration'] = lease_elem.attrib['duration'] - - leases.append(lease) - return leases + #get nodes + node_elems = lease_elem.xpath('./default:node | ./node') + for node_elem in node_elems: + lease = Lease(lease_elem.attrib, lease_elem) + lease['slice_id'] = lease_elem.attrib['slice_id'] + lease['start_time'] = lease_elem.attrib['start_time'] + lease['duration'] = lease_elem.attrib['duration'] + lease['component_id'] = node_elem.attrib['component_id'] + leases.append(lease) + + return leases + + + + + +# leases = [] +# for lease_elem in lease_elems: +# lease = Lease(lease_elem.attrib, lease_elem) +# if lease.get('lease_id'): +# lease['lease_id'] = lease_elem.attrib['lease_id'] +# lease['component_id'] = lease_elem.attrib['component_id'] +# lease['slice_id'] = lease_elem.attrib['slice_id'] +# lease['start_time'] = lease_elem.attrib['start_time'] +# lease['duration'] = lease_elem.attrib['duration'] + +# leases.append(lease) +# return leases