def publish(group_id, distributor_id, publish_config_override=None): """ Requests the given distributor publish the repository group. :param group_id: identifies the repo group :type group_id: str :param distributor_id: identifies the group's distributor :type distributor_id: str :param publish_config_override: values to pass the plugin for this publish call alone :type publish_config_override: dict """ distributor_manager = manager_factory.repo_group_distributor_manager() distributor = distributor_manager.get_distributor(group_id, distributor_id) distributor_type_id = distributor["distributor_type_id"] distributor_instance, plugin_config = plugin_api.get_group_distributor_by_id(distributor_type_id) group_query_manager = manager_factory.repo_group_query_manager() # Validation group = group_query_manager.get_group(group_id) distributor_type_id = distributor["distributor_type_id"] # Assemble the data needed for publish conduit = RepoGroupPublishConduit(group_id, distributor) call_config = PluginCallConfiguration(plugin_config, distributor["config"], publish_config_override) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir(distributor_type_id, group_id) # TODO: Add events for group publish start/complete RepoGroupPublishManager._do_publish(transfer_group, distributor_id, distributor_instance, conduit, call_config)
def update_distributor_config(self, repo_group_id, distributor_id, distributor_config): """ Attempts to update the saved configuration for the given distributor. The distributor will be asked if the new configuration is valid. If not, this method will raise an error and the existing configuration will remain unchanged. @param repo_group_id: identifies the group @type repo_group_id: str @param distributor_id: identifies the distributor on the group @type distributor_id: str @param distributor_config: new configuration values to use @type distributor_config: dict @return: the updated distributor @rtype: dict @raise MissingResource: if the given group or distributor do not exist @raise PulpDataException: if the plugin indicates the new configuration is invalid """ # Validation - calls will raise MissingResource group_manager = manager_factory.repo_group_query_manager() group = group_manager.get_group(repo_group_id) distributor = self.get_distributor(repo_group_id, distributor_id) distributor_type_id = distributor['distributor_type_id'] distributor_instance, plugin_config = plugin_api.get_group_distributor_by_id( distributor_type_id) # Resolve the requested changes into the existing config merged_config = process_update_config(distributor['config'], distributor_config) # Request the distributor validate the new configuration call_config = PluginCallConfiguration(plugin_config, merged_config) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir( distributor_type_id, repo_group_id) transfer_related_groups = related_groups(distributor_type_id, omit_group_id=repo_group_id) # Request the plugin validate the configuration try: is_valid, message = distributor_instance.validate_config( transfer_group, call_config, transfer_related_groups) if not is_valid: raise PulpDataException(message) except Exception, e: _LOG.exception( 'Exception received from distributor [%s] while validating config' % distributor_type_id) raise PulpDataException(e.args), None, sys.exc_info()[2]
def publish(self, group_id, distributor_id, distributor=None, distributor_instance=None, plugin_config=None, publish_config_override=None): """ Requests the given distributor publish the repository group. @param group_id: identifies the repo group @type group_id: str @param distributor_id: identifies the group's distributor @type distributor_id: str @param distributor: distributor metadata as associate with the repo group @type distributor: dict @param distributor_instance: instance of group's distributor to be used for publishing @type distributor_instance: GroupDistributor @param plugin_config: general configuration for the distributor instance @type plugin_config: dict or None @param publish_config_override: values to pass the plugin for this publish call alone @type publish_config_override: dict """ if None in (distributor, distributor_instance): raise MissingResource(repo_group=group_id, group_distributor=distributor_id) group_query_manager = manager_factory.repo_group_query_manager() # Validation group = group_query_manager.get_group(group_id) distributor_type_id = distributor['distributor_type_id'] # Assemble the data needed for publish conduit = RepoGroupPublishConduit(group_id, distributor_id) call_config = PluginCallConfiguration(plugin_config, distributor['config'], publish_config_override) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir( distributor_type_id, group_id) # TODO: Add events for group publish start/complete self._do_publish(transfer_group, distributor_id, distributor_instance, conduit, call_config)
def update_distributor_config(self, repo_group_id, distributor_id, distributor_config): """ Attempts to update the saved configuration for the given distributor. The distributor will be asked if the new configuration is valid. If not, this method will raise an error and the existing configuration will remain unchanged. @param repo_group_id: identifies the group @type repo_group_id: str @param distributor_id: identifies the distributor on the group @type distributor_id: str @param distributor_config: new configuration values to use @type distributor_config: dict @return: the updated distributor @rtype: dict @raise MissingResource: if the given group or distributor do not exist @raise PulpDataException: if the plugin indicates the new configuration is invalid """ # Validation - calls will raise MissingResource group_manager = manager_factory.repo_group_query_manager() group = group_manager.get_group(repo_group_id) distributor = self.get_distributor(repo_group_id, distributor_id) distributor_type_id = distributor['distributor_type_id'] distributor_instance, plugin_config = plugin_api.get_group_distributor_by_id(distributor_type_id) # Resolve the requested changes into the existing config merged_config = process_update_config(distributor['config'], distributor_config) # Request the distributor validate the new configuration call_config = PluginCallConfiguration(plugin_config, merged_config) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir(distributor_type_id, repo_group_id) config_conduit = RepoConfigConduit(distributor_type_id) # Request the plugin validate the configuration try: is_valid, message = distributor_instance.validate_config(transfer_group, call_config, config_conduit) if not is_valid: raise PulpDataException(message) except Exception, e: _LOG.exception('Exception received from distributor [%s] while validating config' % distributor_type_id) raise PulpDataException(e.args), None, sys.exc_info()[2]
def publish(self, group_id, distributor_id, distributor=None, distributor_instance=None, plugin_config=None, publish_config_override=None): """ Requests the given distributor publish the repository group. @param group_id: identifies the repo group @type group_id: str @param distributor_id: identifies the group's distributor @type distributor_id: str @param distributor: distributor metadata as associate with the repo group @type distributor: dict @param distributor_instance: instance of group's distributor to be used for publishing @type distributor_instance: GroupDistributor @param plugin_config: general configuration for the distributor instance @type plugin_config: dict or None @param publish_config_override: values to pass the plugin for this publish call alone @type publish_config_override: dict """ if None in (distributor, distributor_instance): raise MissingResource(repo_group=group_id, group_distributor=distributor_id) group_query_manager = manager_factory.repo_group_query_manager() # Validation group = group_query_manager.get_group(group_id) distributor_type_id = distributor['distributor_type_id'] # Assemble the data needed for publish conduit = RepoGroupPublishConduit(group_id, distributor_id) call_config = PluginCallConfiguration(plugin_config, distributor['config'], publish_config_override) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir(distributor_type_id, group_id) # TODO: Add events for group publish start/complete self._do_publish(transfer_group, distributor_id, distributor_instance, conduit, call_config)
def publish(group_id, distributor_id, publish_config_override=None): """ Requests the given distributor publish the repository group. :param group_id: identifies the repo group :type group_id: str :param distributor_id: identifies the group's distributor :type distributor_id: str :param publish_config_override: values to pass the plugin for this publish call alone :type publish_config_override: dict """ distributor_manager = manager_factory.repo_group_distributor_manager() distributor = distributor_manager.get_distributor( group_id, distributor_id) distributor_type_id = distributor['distributor_type_id'] distributor_instance, plugin_config = plugin_api.get_group_distributor_by_id( distributor_type_id) group_query_manager = manager_factory.repo_group_query_manager() # Validation group = group_query_manager.get_group(group_id) distributor_type_id = distributor['distributor_type_id'] # Assemble the data needed for publish conduit = RepoGroupPublishConduit(group_id, distributor) call_config = PluginCallConfiguration(plugin_config, distributor['config'], publish_config_override) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir( distributor_type_id, group_id) # TODO: Add events for group publish start/complete RepoGroupPublishManager._do_publish(transfer_group, distributor_id, distributor_instance, conduit, call_config)
def publish(self, group_id, distributor_id, publish_config_override=None): """ Requests the given distributor publish the repository group. @param group_id: identifies the repo group @type group_id: str @param distributor_id: identifies the group's distributor @type distributor_id: str @param publish_config_override: values to pass the plugin for this publish call alone @type publish_config_override: dict """ group_query_manager = manager_factory.repo_group_query_manager() distributor_manager = manager_factory.repo_group_distributor_manager() # Validation group = group_query_manager.get_group(group_id) distributor = distributor_manager.get_distributor(group_id, distributor_id) distributor_type_id = distributor['distributor_type_id'] try: distributor_instance, plugin_config =\ plugin_api.get_group_distributor_by_id(distributor_type_id) except plugin_exceptions.PluginNotFound: raise MissingResource(distributor_type=distributor_type_id), None, sys.exc_info()[2] # Assemble the data needed for publish conduit = RepoGroupPublishConduit(group_id, distributor_id) call_config = PluginCallConfiguration(plugin_config, distributor['config'], publish_config_override) transfer_group = common_utils.to_transfer_repo_group(group) transfer_group.working_dir = common_utils.group_distributor_working_dir(distributor_type_id, group_id) # TODO: Add events for group publish start/complete self._do_publish(transfer_group, distributor_id, distributor_instance, conduit, call_config)