#!/bin/sh -e # # 2013 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 . # # quote function from http://www.etalabs.net/sh_tricks.html quote() { printf '%s\n' "$1" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/'/" } file="$(cat "$__object/parameter/file" 2>/dev/null || echo "/$__object_id")" state_should=$(cat "$__object/parameter/state") prefix=$(cat "$__object/parameter/prefix" 2>/dev/null || echo "#cdist:__block/$__object_id") suffix=$(cat "$__object/parameter/suffix" 2>/dev/null || echo "#/cdist:__block/$__object_id") block="$__object/files/block" if [ ! -s "$__object/explorer/block" ]; then state_is='absent' else state_is=$(diff -q "$block" "$__object/explorer/block" >/dev/null \ && echo present \ || echo changed ) fi state_should="$(cat "$__object/parameter/state")" if [ "$state_should" = "$state_is" ]; then # Nothing to do, move along exit 0 fi remove_block() { cat << DONE tmpfile=\$(mktemp ${quoted_file}.cdist.XXXXXXXXXX) # preserve ownership and permissions of existing file if [ -f $quoted_file ]; then cp -p $quoted_file "\$tmpfile" fi awk -v prefix=$(quote "$prefix") -v suffix=$(quote "$suffix") ' { if (\$0 == prefix) { triggered=1 } if (triggered) { if (\$0 == suffix) { triggered=0 } } else { print } }' $quoted_file > "\$tmpfile" mv -f "\$tmpfile" $quoted_file DONE } quoted_file="$(quote "$file")" case "$state_should" in present) if [ "$state_is" = "changed" ]; then echo update >> "$__messages_out" remove_block else echo add >> "$__messages_out" fi cat << DONE cat >> $quoted_file << '${__type##*/}_DONE' $(cat "$block") ${__type##*/}_DONE DONE ;; absent) echo remove >> "$__messages_out" remove_block ;; esac