From: Andreas Teuchert Date: Sat, 23 Feb 2013 15:42:14 +0000 (+0100) Subject: Handle release parameter more sensibly in force manifest. X-Git-Tag: 1.4.1~21^2~3 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=9a968bbead99d03c826dd5fb47e206532a705137;p=puppet-modules%2Fpuppetlabs-apt.git Handle release parameter more sensibly in force manifest. Use release parameter to construct $release_string. The release parameter may also be set to false to use the system's default release (so just force a specific version). Use false as the default setting instead of 'testing'. Change $install_check to also check if package is installed from the right release, instead of just checking the version. --- diff --git a/manifests/force.pp b/manifests/force.pp index 2d33e94..a1ec4a6 100644 --- a/manifests/force.pp +++ b/manifests/force.pp @@ -2,7 +2,7 @@ # force a package from a specific release define apt::force( - $release = 'testing', + $release = false, $version = false, $timeout = 300 ) { @@ -12,11 +12,27 @@ define apt::force( 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}", + } + + 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 { "/usr/bin/apt-get -y -t ${release} install ${name}${version_string}": + + exec { "/usr/bin/apt-get -y ${release_string} install ${name}${version_string}": unless => $install_check, logoutput => 'on_failure', timeout => $timeout,