adding args parsing
This commit is contained in:
parent
7928a45ef5
commit
c0aa98fc4b
@ -1,5 +1,6 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
|
|
||||||
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
@ -16,9 +17,6 @@ from . import serverconf
|
|||||||
from . import vauptpassconf
|
from . import vauptpassconf
|
||||||
|
|
||||||
|
|
||||||
clientconf_file = './test.config.xml'
|
|
||||||
|
|
||||||
|
|
||||||
_url_re = re.compile(r'^(?P<proto>https?)://(?P<addr>[^:/]+)(:(?P<port>[0-9]+)?)?(?P<path>/.*)?$')
|
_url_re = re.compile(r'^(?P<proto>https?)://(?P<addr>[^:/]+)(:(?P<port>[0-9]+)?)?(?P<path>/.*)?$')
|
||||||
|
|
||||||
|
|
||||||
@ -33,9 +31,11 @@ class VaultSpawner(object):
|
|||||||
local = True
|
local = True
|
||||||
pid = None
|
pid = None
|
||||||
|
|
||||||
def __init__(self, conf, genconf = True):
|
def __init__(self, conf, genconf = True, clientconf_file = './test.config.xml', test_data = True, *args, **kwargs):
|
||||||
self.conf = conf
|
self.conf = conf
|
||||||
self.genconf = genconf
|
self.genconf = genconf
|
||||||
|
self.clientconf_file = clientconf_file
|
||||||
|
self.test_data = test_data # TODO
|
||||||
self._parseConf()
|
self._parseConf()
|
||||||
self._getCreds()
|
self._getCreds()
|
||||||
self._connCheck()
|
self._connCheck()
|
||||||
@ -82,12 +82,16 @@ class VaultSpawner(object):
|
|||||||
pass
|
pass
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
def _getClientConf(self, fpath = clientconf_file):
|
def _getClientConf(self, fpath = None):
|
||||||
|
if not fpath:
|
||||||
|
fpath = self.clientconf_file
|
||||||
clientconf = os.path.abspath(os.path.expanduser(fpath))
|
clientconf = os.path.abspath(os.path.expanduser(fpath))
|
||||||
self.client_conf = vauptpassconf.getConfig(clientconf)
|
self.client_conf = vauptpassconf.getConfig(clientconf)
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
def _getCreds(self, new_unseal = None, new_auth = None, write_conf = clientconf_file):
|
def _getCreds(self, new_unseal = None, new_auth = None, write_conf = None):
|
||||||
|
if not write_conf:
|
||||||
|
write_conf = self.clientconf_file
|
||||||
self._getClientConf()
|
self._getClientConf()
|
||||||
rewrite_xml = False
|
rewrite_xml = False
|
||||||
# TODO: finish regen of client conf and re-parse so new elements get added to both,
|
# TODO: finish regen of client conf and re-parse so new elements get added to both,
|
||||||
@ -187,6 +191,15 @@ class VaultSpawner(object):
|
|||||||
serverconf.genConf(confdict = self.conf)
|
serverconf.genConf(confdict = self.conf)
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
|
def cleanup(self):
|
||||||
|
storage = self.conf.get('storage', {}).get('file', {}).get('path')
|
||||||
|
if not storage:
|
||||||
|
return(None)
|
||||||
|
storage = os.path.abspath(os.path.expanduser(storage))
|
||||||
|
if os.path.isdir(storage):
|
||||||
|
shutil.rmtree(storage)
|
||||||
|
return(None)
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self._getProcess()
|
self._getProcess()
|
||||||
if self.is_running:
|
if self.is_running:
|
||||||
@ -215,3 +228,52 @@ class VaultSpawner(object):
|
|||||||
self._initChk()
|
self._initChk()
|
||||||
return(None)
|
return(None)
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
self._getProcess()
|
||||||
|
if self.cmd:
|
||||||
|
self.cmd.kill()
|
||||||
|
else:
|
||||||
|
os.kill(self.pid)
|
||||||
|
return(None)
|
||||||
|
|
||||||
|
|
||||||
|
def parseArgs():
|
||||||
|
args = argparse.ArgumentParser(description = 'Start/Stop a test Vault instance and ensure sample data exists')
|
||||||
|
args.add_argument('-n', '--no-test-data',
|
||||||
|
dest = 'test_data',
|
||||||
|
action = 'store_false',
|
||||||
|
help = ('If specified, do not populate with test data (if it doesn\'t exist)'))
|
||||||
|
args.add_argument('-d', '--delete',
|
||||||
|
dest = 'delete_storage',
|
||||||
|
action = 'store_false',
|
||||||
|
help = ('If specified, delete the storage backend first so a fresh instance is created'))
|
||||||
|
args.add_argument('-c', '--cleanup',
|
||||||
|
dest = 'cleanup',
|
||||||
|
action = 'store_true',
|
||||||
|
help = ('If specified, remove the storage backend when stopping'))
|
||||||
|
args.add_argument('-s', '--server-conf',
|
||||||
|
dest = 'conf',
|
||||||
|
help = ('Specify a path to an alternate server configuration file. '
|
||||||
|
'If not provided, a default one will be used'))
|
||||||
|
args.add_argument('-C', '--client-conf',
|
||||||
|
default = './test.config.xml',
|
||||||
|
dest = 'clientconf_file',
|
||||||
|
help = ('Path to a vaultpass.xml to use. Default: ./test.config.xml'))
|
||||||
|
args.add_argument('oper',
|
||||||
|
choices = ['start', 'stop'],
|
||||||
|
help = ('Operation to perform. One of: start, stop'))
|
||||||
|
return(args)
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
args = parseArgs().parse_args()
|
||||||
|
s = VaultSpawner(**vars(args))
|
||||||
|
if args.delete_storage:
|
||||||
|
s.cleanup()
|
||||||
|
if args.oper == 'start':
|
||||||
|
s.start()
|
||||||
|
elif args.oper == 'stop':
|
||||||
|
s.stop()
|
||||||
|
if args.cleanup:
|
||||||
|
s.cleanup()
|
||||||
|
return(None)
|
||||||
|
Reference in New Issue
Block a user