From 533e79ba959143f0459431a486bfb85c56c72ddc Mon Sep 17 00:00:00 2001 From: luisgulo Date: Fri, 24 Oct 2025 18:01:10 +0200 Subject: Releasing code version 1.8.0 --- core/modules/service.sh | 64 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) create mode 100644 core/modules/service.sh (limited to 'core/modules/service.sh') diff --git a/core/modules/service.sh b/core/modules/service.sh new file mode 100644 index 0000000..bda0cd3 --- /dev/null +++ b/core/modules/service.sh @@ -0,0 +1,64 @@ +#!/bin/bash +# Module: service +# Description: Controla servicios del sistema remoto (start, stop, restart, enable, disable) con idempotencia +# License: GPLv3 +# Author: Luis GuLo +# Version: 1.2.0 +# Dependencies: ssh, systemctl + +service_task() { + local host="$1"; shift + declare -A args + for arg in "$@"; do + key="${arg%%=*}" + value="${arg#*=}" + args["$key"]="$value" + done + + local name="${args[name]}" + local state="${args[state]}" + local become="${args[become]}" + local prefix="" + [ "$become" = "true" ] && prefix="sudo" + + # 🌐 Cargar traducciones + local lang="${shflow_vars[language]:-es}" + local trfile="$(dirname "${BASH_SOURCE[0]}")/service.tr.${lang}" + declare -A tr + if [[ -f "$trfile" ]]; then + while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile" + fi + + case "$state" in + start|stop|restart|enable|disable) + echo "$(render_msg "${tr[executing]}" "state=$state" "name=$name" "host=$host")" + ssh "$host" "$prefix systemctl $state '$name'" + ;; + *) + echo "$(render_msg "${tr[unsupported]}" "state=$state")" + return 1 + ;; + esac +} + +check_dependencies_service() { + local lang="${shflow_vars[language]:-es}" + local trfile="$(dirname "${BASH_SOURCE[0]}")/service.tr.${lang}" + declare -A tr + if [[ -f "$trfile" ]]; then + while IFS='=' read -r k v; do tr["$k"]="$v"; done < "$trfile" + fi + + if ! command -v ssh &> /dev/null; then + echo "${tr[missing_ssh]:-❌ [service] ssh no está disponible.}" + return 1 + fi + echo "${tr[ssh_ok]:-✅ [service] ssh disponible.}" + + if ! command -v systemctl &> /dev/null; then + echo "${tr[missing_systemctl]:-⚠️ [service] systemctl no está disponible localmente. Se asumirá que existe en el host remoto.}" + else + echo "${tr[systemctl_ok]:-✅ [service] systemctl disponible localmente.}" + fi + return 0 +} -- cgit v1.2.3