Example #1
0
def init_ocsci_conf(arguments=None):
    """
    Update the config object with any files passed via the CLI

    Args:
        arguments (list): Arguments for pytest execution
    """
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument('--ocsci-conf', action='append', default=[])
    parser.add_argument('--ocs-version',
                        action='store',
                        choices=['4.2', '4.3'])
    parser.add_argument('--ocs-registry-image')
    args, unknown = parser.parse_known_args(args=arguments)
    ocs_version = args.ocs_version
    load_config(args.ocsci_conf)
    ocs_registry_image = framework.config.DEPLOYMENT.get('ocs_registry_image')
    if args.ocs_registry_image:
        ocs_registry_image = args.ocs_registry_image
    if ocs_registry_image:
        ocs_version = utils.get_ocs_version_from_image(ocs_registry_image)
    if ocs_version:
        version_config_file = os.path.join(CONF_DIR, 'ocs_version',
                                           f'ocs-{ocs_version}.yaml')
        load_config([version_config_file])
    framework.config.RUN['run_id'] = int(time.time())
    bin_dir = framework.config.RUN.get('bin_dir')
    if bin_dir:
        framework.config.RUN['bin_dir'] = os.path.abspath(
            os.path.expanduser(framework.config.RUN['bin_dir']))
        utils.add_path_to_env_path(framework.config.RUN['bin_dir'])
    check_config_requirements()
Example #2
0
def init_ocsci_conf(arguments=None):
    """
    Update the config object with any files passed via the CLI

    Args:
        arguments (list): Arguments for pytest execution
    """
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument("--ocsci-conf", action="append", default=[])
    parser.add_argument(
        "--ocs-version",
        action="store",
        choices=["4.2", "4.3", "4.4", "4.5", "4.6", "4.7", "4.8", "4.9"],
    )
    parser.add_argument("--ocs-registry-image")
    parser.add_argument("--flexy-env-file", default="", help="Path to flexy env file")
    parser.add_argument(
        "--disable-components",
        action="append",
        choices=["rgw", "cephfs", "noobaa", "blockpools"],
        help=("disable deployment of ocs components:rgw, cephfs, noobaa, blockpools."),
    )
    args, unknown = parser.parse_known_args(args=arguments)
    ocs_version = args.ocs_version
    load_config(args.ocsci_conf)
    ocs_registry_image = framework.config.DEPLOYMENT.get("ocs_registry_image")
    if args.ocs_registry_image:
        ocs_registry_image = args.ocs_registry_image
    if ocs_registry_image:
        ocs_version_from_image = utils.get_ocs_version_from_image(ocs_registry_image)
        if ocs_version and ocs_version != ocs_version_from_image:
            framework.config.DEPLOYMENT["ignore_csv_mismatch"] = True
        if not ocs_version:
            ocs_version = ocs_version_from_image
    if ocs_version:
        version_config_file = os.path.join(
            OCS_VERSION_CONF_DIR, f"ocs-{ocs_version}.yaml"
        )
        load_config([version_config_file])

        ocp_version = framework.config.DEPLOYMENT["default_ocp_version"]
        if "ocp_version" in framework.config.DEPLOYMENT:
            ocp_version = framework.config.DEPLOYMENT["ocp_version"]
        ocp_version_config = os.path.join(
            OCP_VERSION_CONF_DIR, f"ocp-{ocp_version}-config.yaml"
        )
        load_config([ocp_version_config])
    if args.flexy_env_file:
        framework.config.ENV_DATA["flexy_env_file"] = args.flexy_env_file

    framework.config.RUN["run_id"] = int(time.time())
    bin_dir = framework.config.RUN.get("bin_dir")
    if bin_dir:
        framework.config.RUN["bin_dir"] = os.path.abspath(
            os.path.expanduser(framework.config.RUN["bin_dir"])
        )
        utils.add_path_to_env_path(framework.config.RUN["bin_dir"])
    if args.disable_components:
        framework.config.ENV_DATA["disable_components"] = args.disable_components
    check_config_requirements()
