from copy import deepcopy
from StringIO import StringIO
-from sfa.util.xrn import urn_to_sliver_id
+from sfa.util.xrn import Xrn, urn_to_sliver_id
from sfa.util.plxrn import hostname_to_urn, xrn_to_hostname
from sfa.rspecs.baseversion import BaseVersion
from sfa.rspecs.elements.versions.pgv2Link import PGv2Link
namespaces = dict(extensions.items() + [('default', namespace)])
# Networks
- def get_network(self):
- network = None
- nodes = self.xml.xpath('//default:node[@component_manager_id][1]', namespaces=self.namespaces)
- if nodes:
- network = nodes[0].get('component_manager_id')
- return network
-
def get_networks(self):
- networks = self.xml.xpath('//default:node[@component_manager_id]/@component_manager_id', namespaces=self.namespaces)
- return set(networks)
+ networks = set()
+ nodes = self.xml.xpath('//default:node[@component_manager_id] | //node:[@component_manager_id]', namespaces=self.namespaces)
+ for node in nodes:
+ if 'component_manager_id' in node:
+ network_urn = node.get('component_manager_id')
+ network_hrn = Xrn(network_urn).get_hrn()[0]
+ networks.add({'name': network_hrn})
+ return list(networks)
-
# Nodes
def get_nodes(self, filter=None):
"""
from sfa.rspecs.rspec import RSpec
# just copy over all the child elements under the root element
- if isinstance(in_rspec, RSpec):
- in_rspec = in_rspec.toxml()
+ if isinstance(in_rspec, basestring):
+ in_rspec = RSpec(in_rspec)
+
+ nodes = in_rspec.version.get_nodes()
+ # protogeni rspecs need to advertise the availabel sliver types
+ for node in nodes:
+ if not node.has_key('sliver') or not node['sliver']:
+ node['sliver'] = {'name': 'plab-vserver'}
+
+ self.add_nodes(nodes)
+ self.add_links(in_rspec.version.get_links())
+
+ #
+ #rspec = RSpec(in_rspec)
+ #for child in rspec.xml.iterchildren():
+ # self.xml.root.append(child)
+
- rspec = RSpec(in_rspec)
- for child in rspec.xml.iterchildren():
- self.xml.root.append(child)
def cleanup(self):
# remove unncecessary elements, attributes