peer x foreign_node relationship in a separate peer_node table -- uses new db interface
[plcapi.git] / PLC / Methods / RefreshPeer.py
1 #
2 # Thierry Parmentelat - INRIA
3
4
5 import xmlrpclib
6
7 from PLC.Faults import *
8 from PLC.Method import Method
9 from PLC.Parameter import Parameter, Mixed
10 from PLC.Auth import Auth
11
12 from PLC.Peers import Peer, Peers
13 from PLC.Persons import Person, Persons
14 from PLC.ForeignNodes import ForeignNode, ForeignNodes
15
16
17 class RefreshPeer(Method):
18     """
19     Query a peer PLC for its list of nodes, and refreshes
20     the local database accordingly
21     
22     Returns the number of new nodes from that peer - may be negative
23     """
24     
25     roles = ['admin']
26     
27     accepts = [ Auth(),
28                 Parameter (int, "Peer id") ]
29     
30     returns = Parameter(int, "Delta in number of foreign nodes attached to that peer")
31
32     def call (self, auth, peer_id):
33         
34         ### retrieve peer info
35         peers = Peers (self.api,[peer_id])
36         if not peers:
37             raise PLCInvalidArgument,'no such peer_id:%d'%peer_id
38         peer=peers[0]
39         
40         ### retrieve account info
41         person_id = peer['person_id']
42         persons = Persons (self.api,[person_id])
43         if not persons:
44             raise PLCInvalidArgument,'no such person_id:%d'%person_id
45         person = persons[0]
46         
47         ### build up foreign auth
48         auth={ 'Username': person['email'],
49                'AuthMethod' : 'password',
50                'AuthString' : person['password'],
51                'Role' : 'admin' }
52
53         ## connect to the peer's API
54         url=peer['peer_url']+"/PLCAPI/"
55         print 'url=',url
56         apiserver = xmlrpclib.Server (url)
57         print 'auth=',auth
58         current_peer_nodes = apiserver.GetNodes(auth)
59         print 'current_peer_nodes',current_peer_nodes
60
61         ## manual feed for tests
62         n11={'session': None, 'slice_ids': [], 'nodegroup_ids': [], 'last_updated': 1162884349, 'version': None, 'nodenetwork_ids': [], 'boot_state': 'inst', 'hostname': 'n11.plc1.org', 'site_id': 1, 'ports': None, 'pcu_ids': [], 'boot_nonce': None, 'node_id': 1, 'root_person_ids': [], 'key': None, 'date_created': 1162884349, 'model': None, 'conf_file_ids': [], 'ssh_rsa_key': None}
63         n12={'session': None, 'slice_ids': [], 'nodegroup_ids': [], 'last_updated': 1162884349, 'version': None, 'nodenetwork_ids': [], 'boot_state': 'inst', 'hostname': 'n12.plc1.org', 'site_id': 1, 'ports': None, 'pcu_ids': [], 'boot_nonce': None, 'node_id': 1, 'root_person_ids': [], 'key': None, 'date_created': 1162884349, 'model': None, 'conf_file_ids': [], 'ssh_rsa_key': None}
64         n21={'session': None, 'slice_ids': [], 'nodegroup_ids': [], 'last_updated': 1162884349, 'version': None, 'nodenetwork_ids': [], 'boot_state': 'boot', 'hostname': 'n21.plc2.org', 'site_id': 1, 'ports': None, 'pcu_ids': [], 'boot_nonce': None, 'node_id': 1, 'root_person_ids': [], 'key': None, 'date_created': 1162884349, 'model': None, 'conf_file_ids': [], 'ssh_rsa_key': None}
65         n22={'session': None, 'slice_ids': [], 'nodegroup_ids': [], 'last_updated': 1162884349, 'version': None, 'nodenetwork_ids': [], 'boot_state': 'boot', 'hostname': 'n22.plc2.org', 'site_id': 1, 'ports': None, 'pcu_ids': [], 'boot_nonce': None, 'node_id': 1, 'root_person_ids': [], 'key': None, 'date_created': 1162884349, 'model': None, 'conf_file_ids': [], 'ssh_rsa_key': None}
66
67 #        current_peer_nodes = []
68 #        print 'current_peer_nodes',current_peer_nodes
69
70         nb_new_nodes = peer.refresh_nodes(current_peer_nodes)
71
72         return nb_new_nodes