From a190ee13b82ad814a610ee05e0bb66efc8c724c5 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Thu, 10 Mar 2011 18:14:35 +0100 Subject: [PATCH] __file: --type symlink supported Signed-off-by: Nico Schottelius --- conf/manifest/init | 2 +- conf/type/__file/gencode | 86 ++++++++++++++++++++++++---------------- doc/changelog | 1 + 3 files changed, 53 insertions(+), 36 deletions(-) diff --git a/conf/manifest/init b/conf/manifest/init index 8a2428ce..0a1dca50 100755 --- a/conf/manifest/init +++ b/conf/manifest/init @@ -13,7 +13,7 @@ case "$__target_host" in # Everybody has this localhost) # Usual example - __file test --type file --destination /tmp/cdist-testfile + __file test --type symlink --source /etc/cdist-configured --destination /tmp/cdist-testfile ;; # diff --git a/conf/type/__file/gencode b/conf/type/__file/gencode index 9ad956fe..1fb20bf9 100755 --- a/conf/type/__file/gencode +++ b/conf/type/__file/gencode @@ -22,8 +22,6 @@ # example for typewrites later # -type="$(cat "$__object/parameter/type")" - # If destination was specified, do not use the id if [ -f "$__object/parameter/destination" ]; then destination="$(cat "$__object/parameter/destination")" @@ -40,6 +38,7 @@ if ! $(echo "$destination" | grep -q ^/); then exit 1 fi +# Use correct md5sum binary - MacOSx is different here case "$os" in macosx) md5sum="md5" @@ -50,45 +49,62 @@ case "$os" in ;; esac -# Copy source if existing -# FIXME: directory handling not supported - add recursive flag? -if [ -f "$__object/parameter/source" ]; then - source="$(cat "$__object/parameter/source")" +type="$(cat "$__object/parameter/type")" - if [ -f "$source" ]; then - local_md5sum="$($md5sum < "$source")" - remote_md5sum="$(cat "$__object/explorer/md5sum")" - - # Is md5sum the right approach? - if [ "$local_md5sum" != "$remote_md5sum" ]; then - # FIXME: This 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... - scp "$source" "root@${__target_host}:${destination}" - fi - fi -# No source? Create empty file/dir -else - # Only touch / create if it does not exist - if [ no = "$(cat "$__object/explorer/exists")" ]; then - case "$type" in - directory) +case "$type" in + directory) + if [ -f "$__object/parameter/source" ]; then + echo "Source not supported for directory currently - FIXME" >&2 + exit 1 + else + if [ no = "$(cat "$__object/explorer/exists")" ]; then echo mkdir \"$destination\" - ;; + fi + fi + ;; - file) + file) + if [ -f "$__object/parameter/source" ]; then + source="$(cat "$__object/parameter/source")" + + if [ -f "$source" ]; then + local_md5sum="$($md5sum < "$source")" + remote_md5sum="$(cat "$__object/explorer/md5sum")" + + # FIXME: Is md5sum the right approach? + if [ "$local_md5sum" != "$remote_md5sum" ]; then + # FIXME: This 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... + scp "$source" "root@${__target_host}:${destination}" + fi + fi + else + if [ no = "$(cat "$__object/explorer/exists")" ]; then echo touch \"$destination\" - ;; + fi + fi + ;; - *) - echo "Unsupported type: \"$type\"" >&2 - exit 1 - ;; - esac - fi -fi + symlink) + if [ ! -f "$__object/parameter/source" ]; then + echo "Source required for symlink" >&2 + exit 1 + fi + source="$(cat "$__object/parameter/source")" + # FIXME: handle directories or document & ignore? + echo ln -sf \"$source\" \"$destination\" + ;; + + *) + echo "Unsupported type: \"$type\"" >&2 + exit 1 + ;; +esac + +# Mode settings if [ -f "$__object/parameter/mode" ]; then mode="$(cat "$__object/parameters/mode")" echo chmod \"$mode\" \"$destination\" diff --git a/doc/changelog b/doc/changelog index 2f528b90..4bca6d9c 100644 --- a/doc/changelog +++ b/doc/changelog @@ -2,6 +2,7 @@ * Update regexp used for sane characters * Allow types without parameters * Allow type to be singleton (DOCUMENTATION MISSING) + * Type __file learned --type symlink 1.0.2: 2011-03-09 * Add manpages: cdist-type, cdist-type__file, cdist-reference, cdist-explorer