# eqx-cluster-create
#
# Create a cluster of bare metal on Equinix.
# Generates random project name if none is given.
# Using existing names will cause issues!
#
# Usage:
# eqx-cluster-create [project name]
# Example:
# eqx-cluster-create foocluster
# eqx-cluster-create
#
# XXX check name isn't in use.

#set -x

# Set static variables here
EQXIPXEURL="https://code.forksand.com/forksand/eqx/raw/branch/master/ipxe-install-debian-10"
EQXFACILITY="da11"
#EQXOS="debian_10"
EQXOS="custom_ipxe"
EQXPLAN="c3.small.x86"
EQXTAGS="cluster"
EQXSPOTOVER=".00"

# Probably leave these variables alone
# Set max price at current spot plus EQXSPOTOVER from above
EQXSPOT="`eqx-market-spot-prices`"
EQXSPOTMAX=`echo  "$EQXSPOT  + $EQXSPOTOVER" | bc -l | xargs printf "%1.2f"`
EQXPROJECT="$1"
if [[ $1 == "" ]]
	then EQXPROJECT=`eqx-create-project`
	else eqx-create-project "$EQXPROJECT"
fi

EQXHOSTNAME=`dd bs=12 count=1 if=/dev/random 2>/dev/null | base64 | tr [:upper:] [:lower:] | tr -dc [:alpha:]`
EQXPROJECTID=`eqx-get-project-uuid $EQXPROJECT`

echo "Spot:       $EQXSPOT"
echo "Spot Max:   $EQXSPOTMAX"
echo "Project:    $EQXPROJECT"
echo "ProjectID:  $EQXPROJECTID"
echo "Facility:   $EQXFACILITY"
echo "Plan:       $EQXPLAN"
echo "Hostname:   $EQXHOSTNAME"
echo "OS:         $EQXOS"
echo "Tag:        $EQXTAGS"

packet device create							\
	--plan             "$EQXPLAN"					\
	--spot-instance							\
	--spot-price-max="$EQXSPOTMAX"					\
	--project-id       "$EQXPROJECTID"				\
	--facility         "$EQXFACILITY"				\
	--hostname         "$EQXHOSTNAME"				\
	--operating-system "$EQXOS"					\
	--ipxe-script-url  "$EQXIPXEURL"				\
	--tags             "$EQXTAGS"

exit
  -c, --customdata string                Custom data
  -r, --hardware-reservation-id string   UUID of the hardware reservation
  -v, --public-ipv4-subnet-size int      Size of the public IPv4 subnet
  -T, --termination-time string          Device termination time: --termination-time="15:04:05"
  -u, --userdata string                  Userdata for device initialization (can not be used with --userdata-file)
      --userdata-file string             Path to a userdata file for device initialization (can not be used with --userdata)
  -a, --always-pxe                       
  -b, --billing-cycle string             Billing cycle (default "hourly")