katello 3.17.0.rc2.2 → 3.17.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of katello might be problematic. Click here for more details.

Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/app/controllers/katello/api/v2/content_view_versions_controller.rb +9 -1
  3. data/app/controllers/katello/api/v2/host_tracer_controller.rb +16 -36
  4. data/app/controllers/katello/api/v2/hosts_bulk_actions_controller.rb +12 -1
  5. data/app/controllers/katello/concerns/organizations_controller_extensions.rb +23 -0
  6. data/app/lib/actions/katello/content_view/promote.rb +2 -2
  7. data/app/lib/actions/katello/content_view/promote_to_environment.rb +12 -3
  8. data/app/lib/actions/katello/content_view/publish.rb +18 -2
  9. data/app/lib/actions/katello/content_view_version/import.rb +36 -0
  10. data/app/lib/actions/katello/content_view_version/incremental_update.rb +1 -1
  11. data/app/lib/actions/katello/organization/create.rb +1 -1
  12. data/app/lib/actions/katello/organization/simple_content_access/disable.rb +8 -0
  13. data/app/lib/actions/katello/organization/simple_content_access/enable.rb +8 -0
  14. data/app/lib/actions/katello/organization/simple_content_access/toggle.rb +16 -2
  15. data/app/lib/actions/katello/repository/multi_clone_contents.rb +8 -6
  16. data/app/lib/actions/pulp3/abstract_async_task.rb +1 -0
  17. data/app/lib/actions/pulp3/content_view_version/create_importer.rb +20 -0
  18. data/app/lib/actions/pulp3/content_view_version/destroy_importer.rb +16 -0
  19. data/app/lib/actions/pulp3/content_view_version/import.rb +21 -0
  20. data/app/lib/actions/pulp3/orchestration/content_view_version/copy_version_units_to_library.rb +25 -0
  21. data/app/lib/actions/pulp3/orchestration/content_view_version/export.rb +9 -1
  22. data/app/lib/actions/pulp3/orchestration/content_view_version/import.rb +41 -0
  23. data/app/lib/actions/pulp3/repository/copy_content.rb +6 -1
  24. data/app/lib/actions/pulp3/repository/multi_copy_content.rb +1 -1
  25. data/app/lib/katello/resources/cdn.rb +3 -2
  26. data/app/lib/katello/util/cdn_var_substitutor.rb +9 -7
  27. data/app/models/katello/content_view.rb +6 -0
  28. data/app/models/katello/content_view_version.rb +10 -1
  29. data/app/models/katello/glue/pulp/repo.rb +1 -1
  30. data/app/models/katello/root_repository.rb +5 -1
  31. data/app/overrides/add_organization_attributes.rb +12 -0
  32. data/app/services/katello/host_trace_manager.rb +38 -0
  33. data/app/services/katello/pulp3/content_view_version/export.rb +25 -29
  34. data/app/services/katello/pulp3/content_view_version/import.rb +87 -0
  35. data/app/services/katello/pulp3/content_view_version/import_export_common.rb +44 -0
  36. data/app/services/katello/pulp3/repository/yum.rb +72 -4
  37. data/app/services/katello/pulp3/task.rb +4 -4
  38. data/app/services/katello/pulp3/task_group.rb +6 -0
  39. data/app/services/katello/ui_notifications/subscriptions/sca_disable_error.rb +13 -0
  40. data/app/services/katello/ui_notifications/subscriptions/sca_disable_success.rb +13 -0
  41. data/app/services/katello/ui_notifications/subscriptions/sca_enable_error.rb +13 -0
  42. data/app/services/katello/ui_notifications/subscriptions/sca_enable_success.rb +13 -0
  43. data/app/views/overrides/organizations/_edit_override.html.erb +10 -1
  44. data/app/views/overrides/organizations/_index_header_override.html.erb +3 -0
  45. data/app/views/overrides/organizations/_index_row_override.html.erb +3 -0
  46. data/config/routes/api/v2.rb +1 -6
  47. data/config/routes/overrides.rb +4 -0
  48. data/db/seeds.d/109-katello-notification-blueprints.rb +24 -0
  49. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-associations.controller.js +2 -5
  50. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-repository-sets.controller.js +4 -3
  51. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/activation-key-subscriptions.controller.js +2 -4
  52. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-repository-sets.html +1 -1
  53. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/bulk/content-hosts-bulk-traces-modal.controller.js +3 -4
  54. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-details-info.controller.js +2 -4
  55. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-repository-sets.controller.js +4 -3
  56. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/content-host-subscriptions.controller.js +2 -4
  57. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-repository-sets.html +1 -1
  58. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-bulk-action.factory.js +2 -1
  59. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/details/views/repository-info.html +1 -1
  60. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/products/details/repositories/new/views/new-repository.html +2 -2
  61. data/lib/katello/permission_creator.rb +1 -1
  62. data/lib/katello/permissions/host_permissions.rb +1 -0
  63. data/lib/katello/tasks/pulp3_post_migration_check.rake +2 -1
  64. data/lib/katello/tasks/reimport.rake +1 -1
  65. data/lib/katello/version.rb +1 -1
  66. data/webpack/index.js +0 -1
  67. metadata +19 -5
  68. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/hosts/host-traces-resolve.factory.js +0 -18
