- roles = ['admin']
-
- accepts = [Auth(),
- Parameter (int, "Peer id"),
- ]
- # for RefreshPeer
- returns = Parameter (dict,"Sites, Keys, Nodes, Persons, Slices")
-
- def call (self, auth, peer_id):
- # xxx a peer cannot yet compute it's peer_id under another plc
- # so we return evrything by now
-
- return {
- 'Sites' : Sites (self.api),
- 'Keys' : Keys (self.api),
- 'Nodes' : Nodes (self.api),
- 'Persons' : Persons (self.api),
- 'SliceAttibuteTypes' : SliceAttributeTypes (self.api),
- 'Slices' : Slices (self.api),
- 'SliceAttributes': SliceAttributes (self.api)
+ roles = ['admin', 'peer']
+
+ accepts = [Auth()]
+
+ returns = {
+ 'Sites': Parameter([dict], "List of local sites"),
+ 'Keys': Parameter([dict], "List of local keys"),
+ 'Nodes': Parameter([dict], "List of local nodes"),
+ 'Persons': Parameter([dict], "List of local users"),
+ 'Slices': Parameter([dict], "List of local slices"),
+ 'db_time': Parameter(float, "(Debug) Database fetch time"),
+ }
+
+ def call (self, auth):
+ start = time.time()
+
+ # Filter out various secrets
+ node_fields = filter(lambda field: field not in \
+ ['boot_nonce', 'key', 'session', 'root_person_ids'],
+ Node.fields)
+
+ person_fields = filter(lambda field: field not in \
+ ['password', 'verification_key', 'verification_expires'],
+ Person.fields)
+
+ # XXX Optimize to return only those Persons, Keys, and Slices
+ # necessary for slice creation on the calling peer's nodes.
+ result = {
+ 'Sites': Sites(self.api, {'peer_id': None}),
+ 'Keys': Keys(self.api, {'peer_id': None}),
+ 'Nodes': Nodes(self.api, {'peer_id': None}, node_fields),
+ 'Persons': Persons(self.api, {'peer_id': None}, person_fields),
+ 'Slices': Slices(self.api, {'peer_id': None}),