Example #3
0
def init_ocsci_conf(arguments=None):
    """
    Update the config object with any files passed via the CLI

    Args:
        arguments (list): Arguments for pytest execution
    """
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument('--ocsci-conf', action='append', default=[])
    parser.add_argument('--ocs-version',
                        action='store',
                        choices=['4.2', '4.3', '4.4', '4.5', '4.6'])
    parser.add_argument('--ocs-registry-image')
    parser.add_argument('--flexy-env-file',
                        default='',
                        help="Path to flexy env file")
    args, unknown = parser.parse_known_args(args=arguments)
    ocs_version = args.ocs_version
    load_config(args.ocsci_conf)
    ocs_registry_image = framework.config.DEPLOYMENT.get('ocs_registry_image')
    if args.ocs_registry_image:
        ocs_registry_image = args.ocs_registry_image
    if ocs_registry_image:
        ocs_version_from_image = utils.get_ocs_version_from_image(
            ocs_registry_image)
        if ocs_version and ocs_version != ocs_version_from_image:
            framework.config.DEPLOYMENT['ignore_csv_mismatch'] = True
        if not ocs_version:
            ocs_version = ocs_version_from_image
    if ocs_version:
        version_config_file = os.path.join(CONF_DIR, 'ocs_version',
                                           f'ocs-{ocs_version}.yaml')
        load_config([version_config_file])

        default_ocp_version = framework.config.DEPLOYMENT[
            'default_ocp_version']
        ocp_version_config = os.path.join(
            CONF_DIR, 'ocp_version', f'ocp-{default_ocp_version}-config.yaml')
        load_config([ocp_version_config])
    if args.flexy_env_file:
        framework.config.ENV_DATA['flexy_env_file'] = args.flexy_env_file

    framework.config.RUN['run_id'] = int(time.time())
    bin_dir = framework.config.RUN.get('bin_dir')
    if bin_dir:
        framework.config.RUN['bin_dir'] = os.path.abspath(
            os.path.expanduser(framework.config.RUN['bin_dir']))
        utils.add_path_to_env_path(framework.config.RUN['bin_dir'])
    check_config_requirements()
Example #4
0
    def get_upgrade_version(self):
        """
        Getting the required upgrade version

        Returns:
            str: version to be upgraded

        """
        upgrade_version = config.UPGRADE.get("upgrade_ocs_version",
                                             self.version_before_upgrade)
        if self.ocs_registry_image:
            upgrade_version = get_ocs_version_from_image(
                self.ocs_registry_image)

        return upgrade_version
