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
45 #panos new user options variable
48 def __init__(self ,api):
49 #def __init__(self ,api, user_options={}):
50 self.OARImporter = OARapi()
51 self.driver = SlabDriver(Config())
52 #self.user_options = user_options
54 print >>sys.stderr,"\r\n \r\n \t\t_____________INIT OARRSPEC__ api : %s" %(api)
56 def prepare_sites(self, force=False):
57 print >>sys.stderr,'\r\n \r\n ++++++++++++++\t\t prepare_sites'
58 if not self.sites or force:
59 for site in self.OARImporter.GetSites():
60 print >>sys.stderr,'prepare_sites : site ', site
61 self.sites[site['site_id']] = site
64 def prepare_nodes(self, force=False):
65 if not self.nodes or force:
66 for node in self.driver.GetNodes():
67 #for node in self.OARImporter.GetNodes():
68 self.nodes[node['node_id']] = node
70 #def prepare_interfaces(self, force=False):
71 #if not self.interfaces or force:
72 #for interface in self.api.plshell.GetInterfaces(self.api.plauth):
73 #self.interfaces[interface['interface_id']] = interface
75 #def prepare_node_tags(self, force=False):
76 #if not self.node_tags or force:
77 #for node_tag in self.api.plshell.GetNodeTags(self.api.plauth):
78 #self.node_tags[node_tag['node_tag_id']] = node_tag
80 def prepare_links(self, force=False):
81 if not self.links or force:
84 def prepare(self, force=False):
85 if not self.prepared or force:
86 #self.prepare_sites(force)
87 self.prepare_nodes(force)
89 #self.prepare_links(force)
90 #self.prepare_interfaces(force)
91 #self.prepare_node_tags(force)
92 # add site/interface info to nodes
93 for node_id in self.nodes:
94 node = self.nodes[node_id]
95 #site = self.sites[node['site_id']]
96 #interfaces = [self.interfaces[interface_id] for interface_id in node['interface_ids']]
97 #tags = [self.node_tags[tag_id] for tag_id in node['node_tag_ids']]
98 node['network'] = self.driver.root_auth
99 node['network_urn'] = hrn_to_urn(node['network'], 'authority+am')
100 #node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
101 node['site_urn'] = hrn_to_urn(PlXrn.site_hrn(node['network'], node['site_login_base']), 'authority+sa')
102 node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
103 #node['urn'] = PlXrn(auth=node['network']+'.',hostname=node['hostname']).get_urn()
106 #node['interfaces'] = interfaces
110 print >>sys.stderr, "\r\n OARrspec prepare node 10",self.nodes[10]
111 #print >>sys.stderr, " \r\n \t\t prepare prepare_nodes \r\n %s " %(self.nodes)
116 #if slice and 'node_ids' in slice and slice['node_ids']:
117 #filter['node_id'] = slice['node_ids']
118 #tags_filter=filter.copy()
120 #filter.update({'peer_id': None})
121 nodes = self.driver.GetNodes(filtre)
128 #site_ids.append(node['site_id'])
129 #interface_ids.extend(node['interface_ids'])
130 #tag_ids.extend(node['node_tag_ids'])
131 nodes_dict[node['node_id']] = node
134 #sites_dict = self.get_sites({'site_id': site_ids})
136 #interfaces = self.get_interfaces({'interface_id':interface_ids})
138 #node_tags = self.get_node_tags(tags_filter)
140 #pl_initscripts = self.get_pl_initscripts()
142 #links = self.get_links(sites_dict, nodes_dict, interfaces)
146 # skip whitelisted nodes
147 #if node['slice_ids_whitelist']:
148 #if not slice or slice['slice_id'] not in node['slice_ids_whitelist']:
151 # xxx how to retrieve site['login_base']
152 #site_id=node['site_id']
153 #site=sites_dict[site_id]
154 rspec_node['component_id'] = hostname_to_urn(self.driver.root_auth, node['site_login_base'], node['hostname'])
155 rspec_node['component_name'] = node['hostname']
156 rspec_node['component_manager_id'] = hrn_to_urn(self.driver.root_auth, 'authority+sa')
157 rspec_node['authority_id'] = hrn_to_urn(PlXrn.site_hrn(self.driver.root_auth, node['site_login_base']), 'authority+sa')
158 rspec_node['boot_state'] = node['boot_state']
159 if node['posx'] and node['posy']:
160 location = Location({'longitude':node['posx'], 'latitude': node['posy']})
161 rspec_node['location'] = location
163 rspec_node['exclusive'] = 'True'
164 rspec_node['hardware_types']= [HardwareType({'name': 'senslab sensor node'})]
165 # only doing this because protogeni rspec needs
166 # to advertise available initscripts
167 #rspec_node['pl_initscripts'] = pl_initscripts.values()
168 # add site/interface info to nodes.
169 # assumes that sites, interfaces and tags have already been prepared.
170 #site = sites_dict[node['site_id']]
171 #if site['longitude'] and site['latitude']:
172 #location = Location({'longitude': site['longitude'], 'latitude': site['latitude']})
173 #rspec_node['location'] = location
174 rspec_node['interfaces'] = []
176 #for if_id in node['interface_ids']:
177 #interface = Interface(interfaces[if_id])
178 #interface['ipv4'] = interface['ip']
179 #interface['component_id'] = PlXrn(auth=self.api.hrn, interface='node%s:eth%s' % (node['node_id'], if_count)).get_urn()
180 #rspec_node['interfaces'].append(interface)
183 #tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']]
184 rspec_node['tags'] = []
185 #if node['node_id'] in slivers:
187 #sliver = slivers[node['node_id']]
188 #rspec_node['sliver_id'] = sliver['sliver_id']
189 #rspec_node['client_id'] = node['hostname']
190 #rspec_node['slivers'] = [sliver]
192 ## slivers always provide the ssh service
193 #login = Login({'authentication': 'ssh-keys', 'hostname': node['hostname'], 'port':'22'})
194 #service = Services({'login': login})
195 #rspec_node['services'] = [service]
196 rspec_nodes.append(rspec_node)
199 #from plc/aggregate.py
200 def get_rspec(self, slice_xrn=None, version = None):
201 print>>sys.stderr, " \r\n OARrspec \t\t get_rspec **************\r\n"
205 version_manager = VersionManager()
206 version = version_manager.get_version(version)
207 #rspec_version = RSpecVersion(version)
208 #print >>sys.stderr, '\r\n \t\t rspec_version type',version_manager['type']
211 rspec_version = version_manager._get_version(version.type, version.version, 'ad')
213 rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
215 rspec = RSpec(version=rspec_version, user_options=self.user_options)
217 nodes = self.get_nodes()
218 rspec.version.add_nodes(nodes)
220 print >>sys.stderr, 'after add_nodes '