@@ -0,0 +1,44 @@
1
+ module Katello
2
+ module Pulp3
3
+ module ContentViewVersion
4
+ module ImportExportCommon
5
+ def generate_name
6
+ @content_view_version.name.gsub(/\s/, '_')
7
+ end
8
+
9
+ def generate_id
10
+ "#{@content_view_version.organization.label}_#{generate_name}"
11
+ end
12
+
13
+ def api
14
+ ::Katello::Pulp3::Api::Core.new(@smart_proxy)
15
+ end
16
+
17
+ def fetch_repository_info(version_href)
18
+ repo_api = ::Katello::Pulp3::Api::Yum.new(@smart_proxy).repositories_api
19
+ repo_api.read(version_href_to_repository_href(version_href))
20
+ end
21
+
22
+ def repository_hrefs
23
+ version_hrefs.map { |href| version_href_to_repository_href(href) }.uniq
24
+ end
25
+
26
+ def version_hrefs
27
+ repositories.pluck(:version_href).compact
28
+ end
29
+
30
+ def repositories
31
+ if @content_view_version.default?
32
+ @content_view_version.repositories.yum_type
33
+ else
34
+ @content_view_version.archived_repos.yum_type
35
+ end
36
+ end
37
+
38
+ def version_href_to_repository_href(version_href)
39
+ version_href.split("/")[0..-3].join("/") + "/"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -3,10 +3,13 @@ require 'pulp_rpm_client'
3
3
  module Katello
4
4
  module Pulp3
5
5
  class Repository
6
+ # rubocop:disable Metrics/ClassLength
6
7
  class Yum < ::Katello::Pulp3::Repository
7
8
  include Katello::Util::Errata
8
9
  include Katello::Util::PulpcoreContentFilters
9
10
 
11
+ UNIT_LIMIT = 10_000
12
+
10
13
  def remote_options
11
14
  url, sles_token = extract_sles_token
12
15
  options = common_remote_options
@@ -109,14 +112,71 @@ module Katello
109
112
  data.config << config
110
113
  end
111
114
  end
112
- # FIXME: data's content being [] causes all content to be copied back
113
- tasks << api.copy_api.copy_content(data)
115
+ tasks << copy_content_chunked(data)
114
116
  else
115
117
  tasks << remove_all_content_from_mapping(repo_id_map)
116
118
  end
117
119
  tasks.flatten
118
120
  end
119
121
 
