foreman_kernel_care 1.1.1 → 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0348921f3d8a92fad7474e5e6256d1f766b016f827f4e16b75afe825230f511
4
- data.tar.gz: b5811ad734c679a9341b8691f21e29ead36cfc8fac6b2f568c536732a1987ee9
3
+ metadata.gz: d48df9124313a81b6ed28245a2a54447b1feca758c16087f5e5d638fd1208f83
4
+ data.tar.gz: 1af5606d485f619452eef174fe84c849225a676da2e47498364b5d1bf45c1438
5
5
  SHA512:
6
- metadata.gz: 89fb27d78851ea1e38eb8add5398ecc04e9e970bcd69f5e501193ccb4f6ac6f86395e64c531b3cc92a794a0819c4aecd25f975de2d51f3f592ab99efac3462fa
7
- data.tar.gz: 522e387d5dac01c5f49302eb5837132c89fe9daea5e53d8a8fd335d8a2aecfae066c9091febfde3e3eefc5f0a8e830a0d3afc6495bcbba33333d208bd1ca2283
6
+ metadata.gz: b5923597240288d47b3fdd6342be6450f0645f8a2c885cc07899505a8d81125c8c1dfcf97b180714c074801554c435d695f57063b951664f7eed6ed1ca0a7e14
7
+ data.tar.gz: 1cc8476969f489892f0708edd5d02f66ff81e0359d80da84ede35e1783609fdd073364e3c8ae84db5029dde7f340c37ca34db696ff3b3ecdf5f5185fbcbb5276
@@ -4,19 +4,24 @@ module ForemanKernelCare
4
4
  callbacks = params.key?(:callback) ? Array(params) : params[:callbacks]
5
5
  ids = callbacks.map { |payload| payload[:callback][:task_id] }
6
6
  foreman_tasks = ::ForemanTasks::Task.where(:id => ids)
7
- external_map = Hash[*foreman_tasks.pluck(:id, :external_id).flatten]
8
7
  callbacks.each do |payload|
9
8
  # We need to call .to_unsafe_h to unwrap the hash from ActionController::Parameters
10
9
  callback = payload[:callback]
11
10
  foreman_task = foreman_tasks.find { |task| task.id == callback[:task_id] }
12
- if foreman_task.action.include?('Get patched kernel version')
13
- version, release = payload[:data].to_unsafe_h['result'].first['output'].strip.split('-')
14
- job_invocation = ::JobInvocation.where(:task_id => foreman_task.parent_task_id).first
15
- job_invocation.targeting.hosts.each { |host| host.update_kernel_version(version, release) }
16
- end
17
- process_callback(external_map[callback[:task_id]], callback[:step_id].to_i, payload[:data].to_unsafe_h, :request_id => ::Logging.mdc['request'])
11
+ next unless foreman_task.action.include?('Get patched kernel version')
12
+ complete_output = ''
13
+ result = payload[:data].to_unsafe_h['result']
14
+ result.each { |x| complete_output += x['output'] }
15
+ kernel, kcare = complete_output.split(/\n/)
16
+ kernel = kernel.gsub('Installed kernel version: ', '')
17
+ kcare = kcare.gsub('Patched kernel version: ', '')
18
+ version, release = kcare.strip.split('-')
19
+ next if version.empty? || release.empty?
20
+ job_invocation = ::JobInvocation.where(:task_id => foreman_task.parent_task_id).first
21
+ job_invocation.targeting.hosts.each { |host| host.update_kernel_version(version, release, kernel) }
18
22
  end
19
- render :json => { :message => 'processing' }.to_json
23
+
24
+ super
20
25
  end
21
26
  end
22
27
  end
@@ -7,57 +7,103 @@ module ForemanKernelCare
7
7
  composer.trigger!
8
8
  end
9
9
 
10
- found = import_package_profile_in_bulk(simple_packages)
11
- sync_package_associations(found.map(&:id).uniq)
10
+ super(simple_packages)
12
11
  end
13
12
 
14
13
  def import_tracer_profile(tracer_profile)
