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