#!/bin/sh -e
### BEGIN INIT INFO
# Provides:          openstack
# Required-Start:    mountkernfs $local_fs
# Required-Stop:     $local_fs
# X-Start-Before:    networking
# Should-Start:
# Default-Start:     S
# Default-Stop:
# Short-Description: Apply configuration from OpenStack Config Drive
### END INIT INFO

PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin"

. /lib/lsb/init-functions

copy_cloud_config() {
  LABEL="config"
  if [ ! -e /dev/disk/by-label/${LABEL} ]; then
    log_warning_msg "OpenStack Cloud Config drive not found"
    return 1
  fi

  MNT=/tmp/config
  mkdir -p ${MNT}
  mount /dev/disk/by-label/${LABEL} ${MNT}
  if [ -e ${MNT}/root/.ssh/authorized_keys ]; then
    mkdir -m 700 -p /root/.ssh/
    cp ${MNT}/root/.ssh/authorized_keys /root/.ssh/
    chmod 600 ${MNT}/root/.ssh/authorized_keys
  fi
  if [ -e ${MNT}/etc/network/interfaces ]; then
    cp ${MNT}/etc/network/interfaces /etc/network/
    chmod 644 /etc/network/interfaces
  fi
  umount ${MNT}
  return 0
}

case "$1" in
  start|"")
    log_action_begin_msg "Applying OpenStack Cloud Config"
    if copy_cloud_config; then
      log_action_end_msg $?
    else
      log_action_end_msg $?
    fi
  ;;

  restart|reload|force-reload|status)
    echo "Error: argument '$1' not supported" >&2
    exit 3
  ;;

  stop)
    # No-op
  ;;

  *)
    echo "Usage: openstack.sh [start|stop]" >&2
    exit 3
  ;;
esac

:
