forked from ungleich-public/cdist
		
	initial support for parallel running
Signed-off-by: Nico Schottelius <nico@kr.ethz.ch>
This commit is contained in:
		
					parent
					
						
							
								4aff176106
							
						
					
				
			
			
				commit
				
					
						e07328f569
					
				
			
		
					 1 changed files with 34 additions and 9 deletions
				
			
		
							
								
								
									
										43
									
								
								bin/cdist
									
										
									
									
									
								
							
							
						
						
									
										43
									
								
								bin/cdist
									
										
									
									
									
								
							| 
						 | 
					@ -23,6 +23,7 @@
 | 
				
			||||||
import argparse
 | 
					import argparse
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
import logging
 | 
					import logging
 | 
				
			||||||
 | 
					import multiprocessing
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
import subprocess
 | 
					import subprocess
 | 
				
			||||||
import shutil
 | 
					import shutil
 | 
				
			||||||
| 
						 | 
					@ -573,6 +574,15 @@ class Cdist:
 | 
				
			||||||
         self.target_host,
 | 
					         self.target_host,
 | 
				
			||||||
         duration.total_seconds())
 | 
					         duration.total_seconds())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					   def deploy_and_cleanup(self):
 | 
				
			||||||
 | 
					      """Do what is most often done: deploy & cleanup"""
 | 
				
			||||||
 | 
					      self.deploy_to()
 | 
				
			||||||
 | 
					      self.cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def foo():
 | 
				
			||||||
 | 
					   print("test")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if __name__ == "__main__":
 | 
					if __name__ == "__main__":
 | 
				
			||||||
   parser = argparse.ArgumentParser(description='cdist ' + VERSION)
 | 
					   parser = argparse.ArgumentParser(description='cdist ' + VERSION)
 | 
				
			||||||
   parser.add_argument('host', nargs='*', help='one or more hosts to operate on')
 | 
					   parser.add_argument('host', nargs='*', help='one or more hosts to operate on')
 | 
				
			||||||
| 
						 | 
					@ -587,13 +597,12 @@ if __name__ == "__main__":
 | 
				
			||||||
   parser.add_argument('-i', '--initial-manifest', 
 | 
					   parser.add_argument('-i', '--initial-manifest', 
 | 
				
			||||||
       help='Path to a cdist manifest or - to read from stdin',
 | 
					       help='Path to a cdist manifest or - to read from stdin',
 | 
				
			||||||
       dest='manifest', required=False)
 | 
					       dest='manifest', required=False)
 | 
				
			||||||
#   parser.add_argument('-p', '--parallel',
 | 
					   parser.add_argument('-p', '--parallel',
 | 
				
			||||||
#       help='Operate on multiple hosts in parallel',
 | 
					       help='Operate on multiple hosts in parallel',
 | 
				
			||||||
#       action='store_true', dest='parallel')
 | 
					       action='store_true', dest='parallel')
 | 
				
			||||||
#   parser.add_argument('-s', '--sequential',
 | 
					   parser.add_argument('-s', '--sequential',
 | 
				
			||||||
#       help='Operate on multiple hosts sequentially',
 | 
					       help='Operate on multiple hosts sequentially',
 | 
				
			||||||
#       action='store_false', dest='parallel')
 | 
					       action='store_false', dest='parallel')
 | 
				
			||||||
   
 | 
					 | 
				
			||||||
   parser.add_argument('-V', '--version', help='Show version',
 | 
					   parser.add_argument('-V', '--version', help='Show version',
 | 
				
			||||||
       action='version', version='%(prog)s ' + VERSION)
 | 
					       action='version', version='%(prog)s ' + VERSION)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -606,10 +615,26 @@ if __name__ == "__main__":
 | 
				
			||||||
      banner()
 | 
					      banner()
 | 
				
			||||||
      sys.exit(0)
 | 
					      sys.exit(0)
 | 
				
			||||||
   
 | 
					   
 | 
				
			||||||
 | 
					   process = {}
 | 
				
			||||||
 | 
					   time_start = datetime.datetime.now()
 | 
				
			||||||
   try:
 | 
					   try:
 | 
				
			||||||
      for host in args.host:
 | 
					      for host in args.host:
 | 
				
			||||||
         c = Cdist(host, initial_manifest=args.manifest, home=args.cdist_home)
 | 
					         c = Cdist(host, initial_manifest=args.manifest, home=args.cdist_home)
 | 
				
			||||||
         c.deploy_to()
 | 
					         if args.parallel:
 | 
				
			||||||
         c.cleanup()
 | 
					            log.info("Starting child process for %s", host)
 | 
				
			||||||
 | 
					            process[host] = multiprocessing.Process(target=c.deploy_and_cleanup)
 | 
				
			||||||
 | 
					            process[host].start()
 | 
				
			||||||
 | 
					            log.debug("After process for %s", host)
 | 
				
			||||||
 | 
					         else:
 | 
				
			||||||
 | 
					            c.deploy_and_cleanup()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if args.parallel:
 | 
				
			||||||
 | 
					         for p in process.keys():
 | 
				
			||||||
 | 
					            log.debug("Joining %s", p)
 | 
				
			||||||
 | 
					            process[p].join()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      time_end = datetime.datetime.now()
 | 
				
			||||||
 | 
					      log.info("Total processing time: %s", (time_end - time_start).total_seconds())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
   except KeyboardInterrupt:
 | 
					   except KeyboardInterrupt:
 | 
				
			||||||
       sys.exit(0)
 | 
					       sys.exit(0)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue