2 # Thierry Parmentelat - INRIA
7 from PLC.Faults import *
8 from PLC.Method import Method
9 from PLC.Parameter import Parameter, Mixed
10 from PLC.Auth import Auth
12 from PLC.Peers import Peer, Peers
13 from PLC.Persons import Person, Persons
14 from PLC.ForeignNodes import ForeignNode, ForeignNodes
17 class RefreshPeer(Method):
19 Query a peer PLC for its list of nodes, and refreshes
20 the local database accordingly
22 Returns the number of new nodes from that peer - may be negative
28 Parameter (int, "Peer id") ]
30 returns = Parameter(int, "Delta in number of foreign nodes attached to that peer")
32 def call (self, auth, peer_id):
34 ### retrieve peer info
35 peers = Peers (self.api,[peer_id])
37 raise PLCInvalidArgument,'no such peer_id:%d'%peer_id
40 ### retrieve account info
41 person_id = peer['person_id']
42 persons = Persons (self.api,[person_id])
44 raise PLCInvalidArgument,'no such person_id:%d'%person_id
47 ### build up foreign auth
48 auth={ 'Username': person['email'],
49 'AuthMethod' : 'password',
50 'AuthString' : person['password'],
53 ## connect to the peer's API
54 url=peer['peer_url']+"/PLCAPI/"
56 apiserver = xmlrpclib.Server (url)
58 current_peer_nodes = apiserver.GetNodes(auth)
59 print 'current_peer_nodes',current_peer_nodes
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}
67 # current_peer_nodes = []
68 # print 'current_peer_nodes',current_peer_nodes
70 nb_new_nodes = peer.refresh_nodes(current_peer_nodes)