4 # import modules used here -- sys is a very standard one
10 from sfa.rspecs.version_manager import VersionManager
11 from sfa.senslab.OARrestapi import *
12 from sfa.senslab.slabdriver import SlabDriver
13 from sfa.util.config import Config
14 from sfa.util.xrn import hrn_to_urn, urn_to_hrn, urn_to_sliver_id
15 from sfa.util.plxrn import PlXrn, hostname_to_urn, hrn_to_pl_slicename
17 from sfa.rspecs.rspec import RSpec
18 from sfa.rspecs.elements.location import Location
19 from sfa.rspecs.elements.hardware_type import HardwareType
20 from sfa.rspecs.elements.node import Node
21 #from sfa.rspecs.elements.link import Link
22 #from sfa.rspecs.elements.sliver import Sliver
23 #from sfa.rspecs.elements.login import Login
24 #from sfa.rspecs.elements.location import Location
25 #from sfa.rspecs.elements.interface import Interface
26 #from sfa.rspecs.elements.services import Services
27 #from sfa.rspecs.elements.pltag import PLTag
28 from sfa.util.topology import Topology
29 from sfa.rspecs.version_manager import VersionManager
30 #from sfa.plc.vlink import get_tc_rate
31 from sfa.util.sfatime import epochparse
48 def __init__(self ,api):
49 self.OARImporter = OARapi()
50 self.driver = SlabDriver(Config())
52 print >>sys.stderr,"\r\n \r\n \t\t_____________INIT OARRSPEC__ api : %s" %(api)
59 #if slice and 'node_ids' in slice and slice['node_ids']:
60 #filter['node_id'] = slice['node_ids']
61 #tags_filter=filter.copy()
63 #filter.update({'peer_id': None})
64 nodes = self.driver.GetNodes(filtre)
71 #site_ids.append(node['site_id'])
72 #interface_ids.extend(node['interface_ids'])
73 #tag_ids.extend(node['node_tag_ids'])
74 nodes_dict[node['node_id']] = node
77 #sites_dict = self.get_sites({'site_id': site_ids})
79 #interfaces = self.get_interfaces({'interface_id':interface_ids})
81 #node_tags = self.get_node_tags(tags_filter)
83 #pl_initscripts = self.get_pl_initscripts()
85 #links = self.get_links(sites_dict, nodes_dict, interfaces)
89 # skip whitelisted nodes
90 #if node['slice_ids_whitelist']:
91 #if not slice or slice['slice_id'] not in node['slice_ids_whitelist']:
94 # xxx how to retrieve site['login_base']
95 #site_id=node['site_id']
96 #site=sites_dict[site_id]
97 rspec_node['component_id'] = hostname_to_urn(self.driver.root_auth, node['site_login_base'], node['hostname'])
98 rspec_node['component_name'] = node['hostname']
99 rspec_node['component_manager_id'] = hrn_to_urn(self.driver.root_auth, 'authority+sa')
100 rspec_node['authority_id'] = hrn_to_urn(PlXrn.site_hrn(self.driver.root_auth, node['site_login_base']), 'authority+sa')
101 rspec_node['boot_state'] = node['boot_state']
102 if node['posx'] and node['posy']:
103 location = Location({'longitude':node['posx'], 'latitude': node['posy']})
104 rspec_node['location'] = location
106 rspec_node['exclusive'] = 'True'
107 rspec_node['hardware_types']= [HardwareType({'name': 'senslab sensor node'})]
108 # only doing this because protogeni rspec needs
109 # to advertise available initscripts
110 #rspec_node['pl_initscripts'] = pl_initscripts.values()
111 # add site/interface info to nodes.
112 # assumes that sites, interfaces and tags have already been prepared.
113 #site = sites_dict[node['site_id']]
114 #if site['longitude'] and site['latitude']:
115 #location = Location({'longitude': site['longitude'], 'latitude': site['latitude']})
116 #rspec_node['location'] = location
117 rspec_node['interfaces'] = []
119 #for if_id in node['interface_ids']:
120 #interface = Interface(interfaces[if_id])
121 #interface['ipv4'] = interface['ip']
122 #interface['component_id'] = PlXrn(auth=self.api.hrn, interface='node%s:eth%s' % (node['node_id'], if_count)).get_urn()
123 #rspec_node['interfaces'].append(interface)
126 #tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']]
127 rspec_node['tags'] = []
128 #if node['node_id'] in slivers:
130 #sliver = slivers[node['node_id']]
131 #rspec_node['sliver_id'] = sliver['sliver_id']
132 #rspec_node['client_id'] = node['hostname']
133 #rspec_node['slivers'] = [sliver]
135 ## slivers always provide the ssh service
136 #login = Login({'authentication': 'ssh-keys', 'hostname': node['hostname'], 'port':'22'})
137 #service = Services({'login': login})
138 #rspec_node['services'] = [service]
139 rspec_nodes.append(rspec_node)
142 #from plc/aggregate.py
143 def get_rspec(self, slice_xrn=None, version = None, options={}):
144 print>>sys.stderr, " \r\n OARrspec \t\t get_rspec **************\r\n"
148 version_manager = VersionManager()
149 version = version_manager.get_version(version)
153 rspec_version = version_manager._get_version(version.type, version.version, 'ad')
155 rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
157 rspec = RSpec(version=rspec_version, user_options=options)
159 nodes = self.get_nodes()
160 rspec.version.add_nodes(nodes)
162 print >>sys.stderr, 'after add_nodes '