122
+ def copy_api_data_dup(data)
123
+ data_dup = PulpRpmClient::Copy.new
124
+ data_dup.dependency_solving = data.dependency_solving
125
+ data_dup.config = []
126
+ data.config.each do |repo_config|
127
+ config_hash = {
128
+ source_repo_version: repo_config[:source_repo_version],
129
+ dest_repo: repo_config[:dest_repo],
130
+ content: []
131
+ }
132
+ config_hash[:dest_base_version] = repo_config[:dest_base_version] if repo_config[:dest_base_version]
133
+ data_dup.config << config_hash
134
+ end
135
+ data_dup
136
+ end
137
+
138
+ def copy_content_chunked(data)
139
+ tasks = []
140
+ # Don't chunk if there aren't enough content units
141
+ if data.config.sum { |repo_config| repo_config[:content].size } <= UNIT_LIMIT
142
+ return api.copy_api.copy_content(data)
143
+ end
144
+
145
+ unit_copy_counter = 0
146
+ i = 0
147
+ leftover_units = data.config.first[:content].deep_dup
148
+
149
+ # Copy data and clear its content fields
150
+ data_dup = copy_api_data_dup(data)
151
+
152
+ while i < data_dup.config.size
153
+ # Copy all units within repo or only some?
154
+ if leftover_units.length < UNIT_LIMIT - unit_copy_counter
155
+ copy_amount = leftover_units.length
156
+ else
157
+ copy_amount = UNIT_LIMIT - unit_copy_counter
158
+ end
159
+
160
+ data_dup.config[i][:content] = leftover_units.pop(copy_amount)
161
+ unit_copy_counter += copy_amount
162
+ # Do copy call if limit is reached or if we're under the limit but on the last repo config.
163
+ if unit_copy_counter >= UNIT_LIMIT || (i == data_dup.config.size - 1 && leftover_units.empty?)
164
+ tasks << api.copy_api.copy_content(data_dup)
165
+ unit_copy_counter = 0
166
+ end
167
+
168
+ if leftover_units.empty?
169
+ # Nothing more to copy -- clear current config's content
170
+ data_dup.config[i][:content] = []
171
+ i += 1
172
+ # Fetch unit list for next data config
173
+ leftover_units = data.config[i][:content].deep_dup unless i == data_dup.config.size
174
+ end
175
+ end
176
+
177
+ tasks
178
+ end
179
+
120
180
  def remove_all_content_from_mapping(repo_id_map)
121
181
  tasks = []
122
182
  repo_id_map.each do |_source_repo_ids, dest_repo_id_map|
@@ -148,6 +208,16 @@ module Katello
148
208
  tasks
149
209
  end
150
210
 
211
+ def copy_all(source_repository)
212
+ data = PulpRpmClient::Copy.new
213
+ data.config = [{
214
+ source_repo_version: source_repository.version_href,
215
+ dest_repo: repository_reference.repository_href
216
+ }]
217
+
218
+ [api.copy_api.copy_content(data)]
219
+ end
220
+
151
221
  def remove_all_content_from_repo(repo_href)
152
222
  data = PulpRpmClient::RepositoryAddRemoveContent.new(
153
223
  remove_content_units: ['*'])
@@ -271,7 +341,6 @@ module Katello
271
341
  end
272
342
 
273
343
  filters.flatten!.compact!
274
-
275
344
  whitelist_ids = []
276
345
  blacklist_ids = []
277
346
  filters.each do |filter|
@@ -298,7 +367,6 @@ module Katello
298
367
  content_unit_hrefs += additional_content_hrefs(source_repository, content_unit_hrefs)
299
368
  end
300
369
  content_unit_hrefs += source_repository.srpms.pluck(:pulp_id)
301
-
302
370
  dependency_solving = options[:solve_dependencies] || false
303
371
  copy_units(source_repository, content_unit_hrefs.uniq, dependency_solving)
304
372
  end
@@ -61,7 +61,7 @@ module Katello
61
61
  end
62
62
 
63
63
  def task_group_href
64
- task_data[:task_group]
64
+ task_data[:task_group] || task_data[:created_resources].find { |href| href.starts_with?("/pulp/api/v3/task-groups/") }
65
65
  end
66
66
 
67
67
  def done?
