surround ALL variables with {} 2

This commit is contained in:
LinuxSquare 2024-03-16 21:57:56 +01:00
parent d6e4ca0973
commit a30a6b46b8
8 changed files with 125 additions and 125 deletions

View file

@ -9,7 +9,7 @@ readonly BUILDDIR="$(mktemp -d /tmp/pms-cli.XXXXXX)"
readonly CONFIG="/usr/local/noveria/etc/pms-cli/pms-cli.json"
for util in ${ROOTPATH}/utils/*; do
source $util
source ${util}
done
# VARIABLES
@ -52,7 +52,7 @@ if [ "$?" != 0 ]; then
exit 1
fi
eval set -- "$TEMP"
eval set -- "${TEMP}"
while true; do
case "${1}" in
@ -99,8 +99,8 @@ while true; do
;;
--delete)
shift
stop "$1"
delete "$1"
stop "${1}"
delete "${1}"
;;
--)
shift

View file

@ -1,15 +1,15 @@
#!/usr/bin/env bash
function getValueByKey() {
jq -r ".$1" "${CONFIG}"
jq -r ".${1}" "${CONFIG}"
}
function getLocalConfValue() {
jq -r ".$2" "$1/config.json"
jq -r ".${2}" "${1}/config.json"
}
function setLocalConfValue() {
jq "$2" "$1/config.json" > "$1/config.tmp.json"
rm -f "$1/config.json"
mv "$1/config.tmp.json" "$1/config.json"
jq "${2}" "${1}/config.json" > "${1}/config.tmp.json"
rm -f "${1}/config.json"
mv "${1}/config.tmp.json" "${1}/config.json"
}

View file

@ -8,5 +8,5 @@ function datapack() {
local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}/data/world/datapacks"
curl -L "${2}" -o "$dir/$(echo $2 | awk -F/ '{print $NF}')"
curl -L "${2}" -o "${dir}/$(echo ${2} | awk -F/ '{print $NF}')"
}

View file

@ -8,9 +8,9 @@ function delete() {
local delDir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
while [[ ! $deleteAns =~ [YyNn] ]]; do
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
case "${deleteAns}" in
"N"|"n")
log e "Aborted by user!"
exit 1
@ -18,6 +18,6 @@ function delete() {
esac
done
rm -rf "$delDir"
rm -rf "${delDir}"
log s "Server '${1}' deleted!"
}

View file

@ -1,7 +1,7 @@
#!/usr/bin/env bash
function init() {
createNetwork "$2"
createNetwork "${2}"
if [[ -d "$(getValueByKey 'PODMAN_DIRECTORY')/${1}" ]]; then
log e "Directory '${1}' already exists!"
exit 1
@ -10,12 +10,12 @@ function init() {
local newdir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
mkdir -p "${newdir}/data/world/datapacks"
populateConfig "${newdir}/config.json" "$2"
populateConfig "${newdir}/config.json" "${2}"
}
function populateConfig() {
local config="$1"
local network_name="$2"
local config="${1}"
local network_name="${2}"
local runnertype
local build
@ -26,99 +26,99 @@ function populateConfig() {
# software
log i "What would you like to install?"
while [[ ! $softwareAns =~ [1-2] ]]; do
while [[ ! ${softwareAns} =~ [1-2] ]]; do
echo -ne "[1] Server\n[2] Proxy\n"
read -p "Answer: " softwareAns
done
case "$softwareAns" in
case "${softwareAns}" in
1)
runnertype="server"
log i "Which server-software would you like to install?"
local servers=($(getValueByKey 'SERVERRUNNERS|keys[]'))
while [[ ! $serverAns =~ [0-9] ]]; do
while [[ ! ${serverAns} =~ [0-9] ]]; do
for (( i = 0; i<${#servers[@]}; i++ )); do
if [[ -n ${servers[$i]} ]]; then
echo "[$(($i + 1))] ${servers[$i]}"
if [[ -n ${servers[${i}]} ]]; then
echo "[$((${i} + 1))] ${servers[${i}]}"
fi
done
read -p "Answer: " serverAns
done
if [[ $serverAns -gt ${#servers[@]} ]]; then
log e "The answer '$serverAns' is not valid!"
if [[ ${serverAns} -gt ${#servers[@]} ]]; then
log e "The answer '${serverAns}' is not valid!"
exit 1
fi
software="${servers[$(($serverAns - 1))]}"
software="${servers[$((${serverAns} - 1))]}"
software_url="$(getValueByKey SERVERRUNNERS.${software})"
;;
2)
runnertype="proxy"
log i "Which proxy-software would you like to install?"
local proxies=($(getValueByKey 'PROXYRUNNERS|keys[]'))
while [[ ! $proxyAns =~ [0-9] ]]; do
while [[ ! ${proxyAns} =~ [0-9] ]]; do
for (( i = 0; i<${#proxies[@]}; i++ )); do
if [[ -n ${proxies[$i]} ]]; then
echo "[$(($i + 1))] ${proxies[$i]}"
if [[ -n ${proxies[${i}]} ]]; then
echo "[$((${i} + 1))] ${proxies[${i}]}"
fi
done
read -p "Answer: " proxyAns
done
if [[ $proxyAns -gt ${#proxies[@]} ]]; then
log e "The answer '$proxyAns' is not valid!"
if [[ ${proxyAns} -gt ${#proxies[@]} ]]; then
log e "The answer '${proxyAns}' is not valid!"
exit 1
fi
software="${proxies[$(($proxyAns - 1))]}"
software="${proxies[$((${proxyAns} - 1))]}"
software_url="$(getValueByKey PROXYRUNNERS.${software})"
;;
*)
log e "The answer '$softwareAns' is not valid!"
log e "The answer '${softwareAns}' is not valid!"
exit 1
;;
esac
# version
log i "Which version of '$software' would you like to install?"
local versions=($(curl -s "$software_url" | jq -r '.versions[]' ))
log i "Which version of '${software}' would you like to install?"
local versions=($(curl -s "${software_url}" | jq -r '.versions[]' ))
while [[ -z $versionAns ]]; do
while [[ -z ${versionAns} ]]; do
for (( i = 0; i<${#versions[@]}; i++ )); do
echo "[$(($i + 1))] ${versions[$i]}"
echo "[$((${i} + 1))] ${versions[${i}]}"
done
read -p "Answer: " versionAns
done
if [[ $versionAns -gt ${#versions[@]} ]]; then
log e "The answer '$versionAns' is not valid!"
if [[ ${versionAns} -gt ${#versions[@]} ]]; then
log e "The answer '${versionAns}' is not valid!"
exit 1
fi
version="${versions[$(($versionAns - 1))]}"
version="${versions[$((${versionAns} - 1))]}"
# releasecycle
log i "Which release-cycle do you want to go?"
while [[ -z $releaseCycleAns ]]; do
while [[ -z ${releaseCycleAns} ]]; do
echo -ne "[1] latest\n[2] specific\n"
read -p "Answer: " releaseCycleAns
done
case "$releaseCycleAns" in
case "${releaseCycleAns}" in
1)
release="latest"
build=$(curl -s "$software_url/versions/$version" | jq -r '.builds | last')
build=$(curl -s "${software_url}/versions/${version}" | jq -r '.builds | last')
;;
2)
log i "Which build of '$software/$version' would you like to use?"
local builds=($(curl -s "$software_url/versions/$version" | jq -r '.builds[]'))
while [[ -z $buildAns ]]; do
log i "Which build of '${software}/${version}' would you like to use?"
local builds=($(curl -s "${software_url}/versions/${version}" | jq -r '.builds[]'))
while [[ -z ${buildAns} ]]; do
for (( i = 0; i<${#builds[@]}; i++ )); do
echo "[$(($i + 1))] ${builds[$i]}"
echo "[$((${i} + 1))] ${builds[${i}]}"
done
read -p "Answer: " buildAns
done
if [[ $buildAns -gt ${#builds[@]} ]]; then
log e "The answer '$buildAns' is not valid!"
if [[ ${buildAns} -gt ${#builds[@]} ]]; then
log e "The answer '${buildAns}' is not valid!"
exit 1
fi
build="${builds[$(($buildAns - 1))]}"
build="${builds[$((${buildAns} - 1))]}"
release="specific"
;;
esac
jq "(.type=\"$runnertype\")|(.build=$build)|(.software=\"$software\")|(.release=\"$release\")|(.version=\"$version\")|(.podman_network=\"$network_name\")" ${TEMPLATEDIR}/config.json > "$config"
jq "(.type=\"${runnertype}\")|(.build=${build})|(.software=\"${software}\")|(.release=\"${release}\")|(.version=\"${version}\")|(.podman_network=\"${network_name}\")" ${TEMPLATEDIR}/config.json > "${config}"
}

View file

@ -6,32 +6,32 @@ readonly IMAGEDIR=${ROOTPATH}/image
##
# checks if the defined image exists already
#
# $1 - string: software-name
# $2 - string: mc-version
# $3 - string: build-number
# ${1} - string: software-name
# ${2} - string: mc-version
# ${3} - string: build-number
##
function checkImage() {
[[ -n $(podman image ls | grep "$2/$1" | grep "$3") ]] && echo true || echo false
[[ -n $(podman image ls | grep "${2}/${1}" | grep "${3}") ]] && echo true || echo false
}
##
# checks if the passed data is up-to-date
#
# $1 - string: software-name
# $2 - string: mc-version
# $3 - string: build-number
# $4 - string: runner-type
# ${1} - string: software-name
# ${2} - string: mc-version
# ${3} - string: build-number
# ${4} - string: runner-type
##
function checkUpdate() {
case "$4" in
case "${4}" in
"server")
local remotebuild=$(curl -s "$(getValueByKey SERVERRUNNERS.$1)/versions/$2" | jq -r '.builds | last')
local remotebuild=$(curl -s "$(getValueByKey SERVERRUNNERS.${1})/versions/${2}" | jq -r '.builds | last')
;;
"proxy")
local remotebuild=$(curl -s "$(getValueByKey PROXYRUNNERS.$1)/versions/$2" | jq -r '.builds | last')
local remotebuild=$(curl -s "$(getValueByKey PROXYRUNNERS.${1})/versions/${2}" | jq -r '.builds | last')
;;
esac
if [[ "$3" == "$remotebuild" ]]; then
if [[ "${3}" == "${remotebuild}" ]]; then
echo false
else
echo true
@ -41,40 +41,40 @@ function checkUpdate() {
##
# updates the config-file to the latest build
#
# $1 - string: software-name
# $2 - string: mc-version
# $3 - string: config-dir
# $4 - string: runner-type
# ${1} - string: software-name
# ${2} - string: mc-version
# ${3} - string: config-dir
# ${4} - string: runner-type
##
function updateBuild() {
case "$4" in
case "${4}" in
"server")
local latest=$(curl -s "$(getValueByKey SERVERRUNNERS.$1)/versions/$2" | jq -r '.builds | last')
local latest=$(curl -s "$(getValueByKey SERVERRUNNERS.${1})/versions/${2}" | jq -r '.builds | last')
;;
"proxy")
local latest=$(curl -s "$(getValueByKey PROXYRUNNERS.$1)/versions/$2" | jq -r '.builds | last')
local latest=$(curl -s "$(getValueByKey PROXYRUNNERS.${1})/versions/${2}" | jq -r '.builds | last')
;;
esac
log d "Updating build-no. to '$latest'"
setLocalConfValue "$3" "(.build=$latest)"
log d "Updating build-no. to '${latest}'"
setLocalConfValue "${3}" "(.build=${latest})"
}
##
# builds the podman image with the proper settings
#
# $1 - string: software-name
# $2 - string: mc-version
# $3 - string: build-number
# $4 - string: download-url
# ${1} - string: software-name
# ${2} - string: mc-version
# ${3} - string: build-number
# ${4} - string: download-url
#
##
function buildImage() {
log d "lookup jar-name for download"
local app_name=$(curl -s "$4" | jq -r '.downloads.application.name')
local app_name=$(curl -s "${4}" | jq -r '.downloads.application.name')
log d "downloading server.jar"
cp "${ROOTPATH}"/image/* "${BUILDDIR}/"
curl "$4/downloads/$app_name" -o "${BUILDDIR}/server.jar"
curl "${4}/downloads/${app_name}" -o "${BUILDDIR}/server.jar"
log d "building docker image"
podman build --rm "${BUILDDIR}" --tag "${2}/${1}:${3}"
@ -87,42 +87,42 @@ function buildImage() {
##
# starts the specified container
#
# $1 - string: containername
# $2 - string: image
# $3 - int: port
# ${1} - string: containername
# ${2} - string: image
# ${3} - int: port
##
function startContainer() {
log d "Starting container '$1'"
log d "Starting container '${1}'"
readarray -t additional_ports <<< "$(getLocalConfValue $(getValueByKey 'PODMAN_DIRECTORY')/${1} 'additional_ports[]')"
[[ ${#additional_ports} -gt 0 ]] && log d "Starting with additional ports: ${additional_ports[@]}"
podman run --name "${1}" --userns=keep-id:uid=1000 --rm -it -d --network "${5}" -p $([[ -n "${4}" ]] && echo ${4}:)${3}:25565 $([[ ${#additional_ports} -gt 0 ]] && for port in "${additional_ports[@]}"; do echo "-p $([[ -n ${4} ]] && echo ${4}:)${port}:${port}"; done) -v $(getValueByKey 'PODMAN_DIRECTORY')/${1}/data:/var/server "${2}" java -Dcom.mojang.eula.agree=true -jar /var/exec/server.jar --nogui --port 25565
[[ $? -eq 0 ]] && log s "Container '$1' started!"
[[ $? -eq 0 ]] && log s "Container '${1}' started!"
}
##
# stops the specified container
#
# $1 - string: containername
# ${1} - string: containername
##
function stopContainer() {
log d "Stopping container '$1'"
podman container stop --time 100 $1
log s "Container '$1' stopped"
log d "Stopping container '${1}'"
podman container stop --time 100 ${1}
log s "Container '${1}' stopped"
}
##
# create a podman network
#
# $1 - string: network-name
# ${1} - string: network-name
##
function createNetwork() {
if [[ -z "$1" ]]; then
if [[ -z "${1}" ]]; then
log e "Network name is unspecified. Please provide a network-name!"
exit 1
fi
if [[ -n $(podman network ls | grep "$1") ]]; then
log w "Network '$1' exists already, won't create!"
if [[ -n $(podman network ls | grep "${1}") ]]; then
log w "Network '${1}' exists already, won't create!"
return 1
fi
podman network create "$1"
podman network create "${1}"
}

View file

@ -7,11 +7,11 @@ function reset() {
fi
local dir="$(getValueByKey 'PODMAN_DIRECTORY')/${1}"
local datapack_dir="$dir/data/world/datapacks"
local datapack_dir="${dir}/data/world/datapacks"
while [[ ! $deleteDataDir =~ [YyNn] ]]; do
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
case "${deleteDataDir}" in
"N"|"n")
log e "Aborted by user!"
exit 1
@ -21,9 +21,9 @@ function reset() {
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
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)
@ -33,19 +33,19 @@ function reset() {
done
fi
rm -rf "$dir/data"
mkdir -p "$dir/data/world/datapacks"
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
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"
rm -rf "${tempdir}"
;;
esac
done
fi
log s "Server '$1' resetted!"
log s "Server '${1}' resetted!"
}

View file

@ -6,19 +6,19 @@ function start() {
exit 1
fi
if [[ -z "$2" ]]; then
if [[ -z "${2}" ]]; then
log e "You have to specify a port, on which the server listens!"
exit 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')"
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
case "$(getLocalConfValue ${dir} 'type')" in
"server")
local software_url="$(getValueByKey SERVERRUNNERS.${software})"
;;
@ -27,24 +27,24 @@ function start() {
;;
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"
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"
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"
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}"
}