|
|
|
@ -9,31 +9,108 @@ ARG1="${1:-}" |
|
|
|
# FUNCTIONS |
|
|
|
|
|
|
|
function usage { |
|
|
|
echo "$(basename "$0") [--edit]" |
|
|
|
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 |
|
|
|
} |
|
|
|
|
|
|
|
# MAIN |
|
|
|
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 |
|
|
|
|
|
|
|
set -Eue |
|
|
|
[[ "$ARG1" == '--help' ]] && usage && exit 1 |
|
|
|
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) |
|
|
|
|
|
|
|
[[ ! -f $DEFAULT_CONFIG ]] && >&2 echo 'configuration file missing!' && exit 2 |
|
|
|
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 |
|
|
|
|
|
|
|
if [[ "$ARG1" == '--edit' ]]; then |
|
|
|
editor $DEFAULT_CONFIG |
|
|
|
else |
|
|
|
source $DEFAULT_CONFIG |
|
|
|
show_defaults |
|
|
|
fi |
|
|
|
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 |