foreman_kernel_care 1.1.1 → 1.2.0

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: f86d4ec92298514c54e1e1969fa5a2fb7cd7c03ab73231d86254cc3bc7fef433
4
+ data.tar.gz: bf641ebb676ef91fffb9a0fabb9def7321352dd721483404b0a85b27a8c76e01
5
5
  SHA512:
6
- metadata.gz: 89fb27d78851ea1e38eb8add5398ecc04e9e970bcd69f5e501193ccb4f6ac6f86395e64c531b3cc92a794a0819c4aecd25f975de2d51f3f592ab99efac3462fa
7
- data.tar.gz: 522e387d5dac01c5f49302eb5837132c89fe9daea5e53d8a8fd335d8a2aecfae066c9091febfde3e3eefc5f0a8e830a0d3afc6495bcbba33333d208bd1ca2283
6
+ metadata.gz: ba271df050549eacca5d79ed6383e7b5a7e822dc9940d06a3ca238c5224c4746e621c3d455806513c8e5d00470e31692f4fa5129523b30344ff8c257bff208ce
7
+ data.tar.gz: 861ca0eba4d135a8ad5643175cee8cfba7b5043691c6eaaaf7dad811b484fd252d027098a73474b94c48e6424cc1b46c6fa0e1e3a59dcb56fc7140a5825183f9
@@ -4,19 +4,22 @@ 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
+ kcare, kernel = complete_output.split(/\n/).values_at(1, 3)
16
+ version, release = kcare.strip.split('-')
17
+ next if version.empty? || release.empty?
18
+ job_invocation = ::JobInvocation.where(:task_id => foreman_task.parent_task_id).first
19
+ job_invocation.targeting.hosts.each { |host| host.update_kernel_version(version, release, kernel) }
18
20
  end
19
- render :json => { :message => 'processing' }.to_json
21
+
22
+ super
20
23
  end
21
24
  end
22
25
  end
@@ -7,57 +7,98 @@ 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
+ class ::Host::Managed::Jail < Safemode::Jail
52
+ allow :installed_debs
53
+ end
54
+
55
+ protected
56
+
57
+ def find_yum_kernel_packages(old_version, old_release)
58
+ installed_packages.select do |p|
59
+ p.name.include?('kernel') &&
60
+ p.name != 'kernelcare' &&
61
+ p.version == old_version &&
62
+ old_release.include?(p.release)
46
63
  end
47
- found = import_package_profile_in_bulk(simple_packages)
48
- sync_kernel_associations(found.map(&:id).uniq, delete_ids)
49
64
  end
50
65
 
51
- def sync_kernel_associations(new_patched_kernel_ids, delete_ids)
66
+ def delete_yum_pkgs(packages)
67
+ delete_ids = packages.map(&:id)
52
68
  ::Katello::Util::Support.active_record_retry do
53
69
  table_name = host_installed_packages.table_name
54
-
55
70
  queries = []
56
71
 
57
72
  if delete_ids.any?
58
73
  queries << "DELETE FROM #{table_name} WHERE host_id=#{id} AND installed_package_id IN (#{delete_ids.join(', ')})"
59
74
  end
60
75
 
76
+ queries.each do |query|
77
+ ::ActiveRecord::Base.connection.execute(query)
78
+ end
79
+ end
80
+ end
81
+
82
+ def create_new_yum_kernel_packages(packages, version, release)
83
+ new_kernels = packages.map do |p|
84
+ ::Katello::Pulp::SimplePackage.new({
85
+ arch: p.arch,
86
+ epoch: p.epoch,
87
+ version: version,
88
+ release: release,
89
+ name: p.name
90
+ })
91
+ end
92
+ found = import_package_profile_in_bulk(new_kernels)
93
+ sync_yum_kernel_associations(found.map(&:id).uniq)
94
+ end
95
+
96
+ def sync_yum_kernel_associations(new_patched_kernel_ids)
97
+ ::Katello::Util::Support.active_record_retry do
98
+ table_name = host_installed_packages.table_name
99
+
100
+ queries = []
101
+
61
102
  unless new_patched_kernel_ids.empty?
62
103
  inserts = new_patched_kernel_ids.map { |unit_id| "(#{unit_id.to_i}, #{id.to_i})" }
63
104
  queries << "INSERT INTO #{table_name} (installed_package_id, host_id) VALUES #{inserts.join(', ')}"
@@ -69,10 +110,38 @@ module ForemanKernelCare
69
110
  end
70
111
  end
71
112
 
