add --state parameter to __file type which allows removal of files

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
This commit is contained in:
Steven Armstrong 2011-07-18 13:34:39 +02:00
parent c631a609ed
commit 76f07511a9
5 changed files with 85 additions and 38 deletions

View file

@ -22,23 +22,26 @@
# #
destination="/$__object_id" destination="/$__object_id"
state_should="$(cat "$__object/parameter/state")"
if [ -f "$__object/parameter/source" ]; then if [ "$state_should" = "present" ]; then
source="$(cat "$__object/parameter/source")" if [ -f "$__object/parameter/source" ]; then
source="$(cat "$__object/parameter/source")"
if [ -f "$source" ]; then if [ -f "$source" ]; then
local_cksum="$(cksum < "$source")" local_cksum="$(cksum < "$source")"
remote_cksum="$(cat "$__object/explorer/cksum")" remote_cksum="$(cat "$__object/explorer/cksum")"
if [ "$local_cksum" != "$remote_cksum" ]; then if [ "$local_cksum" != "$remote_cksum" ]; then
# FIXME: The username is ugly and hardcoded, replace after 1.0! # FIXME: The username is ugly and hardcoded, replace after 1.0!
# Probably a better aproach is to have the user configured # Probably a better aproach is to have the user configured
# ~/.ssh/config to contain the right username # ~/.ssh/config to contain the right username
# Probably describe it in cdist-quickstart... # Probably describe it in cdist-quickstart...
echo scp "$source" "root@${__target_host}:${destination}" echo scp "$source" "root@${__target_host}:${destination}"
fi
else
echo "Source \"$source\" does not exist." >&2
exit 1
fi fi
else
echo "Source \"$source\" does not exist." >&2
exit 1
fi fi
fi fi

View file

@ -22,25 +22,33 @@
# #
destination="/$__object_id" destination="/$__object_id"
state_should="$(cat "$__object/parameter/state")"
exists="$(cat "$__object/explorer/exists")"
# No source? Create empty file if [ "$state_should" = "present" ]; then
if [ ! -f "$__object/parameter/source" ]; then # No source? Create empty file
if [ no = "$(cat "$__object/explorer/exists")" ]; then if [ ! -f "$__object/parameter/source" ]; then
echo touch \"$destination\" if [ "$exists" = "no" ]; then
echo touch \"$destination\"
fi
fi
# Mode settings
if [ -f "$__object/parameter/mode" ]; then
echo chmod \"$(cat "$__object/parameter/mode")\" \"$destination\"
fi
# Group
if [ -f "$__object/parameter/group" ]; then
echo chgrp \"$(cat "$__object/parameter/group")\" \"$destination\"
fi
# Owner
if [ -f "$__object/parameter/owner" ]; then
echo chown \"$(cat "$__object/parameter/owner")\" \"$destination\"
fi
elif [ "$state_should" = "absent" ]; then
if [ "$exists" = "yes" ]; then
echo rm \"$destination\"
fi fi
fi fi
# Mode settings
if [ -f "$__object/parameter/mode" ]; then
echo chmod \"$(cat "$__object/parameter/mode")\" \"$destination\"
fi
# Group
if [ -f "$__object/parameter/group" ]; then
echo chgrp \"$(cat "$__object/parameter/group")\" \"$destination\"
fi
# Owner
if [ -f "$__object/parameter/owner" ]; then
echo chown \"$(cat "$__object/parameter/owner")\" \"$destination\"
fi

View file

@ -5,21 +5,24 @@ Nico Schottelius <nico-cdist--@--schottelius.org>
NAME NAME
---- ----
cdist-type__file - Create files cdist-type__file - Manage files
DESCRIPTION DESCRIPTION
----------- -----------
This cdist type allows you to create files on the target. This cdist type allows you to create files, remove files and set file
attributes on the target.
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
None. None.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
state::
'present' or 'absent', defaults to 'present'
group:: group::
Group to chgrp to. Group to chgrp to.
@ -40,13 +43,18 @@ EXAMPLES
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
# Create /etc/cdist-configured as an empty file # Create /etc/cdist-configured as an empty file
__file /etc/cdist-configured __file /etc/cdist-configured
# The same thing
__file /etc/cdist-configured --ensure present
# Delete existing file
__file /etc/cdist-configured --ensure absent
# Use __file from another type # Use __file from another type
__file /etc/issue --source "$__type/files/archlinux" __file /etc/issue --source "$__type/files/archlinux" --ensure present
# Supply some more settings # Supply some more settings
__file /etc/shadow --source "$__type/files/shadow" \ __file /etc/shadow --source "$__type/files/shadow" \
--owner root --group shadow --mode 0640 --owner root --group shadow --mode 0640 \
--ensure present
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

27
conf/type/__file/manifest Executable file
View file

@ -0,0 +1,27 @@
#!/bin/sh
#
# 2011 Steven Armstrong (steven-cdist at armstrong.cc)
#
# 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/>.
#
name="$__object_id"
if [ -f "$__object/parameter/state" ]; then
state="$(cat "$__object/parameter/state")"
else
echo "present" > "$__object/parameter/state"
fi

View file

@ -1,3 +1,4 @@
state
group group
mode mode
owner owner