only delete links; delete existing destination before creating links

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
Steven Armstrong 2013-09-18 10:40:29 +02:00
parent a132adbb03
commit bba68b6e40
3 changed files with 53 additions and 4 deletions

View file

@ -0,0 +1,26 @@
#!/bin/sh
# 2013 Steven Armstrong (steven-cdist armstrong.cc)
destination="/$__object_id"
if [ ! -e "$destination" ]; then
echo none
elif [ -h "$destination" ]; then
echo symlink
elif [ -f "$destination" ]; then
type="$(cat "$__object/parameter/type")"
case "$type" in
hard)
link_count=$(ls -l "$destination" | awk '{ print $2 }')
if [ $link_count -gt 1 ]; then
echo hardlink
exit 0
fi
;;
esac
echo file
elif [ -d "$destination" ]; then
echo directory
else
echo unknown
fi

View file

@ -1,6 +1,7 @@
#!/bin/sh #!/bin/sh
# #
# 2011-2012 Nico Schottelius (nico-cdist at schottelius.org) # 2011-2012 Nico Schottelius (nico-cdist at schottelius.org)
# 2013 Steven Armstrong (steven-cdist at armstrong.cc)
# #
# This file is part of cdist. # This file is part of cdist.
# #
@ -40,17 +41,38 @@ case "$type" in
esac esac
state_is="$(cat "$__object/explorer/state")" state_is="$(cat "$__object/explorer/state")"
state_should=present state_should="$(cat "$__object/parameter/state")"
[ -f "$__object/parameter/state" ] && state_should="$(cat "$__object/parameter/state")"
[ "$state_should" = "$state_is" ] && exit 0 [ "$state_should" = "$state_is" ] && exit 0
file_type="$(cat "$__object/explorer/type")"
case "$state_should" in case "$state_should" in
present) present)
echo ln ${lnopt} -f \"$source\" \"$destination\" if [ "$file_type" = "directory" ]; then
# our destination is currently a directory, move it out of the way
cat << DONE
destination_old="\$(mktemp "${destination}.cdist.XXXXXXXXXX")"
mv "$destination" "\$destination_old"
DONE
fi
# create our link
cat << DONE
ln ${lnopt} -f "$source" "$destination"
DONE
if [ "$file_type" = "directory" ]; then
# delete the legacy directory
cat << DONE
rm -rf "\$destination_old"
DONE
fi
;; ;;
absent) absent)
echo rm -f \"$destination\" # only delete if it is a sym/hard link
if [ "$file_type" = "symlink" -o "$file_type" = "hardlink" ]; then
echo rm -f \"$destination\"
fi
;; ;;
*) *)
echo "Unknown state: $state_should" >&2 echo "Unknown state: $state_should" >&2

View file

@ -0,0 +1 @@
present