This commit was manufactured by cvs2svn to create branch
[plcapi.git] / PLC / Methods / AdmQuerySite.py
1 import socket
2
3 from PLC.Faults import *
4 from PLC.Method import Method
5 from PLC.Parameter import Parameter, Mixed
6 from PLC.Sites import Site, Sites
7 from PLC.Nodes import Node, Nodes
8 from PLC.NodeNetworks import NodeNetwork, NodeNetworks, valid_ip
9 from PLC.Auth import Auth
10
11 class AdmQuerySite(Method):
12     """
13     Deprecated. Functionality can be implemented with GetSites and
14     GetNodes.
15     """
16
17     status = "deprecated"
18
19     roles = ['admin', 'pi', 'user', 'tech']
20
21     accepts = [
22         Auth(),
23         {'site_name': Site.fields['name'],
24          'site_abbreviatedname': Site.fields['abbreviated_name'],
25          'site_loginbase': Site.fields['login_base'],
26          'node_hostname': Node.fields['hostname'],
27          'node_id': Node.fields['node_id'],
28          'nodenetwork_ip': NodeNetwork.fields['ip'],
29          'nodenetwork_mac': NodeNetwork.fields['mac']}
30         ]
31
32     returns = [Site.fields['site_id']]
33
34     def call(self, auth, search_vals):
35         if 'site_loginbase' in search_vals:
36             sites = Sites(self.api, [search_vals['site_loginbase']])
37         else:
38             sites = Sites(self.api)
39             
40         if 'site_name' in search_vals:
41             sites = filter(lambda site: \
42                            site['name'] == search_vals['site_name'],
43                            sites)
44
45         if 'site_abbreviatedname' in search_vals:
46             sites = filter(lambda site: \
47                            site['abbreviatedname'] == search_vals['site_abbreviatedname'],
48                            sites)
49
50         if 'node_id' in search_vals:
51             sites = filter(lambda site: \
52                            search_vals['node_id'] in site['node_ids'],
53                            sites)
54
55         if 'node_hostname' in search_vals or \
56            'nodenetwork_ip' in search_vals or \
57            'nodenetwork_mac' in search_vals:
58             for site in sites:
59                 site['hostnames'] = []
60                 site['ips'] = []
61                 site['macs'] = []
62                 if site['node_ids']:
63                     nodes = Nodes(self.api, site['node_ids'])
64                     for node in nodes:
65                         site['hostnames'].append(node['hostname'])
66                         if 'nodenetwork_ip' in search_vals or \
67                            'nodenetwork_mac' in search_vals:
68                             nodenetworks = NodeNetworks(self.api, node['nodenetwork_ids'])
69                             site['ips'] += [nodenetwork['ip'] for nodenetwork in nodenetworks]
70                             site['macs'] += [nodenetwork['mac'] for nodenetwork in nodenetworks]
71
72             if 'node_hostname' in search_vals:
73                 sites = filter(lambda site: \
74                                search_vals['node_hostname'] in site['hostnames'],
75                                sites)
76
77             if 'nodenetwork_ip' in search_vals:
78                 sites = filter(lambda site: \
79                                search_vals['nodenetwork_ip'] in site['ips'],
80                                sites)
81
82             if 'nodenetwork_mac' in search_vals:
83                 sites = filter(lambda site: \
84                                search_vals['nodenetwork_mac'] in site['macs'],
85                                sites)
86
87         return [site['site_id'] for site in sites]