diff --git a/conf/type/__directory/gencode-remote b/conf/type/__directory/gencode-remote index a5458b4b..e9feecf4 100755 --- a/conf/type/__directory/gencode-remote +++ b/conf/type/__directory/gencode-remote @@ -17,47 +17,57 @@ # You should have received a copy of the GNU General Public License # along with cdist. If not, see . # -# -# Handle directories -# -# -# __directory /etc [--mode --owner --group --parents [yes|no] ] -# destination="/$__object_id" +state_should="$(cat "$__object/parameter/state")" -# Include parent directories? -if [ -f "$__object/parameter/parents" ]; then - parents="$(cat "$__object/parameter/parents")" - if [ yes = "$parents" ]; then - mkdiropt="-p" - else - mkdiropt="" - fi -fi +case "$state_should" in + present) + # Include parent directories? + if [ -f "$__object/parameter/parents" ]; then + parents="$(cat "$__object/parameter/parents")" + if [ yes = "$parents" ]; then + mkdiropt="-p" + else + mkdiropt="" + fi + fi -if [ -f "$__object/parameter/recursive" ]; then - if [ yes = "$(cat "$__object/parameter/recursive")" ]; then - recursive="-R" - fi -fi + if [ -f "$__object/parameter/recursive" ]; then + if [ yes = "$(cat "$__object/parameter/recursive")" ]; then + recursive="-R" + fi + fi -# Only create if not already existent -if [ no = "$(cat "$__object/explorer/exists")" ]; then - echo mkdir $mkdiropt \"$destination\" -fi + # Only create if not already existent + if [ no = "$(cat "$__object/explorer/exists")" ]; then + echo mkdir $mkdiropt \"$destination\" + fi -# Mode settings -if [ -f "$__object/parameter/mode" ]; then - echo chmod \"$(cat "$__object/parameter/mode")\" \"$destination\" -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 $recursive \"$(cat "$__object/parameter/group")\" \"$destination\" -fi + # Group + if [ -f "$__object/parameter/group" ]; then + echo chgrp $recursive \"$(cat "$__object/parameter/group")\" \"$destination\" + fi -# Owner -if [ -f "$__object/parameter/owner" ]; then - echo chown $recursive \"$(cat "$__object/parameter/owner")\" \"$destination\" -fi + # Owner + if [ -f "$__object/parameter/owner" ]; then + echo chown $recursive \"$(cat "$__object/parameter/owner")\" \"$destination\" + fi + ;; + absent) + # Only delete if it exists + if [ yes = "$(cat "$__object/explorer/exists")" ]; then + echo rm -r \"$destination\" + fi + + ;; + *) + echo "Unknown state" >&2 + exit 1 + ;; +esac diff --git a/conf/type/__directory/man.text b/conf/type/__directory/man.text index e2201172..315d1fb9 100644 --- a/conf/type/__directory/man.text +++ b/conf/type/__directory/man.text @@ -5,12 +5,12 @@ Nico Schottelius NAME ---- -cdist-type__directory - Create a directory +cdist-type__directory - Manage a directory DESCRIPTION ----------- -This cdist type allows you to create directories on the target. +This cdist type allows you to create or remove directories on the target. REQUIRED PARAMETERS @@ -20,6 +20,9 @@ None. OPTIONAL PARAMETERS ------------------- +state:: + 'present' or 'absent', defaults to 'present' + group:: Group to chgrp to. @@ -45,6 +48,9 @@ EXAMPLES # A silly example __directory /tmp/foobar +# Remove a directory +__directory /tmp/foobar --ensure absent + # Ensure /etc exists correctly __directory /etc --owner root --group root --mode 0755 diff --git a/conf/type/__directory/manifest b/conf/type/__directory/manifest new file mode 100755 index 00000000..a8ee5a6f --- /dev/null +++ b/conf/type/__directory/manifest @@ -0,0 +1,23 @@ +#!/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 . +# + +# set defaults +state="$(cat "$__object/parameter/state" 2>/dev/null \ + || echo "present" | tee "$__object/parameter/state")" diff --git a/conf/type/__directory/parameter/optional b/conf/type/__directory/parameter/optional index 247e2f64..27f9d76a 100644 --- a/conf/type/__directory/parameter/optional +++ b/conf/type/__directory/parameter/optional @@ -1,3 +1,4 @@ +state group mode owner diff --git a/conf/type/__file/gencode-local b/conf/type/__file/gencode-local index 0c6c249d..d9839a19 100755 --- a/conf/type/__file/gencode-local +++ b/conf/type/__file/gencode-local @@ -22,19 +22,22 @@ # destination="/$__object_id" +state_should="$(cat "$__object/parameter/state")" -if [ -f "$__object/parameter/source" ]; then - source="$(cat "$__object/parameter/source")" +if [ "$state_should" = "present" ]; then + if [ -f "$__object/parameter/source" ]; then + source="$(cat "$__object/parameter/source")" - if [ -f "$source" ]; then - local_cksum="$(cksum < "$source")" - remote_cksum="$(cat "$__object/explorer/cksum")" + if [ -f "$source" ]; then + local_cksum="$(cksum < "$source")" + remote_cksum="$(cat "$__object/explorer/cksum")" - if [ "$local_cksum" != "$remote_cksum" ]; then - echo "$__remote_copy" "$source" "${__target_host}:${destination}" + if [ "$local_cksum" != "$remote_cksum" ]; then + echo "$__remote_copy" "$source" "${__target_host}:${destination}" + fi + else + echo "Source \"$source\" does not exist." >&2 + exit 1 fi - else - echo "Source \"$source\" does not exist." >&2 - exit 1 fi fi diff --git a/conf/type/__file/gencode-remote b/conf/type/__file/gencode-remote index 7c5cf7ce..ef42dd54 100755 --- a/conf/type/__file/gencode-remote +++ b/conf/type/__file/gencode-remote @@ -22,25 +22,33 @@ # destination="/$__object_id" +state_should="$(cat "$__object/parameter/state")" +exists="$(cat "$__object/explorer/exists")" -# No source? Create empty file -if [ ! -f "$__object/parameter/source" ]; then - if [ no = "$(cat "$__object/explorer/exists")" ]; then - echo touch \"$destination\" +if [ "$state_should" = "present" ]; then + # No source? Create empty file + if [ ! -f "$__object/parameter/source" ]; then + 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 -f \"$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 diff --git a/conf/type/__file/man.text b/conf/type/__file/man.text index 67ab53d1..fa6b7644 100644 --- a/conf/type/__file/man.text +++ b/conf/type/__file/man.text @@ -5,21 +5,24 @@ Nico Schottelius NAME ---- -cdist-type__file - Create files +cdist-type__file - Manage files 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 ------------------- None. - OPTIONAL PARAMETERS ------------------- +state:: + 'present' or 'absent', defaults to 'present' + group:: Group to chgrp to. @@ -40,13 +43,18 @@ EXAMPLES -------------------------------------------------------------------------------- # Create /etc/cdist-configured as an empty file __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 -__file /etc/issue --source "$__type/files/archlinux" +__file /etc/issue --source "$__type/files/archlinux" --ensure present # Supply some more settings __file /etc/shadow --source "$__type/files/shadow" \ - --owner root --group shadow --mode 0640 + --owner root --group shadow --mode 0640 \ + --ensure present -------------------------------------------------------------------------------- diff --git a/conf/type/__file/manifest b/conf/type/__file/manifest new file mode 100755 index 00000000..915a2ca9 --- /dev/null +++ b/conf/type/__file/manifest @@ -0,0 +1,25 @@ +#!/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 . +# + +name="$__object_id" + +# set defaults +state="$(cat "$__object/parameter/state" 2>/dev/null \ + || echo "present" | tee "$__object/parameter/state")" diff --git a/conf/type/__file/parameter/optional b/conf/type/__file/parameter/optional index 06120518..c696d592 100644 --- a/conf/type/__file/parameter/optional +++ b/conf/type/__file/parameter/optional @@ -1,3 +1,4 @@ +state group mode owner diff --git a/conf/type/__link/gencode-remote b/conf/type/__link/gencode-remote index 07da987c..bb43de2e 100755 --- a/conf/type/__link/gencode-remote +++ b/conf/type/__link/gencode-remote @@ -39,4 +39,17 @@ case "$type" in ;; esac -echo ln ${lnopt} -f \"$source\" \"$destination\" +state_should="$(cat "$__object/parameter/state")" +case "$state_should" in + present) + echo ln ${lnopt} -f \"$source\" \"$destination\" + ;; + absent) + echo rm -f \"$destination\" + ;; + *) + echo "Unknown state" >&2 + exit 1 + ;; +esac + diff --git a/conf/type/__link/man.text b/conf/type/__link/man.text index fb914298..a7d33c59 100644 --- a/conf/type/__link/man.text +++ b/conf/type/__link/man.text @@ -25,7 +25,8 @@ type:: OPTIONAL PARAMETERS ------------------- -None. +state:: + 'present' or 'absent', defaults to 'present' EXAMPLES diff --git a/conf/type/__link/manifest b/conf/type/__link/manifest new file mode 100755 index 00000000..a8ee5a6f --- /dev/null +++ b/conf/type/__link/manifest @@ -0,0 +1,23 @@ +#!/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 . +# + +# set defaults +state="$(cat "$__object/parameter/state" 2>/dev/null \ + || echo "present" | tee "$__object/parameter/state")" diff --git a/conf/type/__link/parameter/optional b/conf/type/__link/parameter/optional new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__link/parameter/optional @@ -0,0 +1 @@ +state