X-Git-Url: http://xvm.mit.edu/gitweb/invirt/packages/invirt-base.git/blobdiff_plain/a397d9a4ae7892377e47497933aa0ed18667fea2..95eb488e71743cadb53e3d1af9e0d7ce5414ce9e:/files/usr/sbin/invirt-getconf diff --git a/files/usr/sbin/invirt-getconf b/files/usr/sbin/invirt-getconf index c468499..d503dea 100755 --- a/files/usr/sbin/invirt-getconf +++ b/files/usr/sbin/invirt-getconf @@ -1,4 +1,4 @@ -#!/usr/bin/env python2.5 +#!/usr/bin/env python """ invirt-getconf [-f FILE] KEY prints the configuration the option named KEY from @@ -19,39 +19,49 @@ from invirt.config import load from sys import argv, exit, stderr from optparse import OptionParser -class invirt_exception( Exception ): pass +class invirt_exception(Exception): pass -def main( argv ): +def main(argv): try: - parser = OptionParser() - parser.add_option('-f', '--file', default = '/etc/invirt/master.yaml', - help = 'the configuration file to read from') - options, args = parser.parse_args() + parser = OptionParser(usage = '%prog [options] key', + description = __doc__.strip().split('\n\n')[0]) + parser.add_option('-s', '--src', + default = '/etc/invirt/master.yaml', + help = 'the source YAML configuration file to read from') + parser.add_option('-c', '--cache', + default = '/var/lib/invirt/invirt.json', + help = 'path to the JSON cache') + parser.add_option('-r', '--refresh', + action = 'store_true', + help = 'force the cache to be regenerated') + opts, args = parser.parse_args() try: [key] = args - except: raise invirt_exception( __doc__ ) + except: raise invirt_exception(__doc__.strip()) - conf = load() + conf = load(opts.src, opts.cache, opts.refresh) components = key.split('.') - for i, component in enumerate( components ): - progress = lambda: '.'.join( components[:i] ) - if type( conf ) not in [ dict, list ]: + for i, component in enumerate(components): + progress = '.'.join(components[:i]) + if type(conf) not in [dict, list]: raise invirt_exception( - 'prematurely arrived at an atomic datum in the tree:\n' - '%s has no children' % progress() ) - if type( conf ) == list: - try: component = int( component ) + '%s: node has no children (atomic datum)' % progress) + if type(conf) == list: + try: component = int(component) except: raise invirt_exception( - '%s is a list, requires an integral path component ' - 'but got "%s"' % ( progress(), component ) ) - try: conf = conf[ component ] + '%s: node a list; integer path component required, ' + 'but got "%s"' % (progress, component)) + try: conf = conf[component] except KeyError: raise invirt_exception( - '"%s" not in "%s"' % ( component, progress() ) ) + '%s: key "%s" not found' % (progress, component)) + except IndexError: raise invirt_exception( + '%s: index %s out of range' % (progress, component)) print conf - except invirt_exception, ex: + except (invirt_exception, OSError), ex: print >> stderr, ex return 1 -if __name__ == '__main__': exit( main( argv ) ) +if __name__ == '__main__': + exit(main(argv)) # vim:et:sw=4:ts=4