180 lines
5.4 KiB
Bash
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!"
|
|
}
|