diff --git a/core/fsm.py b/core/fsm.py index e84435f..4db4ce5 100644 --- a/core/fsm.py +++ b/core/fsm.py @@ -81,8 +81,8 @@ class FSM: from source.source import do_stop_service do_stop_service() elif name == "TRANSFER": - from transfer.transfer import do_transfer - do_transfer() + from source.source import do_transfer_offer + do_transfer_offer() elif name == "DONE": success("Source-режим завершён") diff --git a/source/source.py b/source/source.py index 402bfa0..2d2053d 100644 --- a/source/source.py +++ b/source/source.py @@ -330,23 +330,41 @@ def do_stop_service(): def do_transfer_offer(): step(4, "ПЕРЕНОС НА НОВЫЙ СЕРВЕР (опционально)") - if not confirm("Перенести архив на новый сервер сейчас", default="y"): - success("Готово! Архив оставлен на текущем сервере.") - success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}") - state.set_stage("DONE") - return + st = state.load_state() + + # При resume: проверяем, были ли уже введены target-параметры + resume_host = st.get("target_host") + resume_user = st.get("target_user") + resume_port = st.get("target_port", 22) + if resume_host and resume_host not in ("", "None"): + info(f"Обнаружены ранее введённые параметры target: {resume_user}@{resume_host}:{resume_port}") + if confirm("Использовать эти параметры повторно (если ошибка была в SSH-ключе, выберите Y, после фикса)", default="y"): + host, user, port_int = resume_host, resume_user or "root", int(resume_port) + else: + # Сбрасываем, чтобы запросить заново + state.set_stage("SOURCE_STOP", target_host=None, target_user=None, target_port=None) + host = user = None + else: + host = user = None - host = prompt("IP или домен нового сервера") if not host: - warn("IP/домен не указан. Перенос пропущен.") - success(f"Архив оставлен в: {_ARCHIVE_DIR}") - state.set_stage("DONE") - return - user = prompt("SSH user (root или обычный пользователь)") - if not user: - user = "root" - port = prompt("SSH порт (Enter=22)") or "22" - port_int = int(port) + if not confirm("Перенести архив на новый сервер сейчас", default="y"): + success("Готово! Архив оставлен на текущем сервере.") + success(f"Manifest и архив лежат в: {_ARCHIVE_DIR}") + state.set_stage("DONE") + return + + host = prompt("IP или домен нового сервера") + if not host: + warn("IP/домен не указан. Перенос пропущен.") + success(f"Архив оставлен в: {_ARCHIVE_DIR}") + state.set_stage("DONE") + return + user = prompt("SSH user (root или обычный пользователь)") + if not user: + user = "root" + port = prompt("SSH порт (Enter=22)") or "22" + port_int = int(port) # SSH-диагностика: ищем ключи, проверяем доступ from transfer.ssh import pick_or_setup_ssh_key