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.hardware_type import HardwareType
19 from sfa.rspecs.elements.node import Node
20 #from sfa.rspecs.elements.link import Link
21 #from sfa.rspecs.elements.sliver import Sliver
22 #from sfa.rspecs.elements.login import Login
23 #from sfa.rspecs.elements.location import Location
24 #from sfa.rspecs.elements.interface import Interface
25 #from sfa.rspecs.elements.services import Services
26 #from sfa.rspecs.elements.pltag import PLTag
27 from sfa.util.topology import Topology
28 from sfa.rspecs.version_manager import VersionManager
29 #from sfa.plc.vlink import get_tc_rate
30 from sfa.util.sfatime import epochparse
44 #panos new user options variable
47 def __init__(self ,api, user_options={}):
48 self.OARImporter = OARapi()
49 self.driver = SlabDriver(Config())
50 self.user_options = user_options
52 print >>sys.stderr,"\r\n \r\n \t\t_____________INIT OARRSPEC__ api : %s" %(api)
54 def prepare_sites(self, force=False):
55 print >>sys.stderr,'\r\n \r\n ++++++++++++++\t\t prepare_sites'
56 if not self.sites or force:
57 for site in self.OARImporter.GetSites():
58 print >>sys.stderr,'prepare_sites : site ', site
59 self.sites[site['site_id']] = site
62 def prepare_nodes(self, force=False):
63 if not self.nodes or force:
64 for node in self.driver.GetNodes():
65 #for node in self.OARImporter.GetNodes():
66 self.nodes[node['node_id']] = node
68 #def prepare_interfaces(self, force=False):
69 #if not self.interfaces or force:
70 #for interface in self.api.plshell.GetInterfaces(self.api.plauth):
71 #self.interfaces[interface['interface_id']] = interface
73 #def prepare_node_tags(self, force=False):
74 #if not self.node_tags or force:
75 #for node_tag in self.api.plshell.GetNodeTags(self.api.plauth):
76 #self.node_tags[node_tag['node_tag_id']] = node_tag
78 def prepare_links(self, force=False):
79 if not self.links or force:
82 def prepare(self, force=False):
83 if not self.prepared or force:
84 #self.prepare_sites(force)
85 self.prepare_nodes(force)
87 #self.prepare_links(force)
88 #self.prepare_interfaces(force)
89 #self.prepare_node_tags(force)
90 # add site/interface info to nodes
91 for node_id in self.nodes:
92 node = self.nodes[node_id]
93 #site = self.sites[node['site_id']]
94 #interfaces = [self.interfaces[interface_id] for interface_id in node['interface_ids']]
95 #tags = [self.node_tags[tag_id] for tag_id in node['node_tag_ids']]
96 node['network'] = self.driver.root_auth
97 node['network_urn'] = hrn_to_urn(node['network'], 'authority+am')
98 #node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
99 node['site_urn'] = hrn_to_urn(PlXrn.site_hrn(node['network'], node['site_login_base']), 'authority+sa')
100 node['urn'] = hostname_to_urn(node['network'], node['site_login_base'], node['hostname'])
101 #node['urn'] = PlXrn(auth=node['network']+'.',hostname=node['hostname']).get_urn()
104 #node['interfaces'] = interfaces
108 print >>sys.stderr, "\r\n OARrspec prepare node 10",self.nodes[10]
109 #print >>sys.stderr, " \r\n \t\t prepare prepare_nodes \r\n %s " %(self.nodes)
114 #if slice and 'node_ids' in slice and slice['node_ids']:
115 #filter['node_id'] = slice['node_ids']
116 #tags_filter=filter.copy()
118 #filter.update({'peer_id': None})
119 nodes = self.driver.GetNodes(filtre)
126 #site_ids.append(node['site_id'])
127 #interface_ids.extend(node['interface_ids'])
128 #tag_ids.extend(node['node_tag_ids'])
129 nodes_dict[node['node_id']] = node
132 #sites_dict = self.get_sites({'site_id': site_ids})
134 #interfaces = self.get_interfaces({'interface_id':interface_ids})
136 #node_tags = self.get_node_tags(tags_filter)
138 #pl_initscripts = self.get_pl_initscripts()
140 #links = self.get_links(sites_dict, nodes_dict, interfaces)
144 # skip whitelisted nodes
145 #if node['slice_ids_whitelist']:
146 #if not slice or slice['slice_id'] not in node['slice_ids_whitelist']:
149 # xxx how to retrieve site['login_base']
150 #site_id=node['site_id']
151 #site=sites_dict[site_id]
152 rspec_node['component_id'] = hostname_to_urn(self.driver.root_auth, node['site_login_base'], node['hostname'])
153 rspec_node['component_name'] = node['hostname']
154 rspec_node['component_manager_id'] = hrn_to_urn(self.driver.root_auth, 'authority+sa')
155 rspec_node['authority_id'] = hrn_to_urn(PlXrn.site_hrn(self.driver.root_auth, node['site_login_base']), 'authority+sa')
156 rspec_node['boot_state'] = node['boot_state']
157 rspec_node['exclusive'] = 'True'
158 rspec_node['hardware_types']= [HardwareType({'name': 'senslab sensor node'})]
159 # only doing this because protogeni rspec needs
160 # to advertise available initscripts
161 #rspec_node['pl_initscripts'] = pl_initscripts.values()
162 # add site/interface info to nodes.
163 # assumes that sites, interfaces and tags have already been prepared.
164 #site = sites_dict[node['site_id']]
165 #if site['longitude'] and site['latitude']:
166 #location = Location({'longitude': site['longitude'], 'latitude': site['latitude']})
167 #rspec_node['location'] = location
168 rspec_node['interfaces'] = []
170 #for if_id in node['interface_ids']:
171 #interface = Interface(interfaces[if_id])
172 #interface['ipv4'] = interface['ip']
173 #interface['component_id'] = PlXrn(auth=self.api.hrn, interface='node%s:eth%s' % (node['node_id'], if_count)).get_urn()
174 #rspec_node['interfaces'].append(interface)
177 #tags = [PLTag(node_tags[tag_id]) for tag_id in node['node_tag_ids']]
178 rspec_node['tags'] = []
179 #if node['node_id'] in slivers:
181 #sliver = slivers[node['node_id']]
182 #rspec_node['sliver_id'] = sliver['sliver_id']
183 #rspec_node['client_id'] = node['hostname']
184 #rspec_node['slivers'] = [sliver]
186 ## slivers always provide the ssh service
187 #login = Login({'authentication': 'ssh-keys', 'hostname': node['hostname'], 'port':'22'})
188 #service = Services({'login': login})
189 #rspec_node['services'] = [service]
190 rspec_nodes.append(rspec_node)
193 #from plc/aggregate.py
194 def get_rspec(self, slice_xrn=None, version = None):
195 print>>sys.stderr, " \r\n OARrspec \t\t get_rspec **************\r\n"
199 version_manager = VersionManager()
200 version = version_manager.get_version(version)
201 #rspec_version = RSpecVersion(version)
202 #print >>sys.stderr, '\r\n \t\t rspec_version type',version_manager['type']
205 rspec_version = version_manager._get_version(version.type, version.version, 'ad')
207 rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
209 rspec = RSpec(version=rspec_version, user_options=self.user_options)
211 nodes = self.get_nodes()
212 rspec.version.add_nodes(nodes)
214 print >>sys.stderr, 'after add_nodes '