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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/katello/hosts/host_and_hostgroup_edit.js +8 -5
- data/app/controllers/katello/api/rhsm/candlepin_proxies_controller.rb +2 -4
- data/app/controllers/katello/api/v2/host_collections_controller.rb +0 -1
- data/app/controllers/katello/api/v2/repositories_controller.rb +2 -0
- data/app/controllers/katello/concerns/api/v2/hostgroups_controller_extensions.rb +1 -0
- data/app/helpers/katello/hosts_and_hostgroups_helper.rb +7 -6
- data/app/lib/actions/katello/host/register.rb +6 -1
- data/app/models/katello/concerns/smart_proxy_extensions.rb +2 -1
- data/app/models/katello/concerns/user_extensions.rb +1 -0
- data/app/models/katello/erratum.rb +7 -0
- data/app/models/katello/host/content_facet.rb +2 -1
- data/app/models/katello/host/subscription_facet.rb +29 -6
- data/app/models/katello/host_collection.rb +4 -16
- data/app/models/katello/sync_plan.rb +9 -12
- data/app/models/setting/content.rb +1 -1
- data/app/views/dashboard/_errata_widget.html.erb +1 -1
- data/app/views/foreman/job_templates/install_errata.erb +2 -1
- data/app/views/katello/api/v2/subscription_facet/base.json.rabl +4 -0
- data/db/migrate/20161003204325_add_user_to_katello_subscription_facets.rb +7 -0
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-associations-content-hosts.html +4 -4
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/activation-keys/details/views/activation-key-host-collections-table.html +2 -2
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-hosts/details/views/content-host-info.html +1 -1
- data/engines/bastion_katello/app/assets/javascripts/bastion_katello/content-views/details/content-view-details.controller.js +1 -0
- data/lib/katello/permissions/activation_key_permissions.rb +3 -1
- data/lib/katello/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce99710c536ecdc466fbed467cdb96100f9ddd57
|
4
|
+
data.tar.gz: 2d82b66f5c5f99167da329a7e794b20421fc7933
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
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
|
-
|
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(
|
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(
|
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
|
-
|
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(
|
210
|
-
host.architecture = Architecture.find(
|
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(
|
213
|
-
content_view = Katello::ContentView.find(
|
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(
|
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)
|
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
|
-
|
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(
|
84
|
-
host = find_host(
|
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(
|
96
|
-
|
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 %
|
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.
|
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?
|
91
|
+
errata(Erratum::SECURITY).any?
|
104
92
|
end
|
105
93
|
|
106
94
|
def bugzilla_updates?
|
107
|
-
errata.any?
|
95
|
+
errata(Erratum::BUGZILLA).any?
|
108
96
|
end
|
109
97
|
|
110
98
|
def enhancement_updates?
|
111
|
-
errata.any?
|
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
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
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
|
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')"), "
|
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.
|
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
|
-
|
18
|
+
<% advisories = input(:errata).split(',').map { |e| "--advisory=#{e}" }.join(' ') %>
|
19
|
+
<%= render_template('Package Action - SSH Default', :action => 'update', :package => advisories) %>
|
@@ -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.
|
45
|
-
<td bst-table-cell>{{ host.
|
46
|
-
<td bst-table-cell>{{ host.service_level }}</td>
|
47
|
-
<td bst-table-cell>{{ host.
|
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('
|
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('
|
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
|
-
{{
|
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,
|
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,
|
data/lib/katello/version.rb
CHANGED
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.
|
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-
|
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.
|
1990
|
+
rubygems_version: 2.5.0
|
1990
1991
|
signing_key:
|
1991
1992
|
specification_version: 4
|
1992
1993
|
summary: ''
|