15
- traces = []
16
- tracer_profile.each do |trace, attributes|
17
- next if attributes[:helper].blank?
14
+ if kernelcare?
15
+ new_tracer_profile = {}
16
+ tracer_profile.each do |trace, attributes|
17
+ if trace.to_s == 'kernel'
18
+ composer = ::JobInvocationComposer.for_feature(:update_kernel, self)
19
+ composer.triggering.mode = :future
20
+ composer.trigger!
21
+ else
22
+ new_tracer_profile[trace] = attributes
23
+ end
24
+ end
25
+ super(new_tracer_profile)
26
+ else
27
+ super(tracer_profile)
28
+ end
29
+ end
18
30
 
19
- if trace.to_s == 'kernel' && kernelcare?
20
- composer = ::JobInvocationComposer.for_feature(:update_kernel, self)
21
- composer.triggering.mode = :future
22
- composer.trigger!
31
+ def update_kernel_version(version, release, old_kernel_version)
32
+ old_version, old_release = old_kernel_version.split('-')
23
33
 
24
- next
25
- end
34
+ case operatingsystem.family
35
+ when 'Redhat'
36
+ packages = find_yum_kernel_packages(old_version, old_release)
37
+ return if packages.empty?
26
38
 
27
- traces << { host_id: id, application: trace, helper: attributes[:helper], app_type: attributes[:type] }
39
+ delete_yum_pkgs(packages)
40
+ create_new_yum_kernel_packages(packages, version, release)
41
+ when 'Debian'
42
+ old_version = "#{old_version}-#{old_release}"
43
+ new_version = "#{version}-#{release}"
44
+ packages = find_deb_kernel_packages(old_version)
45
+ return if packages.empty?
46
+
47
+ create_new_deb_kernel_packages(packages, new_version, old_version)
28
48
  end
29
- host_traces.delete_all
30
- Katello::HostTracer.import(traces, validate: false)
31
- update_trace_status
32
49
  end
33
50
 
34
- def update_kernel_version(version, release)
35
- packages = ::Katello::InstalledPackage.where('name LIKE ?', '%kernel%').where.not(name: 'kernelcare').to_a
36
- delete_ids = []
37
- simple_packages = packages.map do |p|
38
- delete_ids << p.id
39
- ::Katello::Pulp::SimplePackage.new({
40
- arch: p.arch,
41
- epoch: p.epoch,
42
- version: version,
43
- release: release,
44
- name: p.name
45
- })
51
+ def kernelcare?
52
+ !installed_packages.select { |package| package.name == 'kernelcare' }.empty? ||
53
+ !installed_debs.select { |package| package.name == 'kernelcare' }.empty?
54
+ end
55
+
56
+ class ::Host::Managed::Jail < Safemode::Jail
57
+ allow :installed_debs, :kernelcare?
58
+ end
59
+
60
+ protected
61
+
62
+ def find_yum_kernel_packages(old_version, old_release)
63
+ installed_packages.select do |p|
64
+ p.name.include?('kernel') &&
65
+ p.name != 'kernelcare' &&
66
+ p.version == old_version &&
67
+ old_release.include?(p.release)
46
68
  end
47
- found = import_package_profile_in_bulk(simple_packages)
48
- sync_kernel_associations(found.map(&:id).uniq, delete_ids)
49
69
  end
50
70
 
51
- def sync_kernel_associations(new_patched_kernel_ids, delete_ids)
71
+ def delete_yum_pkgs(packages)
72
+ delete_ids = packages.map(&:id)
52
73
  ::Katello::Util::Support.active_record_retry do
53
74
  table_name = host_installed_packages.table_name
54
-
55
75
  queries = []
56
76
 
57
77
  if delete_ids.any?
58
78
  queries << "DELETE FROM #{table_name} WHERE host_id=#{id} AND installed_package_id IN (#{delete_ids.join(', ')})"
59
79
  end
60
80
 
81
+ queries.each do |query|
82
+ ::ActiveRecord::Base.connection.execute(query)
83
+ end
84
+ end
85
+ end
86
+
87
+ def create_new_yum_kernel_packages(packages, version, release)
88
+ new_kernels = packages.map do |p|
89
+ ::Katello::Pulp::SimplePackage.new({
90
+ arch: p.arch,
91
+ epoch: p.epoch,
92
+ version: version,
93
+ release: release,
94
+ name: p.name
95
+ })
96
+ end
97
+ found = import_package_profile_in_bulk(new_kernels)
98
+ sync_yum_kernel_associations(found.map(&:id).uniq)
99
+ end
100
+
101
+ def sync_yum_kernel_associations(new_patched_kernel_ids)
102
+ ::Katello::Util::Support.active_record_retry do
103
+ table_name = host_installed_packages.table_name
104
+
105
+ queries = []
106
+
61
107
  unless new_patched_kernel_ids.empty?
