Beispiel #1
0
def setup_shutit_path():
	# try the current directory, the .. directory, or the ../shutit directory, the ~/shutit
	shutit = shutit_global.shutit
	if not shutit.host['add_shutit_to_path']:
		return
	res = shutit_util.util_raw_input(prompt='shutit appears not to be on your path - should try and we find it and add it to your ~/.bashrc (Y/n)?')
	if res in ['n','N']:
		with open(os.path.join(shutit.shutit_path, 'config'), 'a') as f:
			f.write('\n[host]\nadd_shutit_to_path: no\n')
		return
	path_to_shutit = ''
	for d in ['.','..','~','~/shutit']:
		path = os.path.abspath(d + '/shutit')
		if not os.path.isfile(path):
			continue
		path_to_shutit = path
	while path_to_shutit == '':
		d = shutit_util.util_raw_input(prompt='cannot auto-find shutit - please input the path to your shutit dir\n')
		path = os.path.abspath(d + '/shutit')
		if not os.path.isfile(path):
			continue
		path_to_shutit = path
	if path_to_shutit != '':
		bashrc = os.path.expanduser('~/.bashrc')
		with open(bashrc, "a") as myfile:
			#http://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch
			myfile.write('\nexport PATH="$PATH:' + os.path.dirname(path_to_shutit) + '"\n')
		shutit_util.util_raw_input(prompt='\nPath set up - please open new terminal and re-run command\n')
		shutit_util.handle_exit()
Beispiel #2
0
def setup_shutit_path(shutit):
    # try the current directory, the .. directory, or the ../shutit directory, the ~/shutit
    if not shutit.host['add_shutit_to_path']:
        return
    res = shutit_util.util_raw_input(
        shutit,
        prompt=
        'shutit appears not to be on your path - should try and we find it and add it to your ~/.bashrc (Y/n)?'
    )
    if res in ['n', 'N']:
        with open(os.path.join(shutit.host['shutit_path'], 'config'),
                  'a') as f:
            f.write('\n[host]\nadd_shutit_to_path: no\n')
        return
    path_to_shutit = ''
    for d in ['.', '..', '~', '~/shutit']:
        path = os.path.abspath(d + '/shutit')
        if not os.path.isfile(path):
            continue
        path_to_shutit = path
    while path_to_shutit == '':
        d = shutit_util.util_raw_input(
            shutit,
            prompt=
            'cannot auto-find shutit - please input the path to your shutit dir\n'
        )
        path = os.path.abspath(d + '/shutit')
        if not os.path.isfile(path):
            continue
        path_to_shutit = path
    if path_to_shutit != '':
        bashrc = os.path.expanduser('~/.bashrc')
        with open(bashrc, "a") as myfile:
            #http://unix.stackexchange.com/questions/26676/how-to-check-if-a-shell-is-login-interactive-batch
            myfile.write('\nexport PATH="$PATH:' +
                         os.path.dirname(path_to_shutit) + '"\n')
        shutit_util.util_raw_input(
            shutit,
            prompt=
            '\nPath set up - please open new terminal and re-run command\n')
        shutit_util.handle_exit(shutit=shutit)
Beispiel #3
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)
	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)
Beispiel #4
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)
Beispiel #5
0
def do_lists(shutit):
    if shutit.action['list_deps']:
        cfg = shutit.cfg
        # 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 = open(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}'
        fname = shutit.build['log_config_path'] + '/digraph_all.txt'
        f = open(fname, '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\tcat '
            + fname + ' | dot -Tpng -o depgraph.png\n')
        shutit.log(
            '\n================================================================================\n'
        )
        fname = shutit.build['log_config_path'] + '/digraph_this.txt'
        f = open(fname, 'w')
        f.write(digraph_all)
        f.close()
        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\ncat '
            + fname + ' | dot -Tpng -o depgraph.png\n')
        shutit.log(
            '\n================================================================================\n'
        )
        # Exit now
        shutit_util.handle_exit(shutit=shutit)
    # Dependency validation done, now collect configs of those marked for build.
    shutit_util.config_collection_for_built(shutit)

    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
Beispiel #6
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)
Beispiel #7
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)