homelab/fighter/scripts/docker-stacks.sh

97 lines
3.0 KiB
Bash
Raw Normal View History

2023-10-06 15:56:19 -07:00
# takes a docker-compose.yml file path and returns a boolean to represent
# whether that stack depends on an smb share under the `/mnt/nas` path
2023-10-10 14:21:48 -07:00
function check_nas {
2023-10-06 15:56:19 -07:00
STACK_PATH=$1
docker-compose config -f $STACK_PATH | grep -q /mnt/nas
MATCH=$?
if [ $MATCH == 0]; then
return true
else
return false
fi
}
# takes a docker-compose.yml file path and returns a boolean to represent
# whether that stack passes a docker-compose config lint
2023-10-10 14:29:53 -07:00
function lint {
STACK_PATH=$1
docker-compose config -f $STACK_PATH > /dev/null 2>&1
return $?
}
2023-10-10 14:29:53 -07:00
function compose_config {
STACK_PATH=$1
docker-compose config -f $STACK_PATH
}
# takes a docker-compose.yml file path and shuts it down
function compose_down {
STACK_PATH=$1
docker-compose down -f $STACK_PATH
}
# takes a docker-compose.yml file path and brings it up
function compose_up {
STACK_PATH=$1
2023-10-10 14:16:24 -07:00
if [ "$FORCERECREATE" = true ]; then
docker-compose up --force-recreate -f $STACK_PATH -d
elif [ "$FORCERECREATE" = false ]; then
docker-compose up -f $STACK_PATH -d
else
echo "Bad variable value: \$FORCERECREATE=$FORCERECREATE"
fi
}
function main {
2023-10-10 14:21:48 -07:00
#echo "\$ARGS is $ARGS"
2023-10-10 14:16:24 -07:00
STACKS_DIRECTORY="/home/admin/homelab/fighter/config"
while [[ $# -gt 0 ]]; do
#echo "case is $1"
case $1 in
2023-10-10 14:16:24 -07:00
# global flags are parsed first
2023-10-10 14:21:48 -07:00
-n|--nas-only) NAS_ONLY=true; shift ;;
2023-10-10 14:16:24 -07:00
-l|--lint) LINT=true; shift ;;
-p|--path) STACKS_DIRECTORY="$2"; shift; shift ;;
-v|--verbose) VERBOSE=true; shift ;;
# commands are parsed with nested parsing for subcommand flags
up*) COMMAND="up"; shift;
while [[ $# -gt 0 ]]; do
case $1 in
2023-10-10 14:21:48 -07:00
-f|--force-recreate) FORCE_RECREATE=true; shift;;
2023-10-10 14:29:53 -07:00
*) echo "Unrecognized option '$1' for '$COMMAND'"; exit 1;;
2023-10-10 14:16:24 -07:00
esac
done
2023-10-09 11:21:23 -07:00
;;
2023-10-10 14:16:24 -07:00
down*) COMMAND="down"; shift;
while [[ $# -gt 0 ]]; do
case $1 in
2023-10-10 14:21:48 -07:00
-o|--remove-orphans) REMOVE_ORPHANS=true; shift;;
2023-10-10 14:29:53 -07:00
*) echo "Unrecognized option '$1' for '$COMMAND'"; exit 1;;
esac
done
;;
config*) COMMAND="config"; shift;
while [[ $# -gt 0 ]]; do
case $1 in
-n|--no-interpolate) NO_INTERPOLATE=true; shift;;
*) echo "Unrecognized option '$1' for '$COMMAND'"; exit 1;;
2023-10-10 14:16:24 -07:00
esac
done
2023-10-09 11:21:23 -07:00
;;
2023-10-10 14:16:24 -07:00
*) echo "Unrecognized option $1"; exit 1 ;;
esac
done
2023-10-10 14:16:24 -07:00
for stack in "$STACKS_DIRECTORY"/* ; do
2023-10-10 14:21:48 -07:00
case $COMMAND in
2023-10-10 14:29:53 -07:00
up) echo "$COMMAND on $stack" ;;
down) echo "$COMMAND on $stack" ;;
config) compose_config $stack ;;
2023-10-10 14:21:48 -07:00
*) echo "Unrecognized command '$COMMAND'" ;;
esac
2023-10-10 14:16:24 -07:00
done
}
2023-10-10 14:16:24 -07:00
ARGS="$@"
main $ARGS