Release prep v9.1.0
[puppet-modules/puppetlabs-apt.git] / lib / facter / apt_updates.rb
1 # frozen_string_literal: true
2
3 apt_package_updates = nil
4 apt_dist_updates = nil
5
6 # Executes the upgrading of packages
7 # @param
8 #   upgrade_option Type of upgrade passed into apt-get command arguments i.e. 'upgrade' or 'dist-upgrade'
9 def get_updates(upgrade_option)
10   apt_updates = nil
11   if File.executable?('/usr/bin/apt-get')
12     apt_get_result = Facter::Core::Execution.execute("/usr/bin/apt-get -s -o Debug::NoLocking=true #{upgrade_option} 2>&1")
13     unless apt_get_result.nil?
14       apt_updates = [[], []]
15       apt_get_result.each_line do |line|
16         next unless %r{^Inst\s}.match?(line)
17
18         package = line.gsub(%r{^Inst\s([^\s]+)\s.*}, '\1').strip
19         apt_updates[0].push(package)
20         security_matches = [
21           %r{ Debian-Security:},
22           %r{ Ubuntu[^\s]+-security[, ]},
23           %r{ gNewSense[^\s]+-security[, ]},
24         ]
25         re = Regexp.union(security_matches)
26         apt_updates[1].push(package) if line.match(re)
27       end
28     end
29   end
30   apt_updates
31 end
32
33 Facter.add('apt_has_updates') do
34   confine osfamily: 'Debian'
35   setcode do
36     apt_package_updates = get_updates('upgrade')
37     apt_package_updates != [[], []] if !apt_package_updates.nil? && apt_package_updates.length == 2
38   end
39 end
40
41 Facter.add('apt_has_dist_updates') do
42   confine osfamily: 'Debian'
43   setcode do
44     apt_dist_updates = get_updates('dist-upgrade')
45     apt_dist_updates != [[], []] if !apt_dist_updates.nil? && apt_dist_updates.length == 2
46   end
47 end
48
49 Facter.add('apt_package_updates') do
50   confine apt_has_updates: true
51   setcode do
52     apt_package_updates[0]
53   end
54 end
55
56 Facter.add('apt_package_dist_updates') do
57   confine apt_has_dist_updates: true
58   setcode do
59     apt_dist_updates[0]
60   end
61 end
62
63 Facter.add('apt_package_security_updates') do
64   confine apt_has_updates: true
65   setcode do
66     apt_package_updates[1]
67   end
68 end
69
70 Facter.add('apt_package_security_dist_updates') do
71   confine apt_has_dist_updates: true
72   setcode do
73     apt_dist_updates[1]
74   end
75 end
76
77 Facter.add('apt_updates') do
78   confine apt_has_updates: true
79   setcode do
80     Integer(apt_package_updates[0].length)
81   end
82 end
83
84 Facter.add('apt_dist_updates') do
85   confine apt_has_dist_updates: true
86   setcode do
87     Integer(apt_dist_updates[0].length)
88   end
89 end
90
91 Facter.add('apt_security_updates') do
92   confine apt_has_updates: true
93   setcode do
94     Integer(apt_package_updates[1].length)
95   end
96 end
97
98 Facter.add('apt_security_dist_updates') do
99   confine apt_has_dist_updates: true
100   setcode do
101     Integer(apt_dist_updates[1].length)
102   end
103 end