Modified files to get an Rspec from OAR.
authorSandrine Avakian <sandrine.avakian@inria.fr>
Mon, 21 Nov 2011 13:52:38 +0000 (14:52 +0100)
committerSandrine Avakian <sandrine.avakian@inria.fr>
Mon, 21 Nov 2011 13:52:38 +0000 (14:52 +0100)
Returns list of nodes from OAR.

sfa/managers/aggregate_manager_slab.py
sfa/senslab/OARrestapi.py
sfa/senslab/OARrspec.py

index 15de0ce..d887a6e 100644 (file)
@@ -22,7 +22,9 @@ from sfa.util.record import *
 from sfa.trust.credential import Credential
 import sfa.plc.peers as peers
 from sfa.plc.network import *
-from sfa.senslab.OARrestapi import *
+#from sfa.senslab.OARrestapi import *
+from sfa.senslab.slabdriver import SlabDriver
+from sfa.util.config import Config
 #from sfa.senslab.api import SfaAPI
 #from sfa.plc.aggregate import Aggregate
 #from sfa.plc.slices import *
@@ -348,8 +350,8 @@ def ListSlices(api, creds, call_id):
 def ListResources(api, creds, options,call_id):
 
     print >>sys.stderr, 'RESOURCES AGGREGATE'
-    OARImporter = OARapi()
-
+    #OARImporter = OARapi()
+    driver = SlabDriver(Config())
     if Callids().already_handled(call_id): return ""
     # get slice's hrn from options
     xrn = options.get('geni_slice_urn', '')
@@ -393,7 +395,7 @@ def ListResources(api, creds, options,call_id):
 
 
     rspec =  OAR_rspec.get_rspec(slice_xrn=xrn, version=rspec_version)
-    print >>sys.stderr, '\r\n OARImporter.GetNodes()',         OARImporter.GetNodes()
+    print >>sys.stderr, '\r\n Slabdriver.GetNodes()',  driver.GetNodes()
 
     print >>sys.stderr, '  \r\n **************RSPEC' , rspec
 
index 816d09d..79ec343 100644 (file)
@@ -115,7 +115,8 @@ class OARGETParser:
        def AddPosY(self,tuplelist,value):
                tuplelist.append(('posy',value))        
        
-       
+       def AddBootState(self,tuplelist,value):
+               tuplelist.append(('boot_state',str(value)))     
        
        def ParseVersion(self) : 
                print self.raw_json
@@ -249,6 +250,7 @@ class OARGETParser:
                'mobile': AddMobility,
                'posx': AddPosX,
                'posy': AddPosY,
+                'state':AddBootState,
                }
 
        
index e5fdc2e..fcf58da 100644 (file)
@@ -7,16 +7,28 @@ import httplib
 import json
 
 
-from sfa.util.xrn import *
-from sfa.util.plxrn import *
-#from sfa.rspecs.sfa_rspec import SfaRSpec
-from sfa.rspecs.rspec import RSpec
-#from sfa.rspecs.pg_rspec  import PGRSpec
-#from sfa.rspecs.rspec_version import RSpecVersion
 from sfa.rspecs.version_manager import VersionManager
 from sfa.senslab.OARrestapi import *
 from sfa.senslab.slabdriver import SlabDriver
 from sfa.util.config import Config
+from sfa.util.xrn import hrn_to_urn, urn_to_hrn, urn_to_sliver_id
+from sfa.util.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename
+
+from sfa.rspecs.rspec import RSpec
+from sfa.rspecs.elements.hardware_type import HardwareType
+from sfa.rspecs.elements.node import Node
+#from sfa.rspecs.elements.link import Link
+#from sfa.rspecs.elements.sliver import Sliver
+#from sfa.rspecs.elements.login import Login
+#from sfa.rspecs.elements.location import Location
+#from sfa.rspecs.elements.interface import Interface
+#from sfa.rspecs.elements.services import Services
+#from sfa.rspecs.elements.pltag import PLTag
+from sfa.util.topology import Topology
+from sfa.rspecs.version_manager import VersionManager
+#from sfa.plc.vlink import get_tc_rate
+from sfa.util.sfatime import epochparse
+
 
 class OARrspec:
 
