From 1464830b7887c88ce9a76c18837941362a49e78b Mon Sep 17 00:00:00 2001 From: Nathan Denny Date: Tue, 4 Jun 2024 04:18:06 -0400 Subject: [PATCH] allow for HPSS env variables in htar --- bin/bastion.py | 11 +++++++---- lib/Bastion/HPSS.py | 20 ++++++++++++++------ lib/Bastion/Site.py | 3 +++ 3 files changed, 24 insertions(+), 10 deletions(-) diff --git a/bin/bastion.py b/bin/bastion.py index 2d54aae..76fbe3f 100755 --- a/bin/bastion.py +++ b/bin/bastion.py @@ -107,13 +107,16 @@ def configured(self): def site(self, name): return Site(name).configured(self.conf) - def vault(self, name): + def vault(self, name, site = None): if ((name[0] == '{') and (name[-1] == '}')): name = name[1:-1] if name in self.conf['vaults']: protocol = self.conf['vaults'][name]['protocol'] if protocol == 'HPSS': - return Bastion.HPSS.Vault(name).configured(self.conf) + opts = { } + if site is not None: + opts['client'] = site.host + return Bastion.HPSS.Vault(name, **opts).configured(self.conf) else: raise NotImplementedError else: @@ -210,12 +213,12 @@ def do_export_asset_manifest(self, comargs, comdex): app = App().configured() #app.run( ) comdex = dict(enumerate(sys.argv[1:])) - fortress = app.vault('fortress') rusina = app.site('rusina') + fortress = app.vault('fortress', rusina) ark = ARK(comdex[2]) ds = rusina.asset(ark) fortress.provision(ark) - + #bastion site {site} backup #bastion zone {zone} backup diff --git a/lib/Bastion/HPSS.py b/lib/Bastion/HPSS.py index 906a5e9..5e0304a 100644 --- a/lib/Bastion/HPSS.py +++ b/lib/Bastion/HPSS.py @@ -320,7 +320,7 @@ def lsx(self, path = None): class Vault(Bastion.Model.Vault): def __init__(self, name, **kwargs): self.name = name - self.host = kwargs.get('host', socket.gethostname()) + self.server = kwargs.get('server', socket.gethostname()) self.login = kwargs.get('login', os.getlogin()) self.keytab = pathlib.Path( kwargs.get('keytab', "~/.private/hpss.unix.keytab") ).expanduser() self.root = kwargs.get('root', None) @@ -328,13 +328,14 @@ def __init__(self, name, **kwargs): self.xpath = pathlib.Path( kwargs.get('xpath', (self.hpath / 'bin' / 'hsi')) ) self.xhtar = self.hpath / 'bin' / 'htar' self._hsi = None + self.client = kwargs.get('client', socket.gethostname()) def configured(self, conf): confkey = "vaults.{}".format(self.name) if confkey in conf: - section = conf[confkey] - self.host = section['host'] - self.login = section['login'] + section = conf[confkey] + self.server = section['host'] + self.login = section['login'] if 'root' in section: self.root = pathlib.PurePosixPath( section['root'] ) return self @@ -436,8 +437,15 @@ def push(self, asset, **kwargs): 'localf': localf } - comargs = [str(opts['htar']), "-Hverify=1", "-c", "-v", "-f", "{site}/{zone}/{asset}/{blonde}.tar".format(**opts), "{localf}".format(**opts)] - proc = subprocess.run(comargs, capture_output = True, check = True) + exports = { + "HPSS_AUTH_METHOD": "keytab", + "HPSS_PRINCIPAL": self.login, + "HPSS_KEYTAB_PATH": str(self.keytab), + "HPSS_HOSTNAME": str(self.client) + } + + comargs = [str(opts['htar']), "-c", "-f", "{site}/{zone}/{asset}/{blonde}.tar".format(**opts), "-v", "-Hverify=1", "{localf}".format(**opts)] + proc = subprocess.run(comargs, capture_output = True, check = False, env = exports) stdout = proc.stdout.decode('utf-8') stderr = proc.stderr.decode('utf-8') flag = True if (proc.returncode == 0) else False diff --git a/lib/Bastion/Site.py b/lib/Bastion/Site.py index f5af769..e72a2b7 100644 --- a/lib/Bastion/Site.py +++ b/lib/Bastion/Site.py @@ -106,6 +106,9 @@ def configured(self, conf): if conf: self._configured = True condex = conf['sites'][self.name] + if 'host' in condex: + self.host = condex['host'] + if 'logging' in condex: self.logging.level = condex.get(asLogLevel, 'logging.level', logging.WARN)