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