62
108
  inserts = new_patched_kernel_ids.map { |unit_id| "(#{unit_id.to_i}, #{id.to_i})" }
63
109
  queries << "INSERT INTO #{table_name} (installed_package_id, host_id) VALUES #{inserts.join(', ')}"
@@ -69,10 +115,33 @@ module ForemanKernelCare
69
115
  end
70
116
  end
71
117
 
72
- protected
118
+ def find_deb_kernel_packages(old_version)
119
+ installed_debs.select do |p|
120
+ p.name.include?('linux') && p.version.include?(old_version)
121
+ end
122
+ end
73
123
 
74
- def kernelcare?
75
- !installed_packages.select { |package| package.name == 'kernelcare' }.empty?
124
+ def create_new_deb_kernel_packages(packages, new_version, old_version)
125
+ old_kernel_ids = packages.map(&:id)
126
+ new_kernels = packages.map do |p|
127
+ name = if p.name.include?(old_version)
128
+ p.name.sub(old_version, new_version)
129
+ else
130
+ p.name
131
+ end
132
+ ::Katello::InstalledDeb.find_or_create_by(name: name, architecture: p.architecture, version: new_version)
133
+ end
134
+ return if new_kernels.empty? || old_kernel_ids.empty?
135
+
136
+ sync_deb_kernel_associations(new_kernels.map(&:id), old_kernel_ids)
137
+ end
138
+
139
+ def sync_deb_kernel_associations(new_patched_kernel_ids, old_kernel_ids)
140
+ new_installed_debs = installed_deb_ids.reject do |id|
141
+ old_kernel_ids.include?(id)
142
+ end
143
+ self.installed_deb_ids = new_installed_debs.concat(new_patched_kernel_ids)
144
+ save!
76
145
  end
77
146
  end
78
147
  end
@@ -0,0 +1,15 @@
1
+ module ForemanKernelCare
2
+ module ProfilesUploader
3
+ extend ActiveSupport::Concern
4
+
5
+ def import_deb_package_profile(profile)
6
+ if @host.kernelcare?
7
+ composer = ::JobInvocationComposer.for_feature(:kernel_version, @host)
8
+ composer.triggering.mode = :future
9
+ composer.trigger!
10
+ end
11
+
12
+ super(profile)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ <%#
2
+ kind: job_template
3
+ name: LivePatching - Install Kernelcare
4
+ model: JobTemplate
5
+ job_category: LivePatching - Script Default
6
+ description_format: Install kernelcare package
7
+ provider_type: script
8
+ %>
9
+
10
+ <%= render_template('Package Action - Script Default', :action => 'install', :package => 'kernelcare') %>
@@ -1,15 +1,19 @@
1
1
  <%#
2
2
  kind: job_template
3
- name: Kernel version
3
+ name: LivePatching - Kernel version
4
4
  model: JobTemplate
5
- job_category: Commands
5
+ job_category: LivePatching - Script Default
6
6
  description_format: "Get patched kernel version"
7
- provider_type: SSH
7
+ provider_type: script
8
8
  feature: kernel_version
9
9
  %>
10
10
  <%
11
- unless @host.installed_packages.select { |package| package.name == 'kernelcare' }.empty?
12
- render_error(N_('Unsupported host.'))
11
+ unless @host.installed_packages.map{ |package| package.name }.include?('kernelcare') || @host.installed_debs.map{ |package| package.name }.include?('kernelcare')
12
+ render_error(N_('The "kernelcare" package is not installed on your managed host which is required by this job template.'))
13
13
  end
14
14
  %>
15
+
16
+ echo -n "Installed kernel version: "
17
+ uname -r
18
+ echo -n "Patched kernel version: "
15
19
  /usr/bin/kcarectl --uname
@@ -1,15 +1,17 @@
1
1
  <%#
2
2
  kind: job_template
3
- name: Update kernel
3
+ name: LivePatching - Update kernel
4
4
  model: JobTemplate
5
- job_category: Commands
6
- description_format: "Run yum update kernel"
7
- provider_type: SSH
5
+ job_category: LivePatching - Script Default
6
+ description_format: "Update kernel"
7
+ provider_type: script
8
8
  feature: update_kernel
