Merge pull request #278 from outis1one/claude/ionos-script-integration-x32ofw
Claude/ionos script integration x32ofw
This commit is contained in:
@@ -109,6 +109,28 @@ is_installed() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# How many instances of a service are installed — most services here are
|
||||||
|
# single-instance, but several support the multi-instance pattern from
|
||||||
|
# CLAUDE.md (a base install plus any number of "<name>-<suffix>" siblings,
|
||||||
|
# e.g. mattermost + mattermost-team-b). Only the default case knows that
|
||||||
|
# naming convention; the specially-cased services above aren't part of the
|
||||||
|
# multi-instance pattern (wordpress is the one exception and already counts
|
||||||
|
# sites directly), so for those this just mirrors is_installed() as 0 or 1.
|
||||||
|
install_count() {
|
||||||
|
case "$1" in
|
||||||
|
base|glow|crowdsec|security-dashboard|kdeconnect|silent-send|sync-cc|sky-cam|sky-cam-frigate|asterisk|pstn-trunk|sms-inbound|ssh-config)
|
||||||
|
is_installed "$1" && echo 1 || echo 0 ;;
|
||||||
|
wordpress)
|
||||||
|
find "$DOCKER_DIR" -mindepth 1 -maxdepth 1 -name 'wordpress-*' -type d 2>/dev/null | wc -l ;;
|
||||||
|
*)
|
||||||
|
local c=0
|
||||||
|
[ -e "$DOCKER_DIR/$1" ] && c=1
|
||||||
|
c=$((c + $(find "$DOCKER_DIR" -mindepth 1 -maxdepth 1 -name "$1-*" -type d 2>/dev/null | wc -l)))
|
||||||
|
echo "$c"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
run_service() {
|
run_service() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
if [ -n "${SERVICE_ALIAS[$name]:-}" ]; then
|
if [ -n "${SERVICE_ALIAS[$name]:-}" ]; then
|
||||||
@@ -139,13 +161,14 @@ list_services() {
|
|||||||
# the "[installed]" suffix off-screen without it being obvious that's what
|
# the "[installed]" suffix off-screen without it being obvious that's what
|
||||||
# happened.
|
# happened.
|
||||||
print_status() {
|
print_status() {
|
||||||
local g name marker
|
local g name marker count
|
||||||
while IFS= read -r g; do
|
while IFS= read -r g; do
|
||||||
echo ""; echo "── ${g^^} ──"
|
echo ""; echo "── ${g^^} ──"
|
||||||
while IFS= read -r name; do
|
while IFS= read -r name; do
|
||||||
|
count="$(install_count "$name")"
|
||||||
marker="not installed"
|
marker="not installed"
|
||||||
is_installed "$name" && marker="INSTALLED"
|
[ "$count" -gt 0 ] && marker="INSTALLED (x$count)"
|
||||||
printf " %-20s %-12s %s\n" "$name" "$marker" "${SERVICE_DESC[$name]}"
|
printf " %-20s %-16s %s\n" "$name" "$marker" "${SERVICE_DESC[$name]}"
|
||||||
done < <(services_in_group "$g")
|
done < <(services_in_group "$g")
|
||||||
done < <(groups_present)
|
done < <(groups_present)
|
||||||
echo ""
|
echo ""
|
||||||
@@ -399,30 +422,40 @@ while true; do
|
|||||||
_box_h=$((_list_h + 8))
|
_box_h=$((_list_h + 8))
|
||||||
[ "$_box_h" -gt "$((_term_lines - 2))" ] && _box_h=$((_term_lines - 2))
|
[ "$_box_h" -gt "$((_term_lines - 2))" ] && _box_h=$((_term_lines - 2))
|
||||||
|
|
||||||
|
# whiptail's checklist has exactly one interactive element per row —
|
||||||
|
# the checkbox itself. The "tag" field (what's displayed right after
|
||||||
|
# it) and the "item" field (description) are both just inert display
|
||||||
|
# text; there is no such thing as a separately tabbable/selectable
|
||||||
|
# sub-field within a row. So a fixed-width "installed" (x) and "#"
|
||||||
|
# (instance count) prefix baked into the tag field is the closest
|
||||||
|
# equivalent to real extra columns whiptail can render — it lines up
|
||||||
|
# visually because whiptail pads every row's tag field to the same
|
||||||
|
# width, but it's still one string under the hood. Extracted back
|
||||||
|
# into just the plain service name below before dispatch.
|
||||||
svc_items=()
|
svc_items=()
|
||||||
for name in "${SVCS[@]}"; do
|
for name in "${SVCS[@]}"; do
|
||||||
tag="${SERVICE_DESC[$name]}"
|
_inst_mark=" "
|
||||||
# Marker goes at the FRONT, not appended after the description.
|
_count_str=" "
|
||||||
# whiptail hard-truncates each row to the dialog's fixed width
|
_count="$(install_count "$name")"
|
||||||
# (78 here) with no ellipsis or other sign it happened —
|
if [ "$_count" -gt 0 ]; then
|
||||||
# confirmed live: appending " [installed]" after a long enough
|
_inst_mark="x"
|
||||||
# description (fmd's is 68 chars; +13 for the suffix is 81,
|
_count_str="$(printf "%-2d" "$_count")"
|
||||||
# past the width) silently drops the marker off the end, making
|
fi
|
||||||
# an installed service look uninstalled with no visual cue
|
svc_tag="$(printf "%s %s %s" "$_inst_mark" "$_count_str" "$name")"
|
||||||
# anything was cut. A long description can still lose its own
|
svc_items+=("$svc_tag" "${SERVICE_DESC[$name]}" "OFF")
|
||||||
# tail this way, but that's harmless — the install status is
|
|
||||||
# what actually matters and now always survives.
|
|
||||||
is_installed "$name" && tag="[installed] $tag"
|
|
||||||
svc_items+=("$name" "$tag" "OFF")
|
|
||||||
done
|
done
|
||||||
CHOICE=$(whiptail --title "${CHOSEN_CAT^^}" --checklist \
|
CHOICE=$(whiptail --title "${CHOSEN_CAT^^}" --checklist \
|
||||||
"Space to select, Enter to install. Already-installed are marked:" "$_box_h" 78 "$_list_h" \
|
"installed(x) #instances name Space=select to install, Enter=go:" "$_box_h" 78 "$_list_h" \
|
||||||
"${svc_items[@]}" 3>&1 1>&2 2>&3 </dev/tty) || continue
|
"${svc_items[@]}" 3>&1 1>&2 2>&3 </dev/tty) || continue
|
||||||
eval "SELECTED=($CHOICE)"
|
eval "SELECTED=($CHOICE)"
|
||||||
|
# Undo the display-only "x N " prefix — name is always the last
|
||||||
|
# whitespace-separated token, since service names never contain spaces.
|
||||||
|
for i in "${!SELECTED[@]}"; do SELECTED[$i]="${SELECTED[$i]##* }"; done
|
||||||
else
|
else
|
||||||
echo ""; echo "${CHOSEN_CAT^^}:"
|
echo ""; echo "${CHOSEN_CAT^^}:"
|
||||||
for name in "${SVCS[@]}"; do
|
for name in "${SVCS[@]}"; do
|
||||||
m=""; is_installed "$name" && m="[installed] "
|
m=""; _count="$(install_count "$name")"
|
||||||
|
[ "$_count" -gt 0 ] && m="[$_count] "
|
||||||
printf " %-16s %s%s\n" "$name" "$m" "${SERVICE_DESC[$name]}"
|
printf " %-16s %s%s\n" "$name" "$m" "${SERVICE_DESC[$name]}"
|
||||||
done
|
done
|
||||||
read -rp "Enter service names to install (space-separated, blank to go back): " -a SELECTED
|
read -rp "Enter service names to install (space-separated, blank to go back): " -a SELECTED
|
||||||
|
|||||||
Reference in New Issue
Block a user