forked from ungleich-public/cdist
Merge branch 'master' into reorg
This commit is contained in:
commit
aa5e882fce
21 changed files with 138 additions and 92 deletions
|
@ -1,39 +0,0 @@
|
|||
#!/bin/sh -e
|
||||
#
|
||||
# 2019 Ander Punnar (ander-at-kvlt-dot-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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
# TODO check if filesystem has ACL turned on etc
|
||||
|
||||
if [ -f "$__object/parameter/acl" ]
|
||||
then
|
||||
grep -E '^(default:)?(user|group):' "$__object/parameter/acl" \
|
||||
| while read -r acl
|
||||
do
|
||||
param="$( echo "$acl" | awk -F: '{print $(NF-2)}' )"
|
||||
check="$( echo "$acl" | awk -F: '{print $(NF-1)}' )"
|
||||
|
||||
[ "$param" = 'user' ] && db=passwd || db="$param"
|
||||
|
||||
if ! getent "$db" "$check" > /dev/null
|
||||
then
|
||||
echo "missing $param '$check'" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
fi
|
4
cdist/conf/type/__acl/explorer/getent
Executable file
4
cdist/conf/type/__acl/explorer/getent
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh -e
|
||||
|
||||
getent passwd | awk -F: '{print "user:"$1}'
|
||||
getent group | awk -F: '{print "group:"$1}'
|
|
@ -22,8 +22,8 @@ file_is="$( cat "$__object/explorer/file_is" )"
|
|||
|
||||
if [ "$file_is" = 'missing' ] \
|
||||
&& [ -z "$__cdist_dry_run" ] \
|
||||
&& \( [ ! -f "$__object/parameter/file" ] \
|
||||
|| [ ! -f "$__object/parameter/directory" ] \)
|
||||
&& [ ! -f "$__object/parameter/file" ] \
|
||||
&& [ ! -f "$__object/parameter/directory" ]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
@ -47,28 +47,26 @@ then
|
|||
elif [ -f "$__object/parameter/entry" ]
|
||||
then
|
||||
acl_should="$( cat "$__object/parameter/entry" )"
|
||||
elif [ -f "$__object/parameter/acl" ]
|
||||
then
|
||||
acl_should="$( cat "$__object/parameter/acl" )"
|
||||
elif
|
||||
[ -f "$__object/parameter/user" ] \
|
||||
|| [ -f "$__object/parameter/group" ] \
|
||||
|| [ -f "$__object/parameter/mask" ] \
|
||||
|| [ -f "$__object/parameter/other" ]
|
||||
then
|
||||
acl_should="$( for param in user group mask other
|
||||
do
|
||||
[ ! -f "$__object/parameter/$param" ] && continue
|
||||
|
||||
echo "$param" | grep -Eq 'mask|other' && sep=:: || sep=:
|
||||
|
||||
echo "$param$sep$( cat "$__object/parameter/$param" )"
|
||||
done )"
|
||||
else
|
||||
echo 'no parameters set' >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# instead of setfacl's non-helpful message "Option -m: Invalid argument near character X"
|
||||
# let's check if target has necessary users and groups, since mistyped or missing
|
||||
# users/groups in target is most common reason.
|
||||
echo "$acl_should" \
|
||||
| grep -Po '(user|group):[^:]+' \
|
||||
| sort -u \
|
||||
| while read -r l
|
||||
do
|
||||
if ! grep "$l" -Fxq "$__object/explorer/getent"
|
||||
then
|
||||
echo "no $l' in target" | sed "s/:/ '/" >&2
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -f "$__object/parameter/default" ]
|
||||
then
|
||||
acl_should="$( echo "$acl_should" \
|
||||
|
|
|
@ -12,11 +12,14 @@ Fully supported and tested on Linux (ext4 filesystem), partial support for FreeB
|
|||
|
||||
See ``setfacl`` and ``acl`` manpages for more details.
|
||||
|
||||
One of ``--entry`` or ``--source`` must be used.
|
||||
|
||||
REQUIRED MULTIPLE PARAMETERS
|
||||
|
||||
OPTIONAL MULTIPLE PARAMETERS
|
||||
----------------------------
|
||||
entry
|
||||
Set ACL entry following ``getfacl`` output syntax.
|
||||
Must be used if ``--source`` is not used.
|
||||
|
||||
|
||||
OPTIONAL PARAMETERS
|
||||
|
@ -25,6 +28,7 @@ source
|
|||
Read ACL entries from stdin or file.
|
||||
Ordering of entries is not important.
|
||||
When reading from file, comments and empty lines are ignored.
|
||||
Must be used if ``--entry`` is not used.
|
||||
|
||||
file
|
||||
Create/change file with ``__file`` using ``user:group:mode`` pattern.
|
||||
|
@ -48,12 +52,6 @@ remove
|
|||
``mask`` and ``other`` entries can't be removed, but only changed.
|
||||
|
||||
|
||||
DEPRECATED PARAMETERS
|
||||
---------------------
|
||||
Parameters ``acl``, ``user``, ``group``, ``mask`` and ``other`` are deprecated and they
|
||||
will be removed in future versions. Please use ``entry`` parameter instead.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
see manual for details
|
|
@ -1 +0,0 @@
|
|||
see manual for details
|
|
@ -1 +0,0 @@
|
|||
see manual for details
|
|
@ -1 +0,0 @@
|
|||
see manual for details
|
|
@ -1 +0,0 @@
|
|||
see manual for details
|
|
@ -1,5 +1,3 @@
|
|||
mask
|
||||
other
|
||||
source
|
||||
file
|
||||
directory
|
||||
|
|
|
@ -1,4 +1 @@
|
|||
entry
|
||||
acl
|
||||
user
|
||||
group
|
||||
|
|
|
@ -69,7 +69,8 @@ EXAMPLES
|
|||
|
||||
require='__download/opt/cpma/cnq3.zip' \
|
||||
__unpack /opt/cpma/cnq3.zip \
|
||||
--move-existing-destination \
|
||||
--backup-destination \
|
||||
--preserve-archive \
|
||||
--destination /opt/cpma/server
|
||||
|
||||
|
||||
|
|
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
|
||||
#
|
||||
# 2013 Nico Schottelius (nico-cdist at schottelius.org)
|
||||
# 2020 Ander Punnar (ander@kvlt.ee)
|
||||
#
|
||||
# This file is part of cdist.
|
||||
#
|
||||
|
@ -16,12 +17,38 @@
|
|||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with cdist. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
if [ "$(cat "$__object/explorer/state")" = 'present' ]
|
||||
then exit 0
|
||||
path_is="$( cat "$__object/explorer/path_is" )"
|
||||
|
||||
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
|
||||
|
||||
path="$(cat "$__object/parameter/path")"
|
||||
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
|
||||
|
||||
|
||||
BOOLEAN PARAMETERS
|
||||
------------------
|
||||
install
|
||||
Add (``update-alternatives --install``) missing path to alternatives.
|
||||
|
||||
|
||||
EXAMPLES
|
||||
--------
|
||||
|
||||
|
@ -36,11 +42,12 @@ SEE ALSO
|
|||
AUTHORS
|
||||
-------
|
||||
Nico Schottelius <nico-cdist--@--schottelius.org>
|
||||
Ander Punnar <ander@kvlt.ee>
|
||||
|
||||
|
||||
COPYING
|
||||
-------
|
||||
Copyright \(C) 2013 Nico Schottelius. 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
|
||||
Copyright \(C) 2013 Nico Schottelius and 2020 Ander Punnar. 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.
|
||||
|
|
1
cdist/conf/type/__update_alternatives/parameter/boolean
Normal file
1
cdist/conf/type/__update_alternatives/parameter/boolean
Normal file
|
@ -0,0 +1 @@
|
|||
install
|
|
@ -8,6 +8,9 @@ next:
|
|||
* Type __package_pkgng_freebsd: Bootstrap pkg if necessary (Evil Ham)
|
||||
* Type __service: Fix calling __systemd_service (Mark Verboom)
|
||||
* Type __line: Add 'replace' state (Evil Ham)
|
||||
* Type __download: Fix man page (Matthias Stecher)
|
||||
* Type __acl: Remove deprecated parameters, fix bugs (Ander Punnar)
|
||||
* Type __update_alternatives: Rewrite, support --install (Ander Punnar)
|
||||
|
||||
6.8.0: 2020-09-11
|
||||
* Type __locale_system: Fix for debian and ubuntu (Ander Punnar)
|
||||
|
|
Loading…
Reference in a new issue