refs #2363 Reduce number of required dependencies
parent
83b0fd7c03
commit
037ac63c97
183
api/repo_api.py
183
api/repo_api.py
|
|
@ -56,11 +56,10 @@ config_file = '/opt/opengnsys/ogrepository/etc/ogAdmRepo.cfg'
|
||||||
|
|
||||||
REPOSITORIES_BASE_PATH = "/opt/opengnsys/ogrepository/oggit/git/"
|
REPOSITORIES_BASE_PATH = "/opt/opengnsys/ogrepository/oggit/git/"
|
||||||
OGGIT_USER = "oggit"
|
OGGIT_USER = "oggit"
|
||||||
|
OGGIT_FORGEJO_PORT = 3100
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
import git
|
import git
|
||||||
import pkgutil
|
|
||||||
import importlib
|
|
||||||
import paramiko
|
import paramiko
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1603,7 +1602,7 @@ def send_p2p():
|
||||||
"success": False,
|
"success": False,
|
||||||
"error": error_message
|
"error": error_message
|
||||||
}), 500
|
}), 500
|
||||||
|
|
||||||
# Ejecutamos los scripts "runTorrentSeeder.py", que no reciben parámetros.
|
# Ejecutamos los scripts "runTorrentSeeder.py", que no reciben parámetros.
|
||||||
|
|
||||||
journal.send("Running script 'runTorrentSeeder.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send("Running script 'runTorrentSeeder.py'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
@ -1614,7 +1613,7 @@ def send_p2p():
|
||||||
sleep(10)
|
sleep(10)
|
||||||
seeder_running = search_process('aria2c', f"{param_dict['name']}.img.torrent") # El seeder se ejecuta con "aria2c" y el nombre de la imagen como parámetro
|
seeder_running = search_process('aria2c', f"{param_dict['name']}.img.torrent") # El seeder se ejecuta con "aria2c" y el nombre de la imagen como parámetro
|
||||||
|
|
||||||
|
|
||||||
# Evaluamos las comprobaciones anteriores, para devolver la respuesta que corresponda:
|
# Evaluamos las comprobaciones anteriores, para devolver la respuesta que corresponda:
|
||||||
if seeder_running:
|
if seeder_running:
|
||||||
journal.send("'runTorrentSeeder.py' results OK (ReturnCodes: None), and processes running", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send("'runTorrentSeeder.py' results OK (ReturnCodes: None), and processes running", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
@ -2220,6 +2219,48 @@ def rename_image():
|
||||||
# -----------------------------------------------------------
|
# -----------------------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
def git_forgejo_post_command(url, json_data):
|
||||||
|
token = ""
|
||||||
|
with open("/opt/opengnsys/etc/ogGitApiToken.cfg", "r", encoding='utf-8') as token_file:
|
||||||
|
token = token_file.read().strip()
|
||||||
|
|
||||||
|
if url[0] == "/":
|
||||||
|
url = url[1:]
|
||||||
|
|
||||||
|
url = f"http://localhost:{OGGIT_FORGEJO_PORT}/{url}"
|
||||||
|
|
||||||
|
journal.send(f"Executing forgejo POST to {url} with data {json_data}...", PRIORITY=journal.LOG_DEBUG, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
||||||
|
r = requests.post(
|
||||||
|
url,
|
||||||
|
json = json_data,
|
||||||
|
headers = { 'Authorization' : f"token {token}" },
|
||||||
|
timeout = 60
|
||||||
|
)
|
||||||
|
|
||||||
|
journal.send(f"Request status was {r.status_code}, content {r.content}", PRIORITY=journal.LOG_DEBUG, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
||||||
|
return r.status_code, r.content.decode('utf-8')
|
||||||
|
|
||||||
|
def git_forgejo_create_repo(repo):
|
||||||
|
return git_forgejo_post_command("/api/v1/user/repos",
|
||||||
|
{
|
||||||
|
"auto_init" : False,
|
||||||
|
"default_branch" : "main",
|
||||||
|
"description" : "",
|
||||||
|
"name" : repo,
|
||||||
|
"private" : False
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
def git_forgejo_add_sshkey(pubkey, description = ""):
|
||||||
|
return git_forgejo_post_command("/api/v1/user/keys",
|
||||||
|
{
|
||||||
|
"key" : pubkey,
|
||||||
|
"read_only" : False,
|
||||||
|
"title" : description
|
||||||
|
})
|
||||||
|
|
||||||
def git_compact_repository_task(repo, job_id):
|
def git_compact_repository_task(repo, job_id):
|
||||||
journal.send("Running function 'git_compact_repository_task'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send("Running function 'git_compact_repository_task'...", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
||||||
|
|
@ -2289,40 +2330,6 @@ def git_backup_repository_task(repo, params, job_id):
|
||||||
journal.send(f"Calling function 'recall_ogcore' (JOB_ID: {job_id}, SUCCESS: True)", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send(f"Calling function 'recall_ogcore' (JOB_ID: {job_id}, SUCCESS: True)", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
recall_ogcore(data)
|
recall_ogcore(data)
|
||||||
|
|
||||||
|
|
||||||
def git_add_sshkey_task(oglive, description, job_id):
|
|
||||||
module = _load_installer()
|
|
||||||
print(f"Got {module}")
|
|
||||||
OpengnsysGitInstaller = getattr(module, 'OpengnsysGitInstaller')
|
|
||||||
installer = OpengnsysGitInstaller()
|
|
||||||
|
|
||||||
results = installer.add_ssh_key_from_squashfs(oglive_file = oglive)
|
|
||||||
keys_added = 0
|
|
||||||
keys_existed = 0
|
|
||||||
keys_failed = 0
|
|
||||||
|
|
||||||
for status, message in results:
|
|
||||||
if status == 200 or status == 201:
|
|
||||||
keys_added = keys_added + 1
|
|
||||||
elif status == 422:
|
|
||||||
keys_existed = keys_existed + 1
|
|
||||||
else:
|
|
||||||
keys_failed = keys_failed + 1
|
|
||||||
journal.send(f"Unrecognized reply from forgejo: code {status}, content {message}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
|
||||||
|
|
||||||
|
|
||||||
data = {
|
|
||||||
'job_id': job_id,
|
|
||||||
'keys_added' : keys_added,
|
|
||||||
'keys_failed' : keys_failed,
|
|
||||||
'keys_existed' : keys_existed,
|
|
||||||
'output' : message
|
|
||||||
}
|
|
||||||
|
|
||||||
journal.send(f"Calling function 'recall_ogcore' (JOB_ID: {job_id}, SUCCESS: True)", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
|
||||||
recall_ogcore(data)
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/ogrepository/v1/git/repositories", methods=['GET'])
|
@app.route("/ogrepository/v1/git/repositories", methods=['GET'])
|
||||||
def git_list_repositories():
|
def git_list_repositories():
|
||||||
"""
|
"""
|
||||||
|
|
@ -2369,42 +2376,6 @@ def git_list_repositories():
|
||||||
"repositories": repos
|
"repositories": repos
|
||||||
}), 200
|
}), 200
|
||||||
|
|
||||||
def _load_module(module_name):
|
|
||||||
# module = importlib.util.find_spec(module_name)
|
|
||||||
module = importlib.import_module(module_name)
|
|
||||||
|
|
||||||
if module is not None:
|
|
||||||
journal.send(f"Module {module_name} loaded successfully. Got {module}", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
return module
|
|
||||||
|
|
||||||
journal.send(f"Module {module_name} failed to load, not found", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
return False
|
|
||||||
|
|
||||||
def _load_installer():
|
|
||||||
|
|
||||||
journal.send(f"Loading oggit installer module", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
|
|
||||||
script_dir = os.path.dirname(os.path.realpath(__file__))
|
|
||||||
|
|
||||||
system_bin_path = '/opt/opengnsys/ogrepository/oggit/bin/'
|
|
||||||
system_lib_path = '/opt/opengnsys/ogrepository/oggit/lib/'
|
|
||||||
devel_lib_path = os.path.join(script_dir, "../../oggit/installer")
|
|
||||||
|
|
||||||
if devel_lib_path not in sys.path and os.path.isdir(devel_lib_path):
|
|
||||||
journal.send(f"Using {devel_lib_path} development library path", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
sys.path.append(devel_lib_path)
|
|
||||||
|
|
||||||
if system_bin_path not in sys.path:
|
|
||||||
journal.send(f"Using {system_bin_path} system library path", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
sys.path.append(system_bin_path)
|
|
||||||
|
|
||||||
if system_lib_path not in sys.path:
|
|
||||||
journal.send(f"Using {system_lib_path} system library path", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="oggit-api_DEBUG")
|
|
||||||
sys.path.append(system_lib_path)
|
|
||||||
|
|
||||||
return _load_module("opengnsys_git_installer")
|
|
||||||
|
|
||||||
|
|
||||||
@app.route("/ogrepository/v1/git/repositories", methods=['POST'])
|
@app.route("/ogrepository/v1/git/repositories", methods=['POST'])
|
||||||
def git_create_repository():
|
def git_create_repository():
|
||||||
"""
|
"""
|
||||||
|
|
@ -2434,11 +2405,7 @@ def git_create_repository():
|
||||||
journal.send(f"Can't create repository {repo}, already exists at {repo_path}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send(f"Can't create repository {repo}, already exists at {repo_path}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
return jsonify({"status": "Repository already exists"}), 409
|
return jsonify({"status": "Repository already exists"}), 409
|
||||||
|
|
||||||
module = _load_installer()
|
ret = git_forgejo_create_repo(repo)
|
||||||
print(f"Got {module}")
|
|
||||||
OpengnsysGitInstaller = getattr(module, 'OpengnsysGitInstaller')
|
|
||||||
installer = OpengnsysGitInstaller()
|
|
||||||
installer.add_forgejo_repo(repo)
|
|
||||||
|
|
||||||
journal.send(f"Repository {repo} created", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send(f"Repository {repo} created", PRIORITY=journal.LOG_INFO, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
||||||
|
|
@ -2879,49 +2846,33 @@ def git_add_sshkey():
|
||||||
if not "description" in data:
|
if not "description" in data:
|
||||||
data["description"] = ""
|
data["description"] = ""
|
||||||
|
|
||||||
if not ("ssh_key" in data or "oglive" in data):
|
if not ("ssh_key" in data ):
|
||||||
journal.send(f"Can't add SSH keys, either ssh_key or oglive is required", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
journal.send(f"Can't add SSH keys, ssh_key is required", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
return jsonify({"error" : "Parameters missing, specify ssh_key or oglive"}), 400
|
return jsonify({"error" : "Parameters missing, specify ssh_key or oglive"}), 400
|
||||||
|
|
||||||
|
status, content = git_forgejo_add_sshkey(data["ssh_key"], data["description"])
|
||||||
|
message = "Result unrecognized"
|
||||||
|
success = False
|
||||||
|
httpcode = 500
|
||||||
|
|
||||||
|
if status == 200 or status == 201:
|
||||||
module = _load_installer()
|
message = "SSH key added"
|
||||||
print(f"Got {module}")
|
success = True
|
||||||
OpengnsysGitInstaller = getattr(module, 'OpengnsysGitInstaller')
|
httpcode = 200
|
||||||
installer = OpengnsysGitInstaller()
|
elif status == 422:
|
||||||
|
message = "SSH key already existed"
|
||||||
if "oglive" in data:
|
success = True
|
||||||
job_id = f"GitSshKey_{''.join(random.choice('0123456789abcdef') for char in range(8))}"
|
httpcode = 200
|
||||||
threading.Thread(target=git_add_sshkey_task, args=(data["oglive"], data["description"], job_id)).start()
|
|
||||||
return jsonify({
|
|
||||||
"success": True,
|
|
||||||
"output": "Extracting key from ogLive...",
|
|
||||||
"job_id": job_id
|
|
||||||
}), 200
|
|
||||||
else:
|
else:
|
||||||
status, content = installer.add_forgejo_sshkey(data["ssh_key"], data["description"])
|
message = "Unrecognized reply from forgejo"
|
||||||
message = "Result unrecognized"
|
|
||||||
success = False
|
success = False
|
||||||
httpcode = 500
|
httpcode = status
|
||||||
|
journal.send(f"Unrecognized reply from forgejo: code {status}, content {content}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
||||||
|
|
||||||
if status == 200 or status == 201:
|
return jsonify({
|
||||||
message = "SSH key added"
|
"success": success,
|
||||||
success = True
|
"output": message,
|
||||||
httpcode = 200
|
}), httpcode
|
||||||
elif status == 422:
|
|
||||||
message = "SSH key already existed"
|
|
||||||
success = True
|
|
||||||
httpcode = 200
|
|
||||||
else:
|
|
||||||
message = "Unrecognized reply from forgejo"
|
|
||||||
success = False
|
|
||||||
httpcode = status
|
|
||||||
journal.send(f"Unrecognized reply from forgejo: code {status}, content {content}", PRIORITY=journal.LOG_ERR, SYSLOG_IDENTIFIER="ogrepo-api_DEBUG")
|
|
||||||
|
|
||||||
return jsonify({
|
|
||||||
"success": success,
|
|
||||||
"output": message,
|
|
||||||
}), httpcode
|
|
||||||
|
|
||||||
|
|
||||||
# --------------------------------------------------------------------------------------------
|
# --------------------------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,17 @@
|
||||||
|
ogrepository (1.1.4) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* refs #2363 Reduce number of required dependencies
|
||||||
|
|
||||||
|
-- OpenGnsys <opengnsys@opengnsys.com> Tue, 30 Jun 2025 15:50:11 +0000
|
||||||
|
|
||||||
|
ogrepository (1.1.3) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
|
* refs #2317 Fix performance problems, remove stats
|
||||||
|
* refs #2298 Add commmits endpoint
|
||||||
|
|
||||||
|
-- OpenGnsys <opengnsys@opengnsys.com> Tue, 30 Jun 2025 15:50:11 +0000
|
||||||
|
|
||||||
|
|
||||||
ogrepository (1.1.2) UNRELEASED; urgency=medium
|
ogrepository (1.1.2) UNRELEASED; urgency=medium
|
||||||
|
|
||||||
* Fix path handling when there are no repositories
|
* Fix path handling when there are no repositories
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue