katello 3.2.0.rc2 → 3.2.0.rc3

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +8 -5
  3. data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +2 -4
  4. data/app/controllers/katello/api/v2/host_collections_controller.rb +0 -1
  5. data/app/controllers/katello/api/v2/repositories_controller.rb +2 -0
  6. data/app/controllers/katello/concerns/api/v2/hostgroups_controller_extensions.rb +1 -0
  7. data/app/helpers/katello/hosts_and_hostgroups_helper.rb +7 -6
  8. data/app/lib/actions/katello/host/register.rb +6 -1
  9. data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
  10. data/app/models/katello/concerns/user_extensions.rb +1 -0
  11. data/app/models/katello/erratum.rb +7 -0
  12. data/app/models/katello/host/content_facet.rb +2 -1
  13. data/app/models/katello/host/subscription_facet.rb +29 -6
  14. data/app/models/katello/host_collection.rb +4 -16
  15. data/app/models/katello/sync_plan.rb +9 -12
  16. data/app/models/setting/content.rb +1 -1
  17. data/app/views/dashboard/_errata_widget.html.erb +1 -1
  18. data/app/views/foreman/job_templates/install_errata.erb +2 -1
  19. data/app/views/katello/api/v2/subscription_facet/base.json.rabl +4 -0
  20. data/db/migrate/20161003204325_add_user_to_katello_subscription_facets.rb +7 -0
  21. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +4 -4
  22. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-host-collections-table.html +2 -2
  23. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +1 -1
  24. data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +1 -0
  25. data/lib/katello/permissions/activation_key_permissions.rb +3 -1
  26. data/lib/katello/version.rb +1 -1
  27. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1746a52c274c0de6f5d7d9bfe445688ac837f11e
4
- data.tar.gz: 99ca72367e3c93ec650f2269d7438fc050aec55c
3
+ metadata.gz: ce99710c536ecdc466fbed467cdb96100f9ddd57
4
+ data.tar.gz: 2d82b66f5c5f99167da329a7e794b20421fc7933
5
5
  SHA512:
