mirror of
https://github.com/anten-ka/go_warp_pro.git
synced 2026-05-19 15:56:02 +00:00
Fix multi-container: install WARP on ALL containers, always show container selector, discover without overwriting CONTAINER
Made-with: Cursor
This commit is contained in:
97
warp.sh
97
warp.sh
@@ -537,36 +537,37 @@ awg_discover_containers() {
|
||||
fi
|
||||
CONTAINERS="${AWG_ALL_CONTAINERS[*]}"
|
||||
save_config_val "CONTAINERS" "$CONTAINERS"
|
||||
return 0
|
||||
}
|
||||
|
||||
awg_pick_container() {
|
||||
awg_discover_containers || return 1
|
||||
if [ -n "${CONTAINER:-}" ]; then
|
||||
docker exec "$CONTAINER" sh -c "true" 2>/dev/null && return 0
|
||||
fi
|
||||
CONTAINER="${AWG_ALL_CONTAINERS[0]}"
|
||||
save_config_val "CONTAINER" "$CONTAINER"
|
||||
return 0
|
||||
}
|
||||
|
||||
awg_pick_container() {
|
||||
if [ -n "${CONTAINER:-}" ]; then
|
||||
docker exec "$CONTAINER" sh -c "true" 2>/dev/null && return 0
|
||||
CONTAINER=""
|
||||
fi
|
||||
awg_discover_containers || return 1
|
||||
awg_select_container() {
|
||||
awg_discover_containers 2>/dev/null || return 1
|
||||
if [ ${#AWG_ALL_CONTAINERS[@]} -eq 1 ]; then
|
||||
CONTAINER="${AWG_ALL_CONTAINERS[0]}"
|
||||
fi
|
||||
save_config_val "CONTAINER" "$CONTAINER"
|
||||
return 0
|
||||
}
|
||||
|
||||
awg_select_container() {
|
||||
awg_discover_containers 2>/dev/null
|
||||
if [ ${#AWG_ALL_CONTAINERS[@]} -le 1 ]; then
|
||||
CONTAINER="${AWG_ALL_CONTAINERS[0]:-}"
|
||||
awg_load_container_data
|
||||
return 0
|
||||
fi
|
||||
echo -e "\n${CYAN}Выберите контейнер:${NC}"
|
||||
local i=1
|
||||
for c in "${AWG_ALL_CONTAINERS[@]}"; do
|
||||
local has_warp="нет"
|
||||
local has_warp="${DIM}нет${NC}"
|
||||
docker exec "$c" sh -c "[ -f '/opt/warp/warp.conf' ]" 2>/dev/null && has_warp="${GREEN}да${NC}"
|
||||
echo -e " ${GREEN}$i)${NC} $c [WARP: $has_warp]"
|
||||
local clients="-"
|
||||
local cnt; cnt=$(docker exec "$c" sh -c "cat /opt/warp/clients.list 2>/dev/null | grep -c '.' || echo 0" 2>/dev/null | tr -d '\r')
|
||||
[ "$cnt" != "0" ] && clients="$cnt"
|
||||
local marker=""
|
||||
[ "$c" = "${CONTAINER:-}" ] && marker=" ${CYAN}*${NC}"
|
||||
echo -e " ${GREEN}$i)${NC} $c [WARP: $has_warp | Клиентов: $clients]${marker}"
|
||||
((i++))
|
||||
done
|
||||
echo -e " ${DIM}0) Отмена${NC}"
|
||||
@@ -711,40 +712,44 @@ awg_warp_up() {
|
||||
|
||||
install_warp_awg() {
|
||||
clear; echo -e "\n${CYAN}━━━ Установка WARP (AmneziaWG) ━━━${NC}\n"
|
||||
if is_warp_installed_awg && is_warp_running_awg; then
|
||||
echo -e "${YELLOW}WARP уже установлен и работает.${NC}"; read -p "Enter..."; return
|
||||
fi
|
||||
if is_warp_installed_awg && ! is_warp_running_awg; then
|
||||
echo -e "${YELLOW}[*] WARP установлен, поднимаю интерфейс...${NC}"
|
||||
awg_warp_up && echo -e "${GREEN} ✓ warp поднят${NC}" || echo -e "${RED} Ошибка${NC}"
|
||||
read -p "Enter..."; return
|
||||
fi
|
||||
awg_discover_containers 2>/dev/null || { read -p "Enter..."; return; }
|
||||
|
||||
echo -e "${YELLOW}[1/7]${NC} Бэкап контейнера..."
|
||||
awg_backup; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
echo -e "${YELLOW}[2/7]${NC} Скачиваю wgcf..."
|
||||
echo -e "${YELLOW}[1/5]${NC} Скачиваю wgcf..."
|
||||
awg_install_wgcf || { read -p "Enter..."; return; }; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
echo -e "${YELLOW}[3/7]${NC} Регистрация WARP..."
|
||||
echo -e "${YELLOW}[2/5]${NC} Регистрация WARP..."
|
||||
awg_ensure_account || { read -p "Enter..."; return; }; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
echo -e "${YELLOW}[4/7]${NC} Генерация профиля..."
|
||||
echo -e "${YELLOW}[3/5]${NC} Генерация профиля..."
|
||||
awg_generate_profile || { read -p "Enter..."; return; }; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
echo -e "${YELLOW}[5/7]${NC} Определение endpoint..."
|
||||
echo -e "${YELLOW}[4/5]${NC} Определение endpoint..."
|
||||
local ep; ep=$(awg_resolve_endpoint) || { read -p "Enter..."; return; }; echo -e "${GREEN} ✓ ${ep}${NC}"
|
||||
|
||||
echo -e "${YELLOW}[6/7]${NC} Сборка warp.conf в контейнере..."
|
||||
awg_build_warp_conf "$ep"; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
echo -e "${YELLOW}[7/7]${NC} Поднимаю warp-интерфейс..."
|
||||
awg_warp_up || { read -p "Enter..."; return; }; echo -e "${GREEN} ✓${NC}"
|
||||
|
||||
awg_detect_warp_exit_ip
|
||||
[ -n "$AWG_WARP_EXIT_IP" ] && echo -e "\n ${WHITE}WARP IP: ${GREEN}${AWG_WARP_EXIT_IP}${NC}"
|
||||
echo -e "\n${GREEN}WARP установлен! Управление клиентами — п.6.${NC}"
|
||||
log_action "AWG INSTALL: endpoint=${ep}, warp_ip=${AWG_WARP_EXIT_IP}"
|
||||
echo -e "${YELLOW}[5/5]${NC} Установка на контейнеры...\n"
|
||||
local saved_container="${CONTAINER:-}"
|
||||
for c in "${AWG_ALL_CONTAINERS[@]}"; do
|
||||
CONTAINER="$c"
|
||||
awg_load_container_data 2>/dev/null || continue
|
||||
echo -e " ${CYAN}► ${c}${NC}"
|
||||
if docker exec "$c" sh -c "[ -f '/opt/warp/warp.conf' ]" 2>/dev/null; then
|
||||
if docker exec "$c" sh -c "ip addr show warp >/dev/null 2>&1" 2>/dev/null; then
|
||||
echo -e " ${GREEN}✓ Уже установлен и работает${NC}"
|
||||
else
|
||||
echo -e " ${YELLOW}Поднимаю интерфейс...${NC}"
|
||||
awg_warp_up 2>/dev/null && echo -e " ${GREEN}✓ warp поднят${NC}" || echo -e " ${RED}✗ Ошибка${NC}"
|
||||
fi
|
||||
else
|
||||
awg_backup 2>/dev/null
|
||||
awg_build_warp_conf "$ep"
|
||||
awg_warp_up 2>/dev/null && echo -e " ${GREEN}✓ WARP установлен${NC}" || echo -e " ${RED}✗ Ошибка${NC}"
|
||||
fi
|
||||
awg_detect_warp_exit_ip
|
||||
[ -n "$AWG_WARP_EXIT_IP" ] && echo -e " ${WHITE}WARP IP: ${GREEN}${AWG_WARP_EXIT_IP}${NC}"
|
||||
done
|
||||
CONTAINER="$saved_container"
|
||||
echo -e "\n${GREEN}Готово! Управление клиентами — п.7.${NC}"
|
||||
log_action "AWG INSTALL: ${#AWG_ALL_CONTAINERS[@]} containers, endpoint=${ep}"
|
||||
read -p "Enter..."
|
||||
}
|
||||
|
||||
@@ -846,11 +851,7 @@ uninstall_awg() {
|
||||
|
||||
awg_check_containers() {
|
||||
clear; echo -e "\n${CYAN}━━━ Контейнеры AmneziaWG ━━━${NC}\n"
|
||||
local saved_container="${CONTAINER:-}"
|
||||
awg_discover_containers 2>/dev/null
|
||||
# discover persists CONTAINER=first match; restore user's choice (or "") on disk
|
||||
CONTAINER="$saved_container"
|
||||
save_config_val "CONTAINER" "$saved_container"
|
||||
if [ ${#AWG_ALL_CONTAINERS[@]} -eq 0 ]; then
|
||||
echo -e " ${RED}Контейнеры не найдены.${NC}"
|
||||
read -p " Enter..."; return
|
||||
@@ -1002,9 +1003,7 @@ awg_get_client_ips() {
|
||||
}
|
||||
|
||||
awg_toggle_clients_ssh() {
|
||||
if [ ${#AWG_ALL_CONTAINERS[@]} -gt 1 ]; then
|
||||
awg_select_container || return
|
||||
fi
|
||||
awg_select_container || return
|
||||
awg_get_client_ips; awg_parse_clients_table; awg_load_clients
|
||||
|
||||
if [ ${#AWG_CLIENT_IPS[@]} -eq 0 ]; then
|
||||
|
||||
Reference in New Issue
Block a user