se agrega archivos para la instalación en Docker
This commit is contained in:
1 parent
533105e7c3
commit
cf2c1ee147
28 files changed
+1430
-501
No files matched your search
+144
@@ -0,0 +1,144 @@
|
||||
import os
|
||||
import platform
|
||||
import subprocess
|
||||
from config_loader import CONFIG
|
||||
|
||||
# ========================================================================
|
||||
def get_current_os():
|
||||
if os.path.exists("/.dockerenv"):
|
||||
return "docker"
|
||||
|
||||
system = platform.system().lower()
|
||||
if system == "darwin":
|
||||
return "mac"
|
||||
if system == "windows":
|
||||
return "windows"
|
||||
return "linux"
|
||||
|
||||
# ========================================================================
|
||||
def get_mount_point():
|
||||
return CONFIG.smb.mount_points.get(get_current_os(), "")
|
||||
|
||||
|
||||
def esta_montado(mount_point):
|
||||
if not mount_point:
|
||||
return False
|
||||
if get_current_os() == "windows":
|
||||
return os.path.exists(mount_point)
|
||||
return os.path.ismount(mount_point) or os.path.exists(
|
||||
os.path.join(mount_point, ".mounted_check")
|
||||
)
|
||||
|
||||
# ========================================================================
|
||||
def montar_smb():
|
||||
mount_point = get_mount_point()
|
||||
if not mount_point:
|
||||
print(" ⚠️ No hay punto de montaje configurado para este SO.")
|
||||
return False
|
||||
|
||||
if esta_montado(mount_point):
|
||||
return True
|
||||
|
||||
current_os = get_current_os()
|
||||
|
||||
if current_os != "windows" and not os.path.exists(mount_point):
|
||||
os.makedirs(mount_point)
|
||||
|
||||
smb = CONFIG.smb
|
||||
|
||||
try:
|
||||
if current_os == "mac":
|
||||
cmd = (
|
||||
f"mount_smbfs //'{smb.username}':'{smb.password}'"
|
||||
f"@{smb.server}/{smb.share} {mount_point}"
|
||||
)
|
||||
subprocess.run(cmd, shell=True, check=True, capture_output=True)
|
||||
elif current_os == "linux":
|
||||
cmd = (
|
||||
f"sudo mount -t cifs //{smb.server}/{smb.share} {mount_point}"
|
||||
f" -o username={smb.username},password={smb.password}"
|
||||
)
|
||||
subprocess.run(cmd, shell=True, check=True, capture_output=True)
|
||||
|
||||
elif current_os == "docker":
|
||||
print("ℹ️ Docker: SMB debe estar montado por el host")
|
||||
return os.path.exists(mount_point)
|
||||
|
||||
elif current_os == "windows":
|
||||
ruta_smb = f"\\\\{smb.server}\\{smb.share}"
|
||||
cmd = [
|
||||
"net", "use", mount_point, ruta_smb,
|
||||
smb.password, f"/user:{smb.username}", "/persistent:no",
|
||||
]
|
||||
subprocess.run(cmd, check=True, capture_output=True)
|
||||
|
||||
print(f" ✅ SMB montado en: {mount_point}")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f" ⚠️ Error montando SMB: {e}")
|
||||
return False
|
||||
|
||||
# ========================================================================
|
||||
def sincronizar_a_smb(ruta_local, subfolder_cuenta):
|
||||
if not os.path.isdir(ruta_local):
|
||||
print(f" ⚠️ La carpeta local no existe: {ruta_local}")
|
||||
return False
|
||||
|
||||
if not montar_smb():
|
||||
print(" ❌ No se pudo sincronizar: SMB no montado.")
|
||||
return False
|
||||
|
||||
mount_point = get_mount_point()
|
||||
current_os = get_current_os()
|
||||
|
||||
if current_os == "windows" and mount_point.endswith(":") and len(mount_point) == 2:
|
||||
mount_point += "\\"
|
||||
|
||||
subfolder = subfolder_cuenta.lstrip("/")
|
||||
ruta_destino = os.path.normpath(os.path.join(mount_point, subfolder))
|
||||
|
||||
if not os.path.exists(ruta_destino):
|
||||
os.makedirs(ruta_destino)
|
||||
print(f" 📁 Carpeta creada en SMB: {ruta_destino}")
|
||||
|
||||
source = os.path.abspath(ruta_local)
|
||||
destination = os.path.abspath(ruta_destino)
|
||||
|
||||
print(f" 🚀 Sincronizando {current_os.upper()}: {source} -> {destination}")
|
||||
|
||||
try:
|
||||
if current_os in ("mac", "linux", "docker"):
|
||||
# Solo sincronizar PDF y XML
|
||||
cmd = (
|
||||
f"find {source} -maxdepth 1 \\( -name '*.pdf' -o -name '*.xml' \\) "
|
||||
f"-exec rsync -av --remove-source-files {{}} {destination}/ \\;"
|
||||
)
|
||||
subprocess.run(cmd, shell=True, check=True, capture_output=True, text=True)
|
||||
# Limpiar temporales restantes (json, zip)
|
||||
subprocess.run(
|
||||
f"find {source} -type f \\( -name '*.json' -o -name '*.zip' \\) -delete",
|
||||
shell=True, check=True, capture_output=True, text=True,
|
||||
)
|
||||
|
||||
elif current_os == "windows":
|
||||
import shutil
|
||||
for archivo in os.listdir(source):
|
||||
if not archivo.lower().endswith((".pdf", ".xml")):
|
||||
continue
|
||||
src_path = os.path.join(source, archivo)
|
||||
dst_path = os.path.join(destination, archivo)
|
||||
if os.path.isfile(src_path):
|
||||
if os.path.exists(dst_path):
|
||||
os.remove(dst_path)
|
||||
shutil.move(src_path, dst_path)
|
||||
|
||||
for archivo in os.listdir(source):
|
||||
if archivo.lower().endswith((".json", ".zip")):
|
||||
os.remove(os.path.join(source, archivo))
|
||||
|
||||
print(f" ✅ Sincronización completada.")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f" ❌ Error en sincronización: {e}")
|
||||
return False
|
||||
# ========================================================================
|
||||
Reference in new issue
Block a user