Matthias Stecher
2db0ef7c98
As the previous detection took the wrong values, this explorer now checks if packages for an extra are installed or not. If not, the extra is not installed. Based on the information of the explorer, it will install the package again with the absent extras.
92 lines
2.5 KiB
Bash
Executable file
92 lines
2.5 KiB
Bash
Executable file
#!/bin/sh -e
|
|
#
|
|
# 2012 Nico Schottelius (nico-cdist at schottelius.org)
|
|
# 2016 Darko Poljak (darko.poljak at gmail.com)
|
|
# 2021 Matthias Stecher (matthiasstecher at gmx.de)
|
|
#
|
|
# 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 <http://www.gnu.org/licenses/>.
|
|
#
|
|
#
|
|
# Development supported by Local AG (www.local.ch)
|
|
#
|
|
|
|
state_is=$(cat "$__object/explorer/state")
|
|
state_should="$(cat "$__object/parameter/state")"
|
|
|
|
# short circuit if state is the same and no extras to install
|
|
[ "$state_is" = "$state_should" ] && ! [ -s "$__object/explorer/extras" ] \
|
|
&& exit 0
|
|
|
|
|
|
nameparam="$__object/parameter/name"
|
|
if [ -f "$nameparam" ]; then
|
|
name=$(cat "$nameparam")
|
|
else
|
|
name="$__object_id"
|
|
fi
|
|
|
|
pipparam="$__object/parameter/pip"
|
|
if [ -f "$pipparam" ]; then
|
|
pip=$(cat "$pipparam")
|
|
else
|
|
pip="$( cat "$__object/explorer/pip" )"
|
|
if [ -z "$pip" ]
|
|
then
|
|
echo 'pip not found in path' >&2
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
runasparam="$__object/parameter/runas"
|
|
if [ -f "$runasparam" ]
|
|
then
|
|
runas=$(cat "$runasparam")
|
|
else
|
|
runas=""
|
|
fi
|
|
|
|
case "$state_should" in
|
|
present)
|
|
if [ -s "$__object/explorer/extras" ]
|
|
then
|
|
# all extras are passed to pip in a comma-separated list in the name
|
|
# sed loops through all input lines and add commas between them
|
|
extras="$(sed ':a; $!N; s/\n/,/; ta' "$__object/explorer/extras")"
|
|
name="${name}[${extras}]"
|
|
fi
|
|
|
|
if [ "$runas" ]
|
|
then
|
|
echo "su -c '$pip install -q $name' $runas"
|
|
else
|
|
echo "$pip" install -q "$name"
|
|
fi
|
|
echo "installed" >> "$__messages_out"
|
|
;;
|
|
absent)
|
|
if [ "$runas" ]
|
|
then
|
|
echo "su -c '$pip uninstall -q -y $name' $runas"
|
|
else
|
|
echo "$pip" uninstall -q -y "$name"
|
|
fi
|
|
echo "removed" >> "$__messages_out"
|
|
;;
|
|
*)
|
|
echo "Unknown state: $state_should" >&2
|
|
exit 1
|
|
;;
|
|
esac
|