X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=sfa%2Frspecs%2Fpg_rspec.py;h=3d2ae4f0898349669bef74599478542c4239262d;hb=488215a7c4960cf8d97cac14b77d53a37f3d24cd;hp=c715f5381a2efa0d0d0010f949a591f583c14922;hpb=7841ee3ce022c84fcf9a8ea17ce12d52e36b3aaa;p=sfa.git diff --git a/sfa/rspecs/pg_rspec.py b/sfa/rspecs/pg_rspec.py index c715f538..3d2ae4f0 100755 --- a/sfa/rspecs/pg_rspec.py +++ b/sfa/rspecs/pg_rspec.py @@ -62,7 +62,7 @@ class PGRSpec(RSpec): RSpec.create(self) if self.type: self.xml.set('type', self.type) - + def get_network(self): network = None nodes = self.xml.xpath('//rspecv2:node[@component_manager_uuid][1]', namespaces=self.namespaces) @@ -75,11 +75,12 @@ class PGRSpec(RSpec): return set(networks) def get_node_elements(self): - nodes = self.xml.xpath('//rspecv2:node', namespaces=self.namespaces) + nodes = self.xml.xpath('//rspecv2:node | //node', namespaces=self.namespaces) return nodes def get_nodes(self, network=None): - return self.xml.xpath('//rspecv2:node[@component_name]/@component_name', namespaces=self.namespaces) + xpath = '//rspecv2:node[@component_name]/@component_name | //node[@component_name]/@component_name' + return self.xml.xpath(xpath, namespaces=self.namespaces) def get_nodes_with_slivers(self, network=None): if network: @@ -121,9 +122,7 @@ class PGRSpec(RSpec): def add_slivers(self, slivers, sliver_urn=None, no_dupes=False): - if not isinstance(slivers, list): - slivers = [slivers] - + slivers = self._process_slivers(slivers) nodes_with_slivers = self.get_nodes_with_slivers() for sliver in slivers: hostname = sliver['hostname'] @@ -155,7 +154,24 @@ class PGRSpec(RSpec): for child in root.getchildren(): self.xml.append(child) - + def cleanup(self): + # remove unncecessary elements, attributes + if self.type in ['request', 'manifest']: + # remove nodes without slivers + nodes = self.get_node_elements() + for node in nodes: + delete = True + hostname = node.get('component_name') + parent = node.getparent() + children = node.getchildren() + for child in children: + if child.tag.endswith('sliver_type'): + delete = False + if delete: + parent.remove(node) + + # remove 'available' element from remaining node elements + self.remove_element('//rspecv2:available | //available') if __name__ == '__main__': rspec = PGRSpec()