+++ /dev/null
-from sfa.util.sfalogging import logger
-from sfa.util.xml import XpathFilter
-from sfa.util.xrn import Xrn
-from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
-
-from sfa.rspecs.elements.element import Element
-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
-from sfa.rspecs.elements.disk_image import DiskImage
-from sfa.rspecs.elements.interface import Interface
-from sfa.rspecs.elements.bwlimit import BWlimit
-from sfa.rspecs.elements.pltag import PLTag
-from sfa.rspecs.elements.versions.nitosv1Sliver import NITOSv1Sliver
-from sfa.rspecs.elements.versions.nitosv1PLTag import NITOSv1PLTag
-from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
-from sfa.rspecs.elements.lease import Lease
-from sfa.rspecs.elements.channel import Channel
-
-
-class NITOSv1Lease:
-
- @staticmethod
- def add_leases(xml, leases, channels):
-
- network_elems = xml.xpath('//network')
- if len(network_elems) > 0:
- network_elem = network_elems[0]
- elif len(leases) > 0:
- network_urn = Xrn(leases[0]['component_id']
- ).get_authority_urn().split(':')[0]
- network_elem = xml.add_element('network', name=network_urn)
- else:
- network_elem = xml
-
- # 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[0]['start_time'] = datetime_to_string(utcparse(lease[0]['start_time']))
-
- lease_fields = ['slice_id', 'start_time', 'duration']
- lease_elem = network_elem.add_instance(
- 'lease', lease[0], lease_fields)
- lease_elems.append(lease_elem)
-
- # add nodes of this lease
- for node in lease:
- lease_elem.add_instance('node', node, ['component_id'])
-
- # add reserved channels of this lease
- #channels = [{'channel_id': 1}, {'channel_id': 2}]
- 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, ['component_id'])
-
- @staticmethod
- def get_leases(xml, filter=None):
- if filter is None:
- filter = {}
- xpath = '//lease%s | //default:lease%s' % (
- XpathFilter.xpath(filter), XpathFilter.xpath(filter))
- lease_elems = xml.xpath(xpath)
- return NITOSv1Lease.get_lease_objs(lease_elems)
-
- @staticmethod
- def get_lease_objs(lease_elems):
- leases = []
- channels = []
- for lease_elem in lease_elems:
- # 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'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
- lease['start_time'] = lease_elem.attrib['start_time']
- lease['duration'] = lease_elem.attrib['duration']
- lease['component_id'] = node_elem.attrib['component_id']
- lease['type'] = 'node'
- leases.append(lease)
- # get channels
- channel_elems = lease_elem.xpath('./default:channel | ./channel')
- for channel_elem in channel_elems:
- channel = Channel(channel_elem.attrib, channel_elem)
- channel['slice_id'] = lease_elem.attrib['slice_id']
- #channel['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
- channel['start_time'] = lease_elem.attrib['start_time']
- channel['duration'] = lease_elem.attrib['duration']
- channel['component_id'] = channel_elem.attrib['component_id']
- channel['type'] = 'channel'
- channels.append(channel)
-
- return leases + channels