ogclone-engine/client/interfaceAdm/Configurar.py

146 lines
5.0 KiB
Python

import os
import sys
import subprocess
# Load engine configurator from engine.cfg file.
# Carga el configurador del engine desde el fichero engine.cfg
og_engine_configurate = os.getenv('OGENGINECONFIGURATE')
if not og_engine_configurate:
with open('/opt/opengnsys/client/etc/engine.cfg') as f:
for line in f:
if '=' in line:
key, value = line.strip().split('=', 1)
os.environ[key] = value
print(f"{key}={value}")
# Clear temporary file used as log track by httpdlog
# Limpia los ficheros temporales usados como log de seguimiento para httpdlog
og_log_session = os.getenv('OGLOGSESSION')
og_log_command = os.getenv('OGLOGCOMMAND')
if og_log_session:
# Check if the file exists, if not create it
if not os.path.exists(og_log_session):
os.makedirs(os.path.dirname(og_log_session), exist_ok=True)
with open(og_log_session, 'w') as f:
f.write(" ")
else:
with open(og_log_session, 'w') as f:
f.write(" ")
print("og_log_command", og_log_command)
if og_log_command:
with open(og_log_command, 'w') as f:
f.write(" ")
with open(f"{og_log_command}.tmp", 'w') as f:
f.write(" ")
print("og_log_session", og_log_session)
# Registro de inicio de ejecución
def og_echo(log_type, message):
# Implement the logging function here
pass
print("os.getenv('MSG_INTERFACE_START')", os.getenv('MSG_INTERFACE_START'))
msg_interface_start = os.getenv('MSG_INTERFACE_START')
if msg_interface_start:
og_echo('log', f"session {msg_interface_start} {__name__} {' '.join(os.sys.argv[1:])}")
# Solo ejecutable por OpenGnsys Client.
path = os.getenv('PATH')
if path:
os.environ['PATH'] = f"{path}:{os.path.dirname(__name__)}"
prog = os.path.basename(__name__)
print("prog", prog)
# Captura de parámetros (se ignora el 1er parámetro y se eliminan espacios y tabuladores).
param = ''.join(sys.argv[2:]).replace(' ', '').replace('\t', '')
print("param", param)
# Activate browser to see progress
browser_command = ["/opt/opengnsys/bin/browser", "-qws", "http://localhost/cgi-bin/httpd-log.sh"]
coproc = subprocess.Popen(browser_command)
# Read the two blocks of parameters, separated by '!'
tbprm = param.split('!')
pparam = tbprm[0] # General disk parameters
sparam = tbprm[1] # Partitioning and formatting parameters
# Take disk and cache values, separated by '*'
tbprm = pparam.split('*')
for item in tbprm:
if '=' in item:
key, value = item.split('=', 1)
os.environ[key] = value
# Error if disk parameter (dis) is not defined
if 'dis' not in os.environ:
sys.exit(int(os.getenv('OG_ERR_FORMAT', 1)))
# Take partition distribution values, separated by '%'
cfg = [] # Configuration values
tbp = [] # Partition table
tbf = [] # Formatting table
tbprm = sparam.split('%')
maxp = 0
for item in tbprm:
cfg = item.split('*')
for c in cfg:
if '=' in c:
key, value = c.split('=', 1)
os.environ[key] = value
if os.getenv('cpt') != "CACHE":
tbp.append(f"{os.getenv('cpt')}:{os.getenv('tam')}")
if os.getenv('ope') == '1':
if os.getenv('cpt') not in ["EMPTY", "EXTENDED", "LINUX-LVM", "LVM", "ZPOOL"]:
tbf.append(os.getenv('sfi'))
maxp = max(maxp, int(os.getenv('par', 0)))
# Process
# Current cache size
cache_size = subprocess.check_output(["ogGetCacheSize"]).strip()
# Unmount all partitions and cache
subprocess.run(["ogUnmountAll", os.getenv('dis')], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
subprocess.run(["ogUnmountCache"])
# Delete partition table if not MSDOS
if subprocess.check_output(["ogGetPartitionTableType", "1"]).strip() != b'MSDOS':
subprocess.run(["ogDeletePartitionTable", os.getenv('dis')])
subprocess.run(["ogExecAndLog", "COMMAND", "ogUpdatePartitionTable", os.getenv('dis')])
subprocess.run(["ogCreatePartitionTable", os.getenv('dis'), "MSDOS"])
# Initialize cache
if "CACHE" in sparam:
subprocess.run(["ogExecAndLog", "COMMAND", "initCache", os.getenv('tch')])
# Define partitioning
subprocess.run(["ogExecAndLog", "COMMAND", "ogCreatePartitions", os.getenv('dis')] + tbp)
if subprocess.run(["ogExecAndLog", "COMMAND", "ogUpdatePartitionTable", os.getenv('dis')]).returncode != 0:
coproc.kill()
sys.exit(int(subprocess.check_output(["ogRaiseError", "session", "log", os.getenv('OG_ERR_GENERIC', '1'), f"ogCreatePartitions {os.getenv('dis')} {' '.join(tbp)}"])))
# Format partitions
for par in range(1, maxp + 1):
if tbf[par] == "CACHE":
if cache_size == os.getenv('tch'):
subprocess.run(["ogExecAndLog", "COMMAND", "ogFormatCache"])
elif tbf[par]:
if subprocess.run(["ogExecAndLog", "COMMAND", "ogFormatFs", os.getenv('dis'), str(par), tbf[par]]).returncode != 0:
coproc.kill()
sys.exit(int(subprocess.check_output(["ogRaiseError", "session", "log", os.getenv('OG_ERR_GENERIC', '1'), f"ogFormatFs {os.getenv('dis')} {par} {tbf[par]}"])))
retval = 0
subprocess.run(["ogEcho", "log", "session", f"{os.getenv('MSG_INTERFACE_END')} {retval}"])
# Return
coproc.kill()
sys.exit(0)