From 71ed728b4adf68ab3460e309d012554af46216d5 Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Fri, 7 Oct 2011 18:14:17 +0200 Subject: [PATCH] move parallel code to main binary, allow branching out on install and config Signed-off-by: Nico Schottelius --- bin/cdist | 40 ++++++++++++++++++++++++++++++++++++++-- lib/cdist/config.py | 27 --------------------------- 2 files changed, 38 insertions(+), 29 deletions(-) diff --git a/bin/cdist b/bin/cdist index 7d2c035b..1b8b4346 100755 --- a/bin/cdist +++ b/bin/cdist @@ -81,12 +81,12 @@ def commandline(): # Config parser['config'] = parser['sub'].add_parser('config', parents=[parser['loglevel'], parser['configinstall']]) - parser['config'].set_defaults(func=cdist.config.config) + parser['config'].set_defaults(func=config) # Install parser['install'] = parser['sub'].add_parser('install', parents=[parser['loglevel'], parser['configinstall']]) - parser['install'].set_defaults(func=cdist.install.install) + parser['install'].set_defaults(func=install) for p in parser: parser[p].epilog = "Get cdist at http://www.nico.schottelius.org/software/cdist/" @@ -102,6 +102,42 @@ def commandline(): log.debug(args) args.func(args) +def config(args): + configinstall(args, mode=cdist.config.Config) + +def install(args): + configinstall(args, mode=cdist.install.Install) + +def configinstall(args, mode): + """Configure or install remote system""" + process = {} + + time_start = datetime.datetime.now() + + os.environ['__remote_exec'] = "ssh -o User=root -q" + os.environ['__remote_copy'] = "scp -o User=root -q" + + for host in args.host: + c = mode(host, initial_manifest=args.manifest, base_path=args.cdist_home, debug=args.debug) + if args.parallel: + log.debug("Creating child process for %s", host) + process[host] = multiprocessing.Process(target=c.deploy_and_cleanup) + process[host].start() + else: + c.deploy_and_cleanup() + + if args.parallel: + for p in process.keys(): + log.debug("Joining process %s", p) + process[p].join() + + # FIXME: error handling for parallel mode! + + time_end = datetime.datetime.now() + log.info("Total processing time for %s host(s): %s", len(args.host), + (time_end - time_start).total_seconds()) + + if __name__ == "__main__": try: logging.basicConfig(format='%(levelname)s: %(message)s') diff --git a/lib/cdist/config.py b/lib/cdist/config.py index 71ce14ed..782c88a1 100644 --- a/lib/cdist/config.py +++ b/lib/cdist/config.py @@ -31,30 +31,3 @@ log = logging.getLogger(__name__) class Config(cdist.config_install.ConfigInstall): pass - -def config(args): - """Configure remote system""" - process = {} - - time_start = datetime.datetime.now() - - os.environ['__remote_exec'] = "ssh -o User=root -q" - os.environ['__remote_copy'] = "scp -o User=root -q" - - for host in args.host: - c = Config(host, initial_manifest=args.manifest, base_path=args.cdist_home, debug=args.debug) - if args.parallel: - log.debug("Creating child process for %s", host) - process[host] = multiprocessing.Process(target=c.deploy_and_cleanup) - process[host].start() - else: - c.deploy_and_cleanup() - - if args.parallel: - for p in process.keys(): - log.debug("Joining process %s", p) - process[p].join() - - time_end = datetime.datetime.now() - log.info("Total processing time for %s host(s): %s", len(args.host), - (time_end - time_start).total_seconds())