def do_remove(loglevel=logging.DEBUG): """Remove modules by calling remove method on those configured for removal. """ shutit = shutit_global.shutit cfg = shutit.cfg # Now get the run_order keys in order and go. shutit.log('PHASE: remove', level=loglevel) shutit.pause_point('\nNow removing any modules that need removing', print_input=False, level=3) # Login at least once to get the exports. for module_id in shutit_util.module_ids(): module = shutit.shutit_map[module_id] shutit.log('considering whether to remove: ' + module_id, level=logging.DEBUG) if cfg[module_id]['shutit.core.module.remove']: shutit.log('removing: ' + module_id, level=logging.DEBUG) shutit.login(prompt_prefix=module_id,command='bash') if not module.remove(shutit): shutit.log(shutit_util.print_modules(), level=logging.DEBUG) shutit.fail(module_id + ' failed on remove', shutit_pexpect_child=shutit.get_shutit_pexpect_session_from_id('target_child').pexpect_child) else: if shutit.build['delivery'] in ('docker','dockerfile'): # Create a directory and files to indicate this has been removed. shutit.send(' mkdir -p ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + ' && rm -f ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + '/built && touch ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + '/removed', loglevel=loglevel) # Remove from "installed" cache if module.module_id in shutit_global.shutit.get_current_shutit_pexpect_session_environment().modules_installed: shutit_global.shutit.get_current_shutit_pexpect_session_environment().modules_installed.remove(module.module_id) # Add to "not installed" cache shutit_global.shutit.get_current_shutit_pexpect_session_environment().modules_not_installed.append(module.module_id) shutit.logout()
def do_remove(shutit, loglevel=logging.DEBUG): """Remove modules by calling remove method on those configured for removal. """ cfg = shutit.cfg # Now get the run_order keys in order and go. shutit.log('PHASE: remove', level=loglevel) shutit.pause_point('\nNow removing any modules that need removing', print_input=False, level=3) # Login at least once to get the exports. for module_id in shutit_util.module_ids(shutit): module = shutit.shutit_map[module_id] shutit.log('considering whether to remove: ' + module_id, level=logging.DEBUG) if cfg[module_id]['shutit.core.module.remove']: shutit.log('removing: ' + module_id, level=logging.DEBUG) shutit.login(prompt_prefix=module_id, command='bash --noprofile --norc', echo=False) if not module.remove(shutit): shutit.log(shutit_util.print_modules(shutit), level=logging.DEBUG) shutit.fail( module_id + ' failed on remove', shutit_pexpect_child=shutit. get_shutit_pexpect_session_from_id( 'target_child').pexpect_child) # pragma: no cover else: if shutit.build['delivery'] in ('docker', 'dockerfile'): # Create a directory and files to indicate this has been removed. shutit.send( ' command mkdir -p ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + ' && command rm -f ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + '/built && command touch ' + shutit.build['build_db_dir'] + '/module_record/' + module.module_id + '/removed', loglevel=loglevel) # Remove from "installed" cache if module.module_id in shutit.get_current_shutit_pexpect_session_environment( ).modules_installed: shutit.get_current_shutit_pexpect_session_environment( ).modules_installed.remove(module.module_id) # Add to "not installed" cache shutit.get_current_shutit_pexpect_session_environment( ).modules_not_installed.append(module.module_id) shutit.logout(echo=False)
def main(): """Main ShutIt function. Handles the configured actions: - skeleton - create skeleton module - list_configs - output computed configuration - depgraph - output digraph of module dependencies """ if sys.version_info.major == 2: if sys.version_info.minor < 7: shutit_global.shutit.fail('Python version must be 2.7+') shutit = shutit_global.shutit cfg = shutit.cfg shutit.log('# ShutIt Started... ',transient=True) shutit_util.parse_args() shutit.log('# Loading configs...',transient=True) shutit_util.load_configs() if shutit.action['skeleton']: shutit_skeleton.create_skeleton() shutit.build['completed'] = True return # Try and ensure shutit is on the path - makes onboarding easier # Only do this if we're in a terminal if shutit_util.determine_interactive() and spawn.find_executable('shutit') is None: setup_shutit_path() shutit_util.load_mod_from_file(os.path.join(shutit.shutit_main_dir, 'shutit_setup.py')) shutit_util.load_shutit_modules() shutit.log('ShutIt modules loaded',level=logging.INFO) init_shutit_map(shutit) shutit_util.config_collection() shutit.log('Configuration loaded',level=logging.INFO) if shutit.action['list_modules']: shutit_util.list_modules() shutit_util.handle_exit() conn_target(shutit) shutit.log('Connected to target',level=logging.INFO) if shutit.build['interactive'] > 0 and shutit.build['choose_config']: errs = do_interactive_modules() else: errs = [] errs.extend(check_deps()) if shutit.action['list_deps']: # Show dependency graph digraph = 'digraph depgraph {\n' digraph += '\n'.join([ make_dep_graph(module) for module_id, module in shutit.shutit_map.items() if module_id in cfg and cfg[module_id]['shutit.core.module.build'] ]) digraph += '\n}' f = file(shutit.build['log_config_path'] + '/digraph.txt','w') f.write(digraph) f.close() digraph_all = 'digraph depgraph {\n' digraph_all += '\n'.join([ make_dep_graph(module) for module_id, module in shutit.shutit_map.items() ]) digraph_all += '\n}' f = file(shutit.build['log_config_path'] + '/digraph_all.txt','w') f.write(digraph_all) f.close() shutit.log('\n================================================================================\n' + digraph_all) shutit.log('\nAbove is the digraph for all modules seen in this shutit invocation. Use graphviz to render into an image, eg\n\n\tshutit depgraph -m mylibrary | dot -Tpng -o depgraph.png\n') shutit.log('\n================================================================================\n') shutit.log('\n\n' + digraph) shutit.log('\n================================================================================\n' + digraph) shutit.log('\nAbove is the digraph for all modules configured to be built in this shutit invocation. Use graphviz to render into an image, eg\n\n\tshutit depgraph -m mylibrary | dot -Tpng -o depgraph.png\n') shutit.log('\n================================================================================\n') # Exit now shutit_util.handle_exit() # Dependency validation done, now collect configs of those marked for build. shutit_util.config_collection_for_built() if shutit.action['list_configs'] or shutit.build['loglevel'] <= logging.DEBUG: # Set build completed shutit.build['completed'] = True shutit.log('================================================================================') shutit.log('Config details placed in: ' + shutit.build['log_config_path']) shutit.log('================================================================================') shutit.log('To render the digraph of this build into an image run eg:\n\ndot -Tgv -o ' + shutit.build['log_config_path'] + '/digraph.gv ' + shutit.build['log_config_path'] + '/digraph.txt && dot -Tpdf -o digraph.pdf ' + shutit.build['log_config_path'] + '/digraph.gv\n\n') shutit.log('================================================================================') shutit.log('To render the digraph of all visible modules into an image, run eg:\n\ndot -Tgv -o ' + shutit.build['log_config_path'] + '/digraph_all.gv ' + shutit.build['log_config_path'] + '/digraph_all.txt && dot -Tpdf -o digraph_all.pdf ' + shutit.build['log_config_path'] + '/digraph_all.gv\n\n') shutit.log('================================================================================') shutit.log('\nConfiguration details have been written to the folder: ' + shutit.build['log_config_path'] + '\n') shutit.log('================================================================================') if shutit.action['list_configs']: return # Check for conflicts now. errs.extend(check_conflicts(shutit)) # Cache the results of check_ready at the start. errs.extend(check_ready(throw_error=False)) if errs: shutit.log(shutit_util.print_modules(), level=logging.ERROR) child = None for err in errs: shutit.log(err[0], level=logging.ERROR) if not child and len(err) > 1: child = err[1] shutit.fail("Encountered some errors, quitting", shutit_pexpect_child=child) do_remove() do_build() do_test() do_finalize() finalize_target() shutit.log(shutit_util.build_report('#Module: N/A (END)'), level=logging.DEBUG) # Show final report messages (ie messages to show after standard report). if shutit.build['report_final_messages'] != '': shutit.log(shutit.build['report_final_messages'], level=logging.INFO) # Mark the build as completed shutit.build['completed'] = True shutit.log('ShutIt run finished',level=logging.INFO) shutit_util.handle_exit(exit_code=0)
def main(): """Main ShutIt function. Handles the configured actions: - skeleton - create skeleton module - list_configs - output computed configuration - depgraph - output digraph of module dependencies """ if sys.version_info.major == 2: if sys.version_info.minor < 7: shutit_global.shutit.fail('Python version must be 2.7+') shutit = shutit_global.shutit cfg = shutit.cfg shutit.log('ShutIt Started... ', transient=True, newline=False) shutit_util.parse_args() if shutit.action['skeleton']: shutit_util.create_skeleton() shutit.build['completed'] = True return shutit.log('Loading configs...', transient=True) shutit_util.load_configs() # Try and ensure shutit is on the path - makes onboarding easier # Only do this if we're in a terminal if shutit_util.determine_interactive( ) and spawn.find_executable('shutit') is None: setup_shutit_path(cfg) shutit_util.load_mod_from_file( os.path.join(shutit.shutit_main_dir, 'shutit_setup.py')) shutit_util.load_shutit_modules() shutit.log('ShutIt modules loaded', level=logging.INFO) init_shutit_map(shutit) shutit_util.config_collection() shutit.log('Configuration loaded', level=logging.INFO) if shutit.action['list_modules']: shutit_util.list_modules() shutit_util.handle_exit() conn_target(shutit) shutit.log('Connected to target', level=logging.INFO) if shutit.build['interactive'] > 0 and shutit.build['choose_config']: errs = do_interactive_modules() else: errs = [] errs.extend(check_deps()) if shutit.action['list_deps']: # Show dependency graph digraph = 'digraph depgraph {\n' digraph += '\n'.join([ make_dep_graph(module) for module_id, module in shutit.shutit_map.items() if module_id in cfg and cfg[module_id]['shutit.core.module.build'] ]) digraph += '\n}' f = file(shutit.build['log_config_path'] + '/digraph.txt', 'w') f.write(digraph) f.close() digraph_all = 'digraph depgraph {\n' digraph_all += '\n'.join([ make_dep_graph(module) for module_id, module in shutit.shutit_map.items() ]) digraph_all += '\n}' f = file(shutit.build['log_config_path'] + '/digraph_all.txt', 'w') f.write(digraph_all) f.close() shutit.log( '\n================================================================================\n' + digraph_all) shutit.log( '\nAbove is the digraph for all modules seen in this shutit invocation. Use graphviz to render into an image, eg\n\n\tshutit depgraph -m mylibrary | dot -Tpng -o depgraph.png\n' ) shutit.log( '\n================================================================================\n' ) shutit.log('\n\n' + digraph) shutit.log( '\n================================================================================\n' + digraph) shutit.log( '\nAbove is the digraph for all modules configured to be built in this shutit invocation. Use graphviz to render into an image, eg\n\n\tshutit depgraph -m mylibrary | dot -Tpng -o depgraph.png\n' ) shutit.log( '\n================================================================================\n' ) # Exit now shutit_util.handle_exit() # Dependency validation done, now collect configs of those marked for build. shutit_util.config_collection_for_built() if shutit.action[ 'list_configs'] or shutit.build['loglevel'] <= logging.DEBUG: # Set build completed shutit.build['completed'] = True shutit.log( '================================================================================' ) shutit.log('Config details placed in: ' + shutit.build['log_config_path']) shutit.log( '================================================================================' ) shutit.log( 'To render the digraph of this build into an image run eg:\n\ndot -Tgv -o ' + shutit.build['log_config_path'] + '/digraph.gv ' + shutit.build['log_config_path'] + '/digraph.txt && dot -Tpdf -o digraph.pdf ' + shutit.build['log_config_path'] + '/digraph.gv\n\n') shutit.log( '================================================================================' ) shutit.log( 'To render the digraph of all visible modules into an image, run eg:\n\ndot -Tgv -o ' + shutit.build['log_config_path'] + '/digraph_all.gv ' + shutit.build['log_config_path'] + '/digraph_all.txt && dot -Tpdf -o digraph_all.pdf ' + shutit.build['log_config_path'] + '/digraph_all.gv\n\n') shutit.log( '================================================================================' ) shutit.log( '\nConfiguration details have been written to the folder: ' + shutit.build['log_config_path'] + '\n') shutit.log( '================================================================================' ) if shutit.action['list_configs']: return # Check for conflicts now. errs.extend(check_conflicts(shutit)) # Cache the results of check_ready at the start. errs.extend(check_ready(throw_error=False)) if errs: shutit.log(shutit_util.print_modules(), level=logging.ERROR) child = None for err in errs: shutit.log(err[0], level=logging.ERROR) if not child and len(err) > 1: child = err[1] shutit.fail("Encountered some errors, quitting", shutit_pexpect_child=child) do_remove() do_build() do_test() do_finalize() finalize_target() shutit.log(shutit_util.build_report('#Module: N/A (END)'), level=logging.DEBUG) # Show final report messages (ie messages to show after standard report). if shutit.build['report_final_messages'] != '': shutit.log(shutit.build['report_final_messages'], level=logging.INFO) if shutit.build['interactive'] >= 3: shutit.log( '\n' + 'The build is complete. You should now have a target called ' + shutit.target['name'] + ' and a new image if you chose to commit it.\n\nLook and play with the following files from the newly-created module directory to dig deeper:\n\n configs/build.cnf\n *.py\n\nYou can rebuild at any time by running the supplied ./build.sh and run with the supplied ./run.sh. These may need tweaking for your particular environment, eg sudo', level=logging.DEBUG) # Mark the build as completed shutit.build['completed'] = True shutit.log('ShutIt run finished', level=logging.INFO) shutit_util.handle_exit(0)
def setup_shutit_obj(shutit): shutit_util.parse_args(shutit) if not shutit.build['exam']: shutit.log('# ShutIt Started... ', transient=True) shutit.log('# Loading configs...', transient=True) shutit_util.load_configs(shutit) if shutit.action['skeleton']: shutit_skeleton.create_skeleton(shutit) shutit.build['completed'] = True return # Try and ensure shutit is on the path - makes onboarding easier # Only do this if we're in a terminal if shutit_util.determine_interactive( shutit) and spawn.find_executable('shutit') is None: setup_shutit_path(shutit) shutit_util.load_mod_from_file( shutit, os.path.join(shutit.shutit_main_dir, 'shutit_setup.py')) shutit_util.load_shutit_modules(shutit) shutit.log('ShutIt modules loaded', level=logging.INFO) init_shutit_map(shutit) shutit_util.config_collection(shutit=shutit) shutit.log('Configuration loaded', level=logging.INFO) if shutit.action['list_modules']: shutit_util.list_modules(shutit) shutit_util.handle_exit(shutit=shutit) if not shutit.action['list_deps'] and not shutit.action['list_modules']: conn_target(shutit) shutit.log('Connected to target', level=logging.INFO) if shutit.build['interactive'] > 0 and shutit.build['choose_config']: errs = do_interactive_modules(shutit) else: errs = [] errs.extend(check_deps(shutit)) do_lists(shutit) # Check for conflicts now. errs.extend(check_conflicts(shutit)) # Cache the results of check_ready at the start. errs.extend(check_ready(shutit, throw_error=False)) if errs: shutit.log(shutit_util.print_modules(shutit), level=logging.ERROR) child = None for err in errs: shutit.log(err[0], level=logging.ERROR) if not child and len(err) > 1: child = err[1] shutit.fail("Encountered some errors, quitting", shutit_pexpect_child=child) # pragma: no cover do_remove(shutit) do_build(shutit) do_test(shutit) do_finalize(shutit) finalize_target(shutit) shutit.log(shutit_util.build_report(shutit, '#Module: N/A (END)'), level=logging.DEBUG) do_exam_output(shutit) shutit_global.shutit_global_object.do_final_messages() # Mark the build as completed shutit.build['completed'] = True shutit.log('ShutIt run finished', level=logging.INFO) shutit_util.handle_exit(shutit=shutit, exit_code=0)
def main(): """Main ShutIt function. Handles the configured actions: - skeleton - create skeleton module - list_configs - output computed configuration - depgraph - output digraph of module dependencies """ if sys.version_info.major == 2: if sys.version_info.minor < 7: shutit_global.shutit.fail('Python version must be 2.7+') shutit = shutit_global.shutit shutit_util.parse_args() if not shutit.build['exam']: shutit.log('# ShutIt Started... ', transient=True) shutit.log('# Loading configs...', transient=True) shutit_util.load_configs() if shutit.action['skeleton']: shutit_skeleton.create_skeleton() shutit.build['completed'] = True return # Try and ensure shutit is on the path - makes onboarding easier # Only do this if we're in a terminal if shutit_util.determine_interactive( ) and spawn.find_executable('shutit') is None: setup_shutit_path() shutit_util.load_mod_from_file( os.path.join(shutit.shutit_main_dir, 'shutit_setup.py')) shutit_util.load_shutit_modules() shutit.log('ShutIt modules loaded', level=logging.INFO) init_shutit_map(shutit) shutit_util.config_collection() shutit.log('Configuration loaded', level=logging.INFO) if shutit.action['list_modules']: shutit_util.list_modules() shutit_util.handle_exit() if not shutit.action['list_deps'] and not shutit.action['list_modules']: conn_target(shutit) shutit.log('Connected to target', level=logging.INFO) if shutit.build['interactive'] > 0 and shutit.build['choose_config']: errs = do_interactive_modules() else: errs = [] errs.extend(check_deps()) do_lists(shutit) # Check for conflicts now. errs.extend(check_conflicts(shutit)) # Cache the results of check_ready at the start. errs.extend(check_ready(throw_error=False)) if errs: shutit.log(shutit_util.print_modules(), level=logging.ERROR) child = None for err in errs: shutit.log(err[0], level=logging.ERROR) if not child and len(err) > 1: child = err[1] shutit.fail("Encountered some errors, quitting", shutit_pexpect_child=child) do_remove() do_build() do_test() do_finalize() finalize_target() shutit.log(shutit_util.build_report('#Module: N/A (END)'), level=logging.DEBUG) do_final_messages(shutit) do_exam_output(shutit) # Mark the build as completed shutit.build['completed'] = True shutit.log('ShutIt run finished', level=logging.INFO) shutit_util.handle_exit(exit_code=0)