pms-cli/functions/server

180 lines
5.4 KiB
Bash

#!/usr/bin/env bash
function server_help() {
usage_general
cat<<EOF
commands:
create [servername] [network name]
start [servername] [port] (ip) (--attach)
stop [servername]
restart [servername] [port] (ip)
attach [servername]
reset [servername]
delete [servername]
EOF
}
function server_create() {
createNetwork "${2}"
if [[ -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then
log e "Directory '${1}' already exists!"
exit 1
fi
local newdir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
mkdir -p "${newdir}/data/world/datapacks"
populateConfig "${newdir}/config.json" "${2}"
}
function server_start() {
local DIRECTLY_ATTACH=0
if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then
log e "Directory '${1}' does not exist!"
exit 1
fi
if [[ -z "${2}" ]]; then
log e "You have to specify a port, on which the server listens!"
exit 1
fi
if [[ "$@" == *"--attach"* ]]; then
DIRECTLY_ATTACH=1
fi
local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
local software="$(getLocalConfValue ${dir} 'software')"
local version="$(getLocalConfValue ${dir} 'version')"
local build="$(getLocalConfValue ${dir} 'build')"
local podman_network="$(getLocalConfValue ${dir} 'podman_network')"
case "$(getLocalConfValue ${dir} 'type')" in
"server")
local software_url="$(getValueByKey SERVERRUNNERS.${software})"
;;
"proxy")
local software_url="$(getValueByKey PROXYRUNNERS.${software})"
;;
esac
if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then
log i "Building image '${version}/${software}:${build}'"
buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}"
else
if [[ "$(getLocalConfValue ${dir} 'release')" == "latest" ]]; then
if [[ $(checkUpdate "${software}" "${version}" "${build}" "$(getLocalConfValue ${dir} 'type')") == true ]]; then
log w "Update for '${software}/${version}:${build}' is available."
updateBuild "${software}" "${version}" "${dir}" "$(getLocalConfValue ${dir} 'type')"
local oldbuild="${build}"
build="$(getLocalConfValue ${dir} 'build')"
if [[ $(checkImage "${software}" "${version}" "${build}") == false ]]; then
log i "Updating image '${version}/${software}:${oldbuild}' => '${version}/${software}:${build}'"
buildImage "${software}" "${version}" "${build}" "${software_url}/versions/${version}/builds/${build}"
fi
fi
fi
fi
log i "Starting container '${1}' with image '${version}/${software}:${build}' on port '$([[ -n "${3}" ]] && echo ${3}:)${2}'"
startContainer "${1}" "${version}/${software}:${build}" "${2}" "${3}" "${podman_network}"
if (( DIRECTLY_ATTACH )); then
server_attach "${1}"
fi
}
function server_stop() {
if [[ -z $(podman container ps | grep "${1}") ]]; then
log w "Container '${1}' is not running!"
return 1
fi
log i "Stopping container '${1}'"
stopContainer "${1}"
}
function server_restart() {
server_stop "${1}"
server_start "${1}" "${2}" "${3}"
}
function server_attach() {
if [[ -z $(podman container ps | grep "${1}") ]]; then
log e "Container '${1}' is not running!"
exit 1
fi
log i "Attaching to container '${1}'"
podman container attach "${1}"
}
function server_reset() {
if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then
log e "Directory '${1}' does not exist!"
exit 1
fi
local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
local datapack_dir="${dir}/data/world/datapacks"
while [[ ! ${deleteDataDir} =~ [YyNn] ]]; do
read -p "Do you want to reset the complete data dir located in ${dir}/data ? (This is an unrecoverable process): " deleteDataDir
case "${deleteDataDir}" in
"N"|"n")
log e "Aborted by user!"
exit 1
;;
esac
done
local backedup=false
if [[ -n $(find "${datapack_dir}" -maxdepth 1 -type f) ]]; then
while [[ ! ${backupDatapacksAns} =~ [YyNn] ]]; do
read -p "Do you want to backup the datapack .zip found in ${datapack_dir} ?: " backupDatapacksAns
case "${backupDatapacksAns}" in
"Y"|"y")
local backedup=true
local tempdir=$(mktemp -d /tmp/pms-cli.XXXXXX)
mv ${datapack_dir}/*.zip ${tempdir}/
;;
esac
done
fi
rm -rf "${dir}/data"
mkdir -p "${dir}/data/world/datapacks"
if [[ "${backedup}" == true ]]; then
while [[ ! ${restoreDatapacksAns} =~ [YyNn] ]]; do
read -p "You have some backed up datapack .zip in ${tempdir}. Do you want to restore them now?: " restoreDatapacksAns
case "${restoreDatapacksAns}" in
"Y"|"y")
mv ${tempdir}/*.zip "${dir}/data/world/datapacks/"
rm -rf "${tempdir}"
;;
esac
done
fi
log s "Server '${1}' resetted!"
}
function server_delete() {
if [[ ! -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then
log e "Directory '${1}' does not exist!"
exit 1
fi
local delDir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
while [[ ! ${deleteAns} =~ [YyNn] ]]; do
read -p "Do you really want to delete the complete directory located in ${delDir} ? (This is an unrecoverable process): " deleteAns
case "${deleteAns}" in
"N"|"n")
log e "Aborted by user!"
exit 1
;;
esac
done
rm -rf "${delDir}"
log s "Server '${1}' deleted!"
}