from PLC.Faults import * from PLC.Method import Method from PLC.Parameter import Parameter, Mixed from PLC.NodeGroups import NodeGroup, NodeGroups from PLC.Auth import Auth can_update = lambda field_value: field_value[0] in ['groupname','value'] class UpdateNodeGroup(Method): """ Updates a custom node group. Returns 1 if successful, faults otherwise. """ roles = ['admin'] nodegroup_fields = dict(list(filter(can_update, list(NodeGroup.fields.items())))) accepts = [ Auth(), Mixed(NodeGroup.fields['nodegroup_id'], NodeGroup.fields['groupname']), nodegroup_fields ] returns = Parameter(int, '1 if successful') def call(self, auth, nodegroup_id_or_name, nodegroup_fields): nodegroup_fields = dict(list(filter(can_update, list(nodegroup_fields.items())))) # Get nodegroup information nodegroups = NodeGroups(self.api, [nodegroup_id_or_name]) if not nodegroups: raise PLCInvalidArgument("No such nodegroup %r"%nodegroup_id_or_name) nodegroup = nodegroups[0] nodegroup.update(nodegroup_fields) nodegroup.sync() # Logging variables self.event_objects = {'NodeGroup': [nodegroup['nodegroup_id']]} self.message = 'Node group %d updated: %s' % \ (nodegroup['nodegroup_id'], ", ".join(list(nodegroup_fields.keys()))) return 1