9
9
  %>
10
+
10
11
  <%
11
- unless @host.operatingsystem.family == 'Redhat'
12
- render_error(N_('Unsupported operating system for this host.'))
12
+ unless @host.installed_packages.map{ |package| package.name }.include?('kernelcare') || @host.installed_debs.map{ |package| package.name }.include?('kernelcare')
13
+ render_error(N_('The "kernelcare" package is not installed on your managed host which is required by this job template.'))
13
14
  end
14
15
  %>
15
- yum update -y kernel*
16
+
17
+ /usr/bin/kcarectl --update
@@ -0,0 +1,15 @@
1
+ <%#
2
+ kind: job_template
3
+ name: LivePatching - View newest Patch
4
+ model: JobTemplate
5
+ job_category: LivePatching - Script Default
6
+ description_format: "View available patches"
7
+ provider_type: script
8
+ %>
9
+ <%
10
+ unless @host.installed_packages.map{ |package| package.name }.include?('kernelcare') || @host.installed_debs.map{ |package| package.name }.include?('kernelcare')
11
+ render_error(N_('The "kernelcare" package is not installed on your managed host which is required by this job template.'))
12
+ end
13
+ %>
14
+
15
+ /usr/bin/kcarectl --latest-patch-info --json
@@ -10,14 +10,14 @@ User.as_anonymous_admin do
10
10
  ForemanKernelCare::Engine.register_rex_feature
11
11
  end
12
12
  JobTemplate.without_auditing do
13
- module_template = JobTemplate.find_by(name: 'Update kernel')
13
+ module_template = JobTemplate.find_by(name: 'LivePatching - Update kernel')
14
14
  if module_template && !Rails.env.test? && Setting[:remote_execution_sync_templates]
15
15
  module_template.sync_feature('update_kernel')
16
16
  module_template.organizations << Organization.unscoped.all if module_template.organizations.empty?
17
17
  module_template.locations << Location.unscoped.all if module_template.locations.empty?
18
18
  end
19
19
 
20
- module_template = JobTemplate.find_by(name: 'Kernel version')
20
+ module_template = JobTemplate.find_by(name: 'LivePatching - Kernel version')
21
21
  if module_template && !Rails.env.test? && Setting[:remote_execution_sync_templates]
22
22
  module_template.sync_feature('kernel_version')
23
23
  module_template.organizations << Organization.unscoped.all if module_template.organizations.empty?
@@ -1,3 +1,5 @@
1
+ require 'katello'
2
+ require 'foreman_tasks'
1
3
  require 'foreman_kernel_care/remote_execution'
2
4
 
3
5
  module ForemanKernelCare
@@ -6,22 +8,20 @@ module ForemanKernelCare
6
8
  engine_name 'foreman_kernel_care'
7
9
 
8
10
  config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
11
+ config.autoload_paths += Dir["#{config.root}/app/services/concerns"]
9
12
 
10
13
  initializer 'foreman_kernel_care.register_plugin', :before => :finisher_hook do |_app|
11
14
  Foreman::Plugin.register :foreman_kernel_care do
12
15
  requires_foreman '>= 1.19.0'
13
-
14
- # Add a new role called 'Discovery' if it doesn't exist
15
16
  role 'Foreman KernelCare', [:view_job_templates]
16
17
  end
17
18
  end
18
19
 
19
- # Include concerns in this config.to_prepare block
20
- config.to_prepare do
21
- Katello::Concerns::HostManagedExtensions.prepend ForemanKernelCare::HostManagedExtensions
22
- ForemanTasks::Api::TasksController.prepend ForemanKernelCare::ForemanTasks
23
- rescue StandardError => e
24
- Rails.logger.warn "ForemanKernelCare: skipping engine hook (#{e})"
20
+ # make sure the plugin is initialized before katello loads the host extensions
21
+ initializer 'foreman_kernel_care.load_kernelcare_override', :before => :finisher_hook, :after => ['katello.register_plugin', 'foreman_tasks.register_plugin'] do
22
+ ::Katello::Concerns::HostManagedExtensions.prepend ForemanKernelCare::HostManagedExtensions
23
+ ::Katello::Host::ProfilesUploader.prepend ForemanKernelCare::ProfilesUploader
24
+ ::ForemanTasks::Api::TasksController.prepend ForemanKernelCare::ForemanTasks
25
25
  end
