89bc37e20ba4d497b805e4940252f10c6afdd17e
[puppet-modules/puppetlabs-apt.git] / lib / facter / apt_updates.rb
1 apt_package_updates = nil
2 Facter.add('apt_has_updates') do
3   confine osfamily: 'Debian'
4   if File.executable?('/usr/bin/apt-get')
5     apt_get_result = Facter::Util::Resolution.exec('/usr/bin/apt-get -s -o Debug::NoLocking=true upgrade 2>&1')
6     unless apt_get_result.nil?
7       apt_package_updates = [[], []]
8       apt_get_result.each_line do |line|
9         next unless line =~ %r{^Inst\s}
10         package = line.gsub(%r{^Inst\s([^\s]+)\s.*}, '\1').strip
11         apt_package_updates[0].push(package)
12         security_matches = [
13           %r{ Debian-Security:},
14           %r{ Ubuntu[^\s]+-security[, ]},
15           %r{ gNewSense[^\s]+-security[, ]},
16         ]
17         re = Regexp.union(security_matches)
18         if line.match(re)
19           apt_package_updates[1].push(package)
20         end
21       end
22     end
23   end
24
25   setcode do
26     if !apt_package_updates.nil? && apt_package_updates.length == 2
27       apt_package_updates != [[], []]
28     end
29   end
30 end
31
32 Facter.add('apt_package_updates') do
33   confine apt_has_updates: true
34   setcode do
35     if Facter.version < '2.0.0'
36       apt_package_updates[0].join(',')
37     else
38       apt_package_updates[0]
39     end
40   end
41 end
42
43 Facter.add('apt_package_security_updates') do
44   confine apt_has_updates: true
45   setcode do
46     if Facter.version < '2.0.0'
47       apt_package_updates[1].join(',')
48     else
49       apt_package_updates[1]
50     end
51   end
52 end
53
54 Facter.add('apt_updates') do
55   confine apt_has_updates: true
56   setcode do
57     Integer(apt_package_updates[0].length)
58   end
59 end
60
61 Facter.add('apt_security_updates') do
62   confine apt_has_updates: true
63   setcode do
64     Integer(apt_package_updates[1].length)
65   end
66 end