diff --git a/app/controllers/katello/api/v2/content_view_filters_controller.rb b/app/controllers/katello/api/v2/content_view_filters_controller.rb index 3cdeff7ae3a..b0039ccf271 100644 --- a/app/controllers/katello/api/v2/content_view_filters_controller.rb +++ b/app/controllers/katello/api/v2/content_view_filters_controller.rb @@ -37,6 +37,8 @@ def index_relation param :type, String, :desc => N_("type of filter (e.g. rpm, package_group, erratum, docker, modulemd)"), :required => true param :original_packages, :bool, :desc => N_("add all packages without errata to the included/excluded list. " \ "(package filter only)") + param :original_module_streams, :bool, :desc => N_("add all module streams without errata to the included/excluded list. " \ + "(module stream filter only)") param :inclusion, :bool, :desc => N_("specifies if content should be included or excluded, default: inclusion=false") param :repository_ids, Array, :desc => N_("list of repository ids") param :description, String, :desc => N_("description of the filter") @@ -60,6 +62,8 @@ def show param :name, String, :desc => N_("new name for the filter") param :original_packages, :bool, :desc => N_("add all packages without errata to the included/excluded list. " \ "(package filter only)") + param :original_module_streams, :bool, :desc => N_("add all module streams without errata to the included/excluded list. " \ + "(module stream filter only)") param :inclusion, :bool, :desc => N_("specifies if content should be included or excluded, default: inclusion=false") param :repository_ids, Array, :desc => N_("list of repository ids") param :description, String, :desc => N_("description of the filter"), :required => false @@ -95,7 +99,7 @@ def find_filter end def filter_params - params.require(:content_view_filter).permit(:name, :inclusion, :original_packages, :description, :repository_ids => []) + params.require(:content_view_filter).permit(:name, :inclusion, :original_packages, :original_module_streams, :description, :repository_ids => []) end end end diff --git a/app/models/katello/content_view_filter.rb b/app/models/katello/content_view_filter.rb index 67ed54583fc..3f5a6c9183a 100644 --- a/app/models/katello/content_view_filter.rb +++ b/app/models/katello/content_view_filter.rb @@ -182,6 +182,10 @@ def original_packages=(_include_original) fail "setting original_packages not supported for #{self.class.name}" end + def original_module_streams=(_include_original) + fail "setting original_module_streams not supported for #{self.class.name}" + end + protected def validate_repos diff --git a/app/models/katello/content_view_module_stream_filter.rb b/app/models/katello/content_view_module_stream_filter.rb index f8de98bb15a..b0409e0b7fd 100644 --- a/app/models/katello/content_view_module_stream_filter.rb +++ b/app/models/katello/content_view_module_stream_filter.rb @@ -6,9 +6,17 @@ class ContentViewModuleStreamFilter < ContentViewFilter validates_lengths_from_database - def generate_clauses(_repo) - return if module_stream_rules.blank? - module_stream_rules.map(&:module_stream_id) + def generate_clauses(repo) + rules = module_stream_rules || [] + ids = rules.map(&:module_stream_id) + if self.original_module_streams + ids.concat(repo.module_streams_without_errata.map(&:id)) + end + ids + end + + def original_module_streams=(value) + self[:original_module_streams] = value end end end diff --git a/app/models/katello/repository.rb b/app/models/katello/repository.rb index c5677d30123..96cfa7a5f2e 100644 --- a/app/models/katello/repository.rb +++ b/app/models/katello/repository.rb @@ -471,6 +471,17 @@ def packages_without_errata end end + def module_streams_without_errata + module_stream_errata = Katello::ModuleStreamErratumPackage.joins(:erratum_package => {:erratum => :repository_errata}) + .where("#{RepositoryErratum.table_name}.repository_id" => self.id) + .pluck("#{Katello::ModuleStreamErratumPackage.table_name}.module_stream_id") + if module_stream_errata.any? + self.module_streams.where("#{ModuleStream.table_name}.id NOT in (?)", module_stream_errata) + else + self.module_streams + end + end + def self.with_errata(errata) joins(:repository_errata).where("#{Katello::RepositoryErratum.table_name}.erratum_id" => errata) end diff --git a/app/services/katello/pulp/repository/yum.rb b/app/services/katello/pulp/repository/yum.rb index af2833b9978..57a84f6fc78 100644 --- a/app/services/katello/pulp/repository/yum.rb +++ b/app/services/katello/pulp/repository/yum.rb @@ -246,7 +246,8 @@ def generate_copy_clauses(filters, rpm_filenames) remove = clause_gen.remove_clause remove_clauses = {filters: {unit: remove}} if remove else - copy_clauses = {} + non_modular_rpms = ::Katello::Rpm.in_repositories(repo).non_modular.pluck(:filename) + copy_clauses = non_modular_rpms.blank? ? nil : {filters: {unit: ContentViewPackageFilter.generate_rpm_clauses(non_modular_rpms)}} remove_clauses = nil end diff --git a/app/views/katello/api/v2/content_view_filters/base.json.rabl b/app/views/katello/api/v2/content_view_filters/base.json.rabl index f966a32c40a..e19fab7fec5 100644 --- a/app/views/katello/api/v2/content_view_filters/base.json.rabl +++ b/app/views/katello/api/v2/content_view_filters/base.json.rabl @@ -17,6 +17,10 @@ if @resource.respond_to?(:package_rules) attributes :original_packages end +if @resource.respond_to?(:module_stream_rules) + attributes :original_module_streams +end + node :rules do |filter| if filter.respond_to?(:package_rules) filter.package_rules.map do |rule| diff --git a/db/migrate/20200709021250_add_original_modules_to_content_view_module_stream_filter.rb b/db/migrate/20200709021250_add_original_modules_to_content_view_module_stream_filter.rb new file mode 100644 index 00000000000..a30ed154b07 --- /dev/null +++ b/db/migrate/20200709021250_add_original_modules_to_content_view_module_stream_filter.rb @@ -0,0 +1,5 @@ +class AddOriginalModulesToContentViewModuleStreamFilter < ActiveRecord::Migration[6.0] + def change + add_column :katello_content_view_filters, :original_module_streams, :boolean, :default => false, :null => false + end +end diff --git a/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js b/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js index 2a1f438b27d..e0080ee30a9 100644 --- a/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js +++ b/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/filter-details.controller.js @@ -3,19 +3,33 @@ * @name Bastion.content-views.controller:FilterDetailsController * * @requires $scope + * @requires $q + * @requires translate + * @requires Notification * @requires Filter * * @description * Handles fetching a filter. */ angular.module('Bastion.content-views').controller('FilterDetailsController', - ['$scope', 'Filter', function ($scope, Filter) { + ['$scope', '$q', 'translate', 'Notification', 'Filter', function ($scope, $q, translate, Notification, Filter) { + $scope.filter = Filter.get({'content_view_id': $scope.$stateParams.contentViewId, filterId: $scope.$stateParams.filterId}); - $scope.filter = Filter.get({'content_view_id': $scope.$stateParams.contentViewId, filterId: $scope.$stateParams.filterId}); + $scope.updateFilter = function (filter) { + var deferred = $q.defer(); - $scope.updateFilter = function (filter) { - filter.$update(); - }; + filter.$update(function (response) { + deferred.resolve(response); + Notification.setSuccessMessage(translate('Filter Updated - ' + $scope.filter.name)); + }, function (response) { + deferred.reject(response); + angular.forEach(response.data.errors, function (errorMessage) { + Notification.setErrorMessage(translate("An error occurred saving the Filter: ") + errorMessage); + }); + }); + + return deferred.promise; + }; }] ); diff --git a/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html b/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html index da84b8c30c0..bf9542f157e 100644 --- a/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html +++ b/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/filters/views/module-stream-filter-details.html @@ -1,4 +1,21 @@
+
+
+ +
+