#! /bin/sh

### BEGIN INIT INFO
# Short-Description:    Container hypervisor based on LXC
# Description:          Container hypervisor based on LXC
# Provides:             lxd
# Required-Start:       $remote_fs
# Required-Stop:        $remote_fs
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
### END INIT INFO

DAEMON=/usr/bin/lxd
NAME=lxd
DESC="Container hypervisor based on LXC"
PIDFILE=/var/run/lxd.pid

. /lib/lsb/init-functions

test -f ${DAEMON} || exit 0

set -e

START="-m --start --quiet --pidfile ${PIDFILE} --name ${NAME} --startas $DAEMON --background"
case "$1" in
    start)
        if init_is_upstart; then
            exit 1
        fi

        /usr/lib/x86_64-linux-gnu/lxc/lxc-apparmor-load

        echo -n "Starting $DESC: "
        ulimit -n 65536
        [ -e /etc/environment ] && . /etc/environment
        /usr/lib/lxd/lxd-bridge.start
        if start-stop-daemon ${START} -- --group lxd --logfile=/var/log/lxd/lxd.log >/dev/null 2>&1 ; then
            echo "${NAME}."

            # Wait for the unix socket
            for i in $(seq 30); do
                lxc finger --force-local >/dev/null 2>&1 && break
                sleep 1
            done

            /usr/lib/lxd/profile-config
            ${DAEMON} waitready --timeout=600
        else
            if start-stop-daemon --test ${START} >/dev/null 2>&1; then
                echo "(failed)."
                exit 1
            else
                echo "${DAEMON} already running."
                exit 0
            fi
        fi

        exit 0
    ;;

    stop)
        if init_is_upstart; then
            exit 0
        fi
        echo -n "Stopping $DESC: "
        if start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
            --startas ${DAEMON} --retry 10 --name ${NAME} \
            >/dev/null 2>&1 ; then
                echo "${NAME}."
            /usr/lib/lxd/lxd-bridge stop
        else
            if start-stop-daemon --test ${START} >/dev/null 2>&1; then
                echo "(not running)."
                exit 0
            else
                echo "(failed)."
                exit 1
            fi
        fi

        exit 0
    ;;

    status)
        if init_is_upstart; then
            exit 0
        fi
        status_of_proc -p ${PIDFILE} "${DAEMON}" lxd
    ;;

    restart|force-reload)
        if init_is_upstart; then
            exit 1
        fi
        $0 stop
        exec $0 start
    ;;

    *)
        echo "Usage: $0 {start|stop|restart|force-reload}" 1>&2
        exit 1
    ;;
esac
