def run(self, args=None):
        retcodesummary = ExitCodes.EXIT_SUCCESS
        self.args = args if args else self.args
        if not self.check_args():
            return retcodesummary
        if self.args.clean:
            if not self.args.tc and not self.args.suite:
                return retcodesummary
        version = get_fw_version()
        if self.args.version and version:
            print(version)
            return retcodesummary
        elif self.args.version and not version:
            print("Unable to get version. Have you installed Icetea correctly?")
            return retcodesummary
        self.logger.info("Using Icetea version {}".format(version) if version
                         else "Unable to get Icetea version. Is Icetea installed?")
        cloud = self._init_cloud(self.args.cloud)
        if self.args.listsuites:
            table = self.list_suites(self.args.suitedir, cloud)
            if table is None:
                self.logger.error("No suites found!")
                retcodesummary = ExitCodes.EXIT_FAIL
            else:
                print(table)
            return retcodesummary
        try:
            testsuite = TestSuite(logger=self.logger, cloud_module=cloud, args=self.args)
        except SuiteException as error:
            self.logger.error("Something went wrong in suite creation! {}".format(error))
            retcodesummary = ExitCodes.EXIT_INCONC
            return retcodesummary
        if self.args.list:
            if self.args.cloud:
                testsuite.update_testcases()
            testcases = testsuite.list_testcases()
            print(testcases)
            return retcodesummary
        results = self.runtestsuite(testsuite=testsuite)
        if not results:
            retcodesummary = ExitCodes.EXIT_SUCCESS
        elif results.failure_count() and self.args.failure_return_value is True:
            retcodesummary = ExitCodes.EXIT_FAIL
        elif results.inconclusive_count() and self.args.failure_return_value is True:
            retcodesummary = ExitCodes.EXIT_INCONC
        return retcodesummary