Example #5
0
def process_ocsci_conf(arguments):
    parser = argparse.ArgumentParser(add_help=False)
    parser.add_argument("--ocsci-conf", action="append", default=[])
    parser.add_argument(
        "--ocs-version",
        action="store",
        choices=[
            "4.2",
            "4.3",
            "4.4",
            "4.5",
            "4.6",
            "4.6-eus",
            "4.7",
            "4.7-eus",
            "4.8",
            "4.8-eus",
            "4.9",
            "4.10",
            "4.11",
        ],
    )
    parser.add_argument("--ocs-registry-image")
    parser.add_argument("--flexy-env-file",
                        default="",
                        help="Path to flexy env file")
    parser.add_argument(
        "--disable-components",
        action="append",
        choices=["rgw", "cephfs", "noobaa", "blockpools"],
        help=
        ("disable deployment of ocs components:rgw, cephfs, noobaa, blockpools."
         ),
    )
    parser.add_argument(
        "--default-cluster-context-index",
        action="store",
        default=0,
    )

    args, unknown = parser.parse_known_args(args=arguments)
    load_config(args.ocsci_conf)
    ocs_version = args.ocs_version or framework.config.ENV_DATA.get(
        "ocs_version")
    ocs_registry_image = framework.config.DEPLOYMENT.get("ocs_registry_image")
    if args.ocs_registry_image:
        ocs_registry_image = args.ocs_registry_image
    if ocs_registry_image:
        ocs_version_from_image = utils.get_ocs_version_from_image(
            ocs_registry_image)
        if ocs_version and ocs_version != ocs_version_from_image:
            framework.config.DEPLOYMENT["ignore_csv_mismatch"] = True
        ocs_version = ocs_version_from_image
    if ocs_version:
        version_config_file = os.path.join(OCS_VERSION_CONF_DIR,
                                           f"ocs-{ocs_version}.yaml")
        load_config([version_config_file])

        ocp_version = framework.config.DEPLOYMENT["default_ocp_version"]
        if "ocp_version" in framework.config.DEPLOYMENT:
            ocp_version = framework.config.DEPLOYMENT["ocp_version"]
        ocp_version_config = os.path.join(OCP_VERSION_CONF_DIR,
                                          f"ocp-{ocp_version}-config.yaml")
        load_config([ocp_version_config])
        # As we may have overridden values specified in the original config,
        # reload it to get them back
        load_config(args.ocsci_conf)
    if args.flexy_env_file:
        framework.config.ENV_DATA["flexy_env_file"] = args.flexy_env_file

    framework.config.RUN["run_id"] = int(time.time())
    bin_dir = framework.config.RUN.get("bin_dir")
    if bin_dir:
        framework.config.RUN["bin_dir"] = os.path.abspath(
            os.path.expanduser(framework.config.RUN["bin_dir"]))
        utils.add_path_to_env_path(framework.config.RUN["bin_dir"])
    if args.disable_components:
        framework.config.ENV_DATA[
            "disable_components"] = args.disable_components
    framework.config.ENV_DATA["default_cluster_context_index"] = (
        int(args.default_cluster_context_index)
        if args.default_cluster_context_index else 0)
