refs #1150 add a temporal ogConnect() and have ogChangeRepo() use it
parent
646d1da734
commit
b755de21be
|
@ -2,11 +2,28 @@ import subprocess
|
|||
import sys
|
||||
import os
|
||||
import json
|
||||
import re
|
||||
|
||||
import ogGlobals
|
||||
import SystemLib
|
||||
import FileLib
|
||||
|
||||
def _ogConnect_options():
|
||||
## the original bash code does: eval $(grep "OPTIONS=" /scripts/ogfunctions)
|
||||
## this is highly insecure but we need to keep it for now
|
||||
opt = subprocess.run (['grep', '-o', 'OPTIONS=.*', '/scripts/ogfunctions'], capture_output=True, text=True).stdout.strip()
|
||||
exec (opt, globals())
|
||||
return OPTIONS
|
||||
|
||||
## defined in /scripts/ogfunctions. We can't tackle that yet.
|
||||
## this is a quick implementation just to unblock development
|
||||
def _ogConnect (server, protocol, src, dst, options, readonly):
|
||||
if 'smb' != protocol: return None ## only supported value right now
|
||||
write_option = ',ro' if readonly else ',rw'
|
||||
options += write_option
|
||||
return not subprocess.run (['mount.cifs', f'//{server}/{src}', dst] + options.split()).returncode
|
||||
|
||||
|
||||
#/**
|
||||
# ogChangeRepo IPREPO [ OgUnit ]
|
||||
#@brief Cambia el repositorio para el recurso remoto images.
|
||||
|
@ -15,57 +32,48 @@ import FileLib
|
|||
#@return Cambio recurso remoto en OGIMG.
|
||||
#*/
|
||||
def ogChangeRepo(ip_repo, og_unit=None):
|
||||
ogprotocol = "cifs"
|
||||
ogprotocol = os.environ['ogprotocol'] or 'smb'
|
||||
|
||||
if og_unit:
|
||||
SystemLib.ogRaiseError ([], ogGlobals.OG_ERR_GENERIC, 'the og_unit parameter became unsupported')
|
||||
return None
|
||||
|
||||
try:
|
||||
rw_option = ",rw" if "rw" in subprocess.getoutput("mount | grep 'ogimages'") else ",ro"
|
||||
mount = subprocess.run (['mount'], capture_output=True, text=True).stdout
|
||||
ro = not not list (filter (lambda line: re.search (r'ogimages.*\bro,', line), mount.splitlines()))
|
||||
|
||||
current_repo = ogGetRepoIp()
|
||||
current_og_unit = subprocess.getoutput(
|
||||
"df | awk -F ' ' '/ogimages/ {sub(\"//.*/ogimages\",\"\",$1); sub(\"/\",\"\",$1); print $1}'"
|
||||
).strip()
|
||||
|
||||
new_repo = current_repo if ip_repo.upper() == "REPO" else ip_repo
|
||||
|
||||
if new_repo == current_repo and og_unit == current_og_unit:
|
||||
return 0
|
||||
if new_repo == current_repo: return True
|
||||
|
||||
subprocess.run(["umount", ogGlobals.OGIMG], check=True)
|
||||
|
||||
src_img = "ogimages" if not og_unit else f"ogimages/{og_unit}"
|
||||
|
||||
result = subprocess.run(
|
||||
["ogConnect", new_repo, ogprotocol, src_img, ogGlobals.OGIMG, rw_option],
|
||||
text=True,
|
||||
)
|
||||
|
||||
if result.returncode != 0:
|
||||
subprocess.run(
|
||||
["ogConnect", current_repo, ogprotocol, src_img, ogGlobals.OGIMG, rw_option],
|
||||
text=True,
|
||||
)
|
||||
SystemLib.ogEcho (['session', 'log'], 'info', f'{ogGlobals.lang.MSG_HELP_ogChangeRepo} {new_repo}')
|
||||
options = _ogConnect_options()
|
||||
if not _ogConnect (new_repo, ogprotocol, 'ogimages', ogGlobals.OGIMG, options, ro):
|
||||
_ogConnect (current_repo, ogprotocol, 'ogimages', ogGlobals.OGIMG, options, ro)
|
||||
SystemLib.ogRaiseError(
|
||||
"session",
|
||||
ogGlobals.OG_ERR_REPO,
|
||||
f"Error connecting to the new repository: {new_repo}",
|
||||
)
|
||||
return 1
|
||||
return False
|
||||
|
||||
SystemLib.ogEcho(
|
||||
"session",
|
||||
"log",
|
||||
f"Repository successfully changed to {new_repo} {og_unit or ''}".strip(),
|
||||
["session", "log"],
|
||||
'info',
|
||||
f"Repository successfully changed to {new_repo}".strip(),
|
||||
)
|
||||
|
||||
return 0
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
SystemLib.ogRaiseError(
|
||||
"session",
|
||||
ogGlobals.OG_ERR_FORMAT,
|
||||
ogGlobals.OG_ERR_GENERIC,
|
||||
f"Error executing ogChangeRepo: {e}",
|
||||
)
|
||||
return 1
|
||||
return None
|
||||
|
||||
#/**
|
||||
# ogGetGroupDir [ str_repo ]
|
||||
|
|
Loading…
Reference in New Issue