@@ -79,7 +79,7 @@ module Katello
79
79
 
80
80
  def error
81
81
  if task_data[:state] == CANCELED
82
- self.new(_("Task canceled"))
82
+ _("Task canceled")
83
83
  elsif task_data[:state] == FAILED
84
84
  if task_data[:error][:description].blank?
85
85
  _("Pulp task error")
@@ -90,8 +90,8 @@ module Katello
90
90
  end
91
91
 
92
92
  def cancel
93
- data = PulpcoreClient::Task.new(state: 'canceled')
94
- tasks_api.tasks_cancel(pulp_task['pulp_href'], data)
93
+ data = PulpcoreClient::TaskResponse.new(state: 'canceled')
94
+ tasks_api.tasks_cancel(task_data['pulp_href'], data)
95
95
  #the main task may have completed, so cancel spawned tasks too
96
96
  task_data['spawned_tasks']&.each { |spawned| tasks_api.tasks_cancel(spawned['pulp_href'], data) }
97
97
  end
@@ -73,6 +73,12 @@ module Katello
73
73
  end
74
74
 
75
75
  def cancel
76
+ tasks_api = ::Katello::Pulp3::Api::Core.new(@smart_proxy).tasks_api
77
+ tasks_response = tasks_api.list(task_group: task_group_data['pulp_href'])
78
+ data = PulpcoreClient::TaskResponse.new(state: 'canceled')
79
+ tasks_response.results.collect do |result|
80
+ tasks_api.tasks_cancel(result.pulp_href, data)
81
+ end
76
82
  end
77
83
  end
78
84
  end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module UINotifications
3
+ module Subscriptions
4
+ class SCADisableError < UINotifications::TaskNotification
5
+ private
6
+
7
+ def blueprint
8
+ @blueprint ||= NotificationBlueprint.find_by(name: 'sca_disable_error')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module UINotifications
3
+ module Subscriptions
4
+ class SCADisableSuccess < UINotifications::AbstractNotification
5
+ private
6
+
7
+ def blueprint
8
+ @blueprint ||= NotificationBlueprint.find_by(name: 'sca_disable_success')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module UINotifications
3
+ module Subscriptions
4
+ class SCAEnableError < UINotifications::TaskNotification
5
+ private
6
+
7
+ def blueprint
8
+ @blueprint ||= NotificationBlueprint.find_by(name: 'sca_enable_error')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module Katello
2
+ module UINotifications
3
+ module Subscriptions
4
+ class SCAEnableSuccess < UINotifications::AbstractNotification
5
+ private
6
+
7
+ def blueprint
8
+ @blueprint ||= NotificationBlueprint.find_by(name: 'sca_enable_success')
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -15,4 +15,13 @@
15
15
  'data-url' => "/katello/api/v2/organizations/#{@taxonomy.id}/download_debug_certificate"
16
16
  end %>
17
17
 
18
- <% end%>
18
+ <% if @can_toggle_sca %>
19
+ <%= field(f, _('Simple Content Access'),
20
+ :help_inline => _('Toggling Simple Content Access will refresh your manifest.')) do
21
+ tag1 = hidden_field_tag 'simple_content_access', '0'
22
+ tag2 = check_box_tag 'simple_content_access', '1', @taxonomy.simple_content_access?
23
+ tag1 + tag2
24
+ end %>
25
+ <% end %>
26
+
27
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% if controller_name == 'organizations' %>
2
+ <th><%= _("Simple Content Access") %></th>
3
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <% if taxonomy.is_a?(Organization) %>
2
+ <td><%= taxonomy.simple_content_access? ? _("Enabled") : _("Disabled") %></td>
3
+ <% end %>
@@ -124,6 +124,7 @@ Katello::Engine.routes.draw do
124
124
  get :export_histories
125
125
  get :auto_complete_search
126
126
  post :incremental_update
127
+ post :import
127
128
  end
128
129
  end
129
130
 
@@ -309,12 +310,6 @@ Katello::Engine.routes.draw do
309
310
  end
