from PLC.Parameter import Parameter, Mixed
from PLC.Nodes import Node, Nodes
from PLC.PCUs import PCU, PCUs
+from PLC.Sites import Site, Sites
from PLC.Auth import Auth
class AddNodeToPCU(Method):
accepts = [
Auth(),
- Mixed(Node.fields['node_id'],
+ Mixed(Node.fields['node_id'],
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):
- # Get node
+ # Get 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"
-
- pcu = pcus.values()[0]
+ pcu = pcus[0]
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"
-
- # Add node to PCU
+
+ # Add node to PCU
if node['node_id'] in pcu['node_ids']:
raise PLCInvalidArgument, "Node already controlled by PCU"
pcu.add_node(node, port)
- self.object_ids = [node['node_id'], 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