X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fversions%2Fpgv2.py;h=cfe1eaeefe8c9f3299153113c25581e475f118c4;hb=ed21507f990ecf9c49887283fb44e9c92a8624f9;hp=b52b5f037477bf00d5b12ab1d898827f854a1bda;hpb=d58bbc6238ee07a3e386b2627aa64ccb2dce352f;p=sfa.git diff --git a/sfa/rspecs/versions/pgv2.py b/sfa/rspecs/versions/pgv2.py index b52b5f03..cfe1eaee 100644 --- a/sfa/rspecs/versions/pgv2.py +++ b/sfa/rspecs/versions/pgv2.py @@ -1,13 +1,13 @@ from copy import deepcopy from StringIO import StringIO -from sfa.util.xrn import Xrn, urn_to_sliver_id -from sfa.util.plxrn import hostname_to_urn, xrn_to_hostname -from sfa.rspecs.baseversion import BaseVersion +from sfa.util.xrn import Xrn +from sfa.rspecs.version import RSpecVersion from sfa.rspecs.elements.versions.pgv2Link import PGv2Link from sfa.rspecs.elements.versions.pgv2Node import PGv2Node from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType +from sfa.rspecs.elements.versions.pgv2Lease import PGv2Lease -class PGv2(BaseVersion): +class PGv2(RSpecVersion): type = 'ProtoGENI' content_type = 'ad' version = '2' @@ -16,6 +16,7 @@ class PGv2(BaseVersion): extensions = { 'flack': "http://www.protogeni.net/resources/rspec/ext/flack/1", 'planetlab': "http://www.planet-lab.org/resources/sfa/ext/planetlab/1", + 'plos': "http://www.planet-lab.org/resources/sfa/ext/plos/1", } namespaces = dict(extensions.items() + [('default', namespace)]) @@ -27,7 +28,7 @@ class PGv2(BaseVersion): if 'component_manager_id' in node.attrib: network_urn = node.get('component_manager_id') if network_urn.startswith("urn:"): - network_hrn = Xrn(network_urn).get_hrn()[0] + network_hrn = Xrn(network_urn).get_hrn() else: # some component_manager_ids are hrns instead of urns?? network_hrn = network_urn @@ -44,8 +45,8 @@ class PGv2(BaseVersion): def get_nodes_with_slivers(self): return PGv2Node.get_nodes_with_slivers(self.xml) - def add_nodes(self, nodes, check_for_dupes=False): - return PGv2Node.add_nodes(self.xml, nodes) + def add_nodes(self, nodes, check_for_dupes=False, rspec_content_type=None): + return PGv2Node.add_nodes(self.xml, nodes, rspec_content_type) def merge_node(self, source_node_tag): # this is untested @@ -120,10 +121,18 @@ class PGv2(BaseVersion): if not requested_sliver_type: continue - sliver = {'name': requested_sliver_type, + sliver = {'type': requested_sliver_type, 'pl_tags': attributes} - # remove existing sliver_type tags + # remove available element + for available_elem in node_elem.xpath('./default:available | ./available'): + node_elem.remove(available_elem) + + # remove interface elements + for interface_elem in node_elem.xpath('./default:interface | ./interface'): + node_elem.remove(interface_elem) + + # remove existing sliver_type elements for sliver_type in node_elem.get('slivers', []): node_elem.element.remove(sliver_type.element) @@ -135,7 +144,7 @@ class PGv2(BaseVersion): # set the sliver id #slice_id = sliver_info.get('slice_id', -1) #node_id = sliver_info.get('node_id', -1) - #sliver_id = urn_to_sliver_id(sliver_urn, slice_id, node_id) + #sliver_id = Xrn(xrn=sliver_urn, type='slice', id=str(node_id)).get_urn() #node_elem.set('sliver_id', sliver_id) # add the sliver type elemnt @@ -165,6 +174,14 @@ class PGv2(BaseVersion): def add_link_requests(self, link_tuples, append=False): PGv2Link.add_link_requests(self.xml.root, link_tuples, append) + # Leases + + def get_leases(self, filter=None): + return PGv2Lease.get_leases(self.xml, filter) + + def add_leases(self, leases, network = None, no_dupes=False): + PGv2Lease.add_leases(self.xml, leases) + # Utility def merge(self, in_rspec): @@ -178,13 +195,20 @@ class PGv2(BaseVersion): nodes = in_rspec.version.get_nodes() # protogeni rspecs need to advertise the availabel sliver types + main_nodes = [] for node in nodes: + if not node['component_name']: + # this node element is part of a lease + continue if not node.has_key('sliver') or not node['sliver']: node['sliver'] = {'name': 'plab-vserver'} - - self.add_nodes(nodes) + main_nodes.append(node) + self.add_nodes(main_nodes) self.add_links(in_rspec.version.get_links()) + # Leases + leases = in_rspec.version.get_leases() + self.add_leases(leases) # #rspec = RSpec(in_rspec) #for child in rspec.xml.iterchildren(): @@ -202,19 +226,19 @@ class PGv2Ad(PGv2): enabled = True content_type = 'ad' schema = 'http://www.protogeni.net/resources/rspec/2/ad.xsd' - template = '' + template = '' class PGv2Request(PGv2): enabled = True content_type = 'request' schema = 'http://www.protogeni.net/resources/rspec/2/request.xsd' - template = '' + template = '' class PGv2Manifest(PGv2): enabled = True content_type = 'manifest' schema = 'http://www.protogeni.net/resources/rspec/2/manifest.xsd' - template = '' + template = ''