def get_pilots(self, pilot_ids=None): """Returns one or more :class:`radical.pilot.ComputePilot` instances. **Arguments:** * **pilot_uids** [`list of strings`]: If pilot_uids is set, only the Pilots with the specified uids are returned. If pilot_uids is `None`, all Pilots are returned. **Returns:** * A list of :class:`radical.pilot.ComputePilot` objects [`list of :class:`radical.pilot.ComputePilot`]. **Raises:** * :class:`radical.pilot.PilotException` """ self._assert_obj_is_valid() return_list_type = True if (not isinstance(pilot_ids, list)) and (pilot_ids is not None): return_list_type = False pilot_ids = [pilot_ids] pilots = ComputePilot._get(pilot_ids=pilot_ids, pilot_manager_obj=self) if return_list_type: return pilots else: return pilots[0]
def get_pilots(self, pilot_ids=None): """Returns one or more :class:`radical.pilot.ComputePilot` instances. **Arguments:** * **pilot_uids** [`list of strings`]: If pilot_uids is set, only the Pilots with the specified uids are returned. If pilot_uids is `None`, all Pilots are returned. **Returns:** * A list of :class:`radical.pilot.ComputePilot` objects [`list of :class:`radical.pilot.ComputePilot`]. **Raises:** * :class:`radical.pilot.PilotException` """ self._assert_obj_is_valid() return_list_type = True if (not isinstance(pilot_ids, list)) and (pilot_ids is not None): return_list_type = False pilot_ids = [pilot_ids] pilots = ComputePilot._get(pilot_ids=pilot_ids, pilot_manager_obj=self) if return_list_type : return pilots else : return pilots[0]
def submit_pilots(self, pilot_descriptions): """Submits a new :class:`radical.pilot.ComputePilot` to a resource. **Returns:** * One or more :class:`radical.pilot.ComputePilot` instances [`list of :class:`radical.pilot.ComputePilot`]. **Raises:** * :class:`radical.pilot.PilotException` """ # Check if the object instance is still valid. self._assert_obj_is_valid() # Implicit list conversion. return_list_type = True if not isinstance(pilot_descriptions, list): return_list_type = False pilot_descriptions = [pilot_descriptions] # Itereate over the pilot descriptions, try to create a pilot for # each one and append it to 'pilot_obj_list'. pilot_obj_list = list() for pilot_description in pilot_descriptions: if pilot_description.resource is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'resource'." raise BadParameter(error_msg) elif pilot_description.runtime is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'runtime'." raise BadParameter(error_msg) elif pilot_description.cores is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'cores'." raise BadParameter(error_msg) resource_key = pilot_description.resource resource_cfg = self._session.get_resource_config(resource_key) # Check resource-specific mandatory attributes if "mandatory_args" in resource_cfg: for ma in resource_cfg["mandatory_args"]: if getattr(pilot_description, ma) is None: error_msg = "ComputePilotDescription does not define attribute '{0}' which is required for '{1}'.".format( ma, resource_key) raise BadParameter(error_msg) # we expand and exchange keys in the resource config, depending on # the selected schema so better use a deep copy... import copy resource_cfg = copy.deepcopy(resource_cfg) schema = pilot_description['access_schema'] if not schema: if 'schemas' in resource_cfg: schema = resource_cfg['schemas'][0] # import pprint # print "no schema, using %s" % schema # pprint.pprint (pilot_description) if not schema in resource_cfg: # import pprint # pprint.pprint (resource_cfg) logger.warning ("schema %s unknown for resource %s -- continue with defaults" \ % (schema, resource_key)) else: for key in resource_cfg[schema]: # merge schema specific resource keys into the # resource config resource_cfg[key] = resource_cfg[schema][key] # If 'default_sandbox' is defined, set it. if pilot_description.sandbox is not None: if "valid_roots" in resource_cfg and resource_cfg[ "valid_roots"] is not None: is_valid = False for vr in resource_cfg["valid_roots"]: if pilot_description.sandbox.startswith(vr): is_valid = True if is_valid is False: raise BadParameter( "Working directory for resource '%s' defined as '%s' but needs to be rooted in %s " % (resource_key, pilot_description.sandbox, resource_cfg["valid_roots"])) # After the sanity checks have passed, we can register a pilot # startup request with the worker process and create a facade # object. pilot = ComputePilot.create(pilot_description=pilot_description, pilot_manager_obj=self) pilot_uid = self._worker.register_start_pilot_request( pilot=pilot, resource_config=resource_cfg) pilot._uid = pilot_uid pilot_obj_list.append(pilot) # Implicit return value conversion if return_list_type: return pilot_obj_list else: return pilot_obj_list[0]
def submit_pilots(self, pilot_descriptions): """Submits a new :class:`radical.pilot.ComputePilot` to a resource. **Returns:** * One or more :class:`radical.pilot.ComputePilot` instances [`list of :class:`radical.pilot.ComputePilot`]. **Raises:** * :class:`radical.pilot.PilotException` """ # Check if the object instance is still valid. self._assert_obj_is_valid() # Implicit list conversion. return_list_type = True if not isinstance(pilot_descriptions, list): return_list_type = False pilot_descriptions = [pilot_descriptions] # Itereate over the pilot descriptions, try to create a pilot for # each one and append it to 'pilot_obj_list'. pilot_obj_list = list() for pilot_description in pilot_descriptions: if pilot_description.resource is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'resource'." raise BadParameter(error_msg) elif pilot_description.runtime is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'runtime'." raise BadParameter(error_msg) elif pilot_description.cores is None: error_msg = "ComputePilotDescription does not define mandatory attribute 'cores'." raise BadParameter(error_msg) resource_key = pilot_description.resource resource_cfg = self._session.get_resource_config(resource_key) # Check resource-specific mandatory attributes if "mandatory_args" in resource_cfg: for ma in resource_cfg["mandatory_args"]: if getattr(pilot_description, ma) is None: error_msg = "ComputePilotDescription does not define attribute '{0}' which is required for '{1}'.".format(ma, resource_key) raise BadParameter(error_msg) # we expand and exchange keys in the resource config, depending on # the selected schema so better use a deep copy... import copy resource_cfg = copy.deepcopy (resource_cfg) schema = pilot_description['access_schema'] if not schema : if 'schemas' in resource_cfg : schema = resource_cfg['schemas'][0] # import pprint # print "no schema, using %s" % schema # pprint.pprint (pilot_description) if not schema in resource_cfg : # import pprint # pprint.pprint (resource_cfg) logger.warning ("schema %s unknown for resource %s -- continue with defaults" \ % (schema, resource_key)) else : for key in resource_cfg[schema] : # merge schema specific resource keys into the # resource config resource_cfg[key] = resource_cfg[schema][key] # If 'default_sandbox' is defined, set it. if pilot_description.sandbox is not None: if "valid_roots" in resource_cfg and resource_cfg["valid_roots"] is not None: is_valid = False for vr in resource_cfg["valid_roots"]: if pilot_description.sandbox.startswith(vr): is_valid = True if is_valid is False: raise BadParameter("Working directory for resource '%s' defined as '%s' but needs to be rooted in %s " % (resource_key, pilot_description.sandbox, resource_cfg["valid_roots"])) # After the sanity checks have passed, we can register a pilot # startup request with the worker process and create a facade # object. pilot = ComputePilot.create( pilot_description=pilot_description, pilot_manager_obj=self) pilot_uid = self._worker.register_start_pilot_request( pilot=pilot, resource_config=resource_cfg) pilot._uid = pilot_uid pilot_obj_list.append(pilot) # Implicit return value conversion if return_list_type : return pilot_obj_list else: return pilot_obj_list[0]