2 from PLC.Faults import *
3 from PLC.Method import Method
4 from PLC.Parameter import Parameter, Mixed
5 from PLC.Auth import Auth, BootAuth, SessionAuth
6 from PLC.Nodes import Node, Nodes
8 can_update = ['run_level', 'extrainfo']
10 class ReportRunlevel(Method):
14 roles = ['node', 'admin']
17 Mixed(BootAuth(), SessionAuth(), Auth()),
18 {'run_level': Node.fields['run_level'],
19 'extrainfo': Node.fields['extrainfo'],
21 Mixed(Node.fields['node_id'],
22 Node.fields['hostname'])
25 returns = Parameter(int, '1 if successful')
27 def call(self, auth, report_fields, node_id_or_hostname=None):
29 if not isinstance(self.caller, Node):
31 if 'admin' not in self.caller['roles']:
32 raise PLCPermissionDenied, "Not allowed to update node run_level"
34 nodes = Nodes(self.api, [node_id_or_hostname])
36 raise PLCInvalidArgument, "No such node"
42 node.update_last_contact()
43 for field in can_update:
44 if field in report_fields:
45 node.update({field : report_fields[field]})
47 node.sync(commit=True)
49 self.message = "Node Runlevel Report : %s" % ", ".join(report_fields.keys())