@@ -52,8 +64,7 @@ class OARrspec:
             for node in self.driver.GetNodes():
             #for node in self.OARImporter.GetNodes():
                 self.nodes[node['node_id']] = node
-               print >>sys.stderr,'prepare_nodes:node', node
-
+               
     #def prepare_interfaces(self, force=False):
         #if not self.interfaces or force:
             #for interface in self.api.plshell.GetInterfaces(self.api.plauth):
@@ -72,6 +83,7 @@ class OARrspec:
         if not self.prepared or force:
             #self.prepare_sites(force)
             self.prepare_nodes(force)
+            
             #self.prepare_links(force)
             #self.prepare_interfaces(force)
             #self.prepare_node_tags(force)         
@@ -83,19 +95,105 @@ class OARrspec:
                 #tags = [self.node_tags[tag_id] for tag_id in node['node_tag_ids']]
                node['network'] = self.driver.root_auth 
                 node['network_urn'] = hrn_to_urn(node['network'], 'authority+am')
-                node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
+                #node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
                 node['site_urn'] = hrn_to_urn(PlXrn.site_hrn(node['network'], node['site_login_base']), 'authority+sa') 
+                node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
+                #node['urn'] = PlXrn(auth=node['network']+'.',hostname=node['hostname']).get_urn()
+
                 #node['site'] = site
                 #node['interfaces'] = interfaces
                 #node['tags'] = tags
-               #print >>sys.stderr, "\r\n OAR  prepare ", node 
-               
-        self.prepared = True  
-       print >>sys.stderr, " \r\n \t\t prepare prepare_nodes \r\n %s " %(self.nodes)
+
+        self.prepared = True 
+        print >>sys.stderr, "\r\n OARrspec  prepare node 10",self.nodes[10]  
+       #print >>sys.stderr, " \r\n \t\t prepare prepare_nodes \r\n %s " %(self.nodes)
+        
+    def get_nodes(self):
+        filtre = {}
+        #tags_filter = {}
+        #if slice and 'node_ids' in slice and slice['node_ids']:
+            #filter['node_id'] = slice['node_ids']
+            #tags_filter=filter.copy()
+        
+        #filter.update({'peer_id': None})
+        nodes = self.driver.GetNodes(filtre)
+        
+        #site_ids = []
+        interface_ids = []
+        tag_ids = []
+        nodes_dict = {}
+        for node in nodes:
+            #site_ids.append(node['site_id'])
+            #interface_ids.extend(node['interface_ids'])
+            #tag_ids.extend(node['node_tag_ids'])
+            nodes_dict[node['node_id']] = node
+    
+        # get sites
+        #sites_dict  = self.get_sites({'site_id': site_ids}) 
+        # get interfaces
+        #interfaces = self.get_interfaces({'interface_id':interface_ids}) 
+        # get tags
+        #node_tags = self.get_node_tags(tags_filter)
+        # get initscripts
+        #pl_initscripts = self.get_pl_initscripts()
+        
+        #links = self.get_links(sites_dict, nodes_dict, interfaces)
+    
+        rspec_nodes = []
+        for node in nodes:
+            # skip whitelisted nodes
+            #if node['slice_ids_whitelist']:
+                #if not slice or slice['slice_id'] not in node['slice_ids_whitelist']:
+                    #continue
+            rspec_node = Node()
+            # xxx how to retrieve site['login_base']
+            #site_id=node['site_id']
+            #site=sites_dict[site_id]
+            rspec_node['component_id'] = hostname_to_urn(self.driver.root_auth, node['site_login_base'], node['hostname'])
+            rspec_node['component_name'] = node['hostname']
+            rspec_node['component_manager_id'] = hrn_to_urn(self.driver.root_auth, 'authority+sa')
+            rspec_node['authority_id'] = hrn_to_urn(PlXrn.site_hrn(self.driver.root_auth, node['site_login_base']), 'authority+sa')
+            rspec_node['boot_state'] = node['boot_state']
+            rspec_node['exclusive'] = 'True'
+            rspec_node['hardware_types']= [HardwareType({'name': 'senslab sensor node'})]
+            # only doing this because protogeni rspec needs
+            # to advertise available initscripts 
+            #rspec_node['pl_initscripts'] = pl_initscripts.values()
+                # add site/interface info to nodes.
+            # assumes that sites, interfaces and tags have already been prepared.
+            #site = sites_dict[node['site_id']]
+            #if site['longitude'] and site['latitude']:  
+                #location = Location({'longitude': site['longitude'], 'latitude': site['latitude']})
+                #rspec_node['location'] = location
+            rspec_node['interfaces'] = []
+            #if_count=0
+            #for if_id in node['interface_ids']:
+                #interface = Interface(interfaces[if_id]) 
+                #interface['ipv4'] = interface['ip']
+                #interface['component_id'] = PlXrn(auth=self.api.hrn, interface='node%s:eth%s' % (node['node_id'], if_count)).get_urn()
+                #rspec_node['interfaces'].append(interface)
+                #if_count+=1
+    
+            #tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']]
+            rspec_node['tags'] = []
+            #if node['node_id'] in slivers:
+                ## add sliver info
+                #sliver = slivers[node['node_id']]
+                #rspec_node['sliver_id'] = sliver['sliver_id']
+                #rspec_node['client_id'] = node['hostname']
+                #rspec_node['slivers'] = [sliver]
+                
+                ## slivers always provide the ssh service
+                #login = Login({'authentication': 'ssh-keys', 'hostname': node['hostname'], 'port':'22'})
+                #service = Services({'login': login})
+                #rspec_node['services'] = [service]
+            rspec_nodes.append(rspec_node)
+        return (rspec_nodes)
+        
 #from plc/aggregate.py 
     def get_rspec(self, slice_xrn=None, version = None):
