Make apt_updates facts use /usr/bin/apt-get.
[puppet-modules/puppetlabs-apt.git] / lib / facter / apt_updates.rb
index 014782eab2edaa33c5f29f79bac19d81a901d7da..e880fdf29841b264b01335b709caf30f78693d15 100644 (file)
@@ -1,16 +1,32 @@
 apt_package_updates = nil
 Facter.add("apt_has_updates") do
   confine :osfamily => 'Debian'
-  if File.executable?("/usr/lib/update-notifier/apt-check")
-    apt_check_result = Facter::Util::Resolution.exec('/usr/lib/update-notifier/apt-check 2>&1')
-    if not apt_check_result.nil? and apt_check_result =~ /^\d+;\d+$/
-      apt_package_updates = apt_check_result.split(';')
+  if File.executable?("/usr/bin/apt-get")
+    apt_get_result = Facter::Util::Resolution.exec('/usr/bin/apt-get -s upgrade 2>&1')
+    if not apt_get_result.nil?
+      apt_package_updates = [[], []]
+      apt_get_result.each_line do |line|
+        if line =~ /^Inst\s/
+          package = line.gsub(/^Inst\s([^\s]+)\s.*/, '\1').strip
+          apt_package_updates[0].push(package)
+          security_matches = [
+            / Debian[^\s]+-updates /,
+            / Debian-Security:/,
+            / Ubuntu[^\s]+-security /,
+            / gNewSense[^\s]+-security /
+          ]
+          re = Regexp.union(security_matches)
+          if line.match(re)
+            apt_package_updates[1].push(package)
+          end
+        end
+      end
     end
   end
 
   setcode do
     if not apt_package_updates.nil? and apt_package_updates.length == 2
-      apt_package_updates != ['0', '0']
+      apt_package_updates != [[], []]
     end
   end
 end
@@ -18,11 +34,10 @@ end
 Facter.add("apt_package_updates") do
   confine :apt_has_updates => true
   setcode do
-    packages = Facter::Util::Resolution.exec('/usr/lib/update-notifier/apt-check -p 2>&1').split("\n")
     if Facter.version < '2.0.0'
-      packages.join(',')
+      apt_package_updates[0].join(',')
     else
-      packages
+      apt_package_updates[0]
     end
   end
 end
@@ -30,13 +45,13 @@ end
 Facter.add("apt_updates") do
   confine :apt_has_updates => true
   setcode do
-    Integer(apt_package_updates[0])
+    Integer(apt_package_updates[0].length)
   end
 end
 
 Facter.add("apt_security_updates") do
   confine :apt_has_updates => true
   setcode do
-    Integer(apt_package_updates[1])
+    Integer(apt_package_updates[1].length)
   end
 end