AMBARI-22160. hadooplzo package installation failed on devdeploys (aonishuk)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/b1295362 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/b1295362 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/b1295362 Branch: refs/heads/branch-feature-AMBARI-20859 Commit: b1295362b9e702dd37bbb3995437d0c4e311ce9f Parents: cec9f73 Author: Andrew Onishuk <aonis...@hortonworks.com> Authored: Tue Oct 10 16:09:28 2017 +0300 Committer: Andrew Onishuk <aonis...@hortonworks.com> Committed: Tue Oct 10 16:09:28 2017 +0300 ---------------------------------------------------------------------- .../libraries/script/script.py | 45 ++++++++++++++------ .../HDFS/2.1.0.2.0/package/scripts/hdfs.py | 10 +++-- .../2.1.0.2.0/package/scripts/install_params.py | 6 --- .../2.1.0.2.0/package/scripts/params_linux.py | 2 - .../HDFS/3.0.0.3.0/package/scripts/hdfs.py | 10 +++-- .../3.0.0.3.0/package/scripts/install_params.py | 6 --- .../3.0.0.3.0/package/scripts/params_linux.py | 2 - .../OOZIE/4.0.0.2.0/package/scripts/oozie.py | 6 ++- .../4.0.0.2.0/package/scripts/params_linux.py | 3 -- .../OOZIE/4.2.0.3.0/package/scripts/oozie.py | 5 ++- .../4.2.0.3.0/package/scripts/params_linux.py | 3 -- .../stacks/2.0.6/HBASE/test_hbase_master.py | 2 + .../src/test/python/stacks/utils/RMFTestCase.py | 4 +- 13 files changed, 56 insertions(+), 48 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-common/src/main/python/resource_management/libraries/script/script.py ---------------------------------------------------------------------- diff --git a/ambari-common/src/main/python/resource_management/libraries/script/script.py b/ambari-common/src/main/python/resource_management/libraries/script/script.py index d5b4469..bf8c0dc 100644 --- a/ambari-common/src/main/python/resource_management/libraries/script/script.py +++ b/ambari-common/src/main/python/resource_management/libraries/script/script.py @@ -501,6 +501,7 @@ class Script(object): Script.stack_version_from_distro_select = pkg_provider.get_installed_package_version( stack_tools.get_stack_tool_package(stack_tools.STACK_SELECTOR_NAME)) + return Script.stack_version_from_distro_select @@ -525,22 +526,20 @@ class Script(object): """ This function replaces ${stack_version} placeholder with actual version. If the package version is passed from the server, use that as an absolute truth. - + :param name name of the package :param repo_version actual version of the repo currently installing """ - stack_version_package_formatted = "" + if not STACK_VERSION_PLACEHOLDER in name: + return name - if not repo_version: - repo_version = self.get_stack_version_before_packages_installed() + stack_version_package_formatted = "" package_delimiter = '-' if OSCheck.is_ubuntu_family() else '_' # repositoryFile is the truth # package_version should be made to the form W_X_Y_Z_nnnn package_version = default("repositoryFile/repoVersion", None) - if package_version is not None: - package_version = package_version.replace('.', package_delimiter).replace('-', package_delimiter) # TODO remove legacy checks if package_version is None: @@ -550,6 +549,17 @@ class Script(object): if package_version is None: package_version = default("hostLevelParams/package_version", None) + package_version = None + if (package_version is None or '-' not in package_version) and default('/repositoryFile', None): + self.load_available_packages() + package_name = self.get_package_from_available(name, self.available_packages_in_repos) + if package_name is None: + raise Fail("Cannot match package for regexp name {0}. Available packages: {1}".format(name, self.available_packages_in_repos)) + return package_name + + if package_version is not None: + package_version = package_version.replace('.', package_delimiter).replace('-', package_delimiter) + # The cluster effective version comes down when the version is known after the initial # install. In that case we should not be guessing which version when invoking INSTALL, but # use the supplied version to build the package_version @@ -568,6 +578,7 @@ class Script(object): # Wildcards cause a lot of troubles with installing packages, if the version contains wildcards we try to specify it. if not package_version or '*' in package_version: + repo_version = self.get_stack_version_before_packages_installed() stack_version_package_formatted = repo_version.replace('.', package_delimiter).replace('-', package_delimiter) if STACK_VERSION_PLACEHOLDER in name else name package_name = name.replace(STACK_VERSION_PLACEHOLDER, stack_version_package_formatted) @@ -760,6 +771,19 @@ class Script(object): """ self.install_packages(env) + def load_available_packages(self): + if self.available_packages_in_repos: + return self.available_packages_in_repos + + + pkg_provider = get_provider("Package") + try: + self.available_packages_in_repos = pkg_provider.get_available_packages_in_repos(self.get_config()['repositoryFile']['repositories']) + except Exception as err: + Logger.exception("Unable to load available packages") + self.available_packages_in_repos = [] + + def install_packages(self, env): """ List of packages that are required< by service is received from the server @@ -782,17 +806,11 @@ class Script(object): package_list_str = config['hostLevelParams']['package_list'] agent_stack_retry_on_unavailability = bool(config['hostLevelParams']['agent_stack_retry_on_unavailability']) agent_stack_retry_count = int(config['hostLevelParams']['agent_stack_retry_count']) - pkg_provider = get_provider("Package") - try: - available_packages_in_repos = pkg_provider.get_available_packages_in_repos(config['repositoryFile']['repositories']) - except Exception as err: - Logger.exception("Unable to load available packages") - available_packages_in_repos = [] if isinstance(package_list_str, basestring) and len(package_list_str) > 0: package_list = json.loads(package_list_str) for package in package_list: if self.check_package_condition(package): - name = self.get_package_from_available(package['name'], available_packages_in_repos) + name = self.format_package_name(package['name']) # HACK: On Windows, only install ambari-metrics packages using Choco Package Installer # TODO: Update this once choco packages for hadoop are created. This is because, service metainfo.xml support # <osFamily>any<osFamily> which would cause installation failure on Windows. @@ -1092,5 +1110,6 @@ class Script(object): def __init__(self): + self.available_packages_in_repos = [] if Script.instance is not None: raise Fail("An instantiation already exists! Use, get_instance() method.") http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py index e054209..07c7616 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py +++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/hdfs.py @@ -25,6 +25,7 @@ from resource_management.core.resources import Package from resource_management.core.source import Template from resource_management.core.resources.service import ServiceConfig from resource_management.libraries.resources.xml_config import XmlConfig +from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages import os from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl from ambari_commons import OSConst @@ -138,10 +139,11 @@ def hdfs(name=None): content=Template("slaves.j2") ) - if params.lzo_enabled and len(params.lzo_packages) > 0: - Package(params.lzo_packages, - retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, - retry_count=params.agent_stack_retry_count) + if params.lzo_enabled: + lzo_packages = get_lzo_packages(params.stack_version_unformatted) + Package(lzo_packages, + retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, + retry_count=params.agent_stack_retry_count) def install_snappy(): import params http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/install_params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/install_params.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/install_params.py index fe488c3..235f231 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/install_params.py +++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/install_params.py @@ -23,7 +23,6 @@ if OSCheck.is_windows_family(): exclude_packages = [] else: from resource_management.libraries.functions.default import default - from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.script.script import Script _config = Script.get_config() @@ -32,8 +31,3 @@ else: # The logic for LZO also exists in OOZIE's params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() - lzo_packages = get_lzo_packages(stack_version_unformatted) - - exclude_packages = [] - if not lzo_enabled: - exclude_packages += lzo_packages http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py index 76b430b..bb6349b 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py +++ b/ambari-server/src/main/resources/common-services/HDFS/2.1.0.2.0/package/scripts/params_linux.py @@ -40,7 +40,6 @@ from resource_management.libraries.functions.get_not_managed_resources import ge from resource_management.libraries.script.script import Script from resource_management.libraries.resources.hdfs_resource import HdfsResource from resource_management.libraries.functions.format_jvm_option import format_jvm_option -from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.functions.hdfs_utils import is_https_enabled_in_hdfs from resource_management.libraries.functions import is_empty from resource_management.libraries.functions.get_architecture import get_architecture @@ -389,7 +388,6 @@ HdfsResource = functools.partial( # The logic for LZO also exists in OOZIE's params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() -lzo_packages = get_lzo_packages(stack_version_unformatted) name_node_params = default("/commandParams/namenode", None) http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/hdfs.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/hdfs.py b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/hdfs.py index e054209..07c7616 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/hdfs.py +++ b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/hdfs.py @@ -25,6 +25,7 @@ from resource_management.core.resources import Package from resource_management.core.source import Template from resource_management.core.resources.service import ServiceConfig from resource_management.libraries.resources.xml_config import XmlConfig +from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages import os from ambari_commons.os_family_impl import OsFamilyFuncImpl, OsFamilyImpl from ambari_commons import OSConst @@ -138,10 +139,11 @@ def hdfs(name=None): content=Template("slaves.j2") ) - if params.lzo_enabled and len(params.lzo_packages) > 0: - Package(params.lzo_packages, - retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, - retry_count=params.agent_stack_retry_count) + if params.lzo_enabled: + lzo_packages = get_lzo_packages(params.stack_version_unformatted) + Package(lzo_packages, + retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, + retry_count=params.agent_stack_retry_count) def install_snappy(): import params http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/install_params.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/install_params.py b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/install_params.py index fe488c3..235f231 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/install_params.py +++ b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/install_params.py @@ -23,7 +23,6 @@ if OSCheck.is_windows_family(): exclude_packages = [] else: from resource_management.libraries.functions.default import default - from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.script.script import Script _config = Script.get_config() @@ -32,8 +31,3 @@ else: # The logic for LZO also exists in OOZIE's params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() - lzo_packages = get_lzo_packages(stack_version_unformatted) - - exclude_packages = [] - if not lzo_enabled: - exclude_packages += lzo_packages http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/params_linux.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/params_linux.py index de735f4..2fa6208 100644 --- a/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/params_linux.py +++ b/ambari-server/src/main/resources/common-services/HDFS/3.0.0.3.0/package/scripts/params_linux.py @@ -40,7 +40,6 @@ from resource_management.libraries.functions.get_not_managed_resources import ge from resource_management.libraries.script.script import Script from resource_management.libraries.resources.hdfs_resource import HdfsResource from resource_management.libraries.functions.format_jvm_option import format_jvm_option -from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.functions.hdfs_utils import is_https_enabled_in_hdfs from resource_management.libraries.functions import is_empty from resource_management.libraries.functions.setup_ranger_plugin_xml import get_audit_configs, generate_ranger_service_config @@ -378,7 +377,6 @@ HdfsResource = functools.partial( # The logic for LZO also exists in OOZIE's params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() -lzo_packages = get_lzo_packages(stack_version_unformatted) name_node_params = default("/commandParams/namenode", None) http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py index 64f9d54..f215a1e 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/oozie.py @@ -37,6 +37,7 @@ from resource_management.libraries.functions.copy_tarball import get_current_ver from resource_management.libraries.resources.xml_config import XmlConfig from resource_management.libraries.script.script import Script from resource_management.libraries.functions.security_commons import update_credential_provider_path +from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.core.resources.packaging import Package from resource_management.core.shell import as_user, as_sudo, call, checked_call from resource_management.core.exceptions import Fail @@ -305,8 +306,9 @@ def oozie_server_specific(upgrade_type): Execute(format('{sudo} chown {oozie_user}:{user_group} {oozie_libext_dir}/falcon-oozie-el-extension-*.jar'), not_if = no_op_test) - if params.lzo_enabled and len(params.all_lzo_packages) > 0: - Package(params.all_lzo_packages, + if params.lzo_enabled: + all_lzo_packages = get_lzo_packages(params.stack_version_unformatted) + Package(all_lzo_packages, retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, retry_count=params.agent_stack_retry_count) Execute(format('{sudo} cp {hadoop_lib_home}/hadoop-lzo*.jar {oozie_lib_dir}'), http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py index b66e157..a0f0672 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.0.0.2.0/package/scripts/params_linux.py @@ -30,7 +30,6 @@ from resource_management.libraries.functions import get_port_from_url from resource_management.libraries.functions.get_not_managed_resources import get_not_managed_resources from resource_management.libraries.functions.setup_atlas_hook import has_atlas_in_cluster from resource_management.libraries.script.script import Script -from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.functions.expect import expect from resource_management.libraries.resources.hdfs_resource import HdfsResource from resource_management.libraries.functions.get_architecture import get_architecture @@ -388,5 +387,3 @@ is_webhdfs_enabled = config['configurations']['hdfs-site']['dfs.webhdfs.enabled' # The logic for LZO also exists in HDFS' params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() - -all_lzo_packages = get_lzo_packages(stack_version_unformatted) http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/oozie.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/oozie.py b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/oozie.py index d916d3b..0771e93 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/oozie.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/oozie.py @@ -275,8 +275,9 @@ def oozie_server_specific(): Execute(format('{sudo} chown {oozie_user}:{user_group} {oozie_libext_dir}/falcon-oozie-el-extension-*.jar'), not_if = no_op_test) - if params.lzo_enabled and len(params.all_lzo_packages) > 0: - Package(params.all_lzo_packages, + if params.lzo_enabled: + all_lzo_packages = get_lzo_packages(params.stack_version_unformatted) + Package(all_lzo_packages, retry_on_repo_unavailability=params.agent_stack_retry_on_unavailability, retry_count=params.agent_stack_retry_count) Execute(format('{sudo} cp {hadoop_lib_home}/hadoop-lzo*.jar {oozie_lib_dir}'), http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/params_linux.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/params_linux.py b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/params_linux.py index d30a465..70b89b7 100644 --- a/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/params_linux.py +++ b/ambari-server/src/main/resources/common-services/OOZIE/4.2.0.3.0/package/scripts/params_linux.py @@ -28,7 +28,6 @@ from resource_management.libraries.functions import get_port_from_url from resource_management.libraries.functions.get_not_managed_resources import get_not_managed_resources from resource_management.libraries.functions.setup_atlas_hook import has_atlas_in_cluster from resource_management.libraries.script.script import Script -from resource_management.libraries.functions.get_lzo_packages import get_lzo_packages from resource_management.libraries.functions.expect import expect from resource_management.libraries.resources.hdfs_resource import HdfsResource from resource_management.libraries.functions.get_architecture import get_architecture @@ -370,5 +369,3 @@ is_webhdfs_enabled = config['configurations']['hdfs-site']['dfs.webhdfs.enabled' # The logic for LZO also exists in HDFS' params.py io_compression_codecs = default("/configurations/core-site/io.compression.codecs", None) lzo_enabled = io_compression_codecs is not None and "com.hadoop.compression.lzo" in io_compression_codecs.lower() - -all_lzo_packages = get_lzo_packages(stack_version_unformatted) http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py index 2224d31..e32393d 100644 --- a/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py +++ b/ambari-server/src/test/python/stacks/2.0.6/HBASE/test_hbase_master.py @@ -95,8 +95,10 @@ class TestHBaseMaster(RMFTestCase): try_install=True, os_type=('Redhat', '6.4', 'Final'), checked_call_mocks = [(0, "OK.", "")], + available_packages_in_repos = ['hbase_2_3_0_1_1234'], ) + # only assert that the correct package is trying to be installed self.assertResourceCalled('Package', 'hbase_2_3_0_1_1234', retry_count=5, http://git-wip-us.apache.org/repos/asf/ambari/blob/b1295362/ambari-server/src/test/python/stacks/utils/RMFTestCase.py ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py index bff8642..ae33a2a 100644 --- a/ambari-server/src/test/python/stacks/utils/RMFTestCase.py +++ b/ambari-server/src/test/python/stacks/utils/RMFTestCase.py @@ -80,7 +80,8 @@ class RMFTestCase(TestCase): mocks_dict={}, try_install=False, command_args=[], - log_out_files=False): + log_out_files=False, + available_packages_in_repos = []): norm_path = os.path.normpath(path) @@ -125,6 +126,7 @@ class RMFTestCase(TestCase): Script.instance = None script_class_inst = RMFTestCase._get_attr(script_module, classname)() script_class_inst.log_out_files = log_out_files + script_class_inst.available_packages_in_repos = available_packages_in_repos method = RMFTestCase._get_attr(script_class_inst, command) except IOError, err: raise RuntimeError("Cannot load class %s from %s: %s" % (classname, norm_path, err.message))