forked from ungleich-public/cdist
Merge branch '__update_alternatives_improvements' into 'master'
[__update_alternatives] rewrite and support --install See merge request ungleich-public/cdist!936
This commit is contained in:
commit
b139ba2a5c
8 changed files with 107 additions and 16 deletions
4
cdist/conf/type/__update_alternatives/explorer/alternatives
Executable file
4
cdist/conf/type/__update_alternatives/explorer/alternatives
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
update-alternatives --display "$__object_id" 2>/dev/null \
|
||||||
|
| awk -F ' - ' '/priority [0-9]+$/ { print $1 }'
|
40
cdist/conf/type/__update_alternatives/explorer/link
Executable file
40
cdist/conf/type/__update_alternatives/explorer/link
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
# fedora's (update-)alternatives --display output doesn't have
|
||||||
|
# "link <name> is <path>" line, but debian does. so, let's find
|
||||||
|
# out how they store this information.
|
||||||
|
#
|
||||||
|
# debian and friends:
|
||||||
|
# https://salsa.debian.org/dpkg-team/dpkg/-/blob/master/utils/update-alternatives.c
|
||||||
|
# see calls to altdb_print_line function
|
||||||
|
#
|
||||||
|
# fedora and friends:
|
||||||
|
# https://github.com/fedora-sysv/chkconfig/blob/master/alternatives.c
|
||||||
|
# see calls to parseLine function
|
||||||
|
#
|
||||||
|
# conclusion: it is safe to assume that (master) link is on second line
|
||||||
|
|
||||||
|
for altdir in \
|
||||||
|
/var/lib/dpkg/alternatives \
|
||||||
|
/var/lib/alternatives
|
||||||
|
do
|
||||||
|
if [ ! -f "$altdir/$__object_id" ]
|
||||||
|
then
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
link="$( awk 'NR==2' "$altdir/$__object_id" )"
|
||||||
|
|
||||||
|
if [ -n "$link" ]
|
||||||
|
then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "$link" ]
|
||||||
|
then
|
||||||
|
echo "unable to get link for $__object_id" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$link"
|
12
cdist/conf/type/__update_alternatives/explorer/path_is
Executable file
12
cdist/conf/type/__update_alternatives/explorer/path_is
Executable file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
path_is="$( update-alternatives --display "$__object_id" 2>/dev/null \
|
||||||
|
| awk '/link currently points to/ {print $5}' )"
|
||||||
|
|
||||||
|
if [ -z "$path_is" ]
|
||||||
|
then
|
||||||
|
echo "unable to get current path for $__object_id" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "$path_is"
|
8
cdist/conf/type/__update_alternatives/explorer/path_should_state
Executable file
8
cdist/conf/type/__update_alternatives/explorer/path_should_state
Executable file
|
@ -0,0 +1,8 @@
|
||||||
|
#!/bin/sh -e
|
||||||
|
|
||||||
|
if [ -f "$( cat "$__object/parameter/path" )" ]
|
||||||
|
then
|
||||||
|
echo 'present'
|
||||||
|
else
|
||||||
|
echo 'absent'
|
||||||
|
fi
|
|
@ -1,8 +0,0 @@
|
||||||
#!/bin/sh -e
|
|
||||||
path="$(cat "$__object/parameter/path")"
|
|
||||||
name="$__object_id"
|
|
||||||
link="$(readlink "/etc/alternatives/$name")"
|
|
||||||
if [ "$path" = "$link" ]
|
|
||||||
then echo present
|
|
||||||
else echo absent
|
|
||||||
fi
|
|
|
@ -1,6 +1,7 @@
|
||||||
#!/bin/sh -e
|
#!/bin/sh -e
|
||||||
#
|
#
|
||||||
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
|
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
|
||||||
|
# 2020 Ander Punnar (ander@kvlt.ee)
|
||||||
#
|
#
|
||||||
# This file is part of cdist.
|
# This file is part of cdist.
|
||||||
#
|
#
|
||||||
|
@ -16,12 +17,38 @@
|
||||||
#
|
#
|
||||||
# You should have received a copy of the GNU General Public License
|
# You should have received a copy of the GNU General Public License
|
||||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#
|
|
||||||
|
|
||||||
if [ "$(cat "$__object/explorer/state")" = 'present' ]
|
path_is="$( cat "$__object/explorer/path_is" )"
|
||||||
then exit 0
|
|
||||||
|
path_should="$( cat "$__object/parameter/path" )"
|
||||||
|
|
||||||
|
if [ "$path_is" = "$path_should" ]
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$( cat "$__object/explorer/path_should_state" )" = 'absent' ] && [ -z "$__cdist_dry_run" ]
|
||||||
|
then
|
||||||
|
echo "$path_should does not exist in target" >&2
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
path="$(cat "$__object/parameter/path")"
|
|
||||||
name="$__object_id"
|
name="$__object_id"
|
||||||
echo "update-alternatives --quiet --set '$name' '$path'"
|
|
||||||
|
alternatives="$( cat "$__object/explorer/alternatives" )"
|
||||||
|
|
||||||
|
if ! echo "$alternatives" | grep -Fxq "$path_should"
|
||||||
|
then
|
||||||
|
if [ ! -f "$__object/parameter/install" ]
|
||||||
|
then
|
||||||
|
echo "$path_should is not in $name alternatives." >&2
|
||||||
|
echo 'Please install missing packages or use --install to add path to alternatives.' >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
link="$( cat "$__object/explorer/link" )"
|
||||||
|
|
||||||
|
echo "update-alternatives --install '$link' '$name' '$path_should' 1000"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "update-alternatives --set '$name' '$path_should'"
|
||||||
|
|
|
@ -19,6 +19,12 @@ path
|
||||||
Use this path for the given alternative
|
Use this path for the given alternative
|
||||||
|
|
||||||
|
|
||||||
|
BOOLEAN PARAMETERS
|
||||||
|
------------------
|
||||||
|
install
|
||||||
|
Add (``update-alternatives --install``) missing path to alternatives.
|
||||||
|
|
||||||
|
|
||||||
EXAMPLES
|
EXAMPLES
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@ -36,11 +42,12 @@ SEE ALSO
|
||||||
AUTHORS
|
AUTHORS
|
||||||
-------
|
-------
|
||||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||||
|
Ander Punnar <ander@kvlt.ee>
|
||||||
|
|
||||||
|
|
||||||
COPYING
|
COPYING
|
||||||
-------
|
-------
|
||||||
Copyright \(C) 2013 Nico Schottelius. You can redistribute it
|
Copyright \(C) 2013 Nico Schottelius and 2020 Ander Punnar. You can
|
||||||
and/or modify it under the terms of the GNU General Public License as
|
redistribute it and/or modify it under the terms of the GNU General Public
|
||||||
published by the Free Software Foundation, either version 3 of the
|
License as published by the Free Software Foundation, either version 3 of the
|
||||||
License, or (at your option) any later version.
|
License, or (at your option) any later version.
|
||||||
|
|
1
cdist/conf/type/__update_alternatives/parameter/boolean
Normal file
1
cdist/conf/type/__update_alternatives/parameter/boolean
Normal file
|
@ -0,0 +1 @@
|
||||||
|
install
|
Loading…
Reference in a new issue