Module: ForemanKernelCare::HostManagedExtensions

Defined in:
app/models/concerns/foreman_kernel_care/host_managed_extensions.rb

Instance Method Summary collapse

Instance Method Details

#import_package_profile(simple_packages) ⇒ Object



3
4
5
6
7
8
9
10
11
12
# File 'app/models/concerns/foreman_kernel_care/host_managed_extensions.rb', line 3

def import_package_profile(simple_packages)
  if kernelcare?
    composer = ::JobInvocationComposer.for_feature(:kernel_version, self)
    composer.triggering.mode = :future
    composer.trigger!
  end

  found = import_package_profile_in_bulk(simple_packages)
  sync_package_associations(found.map(&:id).uniq)
end

#import_tracer_profile(tracer_profile) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/models/concerns/foreman_kernel_care/host_managed_extensions.rb', line 14

def import_tracer_profile(tracer_profile)
  traces = []
  tracer_profile.each do |trace, attributes|
    next if attributes[:helper].blank?

    if trace.to_s == 'kernel' && kernelcare?
      composer = ::JobInvocationComposer.for_feature(:update_kernel, self)
      composer.triggering.mode = :future
      composer.trigger!

      next
    end

    traces << { host_id: id, application: trace, helper: attributes[:helper], app_type: attributes[:type] }
  end
  host_traces.delete_all
  Katello::HostTracer.import(traces, validate: false)
  update_trace_status
end

#sync_kernel_associations(new_patched_kernel_ids, delete_ids) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/models/concerns/foreman_kernel_care/host_managed_extensions.rb', line 51

def sync_kernel_associations(new_patched_kernel_ids, delete_ids)
  ::Katello::Util::Support.active_record_retry do
    table_name = host_installed_packages.table_name

    queries = []

    if delete_ids.any?
      queries << "DELETE FROM #{table_name} WHERE host_id=#{id} AND installed_package_id IN (#{delete_ids.join(', ')})"
    end

    unless new_patched_kernel_ids.empty?
      inserts = new_patched_kernel_ids.map { |unit_id| "(#{unit_id.to_i}, #{id.to_i})" }
      queries << "INSERT INTO #{table_name} (installed_package_id, host_id) VALUES #{inserts.join(', ')}"
    end

    queries.each do |query|
      ::ActiveRecord::Base.connection.execute(query)
    end
  end
end

#update_kernel_version(version, release) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/models/concerns/foreman_kernel_care/host_managed_extensions.rb', line 34

def update_kernel_version(version, release)
  packages = ::Katello::InstalledPackage.where('name LIKE ?', '%kernel%').where.not(name: 'kernelcare').to_a
  delete_ids = []
  simple_packages = packages.map do |p|
    delete_ids << p.id
    ::Katello::Pulp::SimplePackage.new({
                                         arch: p.arch,
                                         epoch: p.epoch,
                                         version: version,
                                         release: release,
                                         name: p.name
                                       })
  end
  found = import_package_profile_in_bulk(simple_packages)
  sync_kernel_associations(found.map(&:id).uniq, delete_ids)
end