Added specific senslab options in RSpec : mobile, radio and archi.
mobile is at the same level as the node hostname and component_id.
Radio and archi are inside hardware_type.
Done by using new class SlabNode along with new fields,
heriting from the Node class.
from sfa.rspecs.elements.versions.slabv1Sliver import Slabv1Sliver
from sfa.util.sfalogging import logger
-
+class SlabNode(Node):
+ #First get the fields already defined in the class Node
+ fields = list(Node.fields)
+ #Extend it with senslab's specific fields
+ fields.extend (['archi','radio','mobile'])
+
+
class Slabv1Node:
@staticmethod
def add_nodes(xml, nodes):
else:
network_elem = xml
- logger.debug("slabv1Node \t add_nodes")
+ logger.debug("slabv1Node \t add_nodes nodes %s"%(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_fields = ['component_manager_id', 'component_id', 'exclusive',\
+ 'boot_state', 'mobile']
node_elem = network_elem.add_instance('node', node, node_fields)
node_elems.append(node_elem)
# set component name
# set hardware types
if node.get('hardware_types'):
for hardware_type in node.get('hardware_types', []):
- node_elem.add_instance('hardware_type', hardware_type, \
- HardwareType.fields)
+ fields = HardwareType.fields
+ fields.extend(['archi','radio'])
+ node_elem.add_instance('hardware_type', node, fields)
+
# set location
if node.get('location'):
node_elem.add_instance('location', node['location'], \
else:
available_elem = node_elem.add_element('available', \
now='false')
-
+
+
+ #if node.get('archi'):
+ #archi_elem = node_elem.add_instance('archi',node.get('archi') , ['archi'])
+
+
+ #if node.get('radio'):
+ #radio_elem = node_elem.add_instance('radio', node.get('radio') , ['radio'])
+
## add services
#PGv2Services.add_services(node_elem, node.get('services', []))
# add slivers
# we must still advertise the available sliver types
slivers = Sliver({'type': 'slab-node'})
# we must also advertise the available initscripts
- slivers['tags'] = []
- if node.get('pl_initscripts'):
- for initscript in node.get('pl_initscripts', []):
- slivers['tags'].append({'name': 'initscript', \
- 'value': initscript['name']})
+ #slivers['tags'] = []
+ #if node.get('pl_initscripts'):
+ #for initscript in node.get('pl_initscripts', []):
+ #slivers['tags'].append({'name': 'initscript', \
+ #'value': initscript['name']})
Slabv1Sliver.add_slivers(node_elem, slivers)
return node_elems
# Network
def get_networks(self):
+ #WARNING Added //default:network to the xpath
+ #otherwise network element not detected 16/07/12 SA
+
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
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:
#from sfa.util.sfatime import datetime_to_epoch
-
+from sfa.rspecs.elements.versions.slabv1Node import SlabNode
from sfa.util.sfalogging import logger
#if node['slice_ids_whitelist']:
#if not slice or slice['slice_id'] not in node['slice_ids_whitelist']:
#continue
- rspec_node = Node()
+ #rspec_node = Node()
+ rspec_node = SlabNode()
# xxx how to retrieve site['login_base']
#site_id=node['site_id']
#site=sites_dict[site_id]
+ rspec_node['mobile'] = node['mobile']
+ rspec_node['archi'] = node['archi']
+ rspec_node['radio'] = node['radio']
rspec_node['component_id'] = \
hostname_to_urn(self.driver.root_auth, \
node['site'], node['hostname'])
#service = Services({'login': login})
#rspec_node['services'] = [service]
rspec_nodes.append(rspec_node)
-
+ logger.debug("SLABAGGREGATE \t get_nodes rspec_nodes %s"%(rspec_nodes))
return (rspec_nodes)
def get_leases(self, slice_record = None, options = {}):
site, node['hostname'])
rspec_lease['slice_id'] = lease['slice_id']
rspec_lease['start_time'] = lease['t_from']
- rspec_lease['duration'] = (lease['t_until'] - lease['t_from']) / grain
+ rspec_lease['duration'] = (lease['t_until'] - lease['t_from']) \
+ / grain
rspec_leases.append(rspec_lease)
return rspec_leases
version.version, 'manifest')
slices, slivers = self.get_slice_and_slivers(slice_xrn)
- #at this point sliver may be empty if no senslab job is running for this user/slice.
+ #at this point sliver may be empty if no senslab job
+ #is running for this user/slice.
rspec = RSpec(version=rspec_version, user_options=options)
if not options.get('list_leases') or options.get('list_leases') and options['list_leases'] != 'leases':
nodes = self.get_nodes(slices, slivers)
rspec.version.add_nodes(nodes)
-
+ logger.debug("SlabAggregate \tget_rspec ******* nodes %s \r\n"\
+ %(nodes))
default_sliver = slivers.get(None, [])
if default_sliver:
default_sliver_attribs = default_sliver.get('tags', [])