def perform_command(self): """ Perform command and return the appropriate exit code. :rtype: int """ if len(self.actual_arguments) < 2: return self.print_help() mode = self.actual_arguments[0] validator = Validator(rconf=self.rconf, logger=self.logger) if mode == u"config": config_file_path = self.actual_arguments[1] config_txt = None if config_file_path.lower().endswith(u".txt"): config_txt = True elif config_file_path.lower().endswith(u".xml"): config_txt = False else: return self.print_help() if not self.check_input_file(config_file_path): return self.ERROR_EXIT_CODE contents = gf.read_file_bytes(config_file_path) if contents is None: return self.ERROR_EXIT_CODE if config_txt: result = validator.check_config_txt(contents) msg = u"TXT configuration" else: result = validator.check_config_xml(contents) msg = "XML configuration" elif mode == u"container": container_path = self.actual_arguments[1] result = validator.check_container(container_path) msg = "container" elif mode == u"job": config_string = self.actual_arguments[1] result = validator.check_configuration_string(config_string, is_job=True) msg = u"job configuration string" elif mode == u"task": config_string = self.actual_arguments[1] result = validator.check_configuration_string(config_string, is_job=False, external_name=True) msg = u"task configuration string" elif mode == u"wizard": if (len(self.actual_arguments) < 3) or (self.actual_arguments[2].startswith(u"-")): return self.print_help() config_string = self.actual_arguments[1] container_path = self.actual_arguments[2] if not self.check_input_file(container_path): return self.ERROR_EXIT_CODE result = validator.check_container(container_path, config_string=config_string) msg = "container with configuration string from wizard" else: return self.print_help() if result.passed: self.print_success(u"Valid %s" % msg) for warning in result.warnings: self.print_warning(u"%s" % warning) return self.NO_ERROR_EXIT_CODE else: self.print_error(u"Invalid %s" % msg) for error in result.errors: self.print_error(u"%s" % error) return self.ERROR_EXIT_CODE