Use Paramiko and Gitpython for backups
parent
ef41ec5a89
commit
6e046b6dee
|
@ -10,6 +10,7 @@ from flask import Flask, request
|
|||
from flask_executor import Executor
|
||||
import subprocess
|
||||
from flask import stream_with_context, Response
|
||||
import paramiko
|
||||
|
||||
repositories_base_path = "/opt/opengnsys/images"
|
||||
|
||||
|
@ -22,17 +23,23 @@ executor = Executor(app)
|
|||
tasks = {}
|
||||
|
||||
|
||||
|
||||
def do_repo_backup(repo, params):
|
||||
|
||||
user = params["ssh_user"]
|
||||
server = params["ssh_server"]
|
||||
filename = params["filename"]
|
||||
gitrepo = git.Repo(f"{repositories_base_path}/{repo}.git")
|
||||
|
||||
os.chdir(repositories_base_path)
|
||||
os.chdir(f"{repo}.git")
|
||||
ssh = paramiko.SSHClient()
|
||||
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
||||
|
||||
subprocess.run(f"git archive --format=tar HEAD | ssh {user}@{server} -T \"cat > {filename}\"", shell=True, check=True)
|
||||
#sleep(10)
|
||||
ssh.connect(params["ssh_server"], params["ssh_port"], params["ssh_user"])
|
||||
sftp = ssh.open_sftp()
|
||||
|
||||
|
||||
with sftp.file(params["filename"], mode='wb+') as remote_file:
|
||||
gitrepo.archive(remote_file, format="tar.gz")
|
||||
|
||||
|
||||
return True
|
||||
|
||||
def do_repo_sync(repo, params):
|
||||
gitrepo = git.Repo(f"{repositories_base_path}/{repo}.git")
|
||||
|
@ -137,9 +144,9 @@ def backup_repo(repo):
|
|||
if data is None:
|
||||
return jsonify({"error" : "Parameters missing"}), 400
|
||||
|
||||
dest_server = data["ssh_server"]
|
||||
dest_user = data["ssh_user"]
|
||||
dest_file = data["filename"]
|
||||
|
||||
if not "ssh_port" in data:
|
||||
data["ssh_port"] = 22
|
||||
|
||||
|
||||
future = executor.submit(do_repo_backup, repo, data)
|
||||
|
|
|
@ -1,17 +1,25 @@
|
|||
bcrypt==4.0.1
|
||||
cffi==1.15.1
|
||||
click==8.0.4
|
||||
colorterm==0.3
|
||||
contextvars==2.4
|
||||
cryptography==40.0.2
|
||||
dataclasses==0.8
|
||||
Flask==2.0.3
|
||||
Flask-Executor==1.0.0
|
||||
gitdb==4.0.9
|
||||
GitPython==3.1.20
|
||||
immutables==0.19
|
||||
importlib-metadata==4.8.3
|
||||
itsdangerous==2.0.1
|
||||
Jinja2==3.0.3
|
||||
libarchive==0.4.7
|
||||
MarkupSafe==2.0.1
|
||||
nose==1.3.7
|
||||
paramiko==3.5.0
|
||||
pkg_resources==0.0.0
|
||||
pycparser==2.21
|
||||
PyNaCl==1.5.0
|
||||
smmap==5.0.0
|
||||
termcolor==1.1.0
|
||||
typing_extensions==4.1.1
|
||||
|
|
Loading…
Reference in New Issue