c980da0a77071d24cc311c17672e159cc7be42ef
[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::Util::Resolution.exec("/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 line =~ %r{^Inst\s}
17         package = line.gsub(%r{^Inst\s([^\s]+)\s.*}, '\1').strip
18         apt_updates[0].push(package)
19         security_matches = [
20           %r{ Debian-Security:},
21           %r{ Ubuntu[^\s]+-security[, ]},
22           %r{ gNewSense[^\s]+-security[, ]},
23         ]
24         re = Regexp.union(security_matches)
25         if line.match(re)
26           apt_updates[1].push(package)
27         end
28       end
29     end
30   end
31   apt_updates
32 end
33
34 Facter.add('apt_has_updates') do
35   confine osfamily: 'Debian'
36   setcode do
37     apt_package_updates = get_updates('upgrade')
38     if !apt_package_updates.nil? && apt_package_updates.length == 2
39       apt_package_updates != [[], []]
40     end
41   end
42 end
43
44 Facter.add('apt_has_dist_updates') do
45   confine osfamily: 'Debian'
46   setcode do
47     apt_dist_updates = get_updates('dist-upgrade')
48     if !apt_dist_updates.nil? && apt_dist_updates.length == 2
49       apt_dist_updates != [[], []]
50     end
51   end
52 end
53
54 Facter.add('apt_package_updates') do
55   confine apt_has_updates: true
56   setcode do
57     apt_package_updates[0]
58   end
59 end
60
61 Facter.add('apt_package_dist_updates') do
62   confine apt_has_dist_updates: true
63   setcode do
64     apt_dist_updates[0]
65   end
66 end
67
68 Facter.add('apt_package_security_updates') do
69   confine apt_has_updates: true
70   setcode do
71     apt_package_updates[1]
72   end
73 end
74
75 Facter.add('apt_package_security_dist_updates') do
76   confine apt_has_dist_updates: true
77   setcode do
78     apt_dist_updates[1]
79   end
80 end
81
82 Facter.add('apt_updates') do
83   confine apt_has_updates: true
84   setcode do
85     Integer(apt_package_updates[0].length)
86   end
87 end
88
89 Facter.add('apt_dist_updates') do
90   confine apt_has_dist_updates: true
91   setcode do
92     Integer(apt_dist_updates[0].length)
93   end
94 end
95
96 Facter.add('apt_security_updates') do
97   confine apt_has_updates: true
98   setcode do
99     Integer(apt_package_updates[1].length)
100   end
101 end
102
103 Facter.add('apt_security_dist_updates') do
104   confine apt_has_dist_updates: true
105   setcode do
106     Integer(apt_dist_updates[1].length)
107   end
108 end