#!/bin/sh -e # # 2011-2013 Nico Schottelius (nico-cdist at schottelius.org) # # 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 . # # # Manage packages on Debian and co. # if [ -f "$__object/parameter/name" ]; then name="$(cat "$__object/parameter/name")" else name="$__object_id" 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 target_release="" fi if [ -f "$__object/parameter/purge-if-absent" ]; then purgeparam="--purge" else purgeparam="" fi # FIXME: use grep directly, state is a list, not a line! 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\"" 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'" echo "installed" >> "$__messages_out" ;; absent) echo "$aptget remove $purgeparam '$name'" echo "removed" >> "$__messages_out" ;; *) echo "Unknown state: $state_should" >&2 exit 1 ;; esac