- returns = Parameter(int, 'New node_id (> 0) if successful')
-
- def call(self, auth, site_id_or_login_base, hostname, boot_state, optional_vals = {}):
- if filter(lambda field: field not in self.update_fields, optional_vals):
- raise PLCInvalidArgument, "Invalid fields specified"
-
- # Get site information
- sites = Sites(self.api, [site_id_or_login_base])
- if not sites:
- raise PLCInvalidArgument, "No such site"
-
- site = sites.values()[0]
-
- # Authenticated function
- assert self.caller is not None
-
- # If we are not an admin, make sure that the caller is a
- # member of the site.
- if 'admin' not in self.caller['roles']:
- if site['site_id'] not in self.caller['site_ids']:
- assert self.caller['person_id'] not in site['person_ids']
- raise PLCPermissionDenied, "Not allowed to add nodes to specified site"
- else:
- assert self.caller['person_id'] in site['person_ids']
-
- node = Node(self.api, optional_vals)
- node['hostname'] = hostname
- node['boot_state'] = boot_state
- node['site_id'] = site['site_id']
- node.sync(commit = False)
-
- return node['node_id']
+ def call(self, auth, site_id, hostname, boot_state, node_fields = {}):
+ node_fields['site_id'] = site_id
+ node_fields['hostname'] = hostname
+ node_fields['boot_state'] = boot_state
+ return AddNode.call(self, auth, node_fields)