#!/usr/bin/env bash # CONSTANTS readonly IMAGEDIR=${ROOTPATH}/image ## # checks if the defined image exists already # # ${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 } ## # 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 ## function checkUpdate() { case "${4}" in "server") 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') ;; esac if [[ "${3}" == "${remotebuild}" ]]; then echo false else echo true fi } ## # updates the config-file to the latest build # # ${1} - string: software-name # ${2} - string: mc-version # ${3} - string: config-dir # ${4} - string: runner-type ## function updateBuild() { case "${4}" in "server") 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') ;; esac 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 # ## function buildImage() { log d "lookup jar-name for download" 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" log d "building docker image" podman build --rm "${BUILDDIR}" --tag "${2}/${1}:${3}" [[ $? -eq 0 ]] && log s "Image '${2}/${1}:${3}' built!" log d "removing temporary build-dir" [[ -f "${BUILDDIR}" ]] && rm -rf "${BUILDDIR}" } ## # starts the specified container # # ${1} - string: containername # ${2} - string: image # ${3} - int: port # ${4} - string: ip-address # ${5} - string: podman-network ## function startContainer() { log d "Starting container '${1}'" readarray -t additional_ports <<< "$(getLocalConfValue $(getValueByKey 'PODMAN_DIRECTORY')/${1} 'additional_ports[]')" IFS=',' read -r -a ips <<< "${4}" [[ ${#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}" $([[ ${#ips[@]} -gt 0 ]] && for ip in ${ips[@]}; do echo "-p $([[ ${#ips[@]} -gt 0 ]] && echo ${ip}:)${3}:25565 $([[ ${#additional_ports} -gt 0 ]] && for port in ${additional_ports[@]}; do echo \"-p $([[ ${#ips[@]} -gt 0 ]] && echo ${ip}:)${port}:${port}\"; done)"; done || echo "-p ${3}:25565 $([[ ${#additional_ports} -gt 0 ]] && for port in ${additional_ports[@]}; do echo \"-p ${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!" } ## # stops the specified container # # ${1} - string: containername ## function stopContainer() { log d "Stopping container '${1}'" podman container stop --time 100 ${1} log s "Container '${1}' stopped" } ## # create a podman network # # ${1} - string: network-name ## function createNetwork() { 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!" return 1 fi podman network create "${1}" }