From 76f07511a9c13eb33565d4af11953a80be67987c Mon Sep 17 00:00:00 2001 From: Steven Armstrong Date: Mon, 18 Jul 2011 13:34:39 +0200 Subject: [PATCH] add --state parameter to __file type which allows removal of files Signed-off-by: Steven Armstrong --- conf/type/__file/gencode-local | 31 ++++++++++--------- conf/type/__file/gencode-remote | 46 +++++++++++++++++------------ conf/type/__file/man.text | 18 +++++++---- conf/type/__file/manifest | 27 +++++++++++++++++ conf/type/__file/parameter/optional | 1 + 5 files changed, 85 insertions(+), 38 deletions(-) create mode 100755 conf/type/__file/manifest diff --git a/conf/type/__file/gencode-local b/conf/type/__file/gencode-local index 1168919e..ee198fb1 100755 --- a/conf/type/__file/gencode-local +++ b/conf/type/__file/gencode-local @@ -22,23 +22,26 @@ # 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 - # FIXME: The username is ugly and hardcoded, replace after 1.0! - # Probably a better aproach is to have the user configured - # ~/.ssh/config to contain the right username - # Probably describe it in cdist-quickstart... - echo scp "$source" "root@${__target_host}:${destination}" + if [ "$local_cksum" != "$remote_cksum" ]; then + # FIXME: The username is ugly and hardcoded, replace after 1.0! + # Probably a better aproach is to have the user configured + # ~/.ssh/config to contain the right username + # Probably describe it in cdist-quickstart... + echo scp "$source" "root@${__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..b6e3c095 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 \"$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..59f10e42 --- /dev/null +++ b/conf/type/__file/manifest @@ -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 . +# + +name="$__object_id" + +if [ -f "$__object/parameter/state" ]; then + state="$(cat "$__object/parameter/state")" +else + echo "present" > "$__object/parameter/state" +fi 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