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
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
|