begin to implement subcommand handling
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								f4faff6b33
							
						
					
				
			
			
				commit
				
					
						5cbe34ee33
					
				
			
		
					 2 changed files with 61 additions and 40 deletions
				
			
		
							
								
								
									
										98
									
								
								bin/cdist
									
										
									
									
									
								
							
							
						
						
									
										98
									
								
								bin/cdist
									
										
									
									
									
								
							| 
						 | 
					@ -60,10 +60,6 @@ VERSION                    = "2.0.0"
 | 
				
			||||||
logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
 | 
					logging.basicConfig(level=logging.INFO, format='%(levelname)s: %(message)s')
 | 
				
			||||||
log = logging.getLogger()
 | 
					log = logging.getLogger()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def banner():
 | 
					 | 
				
			||||||
   """Guess what :-)"""
 | 
					 | 
				
			||||||
   print(BANNER)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TypeEmulator:
 | 
					class TypeEmulator:
 | 
				
			||||||
   def __init__(self, name):
 | 
					   def __init__(self, name):
 | 
				
			||||||
| 
						 | 
					@ -602,42 +598,13 @@ class Cdist:
 | 
				
			||||||
      self.deploy_to()
 | 
					      self.deploy_to()
 | 
				
			||||||
      self.cleanup()
 | 
					      self.cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def banner(*args):
 | 
				
			||||||
 | 
					   """Guess what :-)"""
 | 
				
			||||||
 | 
					   print(BANNER)
 | 
				
			||||||
 | 
					   sys.exit(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def foo():
 | 
					def config(*args, **kargs):
 | 
				
			||||||
   print("test")
 | 
					   """Configure remote system"""
 | 
				
			||||||
 | 
					 | 
				
			||||||
if __name__ == "__main__":
 | 
					 | 
				
			||||||
   parser = argparse.ArgumentParser(description='cdist ' + VERSION)
 | 
					 | 
				
			||||||
   parser.add_argument('host', nargs='*', help='one or more hosts to operate on')
 | 
					 | 
				
			||||||
   parser.add_argument('-b', '--banner',
 | 
					 | 
				
			||||||
       help='Show cdist banner',
 | 
					 | 
				
			||||||
       action='store_true', dest='banner')
 | 
					 | 
				
			||||||
   parser.add_argument('-c', '--cdist-home',
 | 
					 | 
				
			||||||
       help='Change cdist home (default: .. from bin directory)',
 | 
					 | 
				
			||||||
       action='store')
 | 
					 | 
				
			||||||
   parser.add_argument('-d', '--debug', help='Set log level to debug',
 | 
					 | 
				
			||||||
       action='store_true')
 | 
					 | 
				
			||||||
   parser.add_argument('-i', '--initial-manifest', 
 | 
					 | 
				
			||||||
       help='Path to a cdist manifest or - to read from stdin',
 | 
					 | 
				
			||||||
       dest='manifest', required=False)
 | 
					 | 
				
			||||||
   parser.add_argument('-p', '--parallel',
 | 
					 | 
				
			||||||
       help='Operate on multiple hosts in parallel',
 | 
					 | 
				
			||||||
       action='store_true', dest='parallel')
 | 
					 | 
				
			||||||
   parser.add_argument('-s', '--sequential',
 | 
					 | 
				
			||||||
       help='Operate on multiple hosts sequentially (default)',
 | 
					 | 
				
			||||||
       action='store_false', dest='parallel')
 | 
					 | 
				
			||||||
   parser.add_argument('-V', '--version', help='Show version',
 | 
					 | 
				
			||||||
       action='version', version='%(prog)s ' + VERSION)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   args = parser.parse_args(sys.argv[1:])
 | 
					 | 
				
			||||||
   log.debug(args)
 | 
					 | 
				
			||||||
   if args.debug:
 | 
					 | 
				
			||||||
       logging.root.setLevel(logging.DEBUG)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
   if args.banner:
 | 
					 | 
				
			||||||
      banner()
 | 
					 | 
				
			||||||
      sys.exit(0)
 | 
					 | 
				
			||||||
   
 | 
					 | 
				
			||||||
   process = {}
 | 
					   process = {}
 | 
				
			||||||
   try:
 | 
					   try:
 | 
				
			||||||
      if len(args.host) == 0:
 | 
					      if len(args.host) == 0:
 | 
				
			||||||
| 
						 | 
					@ -667,3 +634,56 @@ if __name__ == "__main__":
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   except KeyboardInterrupt:
 | 
					   except KeyboardInterrupt:
 | 
				
			||||||
       sys.exit(0)
 | 
					       sys.exit(0)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					   # Construct parser others can reuse
 | 
				
			||||||
 | 
					   parser = {}
 | 
				
			||||||
 | 
					   # Options _all_ parsers have in common
 | 
				
			||||||
 | 
					   parser['most'] = argparse.ArgumentParser(add_help=False)
 | 
				
			||||||
 | 
					   parser['most'].add_argument('-d', '--debug',
 | 
				
			||||||
 | 
					                              help='Set log level to debug',
 | 
				
			||||||
 | 
					                              action='store_true')
 | 
				
			||||||
 | 
					   parser['most'].add_argument('-V', '--version',
 | 
				
			||||||
 | 
					                              help='Show version',
 | 
				
			||||||
 | 
					                              action='version',
 | 
				
			||||||
 | 
					                              version='%(prog)s ' + VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # Main subcommand parser
 | 
				
			||||||
 | 
					   parser['main'] = argparse.ArgumentParser(description='cdist ' + VERSION)
 | 
				
			||||||
 | 
					   parser['sub'] = parser['main'].add_subparsers()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   parser['banner'] = parser['sub'].add_parser('banner')
 | 
				
			||||||
 | 
					#   parser['banner'].add_argument('all', nargs='*',
 | 
				
			||||||
 | 
					#       help='Show cdist banner')
 | 
				
			||||||
 | 
					   parser['banner'].set_defaults(func=banner)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   parser['config'] = parser['sub'].add_parser('config',
 | 
				
			||||||
 | 
					                                                aliases=['deploy'],
 | 
				
			||||||
 | 
					                                                parents=[parser['most']])
 | 
				
			||||||
 | 
					   parser['config'].add_argument('host', nargs='*',
 | 
				
			||||||
 | 
					      help='one or more hosts to operate on')
 | 
				
			||||||
 | 
					   parser['config'].add_argument('-c', '--cdist-home',
 | 
				
			||||||
 | 
					       help='Change cdist home (default: .. from bin directory)',
 | 
				
			||||||
 | 
					       action='store')
 | 
				
			||||||
 | 
					   parser['config'].add_argument('-i', '--initial-manifest', 
 | 
				
			||||||
 | 
					       help='Path to a cdist manifest or - to read from stdin',
 | 
				
			||||||
 | 
					       dest='manifest', required=False)
 | 
				
			||||||
 | 
					   parser['config'].add_argument('-p', '--parallel',
 | 
				
			||||||
 | 
					       help='Operate on multiple hosts in parallel',
 | 
				
			||||||
 | 
					       action='store_true', dest='parallel')
 | 
				
			||||||
 | 
					   parser['config'].add_argument('-s', '--sequential',
 | 
				
			||||||
 | 
					       help='Operate on multiple hosts sequentially (default)',
 | 
				
			||||||
 | 
					       action='store_false', dest='parallel')
 | 
				
			||||||
 | 
					   parser['config'].set_defaults(func=config)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   args = parser['main'].parse_args(sys.argv[1:])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   # Most subcommands to have --debug, so handle it here
 | 
				
			||||||
 | 
					   if 'debug' in args:
 | 
				
			||||||
 | 
					      if args.debug:
 | 
				
			||||||
 | 
					         logging.root.setLevel(logging.DEBUG)
 | 
				
			||||||
 | 
					   log.debug(args)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   args.func(args)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,8 @@
 | 
				
			||||||
For 2.0.0:
 | 
					For 2.0.0:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   - support subcommands!
 | 
					   - support subcommands!
 | 
				
			||||||
      deploy? config?
 | 
					      config  (deploy)
 | 
				
			||||||
 | 
					      install (provision)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
--------------------------------------------------------------------------------
 | 
					--------------------------------------------------------------------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue