Oups
[sfa.git] / sfa / rspecs / elements / versions / pgv2Node.py
index fb9a9ac..b12629e 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
 
@@ -61,8 +63,17 @@ class PGv2Node:
                     for initscript in node.get('pl_initscripts', []):
                         slivers['tags'].append({'name': 'initscript', 'value': initscript['name']})
             PGv2SliverType.add_slivers(node_elem, slivers)
+
+            # advertise the node tags
+            tags = node.get('tags', [])
+            if tags:
+               for tag in tags:
+                    tag['name'] = tag.pop('tagname')
+                    node_elem.add_instance('{%s}attribute' % xml.namespaces['planetlab'], tag, ['name', 'value'])
+
         return node_elems
 
+
     @staticmethod
     def get_nodes(xml, filter={}):
         xpath = '//node%s | //default:node%s' % (XpathFilter.xpath(filter), XpathFilter.xpath(filter))
@@ -108,12 +119,31 @@ class PGv2Node:
             
             # get slivers
             node['slivers'] = PGv2SliverType.get_slivers(node_elem)    
-            available_elems = node_elem.xpath('./default:available | ./available')
-            if len(available_elems) > 0 and 'name' in available_elems[0].attrib:
+            
+            # get boot state
+           available_elems = node_elem.xpath('./default:available | ./available')
+            if len(available_elems) > 0 and 'now' in available_elems[0].attrib:
                 if available_elems[0].attrib.get('now', '').lower() == 'true': 
                     node['boot_state'] = 'boot'
                 else: 
                     node['boot_state'] = 'disabled' 
+
+            # get initscripts
+            node['pl_initscripts'] = []
+            initscript_elems = node_elem.xpath('./default:sliver_type/planetlab:initscript | ./sliver_type/initscript')
+            if len(initscript_elems) > 0:
+                for initscript_elem in initscript_elems:
+                    if 'name' in initscript_elem.attrib:
+                        node['pl_initscripts'].append(initscript_elem.attrib)
+
+            # get node tags
+            tag_elems = node_elem.xpath('./planetlab: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