Merge pull request #596 from danielhoherd/master
[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 upgrade 2>&1')
6     if not apt_get_result.nil?
7       apt_package_updates = [[], []]
8       apt_get_result.each_line do |line|
9         if line =~ /^Inst\s/
10           package = line.gsub(/^Inst\s([^\s]+)\s.*/, '\1').strip
11           apt_package_updates[0].push(package)
12           security_matches = [
13             / Debian[^\s]+-updates /,
14             / Debian-Security:/,
15             / Ubuntu[^\s]+-security /,
16             / gNewSense[^\s]+-security /
17           ]
18           re = Regexp.union(security_matches)
19           if line.match(re)
20             apt_package_updates[1].push(package)
21           end
22         end
23       end
24     end
25   end
26
27   setcode do
28     if not apt_package_updates.nil? and apt_package_updates.length == 2
29       apt_package_updates != [[], []]
30     end
31   end
32 end
33
34 Facter.add("apt_package_updates") do
35   confine :apt_has_updates => true
36   setcode do
37     if Facter.version < '2.0.0'
38       apt_package_updates[0].join(',')
39     else
40       apt_package_updates[0]
41     end
42   end
43 end
44
45 Facter.add("apt_updates") do
46   confine :apt_has_updates => true
47   setcode do
48     Integer(apt_package_updates[0].length)
49   end
50 end
51
52 Facter.add("apt_security_updates") do
53   confine :apt_has_updates => true
54   setcode do
55     Integer(apt_package_updates[1].length)
56   end
57 end