]> review.fuel-infra Code Review - puppet-modules/puppetlabs-apt.git/commitdiff
Merge pull request #140 from hunner/apt_force
authorAshley Penney <ashley.penney@puppetlabs.com>
Tue, 15 Oct 2013 17:45:17 +0000 (10:45 -0700)
committerAshley Penney <ashley.penney@puppetlabs.com>
Tue, 15 Oct 2013 17:45:17 +0000 (10:45 -0700)
Handling of release parameter and apt provider in force manifest

manifests/force.pp
spec/defines/force_spec.rb
tests/force.pp

index 2d33e942dcda0a7ddfd564d5d69be95e85a4afb1..152bb67354db6fa8960a20a942329f0cf5d7b147 100644 (file)
@@ -2,21 +2,39 @@
 # force a package from a specific release
 
 define apt::force(
-  $release = 'testing',
+  $release = false,
   $version = false,
   $timeout = 300
 ) {
 
+  $provider = $apt::params::provider
+
   $version_string = $version ? {
     false   => undef,
     default => "=${version}",
   }
 
-  $install_check = $version ? {
-    false   => "/usr/bin/dpkg -s ${name} | grep -q 'Status: install'",
-    default => "/usr/bin/dpkg -s ${name} | grep -q 'Version: ${version}'",
+  $release_string = $release ? {
+    false   => undef,
+    default => "-t ${release}",
   }
-  exec { "/usr/bin/apt-get -y -t ${release} install ${name}${version_string}":
+
+  if $version == false {
+    if $release == false {
+      $install_check = "/usr/bin/dpkg -s ${name} | grep -q 'Status: install'"
+    } else {
+      # If installed version and candidate version differ, this check returns 1 (false).
+      $install_check = "/usr/bin/test \$(/usr/bin/apt-cache policy -t ${release} ${name} | /bin/grep -E 'Installed|Candidate' | /usr/bin/uniq -s 14 | /usr/bin/wc -l) -eq 1"
+    }
+  } else {
+    if $release == false {
+      $install_check = "/usr/bin/dpkg -s ${name} | grep -q 'Version: ${version}'"
+    } else {
+      $install_check = "/usr/bin/apt-cache policy -t ${release} ${name} | /bin/grep -q 'Installed: ${version}'"
+    }
+  }
+
+  exec { "${provider} -y ${release_string} install ${name}${version_string}":
     unless    => $install_check,
     logoutput => 'on_failure',
     timeout   => $timeout,
index f5d6ac22a97db184ed7024ab8a1d2de8636ba11b..84231fa233b1082f42132f618680f95e767c78a8 100644 (file)
@@ -1,41 +1,57 @@
 require 'spec_helper'
 describe 'apt::force', :type => :define do
+  let :pre_condition do
+    'include apt::params'
+  end
+
   let :title do
     'my_package'
   end
 
   let :default_params do
     {
-      :release => 'testing',
+      :release => false,
       :version => false
     }
   end
 
-  [{},
-   {
-      :release  => 'stable',
-      :version  => '1'
-    }
-  ].each do |param_set|
-    describe "when #{param_set == {} ? "using default" : "specifying"} define parameters" do
-      let :param_hash do
-        default_params.merge(param_set)
-      end
+  describe "when using default parameters" do
+    let :params do
+      default_params
+    end
+    it { should contain_exec("/usr/bin/apt-get -y  install #{title}").with(
+      :unless  => "/usr/bin/dpkg -s #{title} | grep -q 'Status: install'",
+      :timeout => '300'
+    ) }
+  end
 
-      let :params do
-        param_set
-      end
+  describe "when specifying release parameter" do
+    let :params do
+      default_params.merge(:release => 'testing')
+    end
+    it { should contain_exec("/usr/bin/apt-get -y -t #{params[:release]} install #{title}").with(
+      :unless => "/usr/bin/test \$(/usr/bin/apt-cache policy -t #{params[:release]} #{title} | /bin/grep -E 'Installed|Candidate' | /usr/bin/uniq -s 14 | /usr/bin/wc -l) -eq 1"
+    ) }
+  end
 
-      let :unless_query do
-        base_command = "/usr/bin/dpkg -s #{title} | grep -q "
-        base_command + (params[:version] ? "'Version: #{params[:version]}'" : "'Status: install'")
-      end
+  describe "when specifying version parameter" do
+    let :params do
+      default_params.merge(:version => '1')
+    end
+    it { should contain_exec("/usr/bin/apt-get -y  install #{title}=#{params[:version]}").with(
+      :unless => "/usr/bin/dpkg -s #{title} | grep -q 'Version: #{params[:version]}'"
+    ) }
+  end
 
-      let :exec_title do
-        base_exec = "/usr/bin/apt-get -y -t #{param_hash[:release]} install #{title}"
-        base_exec + (params[:version] ? "=#{params[:version]}" : "")
-      end
-      it { should contain_exec(exec_title).with_unless(unless_query) }
+  describe "when specifying release and version parameters" do
+    let :params do
+      default_params.merge(
+        :release => 'testing',
+        :version => '1'
+      )
     end
+    it { should contain_exec("/usr/bin/apt-get -y -t #{params[:release]} install #{title}=1").with(
+      :unless => "/usr/bin/apt-cache policy -t #{params[:release]} #{title} | /bin/grep -q 'Installed: #{params[:version]}'"
+    ) }
   end
 end
index f3313633d08506895dc5fae4cd3e446cc634d060..59ad8f1b573797b61ad439a803fc85bbf1615b82 100644 (file)
@@ -1,7 +1,17 @@
 # force.pp
+
 # force a package from a specific release
+apt::force { 'package1':
+  release => 'backports',
+}
+
+# force a package to be a specific version
+apt::force { 'package2':
+  version => '1.0.0-1',
+}
 
-apt::force { 'package':
-  release => 'testing',
-  version => false
+# force a package from a specific release to be a specific version
+apt::force { 'package3':
+  release => 'sid',
+  version => '2.0.0-1',
 }