def run_hook(self, hook_type): """ Hook Type. Runs the commands defined by the hook """ commands = self._get_hook(hook_type) if commands is None: return commands if type(commands) == str: commands = [commands] for command in commands: if self.config.local_development or self.config.dryrun: logging.warning( "Hook not run due to --dry-run: {}".format(command)) continue else: logging.info("Running {} hook...".format(hook_type)) try: result = call(command, shell=True, executable="/bin/bash", path=self.config.course_base_directory) except Exception as error: logging.error(error) raise ReckonerCommandException( "Uncaught exception while running hook " "'{}'".format(command)) logging.info("Ran Hook: '{}'".format(result.command_string)) _output_level = logging.INFO # The level to log the command output # HACK We're not relying opon the truthiness of this object due to # the inability to mock is well in code # Python 3 may have better mocking functionality or we should # refactor to leverage more method on the function for .succeeded() # or something similar. if result.exitcode == 0: logging.info("{} hook ran successfully".format(hook_type)) else: logging.error("{} hook failed to run".format(hook_type)) logging.error("Returned exit code: {}".format(result.exitcode)) # Override message level response to bubble up error visibility _output_level = logging.ERROR # only print stdout if there is content if result.stdout: logging.log(_output_level, "Returned stdout: {}".format(result.stdout)) # only print stderr if there is content if result.stderr: logging.log(_output_level, "Returned stderr: {}".format(result.stderr))
def run_hook(self, hook_type): """ Hook Type. Runs the commands defined by the hook """ coms = self.__get_hook(hook_type) if coms is None: return coms if type(coms) == str: coms = [coms] for com in coms: if self.config.local_development or self.config.dryrun: logging.info("Hook not run due to --dry-run: {}".format(com)) continue else: logging.info("Running {} hook.".format(hook_type)) try: r = call(com, shell=True, executable="/bin/bash") logging.debug(r) except ReckonerCommandException, e: logging.error("{} hook failed to run".format(hook_type)) logging.debug('Hook stderr {}'.format(e.stderr)) raise e
def current_context(self): """ Returns the current cluster context """ args = ['kubectl', 'config', 'current-context'] r = call(args) return r.stdout.strip()
def run_hook(self, hook_type): """ Hook Type. Runs the commands defined by the hook """ commands = self._get_hook(hook_type) if commands is None: return commands if type(commands) == str: commands = [commands] for command in commands: if self.config.local_development or self.config.dryrun: logging.warning( "Hook not run due to --dry-run: {}".format(command)) continue else: logging.info("Running {} hook...".format(hook_type)) try: result = call(command, shell=True, executable="/bin/bash", path=self.config.course_base_directory) except Exception as error: # NOTE This block is only used when we cannot send the call or # have other unexpected errors running the command. # The call()->Response should pass a Response object back # even when the exit code != 0. logging.error("Critical Error running the command hook.") logging.error(error) raise ReckonerCommandException( "Uncaught exception while running hook " "'{}'".format(command)) command_successful = result.exitcode == 0 logging.info("Ran Hook: '{}'".format(result.command_string)) _output_level = logging.INFO # The level to log the command output if command_successful: logging.info("{} hook ran successfully".format(hook_type)) else: logging.error("{} hook failed to run".format(hook_type)) logging.error("Returned exit code: {}".format(result.exitcode)) # Override message level response to bubble up error visibility _output_level = logging.ERROR # only print stdout if there is content if result.stdout: logging.log(_output_level, "Returned stdout: {}".format(result.stdout)) # only print stderr if there is content if result.stderr: logging.log(_output_level, "Returned stderr: {}".format(result.stderr)) # Always raise an error after failures if not command_successful: raise ReckonerCommandException( "Hook ({}) failed to run".format(result.command_string), stdout=result.stdout, stderr=result.stderr, )