#!/usr/bin/env python2.5 """ invirt-getconf [-f FILE] KEY prints the configuration the option named KEY from the invirt configuration file FILE. Keys are dot-separated paths into the YAML configuration tree. List indexes (0-based) are also treated as path components. (Due to this path language, certain restrictions are placed on the keys used in the YAML configuration, e.g. they cannot contain dots.) Examples: invirt-getconf db.uri invirt-getconf authn.0.type """ from invirt.config import load from sys import argv, exit, stderr from optparse import OptionParser class invirt_exception( Exception ): pass 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() try: [key] = args except: raise invirt_exception( __doc__ ) conf = load() components = key.split('.') for i, component in enumerate( components ): progress = lambda: '.'.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 ) except: raise invirt_exception( '%s is a list, requires an integral path component ' 'but got "%s"' % ( progress(), component ) ) try: conf = conf[ component ] except KeyError: raise invirt_exception( '"%s" not in "%s"' % ( component, progress() ) ) print conf except invirt_exception, ex: print >> stderr, ex return 1 if __name__ == '__main__': exit( main( argv ) ) # vim:et:sw=4:ts=4