expose PL node tags using attribute in PGv2 and GENIv3 rspecs
authorMohamed Larabi <mohamed.larabi@inria.fr>
Wed, 18 Sep 2013 17:14:23 +0000 (19:14 +0200)
committerMohamed Larabi <mohamed.larabi@inria.fr>
Wed, 18 Sep 2013 17:16:52 +0000 (19:16 +0200)
sfa/rspecs/elements/attribute.py [new file with mode: 0644]
sfa/rspecs/elements/versions/pgv2Node.py

diff --git a/sfa/rspecs/elements/attribute.py b/sfa/rspecs/elements/attribute.py
new file mode 100644 (file)
index 0000000..740083b
--- /dev/null
@@ -0,0 +1,9 @@
+from sfa.rspecs.elements.element import Element
+
+class Attribute(Element):
+
+    fields = [
+        'name',
+        'value',
+    ]
+        
index ba854d0..5db9ba9 100644 (file)
@@ -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