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