merged master onto senslab2, manually solved conflicts in setup.py
[sfa.git] / sfa / senslab / OARrspec.py
1
2 #!/usr/bin/python
3
4 # import modules used here -- sys is a very standard one
5 import sys
6 import httplib
7 import json
8
9
10 from sfa.util.xrn import *
11 from sfa.util.plxrn import *
12 #from sfa.rspecs.sfa_rspec import SfaRSpec
13 from sfa.rspecs.rspec import RSpec
14 #from sfa.rspecs.pg_rspec  import PGRSpec
15 #from sfa.rspecs.rspec_version import RSpecVersion
16 from sfa.rspecs.version_manager import VersionManager
17 from sfa.senslab.OARrestapi import *
18
19 class OARrspec:
20
21     
22     sites = {}
23     nodes = {}
24     api = None
25     interfaces = {}
26     links = {}
27     node_tags = {}
28     
29     prepared=False
30     #panos new user options variable
31     user_options = {}
32
33     def __init__(self ,api, user_options={}):
34         self.OARImporter = OARapi()     
35         self.user_options = user_options
36         self.api = api 
37         print >>sys.stderr,"\r\n \r\n \t\t_____________INIT OARRSPEC__ api : %s" %(api)
38
39     def prepare_sites(self, force=False):
40         print >>sys.stderr,'\r\n \r\n ++++++++++++++\t\t prepare_sites'
41         if not self.sites or force:  
42              for site in self.OARImporter.GetSites():
43                 print >>sys.stderr,'prepare_sites : site ', site                    
44                 self.sites[site['site_id']] = site
45         
46     
47     def prepare_nodes(self, force=False):
48         if not self.nodes or force:
49             for node in self.OARImporter.GetNodes():
50                 self.nodes[node['node_id']] = node
51                 print >>sys.stderr,'prepare_nodes:node', node
52
53     #def prepare_interfaces(self, force=False):
54         #if not self.interfaces or force:
55             #for interface in self.api.plshell.GetInterfaces(self.api.plauth):
56                 #self.interfaces[interface['interface_id']] = interface
57
58     #def prepare_node_tags(self, force=False):
59         #if not self.node_tags or force:
60             #for node_tag in self.api.plshell.GetNodeTags(self.api.plauth):
61                 #self.node_tags[node_tag['node_tag_id']] = node_tag
62                 
63     def prepare_links(self, force=False):
64         if not self.links or force:
65             pass
66
67     def prepare(self, force=False):
68         if not self.prepared or force:
69             self.prepare_sites(force)
70             self.prepare_nodes(force)
71             #self.prepare_links(force)
72             #self.prepare_interfaces(force)
73             #self.prepare_node_tags(force)          
74             # add site/interface info to nodes
75             for node_id in self.nodes:
76                 node = self.nodes[node_id]
77                 site = self.sites[node['site_id']]
78                 #interfaces = [self.interfaces[interface_id] for interface_id in node['interface_ids']]
79                 #tags = [self.node_tags[tag_id] for tag_id in node['node_tag_ids']]
80                 node['network'] = "senslab"     
81                 node['network_urn'] = hrn_to_urn(node['network'], 'authority+am')
82                 node['urn'] = hostname_to_urn(node['network'], site['login_base'], node['hostname'])
83                 node['site_urn'] = hrn_to_urn(PlXrn.site_hrn(node['network'], site['login_base']), 'authority+sa') 
84                 node['site'] = site
85                 #node['interfaces'] = interfaces
86                 #node['tags'] = tags
87                 #print >>sys.stderr, "\r\n OAR  prepare ", node 
88                 
89         self.prepared = True  
90         
91 #from plc/aggregate.py 
92     def get_rspec(self, slice_xrn=None, version = None):
93         print>>sys.stderr, " \r\n OARrspec \t\t get_spec **************\r\n" 
94         self.prepare()
95         
96         rspec = None
97         version_manager = VersionManager()
98         version = version_manager.get_version(version)
99         #rspec_version = RSpecVersion(version)
100         #print >>sys.stderr, '\r\n \t\t rspec_version type',version_manager['type']
101         
102         if not slice_xrn:
103             rspec_version = version_manager._get_version(version.type, version.version, 'ad')
104         else:
105             rspec_version = version_manager._get_version(version.type, version.version, 'manifest')
106       
107         rspec = RSpec(version=rspec_version, user_options=self.user_options)
108         rspec.version.add_nodes(self.nodes.values())
109         print >>sys.stderr, 'after add_nodes'
110       
111
112         #rspec.add_links(self.links.values())
113
114         #if slice_xrn:
115             ## get slice details
116             #slice_hrn, _ = urn_to_hrn(slice_xrn)
117             #slice_name = hrn_to_pl_slicename(slice_hrn)
118             #slices = self.api.plshell.GetSlices(self.api.plauth, slice_name)
119             #if slices:
120                 #slice = slices[0]
121                 #slivers = []
122                 #tags = self.api.plshell.GetSliceTags(self.api.plauth, slice['slice_tag_ids'])
123                 #for node_id in slice['node_ids']:
124                     #sliver = {}
125                     #sliver['hostname'] = self.nodes[node_id]['hostname']
126                     #sliver['tags'] = []
127                     #slivers.append(sliver)
128                     #for tag in tags:
129                         ## if tag isn't bound to a node then it applies to all slivers
130                         #if not tag['node_id']:
131                             #sliver['tags'].append(tag)
132                         #else:
133                             #tag_host = self.nodes[tag['node_id']]['hostname']
134                             #if tag_host == sliver['hostname']:
135                                 #sliver.tags.append(tag)
136                 #rspec.add_slivers(slivers)
137         return rspec.toxml()