From d6ff07715681fa8600d386daf1128518791102bc Mon Sep 17 00:00:00 2001 From: Darko Poljak Date: Wed, 31 Jan 2018 09:48:16 +0100 Subject: [PATCH] __package_apt ignores --version parameter #615 --- cdist/conf/type/__package_apt/explorer/state | 3 ++- cdist/conf/type/__package_apt/gencode-remote | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/cdist/conf/type/__package_apt/explorer/state b/cdist/conf/type/__package_apt/explorer/state index 04926b60..658429ac 100755 --- a/cdist/conf/type/__package_apt/explorer/state +++ b/cdist/conf/type/__package_apt/explorer/state @@ -31,7 +31,8 @@ fi packages="$(apt-cache showpkg "$name" | sed -e "1,/Reverse Provides:/d" | cut -d ' ' -f 1) $name" for p in $packages; do if [ -n "$(dpkg -s "$p" 2>/dev/null | grep "^Status: install ok installed$")" ]; then - echo "present $p" + version=$(dpkg -s "$p" 2>/dev/null | grep "^Version:" | cut -d ' ' -f 2) + echo "present $p $version" exit 0 fi done diff --git a/cdist/conf/type/__package_apt/gencode-remote b/cdist/conf/type/__package_apt/gencode-remote index 1a86e72c..d9cc52b7 100755 --- a/cdist/conf/type/__package_apt/gencode-remote +++ b/cdist/conf/type/__package_apt/gencode-remote @@ -29,6 +29,13 @@ fi state_should="$(cat "$__object/parameter/state")" +version_param="$__object/parameter/version" + +version="" +if [ -f "$version_param" ]; then + version="$(cat "$version_param")" +fi + if [ -f "$__object/parameter/target-release" ]; then target_release="--target-release $(cat "$__object/parameter/target-release")" else @@ -47,18 +54,29 @@ state_is="$(cat "$__object/explorer/state")" case "$state_is" in present*) name="$(echo "$state_is" | cut -d ' ' -f 2)" + version_is="$(echo "$state_is" | cut -d ' ' -f 3)" state_is="present" ;; + *) + version_is="" + ;; esac # Hint if we need to avoid questions at some point: # DEBIAN_PRIORITY=critical can reduce the number of questions aptget="DEBIAN_FRONTEND=noninteractive apt-get --quiet --yes --no-install-recommends -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confold\"" -[ "$state_is" = "$state_should" ] && exit 0 +if [ "$state_is" = "$state_should" ]; then + if [ -z "$version" ] || [ "$version" = "$version_is" ]; then + exit 0; + fi +fi case "$state_should" in present) + if [ -n "$version" ]; then + name="${name}=${version}" + fi echo $aptget install $target_release \"$name\" ;; absent)