255 lines
7.6 KiB
Python
255 lines
7.6 KiB
Python
import subprocess
|
|
import sys
|
|
import os
|
|
|
|
from engine.FileLib import *
|
|
from engine.SystemLib import *
|
|
|
|
def ogChangeRepo():
|
|
SRCIMG = ""
|
|
NEWREPO = ""
|
|
REPO = ""
|
|
OGUNIT = ""
|
|
|
|
if len(sys.argv) < 2:
|
|
print("Usage: ogChangeRepo IPREPO [ OgUnit ]")
|
|
print("Example: ogChangeRepo 10.1.120.3")
|
|
print("Example: ogChangeRepo 10.1.120.3 cdc")
|
|
return
|
|
|
|
if sys.argv[1] == "help":
|
|
print("Usage: ogChangeRepo IPREPO [ OgUnit ]")
|
|
print("Example: ogChangeRepo 10.1.120.3")
|
|
print("Example: ogChangeRepo 10.1.120.3 cdc")
|
|
return
|
|
|
|
if len(sys.argv) >= 2:
|
|
NEWREPO = sys.argv[1]
|
|
|
|
# Opciones de montaje: lectura o escritura
|
|
subprocess.run(["mount", "|", "grep", "ogimages.*rw,"], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
|
|
RW = ",rw" if subprocess.returncode == 0 else ",ro"
|
|
|
|
# Si REPO tomamos el repositorio y la unidad organizativa actual
|
|
REPO = ogGetRepoIp()
|
|
OGUNIT = subprocess.run(["df", "|", "awk", "-F", " ", "'/ogimages/ {sub(\"//.*/ogimages\",\"\",$1); sub(\"/\",\"\",$1); print $1}'"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip()
|
|
|
|
# Parametros de entrada. Si $1 = "REPO" dejo el repositorio actual
|
|
if sys.argv[1].upper() == "REPO":
|
|
NEWREPO = REPO
|
|
|
|
# Si $1 y $2 son el repositorio y la OU actual me salgo
|
|
if NEWREPO == REPO and sys.argv[2] == OGUNIT:
|
|
return 0
|
|
|
|
subprocess.run(["source", "/scripts/functions"], shell=True)
|
|
subprocess.run(["source", "/scripts/ogfunctions"], shell=True)
|
|
subprocess.run(["umount", OGIMG])
|
|
|
|
if sys.argv[2] == "":
|
|
SRCIMG = "ogimages"
|
|
else:
|
|
SRCIMG = "ogimages/" + sys.argv[2]
|
|
|
|
subprocess.run(["eval", "$(grep \"OPTIONS=\" /scripts/ogfunctions)"])
|
|
|
|
ogEcho("session", "log", MSG_HELP_ogChangeRepo + " " + NEWREPO + " " + sys.argv[2].rstrip())
|
|
ogConnect(NEWREPO, ogprotocol, SRCIMG, OGIMG, RW)
|
|
|
|
# Si da error volvemos a montar el inicial
|
|
if subprocess.returncode != 0:
|
|
ogConnect(REPO, ogprotocol, SRCIMG, OGIMG, RW)
|
|
ogRaiseError("session", OG_ERR_REPO, NEWREPO)
|
|
return subprocess.returncode
|
|
|
|
def ogGetGroupDir():
|
|
REPO = ""
|
|
DIR = ""
|
|
GROUP = ""
|
|
|
|
if len(sys.argv) < 2:
|
|
ogHelp("ogGetGroupDir", "ogGetGroupDir str_repo", "ogGetGroupDir REPO ==> /opt/opengnsys/images/groups/Grupo1")
|
|
return
|
|
|
|
if len(sys.argv) == 1:
|
|
REPO = "REPO"
|
|
else:
|
|
REPO = sys.argv[1]
|
|
|
|
GROUP = ogGetGroupName()
|
|
if GROUP:
|
|
DIR = ogGetPath(REPO, "/groups/" + GROUP, stderr=subprocess.DEVNULL)
|
|
if os.path.isdir(DIR):
|
|
print(DIR)
|
|
|
|
return 0
|
|
|
|
def ogGetGroupName():
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetGroupName", "ogGetGroupName", "ogGetGroupName => Grupo1")
|
|
return
|
|
|
|
if "group" in globals() and group:
|
|
print(group)
|
|
|
|
return 0
|
|
|
|
def ogGetHostname():
|
|
HOST = ""
|
|
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetHostname", "ogGetHostname", "ogGetHostname => pc1")
|
|
return
|
|
|
|
# Tomar nombre de la variable HOSTNAME
|
|
HOST = os.getenv("HOSTNAME")
|
|
|
|
# Si no, tomar del DHCP, opción host-name
|
|
if not HOST:
|
|
with open("/var/lib/dhcp3/dhclient.leases", "r") as f:
|
|
for line in f:
|
|
if "option host-name" in line:
|
|
HOST = line.split('"')[1]
|
|
break
|
|
|
|
# Si no, leer el parámetro del kernel hostname
|
|
if not HOST:
|
|
with open("/proc/cmdline", "r") as f:
|
|
cmdline = f.read()
|
|
HOST = re.search(r"hostname=([^ ]+)", cmdline)
|
|
if HOST:
|
|
HOST = HOST.group(1)
|
|
|
|
if HOSTNAME != HOST:
|
|
os.environ["HOSTNAME"] = HOST
|
|
|
|
if HOST:
|
|
print(HOST)
|
|
|
|
def ogGetIpAddress():
|
|
IP = ""
|
|
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetIpAddress", "ogGetIpAddress", "ogGetIpAddress => 192.168.0.10")
|
|
return
|
|
|
|
if "IPV4ADDR" in os.environ:
|
|
IP = os.environ["IPV4ADDR"]
|
|
else:
|
|
# Obtener direcciones IP.
|
|
if "DEVICE" in os.environ:
|
|
IP = subprocess.run(["ip", "-o", "address", "show", "up", "dev", os.environ["DEVICE"]], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split()
|
|
else:
|
|
IP = subprocess.run(["ip", "-o", "address", "show", "up"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split()
|
|
|
|
IP = [addr.split("/")[0] for addr in IP if "inet" in addr]
|
|
|
|
# Mostrar solo la primera.
|
|
if IP:
|
|
print(IP[0])
|
|
|
|
return 0
|
|
|
|
def ogGetMacAddress():
|
|
MAC = ""
|
|
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetMacAddress", "ogGetMacAddress", "ogGetMacAddress => 00:11:22:33:44:55")
|
|
return
|
|
|
|
# Obtener direcciones Ethernet.
|
|
if "DEVICE" in os.environ:
|
|
MAC = subprocess.run(["ip", "-o", "link", "show", "up", "dev", os.environ["DEVICE"]], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split()
|
|
MAC = [addr.upper() for addr in MAC if "ether" in addr]
|
|
else:
|
|
MAC = subprocess.run(["ip", "-o", "link", "show", "up"], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().split()
|
|
MAC = [addr.upper() for addr in MAC if "ether" in addr and "lo" not in addr]
|
|
|
|
# Mostrar solo la primera.
|
|
if MAC:
|
|
print(MAC[0])
|
|
|
|
return 0
|
|
|
|
def ogGetNetInterface():
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetNetInterface", "ogGetNetInterface", "ogGetNetInterface => eth0")
|
|
return
|
|
|
|
if "DEVICE" in os.environ:
|
|
print(os.environ["DEVICE"])
|
|
|
|
return 0
|
|
|
|
def ogGetRepoIp():
|
|
# Variables locales.
|
|
SOURCE = ""
|
|
FSTYPE = ""
|
|
|
|
# Mostrar ayuda.
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetRepoIp", "ogGetRepoIp", "ogGetRepoIp => 192.168.0.2")
|
|
return
|
|
|
|
# Obtener direcciones IP, según el tipo de montaje.
|
|
output = subprocess.run(["findmnt", "-P", "-o", "SOURCE,FSTYPE", OGIMG], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip()
|
|
lines = output.split("\n")
|
|
for line in lines:
|
|
fields = line.split()
|
|
if len(fields) == 2:
|
|
if fields[1] == "nfs":
|
|
SOURCE = fields[0].split(":")[0]
|
|
elif fields[1] == "cifs":
|
|
SOURCE = fields[0].split("/")[2]
|
|
|
|
if SOURCE:
|
|
print(SOURCE)
|
|
|
|
return 0
|
|
|
|
def ogGetServerIp():
|
|
# Variables locales.
|
|
SOURCE = ""
|
|
FSTYPE = ""
|
|
|
|
# Mostrar ayuda.
|
|
if len(sys.argv) >= 2 and sys.argv[1] == "help":
|
|
ogHelp("ogGetServerIp", "ogGetServerIp", "ogGetServerIp => 192.168.0.2")
|
|
return
|
|
|
|
# Obtener direcciones IP, según el tipo de montaje.
|
|
output = subprocess.run(["findmnt", "-P", "-o", "SOURCE,FSTYPE", OGIMG], stdout=subprocess.PIPE, stderr=subprocess.DEVNULL).stdout.decode().strip()
|
|
lines = output.split("\n")
|
|
for line in lines:
|
|
fields = line.split()
|
|
if len(fields) == 2:
|
|
if fields[1] == "nfs":
|
|
SOURCE = fields[0].split(":")[0]
|
|
elif fields[1] == "cifs":
|
|
SOURCE = fields[0].split("/")[2]
|
|
|
|
if SOURCE:
|
|
print(SOURCE)
|
|
|
|
return 0
|
|
|
|
def ogMakeGroupDir():
|
|
REPO = ""
|
|
DIR = ""
|
|
GROUP = ""
|
|
|
|
if len(sys.argv) < 2:
|
|
ogHelp("ogMakeGroupDir", "ogMakeGroupDir str_repo", "ogMakeGroupDir", "ogMakeGroupDir REPO")
|
|
return
|
|
|
|
if len(sys.argv) == 1:
|
|
REPO = "REPO"
|
|
else:
|
|
REPO = sys.argv[1]
|
|
|
|
DIR = ogGetPath(REPO, "/groups/" + ogGetGroupName(), stderr=subprocess.DEVNULL)
|
|
if DIR:
|
|
subprocess.run(["mkdir", "-p", DIR], stderr=subprocess.DEVNULL)
|
|
|
|
return 0
|