#!/bin/bash

# Builds and uploads a debian package containing the CLI executables
# that are used on all the jumphosts
# List contains
#   - powercycle: remotely powercycles bots and/or devices.
#   - censustaker: enumaterates powercycleable bots on network.

# Make sure we have a rack id.
print_usage() {
    echo "Usage: $0 MESSAGE INSTANCE_IDS"
    echo "     MESSAGE     is the message to be included in the release package."
    echo "     INSTANCE_IDS are the ids of the instances targeted by this package."
    exit 1
}
if [ "$#" -ne 2 ]; then
    print_usage
fi

set -x -e
TARGET_INSTANCE_IDS=$2

# Strip the second argument to keep this compatible with the shared build script.
set -- "$1"

for INSTANCE_ID in $TARGET_INSTANCE_IDS; do
  APPNAME="trooper-tools-${INSTANCE_ID}"
  SYSTEMD="powercycle-daemon.service"
  DESCRIPTION="Various executables that ease the troopers role for jumphost-${INSTANCE_ID} in the skolo."

  # Copy files into the right locations in ${ROOT}.
  copy_release_files()
  {
  INSTALL="fakeroot install -D --verbose --backup=none --group=root --owner=root"
  INSTALL_DIR="fakeroot install -d --verbose --backup=none --group=root --owner=root"

  # Install the powercycle binary and config files.
  ${INSTALL} --mode=755 -T ${GOPATH}/bin/powercycle-cli            ${ROOT}/usr/local/bin/powercycle
  ${INSTALL} --mode=644 -T ./sys/powercycle-${INSTANCE_ID}.json5   ${ROOT}/etc/powercycle.json5

  # Install the censustaker binary and ansible scripts
  ${INSTALL} --mode=755 -T ${GOPATH}/bin/censustaker     ${ROOT}/usr/local/bin/censustaker
  ${INSTALL} --mode=644 -T ./sys/ansible.cfg             ${ROOT}/usr/local/share/trooper_tools/censustaker/ansible.cfg
  ${INSTALL} --mode=644 -T ./sys/enumerate_hostnames.yml ${ROOT}/usr/local/share/trooper_tools/censustaker/enumerate_hostnames.yml
  ${INSTALL} --mode=644 -T ./sys/all-hosts               ${ROOT}/usr/local/share/trooper_tools/censustaker/all-hosts

  # Install the powercycle daemon
  ${INSTALL} --mode=755 -T ${GOPATH}/bin/powercycle-daemon ${ROOT}/usr/local/bin/powercycle-daemon
  ${INSTALL} --mode=644 -T ./sys/powercycle-daemon.service  ${ROOT}/etc/systemd/system/powercycle-daemon.service
  }

  source ../bash/release.sh
done