26
26
 
27
27
  rake_tasks do
@@ -5,6 +5,10 @@ require 'foreman_remote_execution'
5
5
  module ForemanKernelCare
6
6
  # Dependencies related with the remote execution plugin
7
7
  class Engine < ::Rails::Engine
8
+ config.to_prepare do
9
+ ForemanKernelCare::Engine.register_rex_feature
10
+ end
11
+
8
12
  def self.register_rex_feature
9
13
  RemoteExecutionFeature.register(
10
14
  :update_kernel,
@@ -1,3 +1,3 @@
1
1
  module ForemanKernelCare
2
- VERSION = '1.1.1'.freeze
2
+ VERSION = '1.2.1'.freeze
3
3
  end
@@ -1,5 +1,14 @@
1
1
  FactoryBot.modify do
2
2
  factory :host do
3
+ trait :debian_with_kernelcare do
4
+ after(:create) do |host|
5
+ installed_deb_id = ::Katello::InstalledDeb.find_or_create_by(name: 'kernelcare',
6
+ architecture: 'x86_64',
7
+ version: '2.54-1').id
8
+ host.installed_deb_ids = installed_deb_id
9
+ host.save!
10
+ end
11
+ end
3
12
  trait :with_kernelcare do
4
13
  after(:create) do |host|
5
14
  package_json = {
@@ -9,25 +9,64 @@ module ForemanKernelCare
9
9
  feature = RemoteExecutionFeature.register('kernel_version', 'Kernel version')
10
10
  template = FactoryBot.create(:job_template, name: 'Kernel versionl')
11
11
  template.sync_feature(feature.label)
12
-
13
- @host = FactoryBot.create(:host, :with_kernelcare)
14
- package_json = {:name => "kernel", :version => "1", :release => "1.el7", :arch => "x86_64", :epoch => "1",
15
- :nvra => "kernel-1-1.el7.x86_64"}
16
- @host.import_package_profile([::Katello::Pulp::SimplePackage.new(package_json)])
17
- @nvra = 'kernel-1-1.el7.x86_64'
18
- @host.reload
19
12
  end
20
13
 
21
14
  def test_update_kernel_version
15
+ host = FactoryBot.create(:host, :with_kernelcare,
16
+ :operatingsystem => FactoryBot.create(:operatingsystem,
17
+ :family => 'Redhat'))
18
+ package_json = { :name => 'kernel', :version => '1',
19
+ :release => '1.el7', :arch => 'x86_64', :epoch => '1',
20
+ :nvra => 'kernel-1-1.el7.x86_64' }
21
+ host.import_package_profile([::Katello::Pulp::SimplePackage.new(package_json)])
22
+ nvra = 'kernel-1-1.el7.x86_64'
23
+ host.reload
22
24
  version = '2'
23
25
  release = '2.el7'
24
- @host.update_kernel_version(version, release)
25
- kernel_package = @host.installed_packages.where(name: 'kernel').first
26
+ old_kernel_version = '1-1.el7.x86_64'
27
+ host.update_kernel_version(version, release, old_kernel_version)
28
+ kernel_package = host.installed_packages.where(name: 'kernel').first
26
29
 
27
- assert_not_equal kernel_package.nvra, @nvra
30
+ assert_not_equal kernel_package.nvra, nvra
28
31
  assert_equal kernel_package.version, version
29
32
  assert_equal kernel_package.release, release
30
33
  end
34
+
35
+ def test_update_kernel_version_debian
36
+ host = FactoryBot.create(:host, :debian_with_kernelcare,
37
+ :operatingsystem => FactoryBot.create(:operatingsystem,
38
+ :major => '10',
39
+ :release_name => 'rn10',
40
+ :family => 'Debian'))
41
+ kernels = [
42
+ { architecture: 'x86_64', version: '1-1', name: 'linux-image-generic' },
43
+ { architecture: 'x86_64', version: '1-1', name: 'linux-headers-generic ' },
44
+ { architecture: 'x86_64', version: '1-1', name: 'linux-generic' },
45
+ { architecture: 'x86_64', version: '1-1', name: 'linux-signed-generic' },
46
+ { architecture: 'x86_64', version: '1-1', name: 'linux-image-1-1-generic' }
47
+ ]
48
+ kernel_deb_ids = kernels.map do |kernel|
49
+ ::Katello::InstalledDeb.find_or_create_by(name: kernel[:name],
50
+ architecture: kernel[:architecture],
51
+ version: kernel[:version]).id
52
+ end
53
+ kernelcare_id = host.installed_deb_ids.first
54
+ installed_deb_ids = kernel_deb_ids << kernelcare_id
55
+ host.installed_deb_ids = installed_deb_ids
56
+ host.save!
57
+
58
+ version = '2'
59
+ release = '2'
60
+ old_kernel_version = '1-1-generic'
61
+ host.update_kernel_version(version, release, old_kernel_version)
62
+ debian_kernel_packages = host.installed_debs.select do |p|
63
+ p.name.include?('generic')
64
+ end
65
+ debian_kernel_packages.each do |p|
66
+ assert_not_equal p.name, 'linux-image-1-1-generic'
67
+ assert_equal p.version, "#{version}-#{release}"
68
+ end
69
+ end
31
70
  end
32
71
 
33
72
  class HostTracerTest < HostManagedExtensionsTestBase
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: foreman_kernel_care
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.1
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Maxim Petukhov
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-01 00:00:00.000000000 Z
11
+ date: 2023-10-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: foreman_remote_execution
@@ -42,30 +42,50 @@ dependencies:
42
42
  name: rdoc
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '6'
45
48
  - - ">="
46
49
  - !ruby/object:Gem::Version
47
- version: '0'
50
+ version: 6.3.1
48
51
  type: :development
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
55
+ - - "~>"
56
+ - !ruby/object:Gem::Version
57
+ version: '6'
52
58
  - - ">="
53
59
  - !ruby/object:Gem::Version
54
- version: '0'
60
+ version: 6.3.1
55
61
  - !ruby/object:Gem::Dependency
56
62
  name: rubocop
57
63
  requirement: !ruby/object:Gem::Requirement
58
64
  requirements:
59
65
  - - ">="
60
66
  - !ruby/object:Gem::Version
61
- version: '0'
67
+ version: 0.87.0
62
68
  type: :development
63
69
  prerelease: false
64
70
  version_requirements: !ruby/object:Gem::Requirement
65
71
  requirements:
66
72
  - - ">="
67
73
  - !ruby/object:Gem::Version
68
- version: '0'
74
+ version: 0.87.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: rubocop-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 2.8.1
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 2.8.1
69
89
  description: This plugin removes kernel trace and update the kernel package version
70
90
  if KernelCare package is installed on host
71
91
  email:
@@ -79,8 +99,11 @@ files:
79
99
  - Rakefile
80
100
  - app/controllers/concerns/foreman_kernel_care/foreman_tasks.rb
81
101
  - app/models/concerns/foreman_kernel_care/host_managed_extensions.rb
102
+ - app/services/concerns/foreman_kernel_care/profiles_uploader.rb
103
+ - app/views/foreman_kernel_care/job_templates/install_kernelcare.erb
82
104
  - app/views/foreman_kernel_care/job_templates/kernel_version.erb
83
105
  - app/views/foreman_kernel_care/job_templates/update_kernel.erb
106
+ - app/views/foreman_kernel_care/job_templates/view_newest_patch.erb
84
107
  - db/seeds.d/100_assign_features_with_templates.rb
85
108
  - db/seeds.d/70_job_templates.rb
86
109
  - lib/foreman_kernel_care.rb
@@ -95,7 +118,7 @@ homepage: https://github.com/maccelf/foreman_kernel_care
95
118
  licenses:
96
119
  - GPL-3.0
97
120
  metadata: {}
98
- post_install_message:
121
+ post_install_message:
99
122
  rdoc_options: []
100
123
  require_paths:
101
124
  - lib
@@ -103,15 +126,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
126
  requirements:
104
127
  - - ">="
105
128
  - !ruby/object:Gem::Version
106
- version: '0'
129
+ version: 2.5.0
107
130
  required_rubygems_version: !ruby/object:Gem::Requirement
108
131
  requirements:
109
132
  - - ">="
110
133
  - !ruby/object:Gem::Version
111
134
  version: '0'
112
135
  requirements: []
113
- rubygems_version: 3.1.2
114
- signing_key:
136
+ rubygems_version: 3.2.33
137
+ signing_key:
115
138
  specification_version: 4
116
139
  summary: Plugin for KernelCare
117
140
  test_files: