
We previously didn't really had any structure in our project apart from creating a new folder for each package in our project root. Now that we have accumulated some packages, we use the well-known Golang project layout in order to clearly communicate our intent with packages. See https://github.com/golang-standards/project-layout
49 lines
1017 B
Bash
49 lines
1017 B
Bash
#!/bin/bash
|
|
|
|
# Script that runs a Nomad job and watches the deployment status until it finished running
|
|
# See https://github.com/hashicorp/nomad/issues/6818
|
|
|
|
if [[ $# -eq 0 ]]; then
|
|
echo "Usage: $0 <path/to/job.nomad>"
|
|
exit 1
|
|
fi
|
|
|
|
output=$(nomad run $1 2>&1)
|
|
|
|
if [[ $? -ne 0 ]]; then
|
|
echo $output
|
|
exit 1
|
|
fi
|
|
|
|
deployment=$(grep -oP "(?<=Evaluation within deployment: \").*(?=\")" <<<$output)
|
|
|
|
echo "Monitoring deployment $deployment"
|
|
|
|
timeout=300
|
|
sleepDuration=4
|
|
iterations=$((timeout / sleepDuration))
|
|
|
|
for i in $(seq $iterations); do
|
|
if [[ $i -eq $iterations ]]; then
|
|
# timeout reached, fail deployment and exit
|
|
nomad deployment fail $deployment
|
|
exit 1
|
|
fi
|
|
output=$(nomad deployment status $deployment 2>&1)
|
|
grep -E "Status" <<<$output
|
|
running=$(grep -E "Status.*=.*running" <<<$output)
|
|
if [[ -z "$running" ]]; then
|
|
break
|
|
fi
|
|
sleep $sleepDuration
|
|
done
|
|
|
|
echo "#######"
|
|
echo "$output"
|
|
failed=$(grep -E "Status.*=.*failed" <<<$output)
|
|
if [[ -n "$failed" ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|