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()
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()
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()
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
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)
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, )