def warmup(self): """ initialize variables necessary to perform a sprinter action """ self.logger.debug("Warming up...") try: if not isinstance(self.source, Manifest) and self.source: self.source = load_manifest(self.source) if not isinstance(self.target, Manifest) and self.target: self.target = load_manifest(self.target) self.main_manifest = self.target or self.source except lib.BadCredentialsException: e = sys.exc_info()[1] self.logger.error(str(e)) raise SprinterException( "Fatal error! Bad credentials to grab manifest!") if not getattr(self, 'namespace', None): if self.target: self.namespace = self.target.namespace elif not self.namespace and self.source: self.namespace = self.source.namespace else: raise SprinterException( "No environment name has been specified!") self.directory_root = self.custom_directory_root if not self.directory: if not self.directory_root: self.directory_root = os.path.join(self.root, self.namespace) self.directory = Directory(self.directory_root, shell_util_path=self.shell_util_path) if not self.injections: self.injections = Injections( wrapper="%s_%s" % (self.sprinter_namespace.upper(), self.namespace), override="SPRINTER_OVERRIDES") if not self.global_injections: self.global_injections = Injections( wrapper="%s" % self.sprinter_namespace.upper() + "GLOBALS", override="SPRINTER_OVERRIDES") # append the bin, in the case sandboxes are necessary to # execute commands further down the sprinter lifecycle os.environ['PATH'] = self.directory.bin_path( ) + ":" + os.environ['PATH'] self.warmed_up = True
def parse_args(argv, Environment=Environment): options = docopt( __doc__, argv=argv, version=pkg_resources.get_distribution('sprinter').version) logging_level = logging.DEBUG if options['--verbose'] else logging.INFO # start processing commands env = Environment(logging_level=logging_level, ignore_errors=options['--ignore-errors']) try: if options['install']: target = options['<environment_source>'] def handle_install_shutdown(signal, frame): if env.phase == PHASE.INSTALL: print("Removing install...") env.directory.remove() env.clear_all() signal_handler(signal, frame) signal.signal(signal.SIGINT, handle_install_shutdown) if options['--username'] or options['--auth']: options = get_credentials(options, parse_domain(target)) target = manifest.load_manifest( target, username=options['<username>'], password=options['<password>'], verify_certificate=( not options['--allow-bad-certificate'])) else: target = manifest.load_manifest( target, verify_certificate=( not options['--allow-bad-certificate'])) env.target = target if options['--namespace']: env.namespace = options['--namespace'] if options['--local']: env.do_inject_environment_config = False env.custom_directory_root = os.path.abspath( os.path.expanduser(options['--local'])) env.install() elif options['update']: target = options['<environment_name>'] env.directory = Directory(os.path.join(env.root, target), shell_util_path=env.shell_util_path) env.source = manifest.load_manifest(env.directory.manifest_path, do_inherit=False) use_auth = options['--username'] or options['--auth'] if use_auth: options = get_credentials(options, target) env.target = manifest.load_manifest( env.source.source(), username=options['<username>'] if use_auth else None, password=options['<password>'] if use_auth else None, verify_certificate=(not options['--allow-bad-certificate'])) env.update(reconfigure=options['--reconfigure']) elif options["remove"]: env.directory = Directory(os.path.join( env.root, options['<environment_name>']), shell_util_path=env.shell_util_path) env.source = manifest.load_manifest( env.directory.manifest_path, namespace=options['<environment_name>'], do_inherit=False) env.remove() elif options['deactivate']: env.directory = Directory(os.path.join( env.root, options['<environment_name>']), shell_util_path=env.shell_util_path) env.source = manifest.load_manifest( env.directory.manifest_path, namespace=options['<environment_name>'], do_inherit=False) env.deactivate() elif options['activate']: env.directory = Directory(os.path.join( env.root, options['<environment_name>']), shell_util_path=env.shell_util_path) env.source = manifest.load_manifest( env.directory.manifest_path, namespace=options['<environment_name>'], do_inherit=False) env.activate() elif options['list']: for _env in os.listdir(env.root): if _env != ".global": print(_env) elif options['validate']: if options['--username'] or options['--auth']: options = get_credentials(options, parse_domain(target)) target = manifest.load_manifest( options['<environment_source>'], username=options['<username>'], password=options['<password>'], verify_certificate=( not options['--allow-bad-certificate'])) env.target = options['<environment_source>'] env.validate() if not env.error_occured: print("No errors! Manifest is valid!") else: "Manifest is invalid! Please see errors above." elif options['globals']: if options['--reconfigure']: configure_config(env.global_config, reconfigure=True) write_config(env.global_config, env.global_config_path) else: print_global_config(env.global_config) except BadCredentialsException: e = sys.exc_info()[1] raise e except ManifestException: e = sys.exc_info()[1] env.log_error(str(e)) env.logger.info("Error occured when attempting to load manifest!") env.logger.info("Writing debug output to /tmp/sprinter.log") env.write_debug_log("/tmp/sprinter.log") except Exception: e = sys.exc_info()[1] env.log_error(str(e)) env.logger.info(""" ===================================================================== the sprinter action failed! Writing debug output to /tmp/sprinter.log """) env.write_debug_log("/tmp/sprinter.log") if env.message_failure(): env.logger.info(env.message_failure()) env.logger.info(""" ===================================================================== """.strip()) raise