#!/bin/sh

PUPPET_FILE_MANIFEST="/etc/puppetlabs/code/environments/production/modules/apl/manifests/file.pp"
TARGET=$1

if [ ! -f "${PUPPET_FILE_MANIFEST}" ]
        then
        echo "${PUPPET_FILE_MANIFEST} missing."
        exit 2
fi

if [ ! -e ${TARGET} ]
        then
        echo "$TARGET missing"
        exit 2
fi

TARGET_ABSOLUTE=`echo $TARGET | cut -c1`
if [ "${TARGET_ABSOLUTE}" != '/' ]
        then
        echo "Please use an absolute path"
        exit 2
fi

TARGET_SANITIZED=`echo $TARGET | tr '[/\-\.]' '_' | sed 's/^_//'`

FILE_DEETS=`/bin/ls -ld ${TARGET} | head -1`
FILE_OWNER=`echo $FILE_DEETS | awk '{print $3}'`
FILE_GROUP=`echo $FILE_DEETS | awk '{print $4}'`
FILE_MODE=`stat ${TARGET} | egrep "^Access" | head -1 | awk '{print $2}' | cut -f1 -d/ | sed 's/(//'`

FILE_TYPE_CHAR=`echo $FILE_DEETS | cut -c1`

case $FILE_TYPE_CHAR in
        'd' )
                FILE_TYPE="directory"
                ;;
        '-' )
                FILE_TYPE="file"
                ;;
        'l' )
                FILE_TYPE="link"
                ;;
        * )
                echo "unknown file type $FILE_TYPE_CHAR"
esac

echo "class file::${TARGET_SANITIZED} {"
echo "  file { '$TARGET_SANITIZED': "
echo "          owner => '${FILE_OWNER}',"
echo "          group => '${FILE_GROUP}',"
echo "          mode => '${FILE_MODE}',"
echo "          }"