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