CRITICAL: hardcode state.json to ~/.migrate/state.json, guarantee reset_state clears completed_steps
This commit is contained in:
@@ -43,8 +43,9 @@ signal.signal(signal.SIGTERM, _handle_sigterm)
|
|||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
# Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходе
|
# Инициализируем state сразу, чтобы _LAST_STATE был готов при любом выходe
|
||||||
state.load_state()
|
state.load_state()
|
||||||
|
|
||||||
parser = argparse.ArgumentParser(description="Docker Service Migration Tool")
|
parser = argparse.ArgumentParser(description="Docker Service Migration Tool")
|
||||||
parser.add_argument("--mode", choices=["source", "target"], help="Режим работы")
|
parser.add_argument("--mode", choices=["source", "target"], help="Режим работы")
|
||||||
parser.add_argument("--resume", action="store_true", help="Продолжить после ошибки")
|
parser.add_argument("--resume", action="store_true", help="Продолжить после ошибки")
|
||||||
|
|||||||
@@ -14,29 +14,22 @@ from datetime import datetime
|
|||||||
STATE_FILE = None
|
STATE_FILE = None
|
||||||
_LAST_STATE = None
|
_LAST_STATE = None
|
||||||
|
|
||||||
|
# Жёсткий путь для state.json — один, навсегда
|
||||||
|
STATE_PATH = os.path.join(os.path.expanduser("~"), ".migrate", "state.json")
|
||||||
|
|
||||||
def _state_path():
|
def _state_path():
|
||||||
global STATE_FILE
|
global STATE_FILE
|
||||||
if STATE_FILE:
|
if STATE_FILE:
|
||||||
return STATE_FILE
|
return STATE_FILE
|
||||||
# State никогда не храним рядом со скриптом — install.sh его удалит
|
# Всегда используем ~/.migrate/state.json
|
||||||
candidates = [
|
d = os.path.dirname(STATE_PATH)
|
||||||
os.path.join(os.path.expanduser("~"), ".migrate", "state.json"),
|
try:
|
||||||
"/var/tmp/docker-migrate/state.json",
|
if not os.path.isdir(d):
|
||||||
]
|
|
||||||
for c in candidates:
|
|
||||||
d = os.path.dirname(c)
|
|
||||||
if os.path.isdir(d):
|
|
||||||
STATE_FILE = c
|
|
||||||
return c
|
|
||||||
try:
|
|
||||||
os.makedirs(d, exist_ok=True)
|
os.makedirs(d, exist_ok=True)
|
||||||
STATE_FILE = c
|
except Exception:
|
||||||
return c
|
pass
|
||||||
except PermissionError:
|
STATE_FILE = STATE_PATH
|
||||||
continue
|
return STATE_FILE
|
||||||
fallback = os.path.join(os.getcwd(), ".migrate-state.json")
|
|
||||||
STATE_FILE = fallback
|
|
||||||
return fallback
|
|
||||||
|
|
||||||
|
|
||||||
def load_state():
|
def load_state():
|
||||||
|
|||||||
Reference in New Issue
Block a user