1 from sfa.util.xrn import Xrn
2 from sfa.util.xml import XpathFilter
3 from sfa.util.sfatime import utcparse, datetime_to_string, datetime_to_epoch
5 from sfa.rspecs.elements.node import NodeElement
6 from sfa.rspecs.elements.sliver import Sliver
7 from sfa.rspecs.elements.location import Location
8 from sfa.rspecs.elements.hardware_type import HardwareType
9 from sfa.rspecs.elements.disk_image import DiskImage
10 from sfa.rspecs.elements.interface import Interface
11 from sfa.rspecs.elements.bwlimit import BWlimit
12 from sfa.rspecs.elements.pltag import PLTag
13 from sfa.rspecs.elements.versions.pgv2Services import PGv2Services
14 from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType
15 from sfa.rspecs.elements.versions.pgv2Interface import PGv2Interface
16 from sfa.rspecs.elements.lease import Lease
18 from sfa.planetlab.plxrn import xrn_to_hostname
22 def add_leases(xml, leases):
23 # group the leases by slice and timeslots
27 slice_id = leases[0]['slice_id']
28 start_time = leases[0]['start_time']
29 duration = leases[0]['duration']
33 if slice_id == lease['slice_id'] and start_time == lease['start_time'] and duration == lease['duration']:
36 grouped_leases.append(group)
42 for lease in grouped_leases:
43 lease[0]['start_time'] = datetime_to_string(utcparse(lease[0]['start_time']))
45 lease_fields = ['slice_id', 'start_time', 'duration']
46 lease_elem = xml.add_instance('lease', lease[0], lease_fields)
47 lease_elems.append(lease_elem)
49 # add nodes of this lease
51 lease_elem.add_instance('node', node, ['component_id'])
55 def get_leases(xml, filter={}):
56 xpath = '//lease%s | //default:lease%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
57 lease_elems = xml.xpath(xpath)
58 return PGv2Lease.get_lease_objs(lease_elems)
62 def get_lease_objs(lease_elems):
64 for lease_elem in lease_elems:
66 node_elems = lease_elem.xpath('./default:node | ./node')
67 for node_elem in node_elems:
68 lease = Lease(lease_elem.attrib, lease_elem)
69 lease['slice_id'] = lease_elem.attrib['slice_id']
70 lease['start_time'] = datetime_to_epoch(utcparse(lease_elem.attrib['start_time']))
71 lease['duration'] = lease_elem.attrib['duration']
72 lease['component_id'] = node_elem.attrib['component_id']