Skip to content

Instantly share code, notes, and snippets.

@addisonj
Last active January 3, 2016 22:59
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save addisonj/8532246 to your computer and use it in GitHub Desktop.
Save addisonj/8532246 to your computer and use it in GitHub Desktop.
Manage /etc/hosts using serf
#!/bin/bash
HOST_FILE=/etc/hosts
hn=`hostname`
touch $HOST_FILE
lines=`cat`
appendIfNotPresent() {
if [ "$2" == "$hn" ]; then
echo "not writing own hostname"
return
fi
entry="$1 $2"
(
flock -n 9 || exit 1
if grep -Fxq "$entry" $HOST_FILE; then
echo "entry already exists, not re-adding"
else
echo $entry >> $HOST_FILE
echo "wrote $enty to $HOST_FILE"
fi
) 9>/var/lock/hosts-flock-lock
}
removeIfPresent() {
if [ "$2" == "$hn" ]; then
return
fi
entry="$1 $2"
(
flock -n 9 || exit 1
sed -i \"/$entry/d\" $HOST_FILE
) 9>/var/lock/hosts-flock-lock
}
readarray -t lines <<<"$lines"
if [ "$SERF_EVENT" == "member-join" ]; then
for member in "${lines[@]}"; do
member_array=($member)
appendIfNotPresent "${member_array[1]}" "${member_array[0]}"
done
elif [[ ( "$SERF_EVENT" == "member-leave" ) || ( "$SERF_EVENT" == "member-failed" ) ]]; then
for member in "${lines[@]}"; do
member_array=($member)
removeIfPresent ${member_array[1]} ${member_array[0]}
done
else
echo "unknown event"
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment