diff --git a/cdist/conf/type/__apt_mark/explorer/apt_version b/cdist/conf/type/__apt_mark/explorer/apt_version new file mode 100644 index 00000000..32a0a58f --- /dev/null +++ b/cdist/conf/type/__apt_mark/explorer/apt_version @@ -0,0 +1,31 @@ +#!/bin/sh +# +# 2016 Ander Punnar (cdist at kvlt.ee) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +apt_version_is=$(dpkg-query --show --showformat '${Version}' apt) + +# from APT changelog: +# apt (0.8.14.2) UNRELEASED; urgency=low +# provide a 'dpkg --set-selections' wrapper to set/release holds + +apt_version_should=0.8.14.2 + +dpkg --compare-versions $apt_version_should le $apt_version_is \ + && echo 0 \ + || echo 1 diff --git a/cdist/conf/type/__apt_mark/explorer/package_installed b/cdist/conf/type/__apt_mark/explorer/package_installed new file mode 100644 index 00000000..c78ac3a9 --- /dev/null +++ b/cdist/conf/type/__apt_mark/explorer/package_installed @@ -0,0 +1,30 @@ +#!/bin/sh +# +# 2016 Ander Punnar (cdist at kvlt.ee) +# +# This file is part of cdist. +# +# cdist is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# cdist is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with cdist. If not, see . +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +dpkg-query --show --showformat '${Status}' $name 2>/dev/null \ + | grep -q 'ok installed' \ + && echo 0 \ + || echo 1 diff --git a/cdist/conf/type/__apt_mark/gencode-remote b/cdist/conf/type/__apt_mark/gencode-remote index 14505809..c1ac58b3 100644 --- a/cdist/conf/type/__apt_mark/gencode-remote +++ b/cdist/conf/type/__apt_mark/gencode-remote @@ -24,6 +24,19 @@ else name="$__object_id" fi +apt_version="$(cat "$__object/explorer/apt_version")" + +if [ "$apt_version" != '0' ]; then + echo 'APT version not supported' >&2 + exit 1 +fi + +package_installed="$(cat "$__object/explorer/package_installed")" + +if [ "$package_installed" != '0' ]; then + exit 0 +fi + state_should="$(cat "$__object/parameter/state")" state_is="$(cat "$__object/explorer/state")" diff --git a/docs/changelog b/docs/changelog index ea3c74c2..41fc1ca9 100644 --- a/docs/changelog +++ b/docs/changelog @@ -2,6 +2,7 @@ Changelog --------- next: + * Type __apt_mark: check supported apt version and if package is installed (Ander Punnar) * New type: __docker (Steven Armstrong) * New type: __package_dpkg (Tomas Pospisek)