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