72
- protected
113
+ def find_deb_kernel_packages(old_version)
114
+ installed_debs.select do |p|
115
+ p.name.include?('linux') && p.version.include?(old_version)
116
+ end
117
+ end
118
+
119
+ def create_new_deb_kernel_packages(packages, new_version, old_version)
120
+ old_kernel_ids = packages.map(&:id)
121
+ new_kernels = packages.map do |p|
122
+ name = if p.name.include?(old_version)
123
+ p.name.sub(old_version, new_version)
124
+ else
125
+ p.name
126
+ end
127
+ ::Katello::InstalledDeb.find_or_create_by(name: name, architecture: p.architecture, version: new_version)
128
+ end
129
+ return if new_kernels.empty? || old_kernel_ids.empty?
130
+
131
+ sync_deb_kernel_associations(new_kernels.map(&:id), old_kernel_ids)
132
+ end
133
+
134
+ def sync_deb_kernel_associations(new_patched_kernel_ids, old_kernel_ids)
135
+ new_installed_debs = installed_deb_ids.reject do |id|
136
+ old_kernel_ids.include?(id)
137
+ end
138
+ self.installed_deb_ids = new_installed_debs.concat(new_patched_kernel_ids)
139
+ save!
140
+ end
73
141
 
74
142
  def kernelcare?
75
- !installed_packages.select { |package| package.name == 'kernelcare' }.empty?
143
+ !installed_packages.select { |package| package.name == 'kernelcare' }.empty? ||
144
+ !installed_debs.select { |package| package.name == 'kernelcare' }.empty?
76
145
  end
77
146
  end
78
147
  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?
11
+ unless @host.installed_packages.map{ |package| package.name }.include?('kernelcare') || @host.installed_debs.map{ |package| package.name }.include?('kernelcare')
12
12
  render_error(N_('Unsupported host.'))
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_('Unsupported host.'))
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: "Get patched kernel version"
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_('Unsupported host.'))
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
@@ -10,18 +12,14 @@ module ForemanKernelCare
10
12
  initializer 'foreman_kernel_care.register_plugin', :before => :finisher_hook do |_app|
11
13
  Foreman::Plugin.register :foreman_kernel_care do
12
14
  requires_foreman '>= 1.19.0'
13
-
14
- # Add a new role called 'Discovery' if it doesn't exist
15
15
  role 'Foreman KernelCare', [:view_job_templates]
16
16
  end
17
17
  end
18
18
 
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})"
19
+ # make sure the plugin is initialized before katello loads the host extensions
20
+ initializer 'foreman_kernel_care.load_kernelcare_override', :before => :finisher_hook, :after => ['katello.register_plugin', 'foreman_tasks.register_plugin'] do
21
+ ::Katello::Concerns::HostManagedExtensions.prepend ForemanKernelCare::HostManagedExtensions
22
+ ::ForemanTasks::Api::TasksController.prepend ForemanKernelCare::ForemanTasks
25
23
  end
26
24
 
27
25
  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.0'.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.0
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-09-28 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,10 @@ 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/views/foreman_kernel_care/job_templates/install_kernelcare.erb
82
103
  - app/views/foreman_kernel_care/job_templates/kernel_version.erb
83
104
  - app/views/foreman_kernel_care/job_templates/update_kernel.erb
105
+ - app/views/foreman_kernel_care/job_templates/view_newest_patch.erb
84
106
  - db/seeds.d/100_assign_features_with_templates.rb
85
107
  - db/seeds.d/70_job_templates.rb
86
108
  - lib/foreman_kernel_care.rb
@@ -95,7 +117,7 @@ homepage: https://github.com/maccelf/foreman_kernel_care
95
117
  licenses:
96
118
  - GPL-3.0
97
119
  metadata: {}
98
- post_install_message:
120
+ post_install_message:
99
121
  rdoc_options: []
100
122
  require_paths:
101
123
  - lib
@@ -103,15 +125,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
103
125
  requirements:
104
126
  - - ">="
105
127
  - !ruby/object:Gem::Version
106
- version: '0'
128
+ version: 2.5.0
107
129
  required_rubygems_version: !ruby/object:Gem::Requirement
108
130
  requirements:
109
131
  - - ">="
110
132
  - !ruby/object:Gem::Version
111
133
  version: '0'
112
134
  requirements: []
113
- rubygems_version: 3.1.2
114
- signing_key:
135
+ rubygems_version: 3.2.33
136
+ signing_key:
115
137
  specification_version: 4
116
138
  summary: Plugin for KernelCare
117
139
  test_files: