First push
This commit is contained in:
commit
d895dcd829
|
@ -0,0 +1,170 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Colores
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
PURPLE='\033[0;35m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Función para mostrar el menú de servicios y obtener el número de servicios encontrados
|
||||
function show_services_menu {
|
||||
local search_term="$1"
|
||||
|
||||
if [ -z "$search_term" ]; then
|
||||
echo ""
|
||||
echo -e "${PURPLE}Mostrando todos los servicios${NC}"
|
||||
else
|
||||
echo ""
|
||||
echo -e "${PURPLE}Mostrando resultados de búsqueda '$search_term'${NC}"
|
||||
fi
|
||||
echo ""
|
||||
|
||||
# Obtener la lista de servicios y filtrar si es necesario
|
||||
if [ -z "$search_term" ]; then
|
||||
services=$(docker service ls --format '{{.ID}}\t{{.Name}}')
|
||||
else
|
||||
services=$(docker service ls --format '{{.ID}}\t{{.Name}}' | grep "$search_term")
|
||||
fi
|
||||
|
||||
# Comprobar si se encontraron servicios
|
||||
if [ -z "$services" ]; then
|
||||
echo -e "${RED}No se encontraron servicios que coincidan con el término de búsqueda: $search_term${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Contador para numerar los servicios
|
||||
count=1
|
||||
num_services=0
|
||||
services_list=()
|
||||
|
||||
echo -e "ID\tESTADO\t\tPUERTO\t\tNOMBRE"
|
||||
echo "------------------------------------------------------------------------------------"
|
||||
while IFS=$'\t' read -r service_id service_name; do
|
||||
# Obtener el número de réplicas
|
||||
replicas=$(docker service inspect --format '{{.Spec.Mode.Replicated.Replicas}}' "$service_id" 2>/dev/null)
|
||||
|
||||
# Obtener el puerto expuesto por el servicio
|
||||
port=$(docker service inspect --format '{{range .Endpoint.Ports}}{{.PublishedPort}} {{end}}' "$service_id" | awk '{print $1}')
|
||||
|
||||
# Solo imprimir el servicio si tiene puerto expuestos
|
||||
if [ -n "$port" ]; then
|
||||
# Determinar el estado y el color
|
||||
if [ "$replicas" -gt 0 ]; then
|
||||
state="${GREEN}Activado${NC}"
|
||||
else
|
||||
state="${RED}Desactivado${NC}"
|
||||
fi
|
||||
|
||||
# Imprimir el número, estado, nombre del servicio y puerto
|
||||
echo -e "$count\t$state\t$port\t\t$service_name"
|
||||
echo "------------------------------------------------------------------------------------"
|
||||
|
||||
# Guardar la información del servicio para selección futura
|
||||
services_list+=("$service_id $service_name $state $port")
|
||||
# Incrementar el contador
|
||||
count=$((count + 1))
|
||||
num_services=$((num_services + 1))
|
||||
fi
|
||||
done <<< "$services"
|
||||
|
||||
if [ "$num_services" -eq 0 ]; then
|
||||
echo -e "${RED}No se encontraron servicios con puerto expuestos.${NC}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${PURPLE}$num_services servicios encontrados.${NC}"
|
||||
|
||||
# Mostrar la línea solo si hay más de un servicio
|
||||
if [ "$num_services" -gt 1 ]; then
|
||||
echo ""
|
||||
echo -e "${PURPLE}De qué servicio quieres cambiar el estado?${NC}"
|
||||
echo ""
|
||||
fi
|
||||
|
||||
return $num_services
|
||||
}
|
||||
|
||||
# Función para manejar la elección del usuario
|
||||
function handle_service_toggle {
|
||||
local service_id="$1"
|
||||
local service_name="$2"
|
||||
|
||||
# Obtener el número de réplicas
|
||||
replicas=$(docker service inspect --format '{{.Spec.Mode.Replicated.Replicas}}' "$service_id" 2>/dev/null)
|
||||
|
||||
if [ -z "$replicas" ]; then
|
||||
echo "No se pudo obtener el número de réplicas. Puede que el servicio no exista o tengas un problema con Docker."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if [ "$replicas" -eq 1 ]; then
|
||||
# Cambiar a 0 réplicas
|
||||
docker service update --replicas 0 "$service_id"
|
||||
echo ""
|
||||
echo -e "${RED}Replica desactivada para el servicio:"
|
||||
echo -e "${service_name}${NC}"
|
||||
echo ""
|
||||
elif [ "$replicas" -eq 0 ]; then
|
||||
# Cambiar a 1 réplica
|
||||
docker service update --replicas 1 "$service_id"
|
||||
echo ""
|
||||
echo -e "${GREEN}Replica activada para el servicio:"
|
||||
echo -e "${service_name}${NC}"
|
||||
echo ""
|
||||
else
|
||||
echo "El número de réplicas es inesperado: $replicas"
|
||||
fi
|
||||
}
|
||||
|
||||
# Comprobar si se han pasado argumentos
|
||||
if [ "$#" -eq 0 ]; then
|
||||
# Si no se pasa ningún argumento, ejecutar la función con un parámetro vacío para mostrar todos los servicios
|
||||
search_term=""
|
||||
services_list=()
|
||||
show_services_menu "$search_term"
|
||||
num_services=$?
|
||||
|
||||
if [ "$num_services" -eq 1 ]; then
|
||||
# Si solo hay un servicio, cambiar su estado directamente
|
||||
IFS=' ' read -r service_id service_name state ports <<< "${services_list[0]}"
|
||||
handle_service_toggle "$service_id" "$service_name"
|
||||
else
|
||||
# Leer la opción del usuario si hay más de un servicio
|
||||
echo ""
|
||||
read -p "Elige un servicio (o 0 para salir): " option
|
||||
|
||||
if [ "$option" -eq 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Manejar la selección del servicio
|
||||
IFS=' ' read -r service_id service_name state ports <<< "${services_list[$((option - 1))]}"
|
||||
handle_service_toggle "$service_id" "$service_name"
|
||||
fi
|
||||
else
|
||||
# Si se pasan argumentos, manejar cada uno de ellos
|
||||
for search_term in "$@"; do
|
||||
services_list=()
|
||||
show_services_menu "$search_term"
|
||||
num_services=$?
|
||||
|
||||
if [ "$num_services" -eq 1 ]; then
|
||||
# Si solo hay un servicio, cambiar su estado directamente
|
||||
IFS=' ' read -r service_id service_name state ports <<< "${services_list[0]}"
|
||||
handle_service_toggle "$service_id" "$service_name"
|
||||
else
|
||||
# Leer la opción del usuario si hay más de un servicio
|
||||
echo ""
|
||||
read -p "Elige un servicio (o 0 para salir): " option
|
||||
|
||||
if [ "$option" -eq 0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Manejar la selección del servicio
|
||||
IFS=' ' read -r service_id service_name state ports <<< "${services_list[$((option - 1))]}"
|
||||
handle_service_toggle "$service_id" "$service_name"
|
||||
fi
|
||||
done
|
||||
fi
|
Loading…
Reference in New Issue
Block a user