From fa07bf4a44b427cae6654ae622699d9a8be3f96c Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Mon, 18 Jul 2011 14:17:47 -0400 Subject: [PATCH] support planetlab initscript in protogeni rspec using planetlab extension --- sfa/rspecs/pg_rspec.py | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/sfa/rspecs/pg_rspec.py b/sfa/rspecs/pg_rspec.py index a55fe10d..0433267d 100755 --- a/sfa/rspecs/pg_rspec.py +++ b/sfa/rspecs/pg_rspec.py @@ -32,7 +32,7 @@ pg_rspec_request_version = RSpecVersion(_request_version) class PGRSpec(RSpec): xml = None header = '\n' - template = '' + template = '' def __init__(self, rspec="", namespaces={}, type=None): if not type: @@ -50,7 +50,8 @@ class PGRSpec(RSpec): if not namespaces: self.namespaces = {'rspecv2': self.version['namespace'], - 'flack': 'http://www.protogeni.net/resources/rspec/ext/flack/1' } + 'flack': 'http://www.protogeni.net/resources/rspec/ext/flack/1', + 'planetlab': 'http://www.planet-lab.org/resources/ext/planetlab/1' } else: self.namespaces = namespaces @@ -105,8 +106,10 @@ class PGRSpec(RSpec): return [] def get_sliver_attributes(self, hostname, network=None): + from sfa.util.sfalogging import logger + logger.info("node: " + hostname) node = self.get_node_element(hostname, network) - sliver = node.xpath('//rspecv2:sliver_type', namespaces=self.namespaces) + sliver = node.xpath('./rspecv2:sliver_type', namespaces=self.namespaces) if sliver is not None and isinstance(sliver, list): sliver = sliver[0] return self.attributes_list(sliver) @@ -120,12 +123,17 @@ class PGRSpec(RSpec): sliver_attributes = self.get_sliver_attributes(node, network) for sliver_attribute in sliver_attributes: name=str(sliver_attribute[0]) - value=str(sliver_attribute[1]) + text =str(sliver_attribute[1]) + attribs = sliver_attribute[2] # we currently only suppor the and attributes if 'info' in name: - attribute = {'name': 'flack_info', 'value': str(sliver_attribute[2]), 'node_id': node} + attribute = {'name': 'flack_info', 'value': str(attribs), 'node_id': node} slice_attributes.append(attribute) elif 'initscript' in name: + if attribs is not None and 'name' in attribs: + value = attribs['name'] + else: + value = text attribute = {'name': 'initscript', 'value': value, 'node_id': node} slice_attributes.append(attribute) @@ -206,6 +214,9 @@ class PGRSpec(RSpec): for tag in sliver_info['tags']: if tag['tagname'] == 'flack_info': e = etree.SubElement(sliver_elem, '{%s}info' % self.namespaces['flack'], attrib=eval(tag['value'])) + elif tag['tagname'] == 'initscript': + e = etree.SubElement(sliver_elem, '{%s}initscript' % self.namespaces['planetlab'], attrib={'name': tag['value']}) + def add_default_sliver_attribute(self, name, value, network=None): -- 2.43.0