Example #6
0
def test_upgrade():
    ceph_cluster = CephCluster()
    with CephHealthMonitor(ceph_cluster):
        namespace = config.ENV_DATA['cluster_namespace']
        version_before_upgrade = config.ENV_DATA.get("ocs_version")
        upgrade_version = config.UPGRADE.get("upgrade_ocs_version",
                                             version_before_upgrade)
        ocs_registry_image = config.UPGRADE.get('upgrade_ocs_registry_image')
        if ocs_registry_image:
            upgrade_version = get_ocs_version_from_image(ocs_registry_image)
        parsed_version_before_upgrade = parse_version(version_before_upgrade)
        parsed_upgrade_version = parse_version(upgrade_version)
        assert parsed_upgrade_version >= parsed_version_before_upgrade, (
            f"Version you would like to upgrade to: {upgrade_version} "
            f"is not higher or equal to the version you currently running: "
            f"{version_before_upgrade}")
        operator_selector = get_selector_for_ocs_operator()
        package_manifest = PackageManifest(
            resource_name=OCS_OPERATOR_NAME,
            selector=operator_selector,
        )
        channel = config.DEPLOYMENT.get('ocs_csv_channel')
        csv_name_pre_upgrade = package_manifest.get_current_csv(channel)
        log.info(f"CSV name before upgrade is: {csv_name_pre_upgrade}")
        csv_pre_upgrade = CSV(resource_name=csv_name_pre_upgrade,
                              namespace=namespace)
        pre_upgrade_images = get_images(csv_pre_upgrade.get())
        version_change = parsed_upgrade_version > parsed_version_before_upgrade
        if version_change:
            version_config_file = os.path.join(constants.CONF_DIR,
                                               'ocs_version',
                                               f'ocs-{upgrade_version}.yaml')
            load_config_file(version_config_file)
        ocs_catalog = CatalogSource(
            resource_name=constants.OPERATOR_CATALOG_SOURCE_NAME,
            namespace=constants.MARKETPLACE_NAMESPACE,
        )
        upgrade_in_current_source = config.UPGRADE.get(
            'upgrade_in_current_source', False)
        if not upgrade_in_current_source:
            if not ocs_catalog.is_exist() and not upgrade_in_current_source:
                log.info("OCS catalog source doesn't exist. Creating new one.")
                create_catalog_source(ocs_registry_image, ignore_upgrade=True)
            image_url = ocs_catalog.get_image_url()
            image_tag = ocs_catalog.get_image_name()
            log.info(f"Current image is: {image_url}, tag: {image_tag}")
            if ocs_registry_image:
                image_url, new_image_tag = ocs_registry_image.split(':')
            elif (config.UPGRADE.get('upgrade_to_latest', True)
                  or version_change):
                new_image_tag = get_latest_ds_olm_tag()
            else:
                new_image_tag = get_next_version_available_for_upgrade(
                    image_tag)
            cs_data = deepcopy(ocs_catalog.data)
            image_for_upgrade = ':'.join([image_url, new_image_tag])
            log.info(f"Image: {image_for_upgrade} will be used for upgrade.")
            cs_data['spec']['image'] = image_for_upgrade

            with NamedTemporaryFile() as cs_yaml:
                dump_data_to_temp_yaml(cs_data, cs_yaml.name)
                ocs_catalog.apply(cs_yaml.name)
        # Wait for the new package manifest for upgrade.
        operator_selector = get_selector_for_ocs_operator()
        package_manifest = PackageManifest(
            resource_name=OCS_OPERATOR_NAME,
            selector=operator_selector,
        )
        package_manifest.wait_for_resource()
        channel = config.DEPLOYMENT.get('ocs_csv_channel')
        if not channel:
            channel = package_manifest.get_default_channel()

        # update subscription
        subscription = OCP(
            resource_name=constants.OCS_SUBSCRIPTION,
            kind='subscription',
            namespace=config.ENV_DATA['cluster_namespace'],
        )
        current_ocs_source = subscription.data['spec']['source']
        log.info(f"Current OCS subscription source: {current_ocs_source}")
        ocs_source = current_ocs_source if upgrade_in_current_source else (
            constants.OPERATOR_CATALOG_SOURCE_NAME)
        patch_subscription_cmd = (
            f'oc patch subscription {constants.OCS_SUBSCRIPTION} '
            f'-n {namespace} --type merge -p \'{{"spec":{{"channel": '
            f'"{channel}", "source": "{ocs_source}"}}}}\'')
        run_cmd(patch_subscription_cmd)

        subscription_plan_approval = config.DEPLOYMENT.get(
            'subscription_plan_approval')
        if subscription_plan_approval == 'Manual':
            wait_for_install_plan_and_approve(namespace)
        attempts = 145
        for attempt in range(1, attempts + 1):
            log.info(f"Attempt {attempt}/{attempts} to check CSV upgraded.")
            csv_name_post_upgrade = package_manifest.get_current_csv(channel)
            if csv_name_post_upgrade == csv_name_pre_upgrade:
                log.info(f"CSV is still: {csv_name_post_upgrade}")
                sleep(5)
            else:
                log.info(f"CSV now upgraded to: {csv_name_post_upgrade}")
                break
            if attempts == attempt:
                raise TimeoutException("No new CSV found after upgrade!")
        csv_post_upgrade = CSV(resource_name=csv_name_post_upgrade,
                               namespace=namespace)
        log.info(
            f"Waiting for CSV {csv_name_post_upgrade} to be in succeeded state"
        )
        if version_before_upgrade == '4.2' and upgrade_version == '4.3':
            log.info("Force creating Ceph toolbox after upgrade 4.2 -> 4.3")
            setup_ceph_toolbox(force_setup=True)
        osd_count = get_osd_count()
        csv_post_upgrade.wait_for_phase("Succeeded", timeout=200 * osd_count)
        post_upgrade_images = get_images(csv_post_upgrade.get())
        old_images, _, _ = get_upgrade_image_info(pre_upgrade_images,
                                                  post_upgrade_images)
        verify_image_versions(old_images, parsed_upgrade_version)
        ocs_install_verification(
            timeout=600,
            skip_osd_distribution_check=True,
            ocs_registry_image=ocs_registry_image,
            post_upgrade_verification=True,
        )