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