#!/bin/sh # # 2011 Nico Schottelius (nico-cdist at schottelius.org) # # 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 . # # # __file is a very basic type and should be able to be used as an # 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")" else # If no destination has been supplied, the id is the destination # Prepend /, which got lost in the object id (and relative paths # don't make sense) destination="/$__object_id" fi # Ensure we have an absolute path if ! $(echo "$destination" | grep -q ^/); then echo "Error: Destination ($destination) of $__object_id is not absolute." >&2 exit 1 fi # Copy source if existing if [ -f "$__object/parameter/source" ]; then source="$(cat "$__object/parameter/source")" exec 3>&1 exec 1>&2 set -x md5sum="$(md5sum "$source")" remote_md5sum="$(cat "$__object/explorer/md5sum")" # Is md5sum the right approach? if [ "$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 # No source? Create empty file/dir else case "$type" in directory) echo mkdir \"$destination\" ;; file) echo touch \"$destination\" ;; *) echo "Unsupported type: \"$type\"" >&2 exit 1 ;; esac fi if [ -f "$__object/parameter/mode" ]; then mode="$(cat "$__object/parameters/mode")" echo chmod \"$mode\" \"$destination\" fi