310
311
  end
311
312
 
312
- api_resources :traces, :only => [], :controller => 'host_tracer' do
313
- collection do
314
- put :resolve
315
- end
316
- end
317
-
318
313
  api_resources :srpms, :only => [:index, :show], :controller => 'srpms' do
319
314
  collection do
320
315
  get :auto_complete_search
@@ -77,6 +77,7 @@ Foreman::Application.routes.draw do
77
77
  match '/bulk/environment_content_view' => 'hosts_bulk_actions#environment_content_view', :via => :put
78
78
  match '/bulk/release_version' => 'hosts_bulk_actions#release_version', :via => :put
79
79
  match '/bulk/traces' => 'hosts_bulk_actions#traces', :via => :post
80
+ match '/bulk/resolve_traces' => 'hosts_bulk_actions#resolve_traces', :via => :put
80
81
  match '/bulk/available_incremental_updates' => 'hosts_bulk_actions#available_incremental_updates', :via => :post
81
82
  match '/bulk/module_streams' => 'hosts_bulk_actions#module_streams', :via => :post
82
83
  match '/subscriptions/' => 'host_subscriptions#create', :via => :post
@@ -114,6 +115,9 @@ Foreman::Application.routes.draw do
114
115
  end
115
116
 
116
117
  resources :traces, :only => [:index], :controller => :host_tracer do
118
+ collection do
119
+ put :resolve
120
+ end
117
121
  end
118
122
  end
119
123
  end
@@ -60,6 +60,30 @@ blueprints = [
60
60
  name: 'manifest_delete_error',
61
61
  message: N_('Deleting manifest in \'%{subject}\' failed.'),
62
62
  level: 'error'
63
+ },
64
+ {
65
+ group: N_('Subscriptions'),
66
+ name: 'sca_enable_success',
67
+ message: N_('Simple Content Access has been enabled for \'%{subject}\'.'),
68
+ level: 'info'
69
+ },
70
+ {
71
+ group: N_('Subscriptions'),
72
+ name: 'sca_enable_error',
73
+ message: N_('Enabling Simple Content Access failed for \'%{subject}\'.'),
74
+ level: 'error'
75
+ },
76
+ {
77
+ group: N_('Subscriptions'),
78
+ name: 'sca_disable_success',
79
+ message: N_('Simple Content Access has been disabled for \'%{subject}\'.'),
80
+ level: 'info'
81
+ },
82
+ {
83
+ group: N_('Subscriptions'),
84
+ name: 'sca_disable_error',
85
+ message: N_('Disabling Simple Content Access failed for \'%{subject}\'.'),
86
+ level: 'error'
63
87
  }
64
88
  ]
65
89
 
@@ -9,14 +9,13 @@
9
9
  * @requires ActivationKey
10
10
  * @requires ContentHostsHelper
11
11
  * @requires CurrentOrganization
12
- * @requires simpleContentAccessEnabled
13
12
  *
14
13
  * @description
15
14
  * Provides the functionality for activation key associations.
16
15
  */
