def main(argv): prependString = "" replace_vms = False esxi_file = "esxi_config.json" try: opts, args = getopt.getopt(argv[1:], "c:hp:r", ["prependString="]) except getopt.GetoptError: print argv[0] + ' -n <numProcessors>' sys.exit(2) for opt, arg in opts: if opt == '-h': print argv[0] + " [options]" print '-c <file>, --esxiConfig=<file> use alternate hypervisor config file' print '-p <string>, --prependString=<file> prepend string to the beginning of VM names' print '-r, --replace replace existing msf_host' sys.exit() elif opt in ("-c", "--esxiConfig"): esxi_file = arg elif opt in ("-p", "--prependString"): prependString = arg elif opt in ("-r", "--replace"): replace_vms = True targets = glob.glob('msf_host_packer.json') vm_server = serverHelper(esxi_file) os.chdir("boxcutter/ubuntu") for target in tqdm(targets): build_base(target, replace_existing=replace_vms, vmServer=vm_server, prependString=prependString) return True
def main(argv): prependString = "" replace_vms = False esxi_file = "esxi_config.json" try: opts, args = getopt.getopt(argv[1:], "c:hp:r", ["prependString="]) except getopt.GetoptError: print argv[0] + ' -n <numProcessors>' sys.exit(2) for opt, arg in opts: if opt == '-h': print argv[0] + " [options]" print '-c <file>, --esxiConfig=<file> use alternate hypervisor config file' print '-p <string>, --prependString=<file> prepend string to the beginning of VM names' print '-r, --replace replace existing msf_host' sys.exit() elif opt in ("-c", "--esxiConfig"): esxi_file = arg elif opt in ("-p", "--prependString"): prependString = arg elif opt in ("-r", "--replace"): replace_vms = True vm_server = serverHelper(esxi_file) os.chdir("boxcutter") for os_dir in os.listdir("."): if os.path.isdir(os.path.join(".", os_dir)): common_var_file = os.path.join("..", "linux_vars", os_dir + "_common.json") with open(os.path.join("", common_var_file)) as common_var_source: common_vars = json.load(common_var_source) os.chdir(os.path.join("", os_dir)) packer_file = os_dir + ".json" targets = [] for pattern in common_vars['file_patterns']: targets.extend(glob.glob(pattern)) print "\nBuilding " + str(len(targets)) + " " + os_dir.capitalize() + " baselines:" for target in tqdm(targets): build_base(target, common_vars, packer_file, replace_existing=replace_vms, vmServer=vm_server, prependString=prependString) os.chdir("../") return True
def main(argv): num_processors = 1 prependString = "" replace_vms = False try: opts, args = getopt.getopt(argv[1:], "c:hn:p:r", ["numProcessors="]) except getopt.GetoptError: print argv[0] + ' -n <numProcessors>' sys.exit(2) for opt, arg in opts: if opt == '-h': print argv[0] + " [options]" print '-c <file>, --esxiConfig=<file> use alternate hypervisor config file' print '-n <int>, --numProcessors=<int> execute <int> parallel builds' print '-p <string>, --prependString=<file> prepend string to the beginning of VM names' print '-r, --replace replace existing baselines' sys.exit() elif opt in ("-n", "--numProcessors"): num_processors = int(arg) elif opt in ("-c", "--esxiConfig"): global esxi_file esxi_file = arg elif opt in ("-p", "--prependString"): prependString = arg elif opt in ("-r", "--replace"): replace_vms = True with open("iso_list.json", 'r') as iso_config: iso_map = json.load(iso_config) original_sigint_handler = signal.signal(signal.SIGINT, signal.SIG_IGN) pool = None try: vmServer = serverHelper(esxi_file) if replace_vms and vmServer.get_esxi() is not None: print "removing baselines" for file_name in tqdm(iso_map): remove_baseline(vmServer, file_name, prependString) print "generating baselines" if num_processors > 1: pool = multiprocessing.Pool(num_processors) signal.signal(signal.SIGINT, original_sigint_handler) results = [] for file_name in iso_map: pool.apply_async(build_base, [ file_name, iso_map[file_name], replace_vms, vmServer, prependString ], callback=results.append) with tqdm(total=len(iso_map)) as progress: current_len = 0 while len(results) < len(iso_map): if (len(results) > current_len): progress.update(len(results) - current_len) current_len = len(results) else: progress.refresh() time.sleep(5) progress.update(len(results)) else: signal.signal(signal.SIGINT, original_sigint_handler) for file_name in tqdm(iso_map): build_base(file_name, iso_map[file_name], replace_vms, vmServer, prependString) except KeyboardInterrupt: print("User cancel received, terminating all builds") if pool is not None: pool.terminate() else: print("Build complete") if pool is not None: pool.close() pool.join()