From: Sandrine Avakian Date: Mon, 16 Jul 2012 14:11:34 +0000 (+0200) Subject: Adding sfi.py resources -rsla -l all X-Git-Tag: sfa-2.1-24~3^2~125 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=1bf1c2ed1148793b6ae69646bab4ec02100c6247;p=sfa.git Adding sfi.py resources -rsla -l all Slab Rspec display leases as well --- diff --git a/sfa/rspecs/elements/versions/sfav1Lease.py b/sfa/rspecs/elements/versions/sfav1Lease.py index 8dffdfde..f36418d8 100644 --- a/sfa/rspecs/elements/versions/sfav1Lease.py +++ b/sfa/rspecs/elements/versions/sfav1Lease.py @@ -22,7 +22,7 @@ class SFAv1Lease: @staticmethod def add_leases(xml, leases): - + logger.debug("SFAV1LEASE \t add_lease ") network_elems = xml.xpath('//network') if len(network_elems) > 0: network_elem = network_elems[0] @@ -37,6 +37,7 @@ class SFAv1Lease: lease_fields = ['lease_id', 'component_id', 'slice_id', 'start_time', 'duration'] lease_elem = network_elem.add_instance('lease', lease, lease_fields) lease_elems.append(lease_elem) + logger.debug("SFAV1LEASE \t add_lease lease %s" %(lease)) @staticmethod diff --git a/sfa/rspecs/elements/versions/slabv1Node.py b/sfa/rspecs/elements/versions/slabv1Node.py index 47a6e0e2..cf567b36 100644 --- a/sfa/rspecs/elements/versions/slabv1Node.py +++ b/sfa/rspecs/elements/versions/slabv1Node.py @@ -15,12 +15,23 @@ from sfa.util.sfalogging import logger class Slabv1Node: @staticmethod def add_nodes(xml, nodes): - + #Add network item in the xml + network_elems = xml.xpath('//network') + if len(network_elems) > 0: + network_elem = network_elems[0] + elif len(nodes) > 0 and nodes[0].get('component_manager_id'): + network_urn = nodes[0]['component_manager_id'] + network_elem = xml.add_element('network', name = Xrn(network_urn).get_hrn()) + else: + network_elem = xml + + logger.debug("slabv1Node \t add_nodes") node_elems = [] + #Then add nodes items to the network item in the xml for node in nodes: node_fields = ['component_manager_id', 'component_id', \ 'client_id', 'sliver_id', 'exclusive','boot_state'] - node_elem = xml.add_instance('node', node, node_fields) + node_elem = network_elem.add_instance('node', node, node_fields) node_elems.append(node_elem) # set component name if node.get('component_id'): @@ -35,7 +46,11 @@ class Slabv1Node: if node.get('location'): node_elem.add_instance('location', node['location'], \ Location.fields) - + # add granularity of the reservation system + granularity = node.get('granularity') + if granularity: + node_elem.add_instance('granularity', granularity, granularity.fields) + # set interfaces #if node.get('interfaces'): #for interface in node.get('interfaces', []): @@ -155,13 +170,6 @@ class Slabv1Node: slivers = Slabv1Sliver.get_slivers(node.element) for sliver in slivers: node.element.remove(sliver.element) -if __name__ == '__main__': - from sfa.rspecs.rspec import RSpec - - r = RSpec('/tmp/slab.rspec') - r2 = RSpec(version = 'slab') - getnodes = Slabv1Node.get_nodes(r.xml) - Slabv1Node.add_nodes(r2.xml.root, getnodes) diff --git a/sfa/rspecs/versions/slabv1.py b/sfa/rspecs/versions/slabv1.py index b966feb8..035f7d97 100644 --- a/sfa/rspecs/versions/slabv1.py +++ b/sfa/rspecs/versions/slabv1.py @@ -7,6 +7,9 @@ from sfa.rspecs.elements.versions.slabv1Lease import Slabv1Lease from sfa.rspecs.elements.versions.slabv1Node import Slabv1Node from sfa.rspecs.elements.versions.slabv1Sliver import Slabv1Sliver from sfa.rspecs.elements.versions.slabv1Timeslot import Slabv1Timeslot + +from sfa.rspecs.elements.versions.sfav1Lease import SFAv1Lease + from sfa.util.sfalogging import logger class Slabv1(RSpecVersion): @@ -27,9 +30,11 @@ class Slabv1(RSpecVersion): # Network def get_networks(self): - network_elems = self.xml.xpath('//network') + network_elems = self.xml.xpath('//network | //default:network') + logger.debug(" slabv1 \tget_networks network_elems %s "%(network_elems) ) networks = [network_elem.get_instance(fields=['name', 'slice']) for \ network_elem in network_elems] + logger.debug(" slabv1 \tget_networks %s"%(networks)) return networks @@ -142,6 +147,7 @@ class Slabv1(RSpecVersion): node_elem = node_elems[0] # determine sliver types for this node + #TODO : add_slivers valid type of sliver needs to be changed 13/07/12 SA valid_sliver_types = ['slab-node', 'emulab-openvz', 'raw-pc', 'plab-vserver', 'plab-vnode'] #valid_sliver_types = ['emulab-openvz', 'raw-pc', 'plab-vserver', 'plab-vnode'] requested_sliver_type = None @@ -190,41 +196,54 @@ class Slabv1(RSpecVersion): def remove_slivers(self, slivers, network=None, no_dupes=False): Slabv1Node.remove_slivers(self.xml, slivers) - - - + + # Utility - + def merge(self, in_rspec): """ Merge contents for specified rspec with current rspec """ - from sfa.rspecs.rspec import RSpec - # just copy over all the child elements under the root element - 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': 'slab-node'} - - self.add_nodes(nodes) - #self.add_links(in_rspec.version.get_links()) + + if not in_rspec: + return - # - #rspec = RSpec(in_rspec) - #for child in rspec.xml.iterchildren(): - # self.xml.root.append(child) + from sfa.rspecs.rspec import RSpec + + if isinstance(in_rspec, RSpec): + rspec = in_rspec + else: + rspec = RSpec(in_rspec) + if rspec.version.type.lower() == 'protogeni': + from sfa.rspecs.rspec_converter import RSpecConverter + in_rspec = RSpecConverter.to_sfa_rspec(rspec.toxml()) + rspec = RSpec(in_rspec) + logger.debug(" SLABV1 \tmerge rspec %s " %(rspec.toxml()) ) + # just copy over all networks + #Attention special get_networks using //default:network xpath + current_networks = self.get_networks() + logger.debug(" SLABV1\tmerge rspec version %s" %(rspec.version)) + networks = rspec.version.get_networks() + logger.debug("SLABV1 \tmerge current_networks %s networks %s " %(current_networks, networks) ) + for network in networks: + current_network = network.get('name') + if current_network and current_network not in current_networks: + self.xml.append(network.element) + current_networks.append(current_network) + + + + # Leases def get_leases(self, lease_filter=None): - return Slabv1Lease.get_leases(self.xml, lease_filter) + return SFAv1Lease.get_leases(self.xml, lease_filter) + #return Slabv1Lease.get_leases(self.xml, lease_filter) def add_leases(self, leases, network = None, no_dupes=False): - Slabv1Lease.add_leases(self.xml, leases) + SFAv1Lease.add_leases(self.xml, leases) + #Slabv1Lease.add_leases(self.xml, leases) def cleanup(self): # remove unncecessary elements, attributes diff --git a/sfa/senslab/slabaggregate.py b/sfa/senslab/slabaggregate.py index ad464945..bd277ab0 100644 --- a/sfa/senslab/slabaggregate.py +++ b/sfa/senslab/slabaggregate.py @@ -313,12 +313,14 @@ class SlabAggregate: logger.debug("SlabAggregate \tget_rspec **** \ default_sliver_attribs %s \r\n" %(default_sliver_attribs)) for attrib in default_sliver_attribs: - logger.debug("SlabAggregate \tget_rspec ******* attrib %s \r\n"\ - %(attrib)) + rspec.version.add_default_sliver_attribute(attrib['tagname'], \ attrib['value']) if options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'resources': leases = self.get_leases(slices) rspec.version.add_leases(leases) + + logger.debug("SlabAggregate \tget_rspec ******* rspec_toxml %s \r\n"\ + %(rspec.toxml())) return rspec.toxml()