-       print>>sys.stderr, " \r\n OARrspec \t\t get_spec **************\r\n" 
-        self.prepare()
+       print>>sys.stderr, " \r\n OARrspec \t\t get_rspec **************\r\n" 
+        #self.prepare()
        
         rspec = None
        version_manager = VersionManager()
@@ -109,33 +207,11 @@ class OARrspec:
             rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
       
         rspec = RSpec(version=rspec_version, user_options=self.user_options)
-        rspec.version.add_nodes(self.nodes.values())
-       print >>sys.stderr, 'after add_nodes'
+        
+        nodes = self.get_nodes()
+        rspec.version.add_nodes(nodes)
+      
+       print >>sys.stderr, 'after add_nodes '
       
 
-        #rspec.add_links(self.links.values())
-
-        #if slice_xrn:
-            ## get slice details
-            #slice_hrn, _ = urn_to_hrn(slice_xrn)
-            #slice_name = hrn_to_pl_slicename(slice_hrn)
-            #slices = self.api.plshell.GetSlices(self.api.plauth, slice_name)
-            #if slices:
-                #slice = slices[0]
-                #slivers = []
-                #tags = self.api.plshell.GetSliceTags(self.api.plauth, slice['slice_tag_ids'])
-                #for node_id in slice['node_ids']:
-                    #sliver = {}
-                    #sliver['hostname'] = self.nodes[node_id]['hostname']
-                    #sliver['tags'] = []
-                    #slivers.append(sliver)
-                    #for tag in tags:
-                        ## if tag isn't bound to a node then it applies to all slivers
-                        #if not tag['node_id']:
-                            #sliver['tags'].append(tag)
-                        #else:
-                            #tag_host = self.nodes[tag['node_id']]['hostname']
-                            #if tag_host == sliver['hostname']:
-                                #sliver.tags.append(tag)
-                #rspec.add_slivers(slivers)
         return rspec.toxml()