47 lines
804 B
Bash
Executable file
47 lines
804 B
Bash
Executable file
#!/bin/bash
|
|
#
|
|
# Simplify running cosmos, with serialization if flock is available.
|
|
#
|
|
|
|
readonly PROGNAME=$(basename "$0")
|
|
readonly LOCKFILE_DIR=/tmp
|
|
readonly LOCK_FD=200
|
|
|
|
lock() {
|
|
local prefix=$1
|
|
local fd=${2:-$LOCK_FD}
|
|
local lock_file=$LOCKFILE_DIR/$prefix.lock
|
|
|
|
# create lock file
|
|
eval "exec $fd>$lock_file"
|
|
|
|
# acquier the lock
|
|
flock -n $fd \
|
|
&& return 0 \
|
|
|| return 1
|
|
}
|
|
|
|
eexit() {
|
|
local error_str="$@"
|
|
|
|
echo $error_str
|
|
exit 1
|
|
}
|
|
|
|
main () {
|
|
lock $PROGNAME || eexit "Only one instance of $PROGNAME can run at one time."
|
|
cosmos $* update
|
|
cosmos $* apply
|
|
|
|
touch /var/run/last-cosmos-ok.stamp
|
|
|
|
find /var/lib/puppet/reports/ -type f -mtime +10 | xargs rm -f
|
|
}
|
|
|
|
main $*
|
|
|
|
if [ -f /cosmos-reboot ]; then
|
|
rm -f /cosmos-reboot
|
|
reboot
|
|
fi
|