git://git.onelab.eu
/
plcapi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
====
[plcapi.git]
/
PLC
/
Methods
/
AddNodeToPCU.py
diff --git
a/PLC/Methods/AddNodeToPCU.py
b/PLC/Methods/AddNodeToPCU.py
index
5378987
..
72ed8a5
100644
(file)
--- a/
PLC/Methods/AddNodeToPCU.py
+++ b/
PLC/Methods/AddNodeToPCU.py
@@
-3,7
+3,8
@@
from PLC.Method import Method
from PLC.Parameter import Parameter, Mixed
from PLC.Nodes import Node, Nodes
from PLC.PCUs import PCU, PCUs
from PLC.Parameter import Parameter, Mixed
from PLC.Nodes import Node, Nodes
from PLC.PCUs import PCU, PCUs
-from PLC.Auth import PasswordAuth
+from PLC.Sites import Site, Sites
+from PLC.Auth import Auth
class AddNodeToPCU(Method):
"""
class AddNodeToPCU(Method):
"""
@@
-18,51
+19,56
@@
class AddNodeToPCU(Method):
roles = ['admin', 'pi', 'tech']
accepts = [
roles = ['admin', 'pi', 'tech']
accepts = [
-
Password
Auth(),
- Mixed(Node.fields['node_id'],
+ Auth(),
+
Mixed(Node.fields['node_id'],
Node.fields['hostname']),
PCU.fields['pcu_id'],
Parameter(int, 'PCU port number')
]
returns = Parameter(int, '1 if successful')
Node.fields['hostname']),
PCU.fields['pcu_id'],
Parameter(int, 'PCU port number')
]
returns = Parameter(int, '1 if successful')
- event_type = 'AddTo'
- object_type = 'PCU'
- object_ids = []
def call(self, auth, node_id_or_hostname, pcu_id, port):
def call(self, auth, node_id_or_hostname, pcu_id, port):
- # Get node
+
# Get node
nodes = Nodes(self.api, [node_id_or_hostname])
if not nodes:
raise PLCInvalidArgument, "No such node"
nodes = Nodes(self.api, [node_id_or_hostname])
if not nodes:
raise PLCInvalidArgument, "No such node"
+ node = nodes[0]
- node = nodes.values()[0]
+ if node['peer_id'] is not None:
+ raise PLCInvalidArgument, "Not a local node"
# Get PCU
pcus = PCUs(self.api, [pcu_id])
if not pcus:
raise PLCInvalidArgument, "No such PCU"
# Get PCU
pcus = PCUs(self.api, [pcu_id])
if not pcus:
raise PLCInvalidArgument, "No such PCU"
-
- pcu = pcus.values()[0]
+ pcu = pcus[0]
if 'admin' not in self.caller['roles']:
ok = False
if 'admin' not in self.caller['roles']:
ok = False
- sites = Sites(self.api, self.caller['site_ids'])
.values()
+ sites = Sites(self.api, self.caller['site_ids'])
for site in sites:
if pcu['pcu_id'] in site['pcu_ids']:
ok = True
break
if not ok:
raise PLCPermissionDenied, "Not allowed to update that PCU"
for site in sites:
if pcu['pcu_id'] in site['pcu_ids']:
ok = True
break
if not ok:
raise PLCPermissionDenied, "Not allowed to update that PCU"
-
- # Add node to PCU
+
+
# Add node to PCU
if node['node_id'] in pcu['node_ids']:
raise PLCInvalidArgument, "Node already controlled by PCU"
if node['node_id'] in pcu['node_ids']:
raise PLCInvalidArgument, "Node already controlled by PCU"
+ if node['site_id'] != pcu['site_id']:
+ raise PLCInvalidArgument, "Node is at a different site than this PCU"
+
if port in pcu['ports']:
raise PLCInvalidArgument, "PCU port already in use"
pcu.add_node(node, port)
if port in pcu['ports']:
raise PLCInvalidArgument, "PCU port already in use"
pcu.add_node(node, port)
- self.object_ids = [pcu['pcu_id']]
+ # Logging variables
+ self.event_objects = {'Node': [node['node_id']],
+ 'PCU': [pcu['pcu_id']]}
+ self.message = 'Node %d added to pcu %d on port %d' % \
+ (node['node_id'], pcu['pcu_id'], port)
return 1
return 1