You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
2.2 KiB

#!/usr/bin/env bash
# CONSTANTS
BASEDIR=$(dirname "$0")
DEFAULT_CONFIG="$BASEDIR/../config/default.conf"
ARG1="${1:-}"
# FUNCTIONS
function usage {
echo "$(basename "$0") [--edit | --config]"
}
function parse_options {
COMMAND=show
while [[ $# -gt 0 ]]; do
case "$1" in
--edit)
COMMAND=edit
;;
--config)
COMMAND=config
;;
--help | -h)
usage && exit 0
;;
*)
echo >&2 "Unknown option: $1" && usage && exit 2
;;
esac
shift 1 # Move to the next argument
done
}
function show_defaults {
[[ ! -f $DEFAULT_CONFIG ]] && echo >&2 "config file missing: $DEFAUL_CONFIG" && exit 3
source "$DEFAULT_CONFIG"
echo "STORAGE_DISK=$STORAGE_DISK"
echo "STORAGE_SIZE=$STORAGE_SIZE"
echo "BRIDGE=$BRIDGE"
echo "MEMORY=$MEMORY"
echo "SWAP=$SWAP"
echo "CPU=$CPU"
}
function compute_cpu_cores {
nproc=$(nproc)
[[ $nproc -ge 16 ]] && cores=4
[[ $nproc -ge 8 ]] && cores=2
[[ $nproc -lt 8 ]] && cores=1
echo $cores
}
function choose_from_selection {
local name=$1[@]
local selection=("${!name}")
local length=${#selection[@]}
[[ $length == 0 ]] && echo >&2 'no values from selection!' && exit 7
[[ $length == 1 ]] && chosen=${selection[0]} && return
echo "$2:"
echo -----------------
PS3="Choose number: "
select chosen in "${selection[@]}"; do
[[ -n $chosen ]] && break
done < /dev/tty
}
function choose_default {
echo 'initializing default values...'
storage_size='20G'
memory='2G'
swap='2G'
cpu=$(compute_cpu_cores)
mapfile -t storages <<< $(pct-info list-zfs-pools)
choose_from_selection storages "TYPE=ZFSPOOL STORAGE LIST"
storage_disk=$chosen
mapfile -t bridges <<< $(pct-info list-bridges)
choose_from_selection bridges "BRIDGE LIST"
bridge=$chosen
cat >$DEFAULT_CONFIG <<EOF
STORAGE_DISK=\${STORAGE_DISK:-$storage_disk}
STORAGE_SIZE=\${STORAGE_SIZE:-$storage_size}
BRIDGE=\${BRIDGE:-$bridge}
MEMORY=\${MEMORY:-$memory}
SWAP=\${SWAP:-$swap}
CPU=\${CPU:-$cpu}
EOF
}
function perform {
case "$COMMAND" in
show)
show_defaults
;;
edit)
editor $DEFAULT_CONFIG
;;
config)
choose_default
;;
esac
}
# MAIN
set -Eue
parse_options $*
perform