From 83b27e3b6a23737337bd40682f7e2da6bc321536 Mon Sep 17 00:00:00 2001 From: Mohamed Larabi Date: Wed, 18 Sep 2013 19:14:23 +0200 Subject: [PATCH] expose PL node tags using attribute in PGv2 and GENIv3 rspecs --- sfa/rspecs/elements/attribute.py | 9 +++++++++ sfa/rspecs/elements/versions/pgv2Node.py | 17 ++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 sfa/rspecs/elements/attribute.py diff --git a/sfa/rspecs/elements/attribute.py b/sfa/rspecs/elements/attribute.py new file mode 100644 index 00000000..740083b7 --- /dev/null +++ b/sfa/rspecs/elements/attribute.py @@ -0,0 +1,9 @@ +from sfa.rspecs.elements.element import Element + +class Attribute(Element): + + fields = [ + 'name', + 'value', + ] + diff --git a/sfa/rspecs/elements/versions/pgv2Node.py b/sfa/rspecs/elements/versions/pgv2Node.py index ba854d01..5db9ba91 100644 --- a/sfa/rspecs/elements/versions/pgv2Node.py +++ b/sfa/rspecs/elements/versions/pgv2Node.py @@ -12,7 +12,9 @@ from sfa.rspecs.elements.pltag import PLTag from sfa.rspecs.elements.versions.pgv2Services import PGv2Services from sfa.rspecs.elements.versions.pgv2SliverType import PGv2SliverType from sfa.rspecs.elements.versions.pgv2Interface import PGv2Interface +from sfa.rspecs.elements.versions.sfav1PLTag import SFAv1PLTag from sfa.rspecs.elements.granularity import Granularity +from sfa.rspecs.elements.attribute import Attribute from sfa.planetlab.plxrn import xrn_to_hostname @@ -66,12 +68,12 @@ class PGv2Node: tags = node.get('tags', []) if tags: for tag in tags: - tag_elem = node_elem.add_element(tag['tagname']) - tag_elem.set_text(tag['value']) - PGv2SliverType.add_slivers(node_elem, node.get('slivers', [])) + tag['name'] = tag.pop('tagname') + node_elem.add_instance('attribute', tag, ['name', 'value']) return node_elems + @staticmethod def get_nodes(xml, filter={}): xpath = '//node%s | //default:node%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter)) @@ -123,6 +125,15 @@ class PGv2Node: node['boot_state'] = 'boot' else: node['boot_state'] = 'disabled' + + # get node tags + tag_elems = node_elem.xpath('./default:attribute | ./attribute') + node['tags'] = [] + if len(tag_elems) > 0: + for tag_elem in tag_elems: + tag = tag_elem.get_instance(Attribute) + tag['tagname'] = tag.pop('name') + node['tags'].append(tag) return nodes -- 2.43.0