6
- metadata.gz: 6dd2a6dcf3602edad6b41282a2d2e5238648f718124cfc04aa8d0ca2c7258d7142c35173e85f4e048656ef7db0ce763705eb4d189f0b2b0d9dda5b12601db98e
7
- data.tar.gz: b64938cda76dc55a07e01453d4c99139e79e4e33479298656efb8269fed805d76b8e07bc8e8270a89536728323e7f354f1ec2ee5ca61a220ccc6726930634b77
6
+ metadata.gz: 653d6cb9ee622d8547d9a6afa4defa2bfaae487ac49b648c602312b7741fb905701cdde5b2a075469d787c9c737848831a0aa6ca6f2d4ff815cc5df60f89be1f
7
+ data.tar.gz: 8fcaa8457b8f154a31c94184d9290603f77d8995039fb2bd5596be0d59194266c2ca488b6372829e93ee8d115dd02a01e1cff8260df255104bfa63e233d8a3c9
@@ -253,10 +253,12 @@ KT.hosts.set_media_selection_bindings = function() {
253
253
  // Hopefully when this gets resolved http://projects.theforeman.org/issues/14699
254
254
  // This method will get backed out.
255
255
  function os_selected(element){
256
- var attrs = attribute_hash(['operatingsystem_id', 'organization_id', 'location_id', 'content_view_id',
257
- 'lifecycle_environment_id', 'content_source_id', 'architecture_id', 'hostgroup_id',
258
- 'medium_id', 'kickstart_repository_id']);
259
- var url = $(element).attr('data-url');
256
+ var url = $(element).attr('data-url');
257
+ var type = $(element).attr('data-type');
258
+ var attrs = {};
259
+ attrs[type] = attribute_hash(['operatingsystem_id', 'organization_id', 'location_id', 'content_view_id',
260
+ 'lifecycle_environment_id', 'content_source_id', 'architecture_id', 'hostgroup_id',
261
+ 'medium_id', 'kickstart_repository_id']);
260
262
  tfm.tools.showSpinner();
261
263
  $.ajax({
262
264
  data: attrs,
@@ -267,7 +269,8 @@ function os_selected(element){
267
269
  },
268
270
  success: function(request) {
269
271
  $('#media_select').html(request);
270
- reload_host_params();
272
+ reload_host_params();
273
+ reload_puppetclass_params();
271
274
  }
272
275
  });
273
276
  update_provisioning_image();
@@ -192,8 +192,7 @@ module Katello
192
192
  #api :POST, "/environments/:environment_id/consumers", N_("Register a consumer in environment")
193
193
  def consumer_create
194
194
  content_view_environment = find_content_view_environment
195
- host = Katello::Host::SubscriptionFacet.find_or_create_host(params[:facts]['network.hostname'],
196
- content_view_environment.environment.organization, rhsm_params)
195
+ host = Katello::Host::SubscriptionFacet.find_or_create_host(content_view_environment.environment.organization, rhsm_params)
197
196
 
198
197
  sync_task(::Actions::Katello::Host::Register, host, rhsm_params, content_view_environment)
199
198
  host.reload
@@ -224,8 +223,7 @@ module Katello
224
223
  # Set it before calling find_activation_keys to allow communication with candlepin
225
224
  User.current = User.anonymous_admin
226
225
  activation_keys = find_activation_keys
227
- host = Katello::Host::SubscriptionFacet.find_or_create_host(params[:facts]['network.hostname'],
228
- activation_keys.first.organization, rhsm_params)
226
+ host = Katello::Host::SubscriptionFacet.find_or_create_host(activation_keys.first.organization, rhsm_params)
229
227
 
230
228
  sync_task(::Actions::Katello::Host::Register, host, rhsm_params, nil, activation_keys)
231
229
 
@@ -26,7 +26,6 @@ module Katello
26
26
  api :GET, "/host_collections", N_("List host collections")
27
27
  api :GET, "/organizations/:organization_id/host_collections", N_("List host collections within an organization")
28
28
  api :GET, "/activation_keys/:activation_key_id/host_collections", N_("List host collections in an activation key")
29
- api :GET, "/hosts/:host_id/host_collections", N_("List host collections containing a content host")
30
29
  param_group :search, Api::V2::ApiController
31
30
  param :organization_id, :number, :desc => N_("organization identifier"), :required => false
32
31
  param :name, String, :desc => N_("host collection name to filter by")
@@ -203,6 +203,8 @@ module Katello
203
203
  end
204
204
  end
205
205
 
206
+ fail HttpErrors::BadRequest, _("Repository content type must be 'yum' to export.") unless @repository.content_type == 'yum'
207
+
206
208
  task = async_task(::Actions::Katello::Repository::Export, [@repository],
207
209
  ::Foreman::Cast.to_bool(params[:export_to_iso]),
208
210
  params[:since].try(:to_datetime),
@@ -24,6 +24,7 @@ module Katello
24
24
  param :content_source_id, :number, :desc => N_('Content source ID')
25
25
  param :content_view_id, :number, :desc => N_('Content view ID')
26
26
  param :lifecycle_environment_id, :number, :desc => N_('Lifecycle environment ID')
27
+ param :kickstart_repository_id, :number, :desc => N_('Kickstart repository ID')
27
28
  param_group :taxonomies, ::Api::V2::BaseController
28
29
  end
29
30
  end
@@ -202,18 +202,19 @@ module Katello
202
202
  os_selection_params = ["operatingsystem_id", 'content_view_id', 'lifecycle_environment_id',
203
203
  'content_source_id', 'architecture_id']
204
204
  view_options = []
205
- if os_selection_params.all? { |key| params[key].present? }
205
+ host_params = params[:hostgroup] || params[:host]
206
+ if host_params && os_selection_params.all? { |key| host_params[key].present? }
206
207
  if host.nil?
207
208
  host = ::Host.new
208
209
  end
209
- host.operatingsystem = Operatingsystem.find(params[:operatingsystem_id])
210
- host.architecture = Architecture.find(params[:architecture_id])
210
+ host.operatingsystem = Operatingsystem.find(host_params[:operatingsystem_id])
211
+ host.architecture = Architecture.find(host_params[:architecture_id])
211
212
 
212
- lifecycle_env = Katello::KTEnvironment.find(params[:lifecycle_environment_id])
213
- content_view = Katello::ContentView.find(params[:content_view_id])
213
+ lifecycle_env = Katello::KTEnvironment.find(host_params[:lifecycle_environment_id])
214
+ content_view = Katello::ContentView.find(host_params[:content_view_id])
214
215
  host.content_facet = Host::ContentFacet.new(:lifecycle_environment_id => lifecycle_env.id,
215
216
  :content_view_id => content_view.id)
216
- host.content_source = SmartProxy.find(params[:content_source_id])
217
+ host.content_source = SmartProxy.find(host_params[:content_source_id])
217
218
  if host.operatingsystem.is_a?(Redhat)
218
219
  view_options = host.operatingsystem.kickstart_repos(host).map { |repo| OpenStruct.new(repo) }
219
220
  end
@@ -32,7 +32,8 @@ module Actions
32
32
  consumer_parameters: consumer_params, activation_keys: activation_keys.map(&:cp_name))
33
33
  return if cp_create.error
34
34
 
35
- plan_self(uuid: cp_create.output[:response][:uuid], host_id: host.id, hostname: host.name)
35
+ plan_self(uuid: cp_create.output[:response][:uuid], host_id: host.id, hostname: host.name,
36
+ user_id: User.current.id)
36
37
  plan_action(Pulp::Consumer::Create, uuid: cp_create.output[:response][:uuid], name: host.name)
37
38
  end
38
39
  end
@@ -49,6 +50,10 @@ module Actions
49
50
  host = ::Host.find(input[:host_id])
50
51
  host.content_facet.uuid = input[:uuid]
51
52
  host.subscription_facet.uuid = input[:uuid]
53
+
54
+ user = ::User.find(input[:user_id])
55
+ host.subscription_facet.user = user unless user.nil? || user.hidden?
56
+
52
57
  host.content_facet.save!
53
58
  host.subscription_facet.update_from_consumer_attributes(host.subscription_facet.candlepin_consumer.
54
59
  consumer_attributes.except(:installedProducts, :guestIds, :facts))
@@ -57,7 +57,8 @@ module Katello
57
57
  elsif has_feature?(PULP_NODE_FEATURE)
58
58
  path = ProxyAPI::PulpNode.new(:url => self.url).capsule_puppet_path['puppet_content_dir']
59
59
  end
60
- self.update_attribute(:puppet_path, path) if path
60
+ self.update_attribute(:puppet_path, path)
61
+ path
61
62
  end
62
63
 
63
64
  def refresh_with_puppet_path
@@ -6,6 +6,7 @@ module Katello
6
6
  included do
7
7
  has_many :task_statuses, :dependent => :destroy, :class_name => "Katello::TaskStatus"
8
8
  has_many :activation_keys, :dependent => :nullify, :class_name => "Katello::ActivationKey"
9
+ has_many :subscription_facets, :dependent => :nullify, :class_name => "Katello::Host::SubscriptionFacet"
9
10
 
10
11
  def self.remote_user
11
12
  SETTINGS[:katello][:pulp][:default_login]
@@ -51,6 +51,13 @@ module Katello
51
51
  where("#{Katello::Host::ContentFacet.table_name}.host_id" => hosts).uniq
52
52
  end
53
53
 
54
+ def self.applicable_to_hosts_dashboard(hosts)
55
+ self.joins(:content_facets).
56
+ where("#{Katello::Host::ContentFacet.table_name}.host_id" => hosts).
57
+ select("DISTINCT ON (#{self.table_name}.updated, #{self.table_name}.id) #{self.table_name}.*").
58
+ order("#{self.table_name}.updated desc").limit(6)
59
+ end
60
+
54
61
  def <=>(other)
55
62
  return self.errata_id <=> other.errata_id
56
63
  end
@@ -106,7 +106,8 @@ module Katello
106
106
  self.joins("INNER JOIN #{facet_repository} on #{facet_repository}.content_facet_id = #{table_name}.id",
107
107
  "INNER JOIN #{repository_erratum} on #{repository_erratum}.repository_id = #{facet_repository}.repository_id",
108
108
  "INNER JOIN #{erratum} on #{erratum}.id = #{repository_erratum}.erratum_id",
109
- "INNER JOIN #{facet_errata} on #{facet_errata}.erratum_id = #{erratum}.id")
109
+ "INNER JOIN #{facet_errata} on #{facet_errata}.erratum_id = #{erratum}.id").
110
+ where("#{facet_errata}.content_facet_id = #{self.table_name}.id")
110
111
  end
111
112
 
112
113
  def content_view_version
@@ -3,6 +3,7 @@ module Katello
3
3
  class SubscriptionFacet < Katello::Model
4
4
  self.table_name = 'katello_subscription_facets'
5
5
  belongs_to :host, :inverse_of => :subscription_facet, :class_name => "::Host::Managed"
6
+ belongs_to :user, :inverse_of => :subscription_facets, :class_name => "::User"
6
7
 
7
8
  has_many :activation_keys, :through => :subscription_facet_activation_keys, :class_name => "Katello::ActivationKey"
8
9
  has_many :subscription_facet_activation_keys, :class_name => "Katello::SubscriptionFacetActivationKey", :dependent => :destroy, :inverse_of => :subscription_facet
@@ -70,7 +71,8 @@ module Katello
70
71
  end
71
72
 
72
73
  def self.new_host_from_facts(facts, org, location)
73
- ::Host::Managed.new(:name => facts['network.hostname'], :organization => org, :location => location, :managed => false)
74
+ name = propose_name_from_facts(facts)
75
+ ::Host::Managed.new(:name => name, :organization => org, :location => location, :managed => false)
74
76
  end
75
77
 
76
78
  def self.update_facts(host, rhsm_facts)
@@ -80,24 +82,45 @@ module Katello
80
82
  host.import_facts(rhsm_facts)
81
83
  end
82
84
 
83
- def self.find_or_create_host(name, organization, rhsm_params)
84
- host = find_host(name, organization)
85
+ def self.find_or_create_host(organization, rhsm_params)
86
+ host = find_host(rhsm_params[:facts], organization)
85
87
  host = Katello::Host::SubscriptionFacet.new_host_from_facts(rhsm_params[:facts], organization,
86
88
  Location.default_location) unless host
87
89
  host.organization = organization unless host.organization
88
90
  host
89
91
  end
90
92
 
93
+ def self.propose_name_from_facts(facts)
94
+ facts['network.fqdn'] || facts['network.hostname-override'] || facts['network.hostname']
95
+ end
96
+
97
+ def self.propose_existing_hostname(facts)
98
+ if ::Host.where(:name => facts['network.hostname'].downcase).any?
99
+ name = facts['network.hostname']
100
+ elsif facts['network.fqdn'] && ::Host.where(:name => facts['network.fqdn'].downcase).any?
101
+ name = facts['network.fqdn']
102
+ elsif facts['network.hostname-override'] && ::Host.where(:name => facts['network.hostname-override'].downcase).any?
103
+ name = facts['network.hostname-override']
104
+ else
105
+ name = facts['network.hostname'] #fallback to default, even if it doesn't exist
106
+ end
107
+
108
+ name.downcase
109
+ end
110
+
91
111
  def remove_subscriptions(pools_with_quantities)
92
112
  ForemanTasks.sync_task(Actions::Katello::Host::RemoveSubscriptions, self.host, pools_with_quantities)
93
113
  end
94
114
 
95
- def self.find_host(name, organization)
96
- hosts = ::Host.where(:name => name.downcase)
115
+ def self.find_host(facts, organization)
116
+ host_name = propose_existing_hostname(facts)
117
+ hosts = ::Host.where(:name => host_name)
118
+
97
119
  return nil if hosts.empty? #no host exists
98
120
  if hosts.where("organization_id = #{organization.id} OR organization_id is NULL").empty? #not in the correct org
99
121
  #TODO: http://projects.theforeman.org/issues/11532
100
- fail _("Host is currently registered to a different org, please migrate host to %s.") % organization.name
122
+ fail _("Host with name %{host_name} is currently registered to a different org, please migrate host to %{org_name}.") %
123
+ {:org_name => organization.name, :host_name => host_name }
101
124
  end
102
125
  hosts.first
103
126
  end
@@ -78,19 +78,7 @@ module Katello
78
78
  host_collections.each do |host_collection|
79
79
  host_collection_state = :ok
80
80
  unless host_collection.hosts.empty?
81
- host_collection.errata.each do |erratum|
82
- case erratum.errata_type
83
- when Erratum::SECURITY
84
- # there is a critical errata, so stop searching...
85
- host_collection_state = :critical
86
- break
87
-
88
- when Erratum::BUGZILLA
89
- when Erratum::ENHANCEMENT
90
- # set state to warning, but continue searching...
91
- host_collection_state = :warning
92
- end
93
- end
81
+ host_collection_state = host_collection.security_updates? ? :critical : :warning
94
82
  end
95
83
 
96
84
  host_collections_hash[host_collection_state] ||= []
@@ -100,15 +88,15 @@ module Katello
100
88
  end
101
89
 
102
90
  def security_updates?
103
- errata.any? { |erratum| erratum.errata_type == Erratum::SECURITY }
91
+ errata(Erratum::SECURITY).any?
104
92
  end
105
93
 
106
94
  def bugzilla_updates?
107
- errata.any? { |erratum| erratum.errata_type == Erratum::BUGZILLA }
95
+ errata(Erratum::BUGZILLA).any?
108
96
  end
109
97
 
110
98
  def enhancement_updates?
111
- errata.any? { |erratum| erratum.errata_type == Erratum::ENHANCEMENT }
99
+ errata(Erratum::ENHANCEMENT).any?
112
100
  end
113
101
 
114
102
  def self.humanize_class_name(_name = nil)
@@ -51,23 +51,17 @@ module Katello
51
51
  end
52
52
 
53
53
  def schedule_format
54
- if (self.interval != DURATION[self.interval])
55
- format = self.sync_date.iso8601 << "/P" << DURATION[self.interval]
56
- else
57
- if self.sync_date < Time.now
58
- format = nil # do not schedule tasks in past
59
- else
60
- format = "R1/" << self.sync_date.iso8601 << "/P1D"
61
- end
62
- end
63
- return format
54
+ return nil if DURATION[self.interval].nil?
55
+ date = self.sync_date
56
+ date = next_sync_date if self.sync_date < DateTime.now
57
+ "#{date.iso8601}/P#{DURATION[self.interval]}"
64
58
  end
65
59
 
66
60
  def plan_zone
67
61
  self.sync_date.strftime('%Z')
68
62
  end
69
63
 
70
- def next_sync
64
+ def next_sync_date
71
65
  return nil unless self.enabled
72
66
  now = Time.current
73
67
  next_sync = self.sync_date
@@ -100,10 +94,13 @@ module Katello
100
94
  end
101
95
  end
102
96
 
103
- next_sync = next_sync.strftime('%Y/%m/%d %H:%M:%S %Z') if next_sync
104
97
  next_sync
105
98
  end
106
99
 
100
+ def next_sync
101
+ next_sync_date.try(:strftime, '%Y/%m/%d %H:%M:%S %Z')
102
+ end
103
+
107
104
  def self.humanize_class_name(_name = nil)
108
105
  _("Sync Plans")
109
106
  end
@@ -22,7 +22,7 @@ class Setting::Content < Setting
22
22
  self.set('pulp_sync_node_action_finish_timeout', N_("Time in seconds to wait for a pulp node to finish sync"), 12.hours.to_i),
23
23
  self.set('check_services_before_actions', N_("Whether or not to check the status of backend services such as pulp and candlepin prior to performing some actions."), true),
24
24
  self.set('force_post_sync_actions', N_("Force post sync actions such as indexing and email even if no content was available."), false),
25
- self.set('default_download_policy', N_("Default download policy for repositories (either 'immediate', 'on_demand', or 'background')"), "immediate"),
25
+ self.set('default_download_policy', N_("Default download policy for repositories (either 'immediate', 'on_demand', or 'background')"), "on_demand"),
26
26
  self.set('pulp_docker_registry_port', N_("The port used by Pulp Crane to provide Docker Registries"), 5000),
27
27
  self.set('pulp_export_destination', N_("On-disk location for exported repositories"), N_("/var/lib/pulp/katello-export")),
28
28
  self.set('pulp_client_key', N_("Path for ssl key used for pulp server auth"), "/etc/pki/katello/private/pulp-client.key"),
@@ -4,7 +4,7 @@
4
4
 
5
5
  <% organizations = Organization.current.present? ? [Organization.current] : User.current.allowed_organizations %>
6
6
  <% hosts = ::Host::Managed.authorized("view_hosts") %>
7
- <% errata = Katello::Erratum.applicable_to_hosts(hosts).order('updated desc').limit(6) %>
7
+ <% errata = Katello::Erratum.applicable_to_hosts_dashboard(hosts) %>
8
8
 
9
9
  <% if errata.empty? %>
10
10
  <p class="ca"><%= _("There are no errata that need to be applied to registered content hosts.") %></p>
@@ -15,4 +15,5 @@ foreign_input_sets:
15
15
  exclude: action,package
16
16
  %>
17
17
 
18
- <%= render_template('Package Action - SSH Default', :action => 'update', :package => "--advisory=#{input(:errata)}") %>
18
+ <% advisories = input(:errata).split(',').map { |e| "--advisory=#{e}" }.join(' ') %>
19
+ <%= render_template('Package Action - SSH Default', :action => 'update', :package => advisories) %>
@@ -1 +1,5 @@
1
1
  attributes :id, :uuid, :last_checkin, :service_level, :release_version, :autoheal, :registered_at, :registered_through
2
+
3
+ child :user => :user do
4
+ attributes :id, :login
5
+ end
@@ -0,0 +1,7 @@
1
+ class AddUserToKatelloSubscriptionFacets < ActiveRecord::Migration
2
+ def change
3
+ add_column :katello_subscription_facets, :user_id, :integer
4
+ add_index :katello_subscription_facets, [:user_id], :unique => true
5
+ add_foreign_key "katello_subscription_facets", "users", :column => "user_id"
6
+ end
7
+ end
@@ -41,10 +41,10 @@
41
41
  <span ng-class="getHostStatusIcon(host.subscription_global_status)">
42
42
  </span>
43
43
  </td>
44
- <td bst-table-cell>{{ host.environment.name }}</td>
45
- <td bst-table-cell>{{ host.content_view.name || "" }}</td>
46
- <td bst-table-cell>{{ host.service_level }}</td>
47
- <td bst-table-cell>{{ host.release_ver }}</td>
44
+ <td bst-table-cell>{{ host.content_facet_attributes.lifecycle_environment_name }}</td>
45
+ <td bst-table-cell>{{ host.content_facet_attributes.content_view_name || "" }}</td>
46
+ <td bst-table-cell>{{ host.subscription_facet_attributes.service_level }}</td>
47
+ <td bst-table-cell>{{ host.subscription_facet_attributes.release_version }}</td>
48
48
  </tr>
49
49
  </tbody>
50
50
  </table>
@@ -19,14 +19,14 @@
19
19
 
20
20
  <button ng-if="isState('activation-keys.details.host-collections.list')"
21
21
  class="btn btn-default"
22
- ng-hide="denied('edit_activation_key', activationKey)"
22
+ ng-hide="denied('edit_activation_keys', activationKey)"
23
23
  ng-disabled="hostCollectionsTable.numSelected == 0 || hostCollectionsTable.working"
24
24
  ng-click="removeHostCollections()">
25
25
  {{ 'Remove Selected' | translate }}
26
26
  </button>
27
27
  <button ng-if="isState('activation-keys.details.host-collections.add')"
28
28
  class="btn btn-default"
29
- ng-hide="denied('edit_activation_key', activationKey)"
29
+ ng-hide="denied('edit_activation_keys', activationKey)"
30
30
  ng-disabled="hostCollectionsTable.numSelected == 0 || hostCollectionsTable.working"
31
31
  ng-click="addHostCollections()">
32
32
  {{ 'Add Selected' | translate }}
@@ -281,7 +281,7 @@
281
281
  <span class="info-value"
282
282
  translate
283
283
  ng-show="host.subscription_facet_attributes.activation_keys.length == 0">
284
- {{ contentHost.registered_by }}
284
+ {{ host.subscription_facet_attributes.user.login }}
285
285
  </span>
286
286
  <span class="info-value"
287
287
  ng-show="host.subscription_facet_attributes.activation_keys.length > 0"
@@ -29,6 +29,7 @@ angular.module('Bastion.content-views').controller('ContentViewDetailsController
29
29
  }
30
30
 
31
31
  nutupane = new Nutupane(ContentViewVersion, {'content_view_id': contentViewId});
32
+ nutupane.setSearchKey('contentViewVersionSearch');
32
33
  nutupane.masterOnly = true;
33
34
 
34
35
  function saveSuccess() {
@@ -14,7 +14,9 @@ Foreman::Plugin.find(:katello).security_block :activation_keys do
14
14
  :resource_type => 'Katello::ActivationKey'
15
15
  permission :edit_activation_keys,
16
16
  {
17
- 'katello/api/v2/activation_keys' => [:update, :content_override, :add_subscriptions, :remove_subscriptions]
17
+ 'katello/api/v2/activation_keys' => [:update, :content_override,
18
+ :add_subscriptions, :remove_subscriptions,
19
+ :add_host_collections, :remove_host_collections]
18
20
  },
19
21
  :resource_type => 'Katello::ActivationKey'
20
22
  permission :destroy_activation_keys,
@@ -1,3 +1,3 @@
1
1
  module Katello
2
- VERSION = "3.2.0.rc2".freeze
2
+ VERSION = "3.2.0.rc3".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: katello
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0.rc2
4
+ version: 3.2.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - N/A
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-10-10 00:00:00.000000000 Z
11
+ date: 2016-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -1344,6 +1344,7 @@ files:
1344
1344
  - db/migrate/20160727144242_add_registered_through_to_katello_subscription_facets.rb
1345
1345
  - db/migrate/20160808002834_add_files.rb
1346
1346
  - db/migrate/20160906181923_add_puppet_path_to_smart_proxy.rb
1347
+ - db/migrate/20161003204325_add_user_to_katello_subscription_facets.rb
1347
1348
  - db/seeds.d/101-locations.rb
1348
1349
  - db/seeds.d/102-organizations.rb
1349
1350
  - db/seeds.d/103-provisioning_templates.rb
@@ -1986,7 +1987,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
1986
1987
  version: 1.3.1
1987
1988
  requirements: []
1988
1989
  rubyforge_project:
1989
- rubygems_version: 2.2.5
1990
+ rubygems_version: 2.5.0
1990
1991
  signing_key:
1991
1992
  specification_version: 4
1992
1993
  summary: ''