17
16
  angular.module('Bastion.activation-keys').controller('ActivationKeyAssociationsController',
18
- ['$scope', '$location', 'translate', 'Nutupane', 'ActivationKey', 'ContentHostsHelper', 'CurrentOrganization', 'Host', 'simpleContentAccessEnabled',
19
- function ($scope, $location, translate, Nutupane, ActivationKey, ContentHostsHelper, CurrentOrganization, Host, simpleContentAccessEnabled) {
17
+ ['$scope', '$location', 'translate', 'Nutupane', 'ActivationKey', 'ContentHostsHelper', 'CurrentOrganization', 'Host',
18
+ function ($scope, $location, translate, Nutupane, ActivationKey, ContentHostsHelper, CurrentOrganization, Host) {
20
19
  var contentHostsNutupane, nutupaneParams, params = {
21
20
  'organization_id': CurrentOrganization,
22
21
  'search': $location.search().search || "",
@@ -60,7 +59,5 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyAssociationsC
60
59
  $scope.getHostStatusIcon = ContentHostsHelper.getHostStatusIcon;
61
60
 
62
61
  $scope.memory = ContentHostsHelper.memory;
63
-
64
- $scope.simpleContentAccessEnabled = simpleContentAccessEnabled;
65
62
  }]
66
63
  );
@@ -20,7 +20,8 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyRepositorySet
20
20
 
21
21
  params = {
22
22
  id: $scope.$stateParams.activationKeyId,
23
- 'organization_id': CurrentOrganization
23
+ 'organization_id': CurrentOrganization,
24
+ 'content_access_mode_all': $scope.simpleContentAccessEnabled
24
25
  };
25
26
 
26
27
  $scope.controllerName = 'katello_products';
@@ -28,12 +29,12 @@ angular.module('Bastion.activation-keys').controller('ActivationKeyRepositorySet
28
29
  $scope.table = $scope.nutupane.table;
29
30
 
30
31
  $scope.contentAccessModes = {
31
- contentAccessModeAll: false,
32
+ contentAccessModeAll: $scope.simpleContentAccessEnabled,
32
33
  contentAccessModeEnv: false
33
34
  };
34
35
  $scope.toggleFilters = function () {
35
36
  $scope.nutupane.table.params['content_access_mode_env'] = $scope.contentAccessModes.contentAccessModeEnv;
36
- $scope.nutupane.table.params['content_access_mode_all'] = $scope.contentAccessModes.contentAccessModeAll;
37
+ $scope.nutupane.table.params['content_access_mode_all'] = $scope.contentAccessModes.contentAccessModeAll || $scope.simpleContentAccessEnabled;
37
38
  $scope.nutupane.refresh();
38
39
  };
39
40
 
@@ -9,14 +9,13 @@
9
9
  * @requires ActivationKey
10
10
  * @requires SubscriptionsHelper
11
11
  * @requires Notification
12
- * @requires simpleContentAccessEnabled
13
12
  *
14
13
  * @description
15
14
  * Provides the functionality for the activation key subscriptions details action pane.
16
15
  */
17
16
  angular.module('Bastion.activation-keys').controller('ActivationKeySubscriptionsController',
18
- ['$scope', '$location', 'translate', 'Nutupane', 'ActivationKey', 'Subscription', 'SubscriptionsHelper', 'Notification', 'simpleContentAccessEnabled',
19
- function ($scope, $location, translate, Nutupane, ActivationKey, Subscription, SubscriptionsHelper, Notification, simpleContentAccessEnabled) {
17
+ ['$scope', '$location', 'translate', 'Nutupane', 'ActivationKey', 'Subscription', 'SubscriptionsHelper', 'Notification',
18
+ function ($scope, $location, translate, Nutupane, ActivationKey, Subscription, SubscriptionsHelper, Notification) {
20
19
  var params;
21
20
 
22
21
  params = {
@@ -33,7 +32,6 @@ angular.module('Bastion.activation-keys').controller('ActivationKeySubscriptions
33
32
  $scope.contentNutupane.setSearchKey('subscriptionSearch');
34
33
  $scope.isRemoving = false;
35
34
  $scope.contextAdd = false;
36
- $scope.simpleContentAccessEnabled = simpleContentAccessEnabled;
37
35
 
38
36
  $scope.groupedSubscriptions = {};
39
37
  $scope.$watch('table.rows', function (rows) {
@@ -17,7 +17,7 @@
17
17
  </div>
18
18
 
19
19
  <div data-block="filters">
20
- <label class="checkbox-inline" title="{{ 'Show all Repository Sets in Organization' | translate }}">
20
+ <label class="checkbox-inline" title="{{ 'Show all Repository Sets in Organization' | translate }}" ng-if="!simpleContentAccessEnabled">
21
21
  <input type="checkbox" ng-model="contentAccessModes.contentAccessModeAll" ng-change="toggleFilters()"/>
22
22
  <span translate>Show All</span>
23
23
  </label>