ansible/roles/motd/templates/motd.sh

76 lines
1.9 KiB
Bash
Executable File

#! /bin/bash
# motd.sh
# A basic motd script with some nice information. Designed to be extensible
# and easily configurable per-host
# NOTE: We do not set -e here because we don't want MOTD generation to fail
# in the event that just this script fails
# Services that we want a quick heads-up on their status
declare -a services
{% for item in (motd_watch_services + motd_watch_services_extra)|sort %}
services+=("{{ item }}")
{% endfor %}
declare -a containers
{% for item in (motd_watch_containers + motd_watch_containers_extra)|sort %}
containers+=("{{ item }}")
{% endfor %}
## Now, we actually put this info to use
# Starting with services
if [ -n "${services[*]}" ]; then
printf "\e[1mService Statuses\e[0m\n"
len=20
for service in "${services[@]}"; do
status="\e[33mUnknown\e[0m"
systemctl status "$service" > /dev/null 2>&1
case $? in
0)
status="\e[1;32mRunning\e[0m"
;;
1|2)
status="\e[1;31mDead\e[0m"
;;
3)
status="\e[37mNot Running\e[0m"
;;
4)
continue
;;
esac
printf " * \e[37m%-${len}.${len}s\e[0m - $status " "$service"
if systemctl is-failed --quiet "$service"; then
printf "\e[1;31m(FAILED!)\e[0m "
fi
printf "\n"
done
fi
# Containers, if docker is running
if [ -n "${containers[*]}" ] && systemctl -q is-active docker; then
printf "\e[1mContainer Statuses\e[0m\n"
len=20
for container in "${containers[@]}"; do
status="\e[33mUnknown\e[0m"
image="$(docker ps | tail -n +2 | awk '{print $2}' | grep -ie "$container")"
if [ -n "$image" ]; then
status="\e[1;32mRunning\e[0m - $image"
fi
if [ -z "$image" ]; then
status="\e[1;31mNot Running\e[0m"
fi
printf " * \e[37m%-${len}.${len}s\e[0m - $status " "$container"
printf "\n"
done
fi
## And some generic system status stuff
printf "\e[1mSystem Status\e[0m\n"
if [ -f /var/run/reboot-required ]; then
printf " * \e[1;33mReboot required\e[0m\n"
else
printf "\e[37m - No outstanding reboots\e[0m\n"
fi