pms-cli/utils/init

124 lines
3.7 KiB
Bash

#!/usr/bin/env bash
function init() {
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 populateConfig() {
local config="${1}"
local network_name="${2}"
local runnertype
local build
local software
local software_url
local release
local version
# software
log i "What would you like to install?"
while [[ ! ${softwareAns} =~ [1-2] ]]; do
echo -ne "[1] Server\n[2] Proxy\n"
read -p "Answer: " softwareAns
done
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
for (( i = 0; i<${#servers[@]}; i++ )); do
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!"
exit 1
fi
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
for (( i = 0; i<${#proxies[@]}; i++ )); do
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!"
exit 1
fi
software="${proxies[$((${proxyAns} - 1))]}"
software_url="$(getValueByKey PROXYRUNNERS.${software})"
;;
*)
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[]' ))
while [[ -z ${versionAns} ]]; do
for (( i = 0; i<${#versions[@]}; i++ )); do
echo "[$((${i} + 1))] ${versions[${i}]}"
done
read -p "Answer: " versionAns
done
if [[ ${versionAns} -gt ${#versions[@]} ]]; then
log e "The answer '${versionAns}' is not valid!"
exit 1
fi
version="${versions[$((${versionAns} - 1))]}"
# releasecycle
log i "Which release-cycle do you want to go?"
while [[ -z ${releaseCycleAns} ]]; do
echo -ne "[1] latest\n[2] specific\n"
read -p "Answer: " releaseCycleAns
done
case "${releaseCycleAns}" in
1)
release="latest"
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
for (( i = 0; i<${#builds[@]}; i++ )); do
echo "[$((${i} + 1))] ${builds[${i}]}"
done
read -p "Answer: " buildAns
done
if [[ ${buildAns} -gt ${#builds[@]} ]]; then
log e "The answer '${buildAns}' is not valid!"
exit 1
fi
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}"
}