예제 #1
0
def verify_version_compatibility(sysadmin_client: Client,
                                 target_vcd_api_version, is_mqtt_extension):
    cse_version = server_utils.get_installed_cse_version()
    ext_cse_version, ext_vcd_api_version = \
        configure_cse.parse_cse_extension_description(
            sysadmin_client, is_mqtt_extension)
    if cse_version == server_constants.UNKNOWN_CSE_VERSION or \
            ext_vcd_api_version == server_constants.UNKNOWN_VCD_API_VERSION:
        # version data doesn't exist, so CSE <= 2.6.1 was installed
        raise cse_exception.VersionCompatibilityError(
            "CSE and VCD API version data not found on VCD. "
            "Upgrade CSE to update version data.")

    version_error_msg = ''
    if cse_version > ext_cse_version:
        version_error_msg += \
            f"CSE Server version ({cse_version}) is higher than what was " \
            f"previously registered with VCD ({ext_cse_version}). " \
            f"Upgrade CSE to update CSE version on VCD."
    if cse_version < ext_cse_version:
        version_error_msg += \
            f"CSE Server version ({cse_version}) cannot be lower than what " \
            f"was previously registered with VCD ({ext_cse_version})."

    if target_vcd_api_version > ext_vcd_api_version:
        version_error_msg += \
            f"Target VCD API version ({target_vcd_api_version}) is higher " \
            f"than what was previously registered by CSE " \
            f"({ext_vcd_api_version}). Upgrade CSE to update " \
            f"registered VCD API version."
    if target_vcd_api_version < ext_vcd_api_version:
        version_error_msg += \
            f"Target VCD API version ({target_vcd_api_version}) cannot be " \
            f"lower than what was previously registered by " \
            f"CSE ({ext_vcd_api_version})."

    if version_error_msg:
        raise cse_exception.VersionCompatibilityError(version_error_msg)
예제 #2
0
def verify_version_compatibility(sysadmin_client: Client,
                                 should_cse_run_in_legacy_mode: bool,
                                 is_mqtt_extension: bool):
    ext_description = configure_cse.get_extension_description(
        sysadmin_client, is_mqtt_extension)
    dikt = configure_cse.parse_cse_extension_description(ext_description)
    ext_cse_version = dikt[server_constants.CSE_VERSION_KEY]
    ext_in_legacy_mode = dikt[server_constants.LEGACY_MODE_KEY]
    ext_rde_in_use = dikt[server_constants.RDE_VERSION_IN_USE_KEY]

    # version data doesn't exist, so installed CSE is <= 2.6.1
    if ext_cse_version == server_constants.UNKNOWN_CSE_VERSION:
        raise cse_exception.VersionCompatibilityError(
            "CSE and VCD API version data not found on VCD. "
            "Please upgrade CSE and retry.")

    error_msg = ''
    cse_version = server_utils.get_installed_cse_version()
    # Trying to use newer version of CSE without running `cse upgrade`
    if cse_version > ext_cse_version:
        error_msg += \
            f"CSE Server version ({cse_version}) is higher than what was " \
            f"previously registered with VCD ({ext_cse_version}). " \
            "Please upgrade CSE and retry."
    # Trying to use an older version of CSE
    if cse_version < ext_cse_version:
        error_msg += \
            f"CSE Server version ({cse_version}) cannot be lower than what " \
            f"was previously registered with VCD ({ext_cse_version}). " \
            "Please use a newer version of CSE."

    # Trying to run a legacy CSE in non-legacy mode
    if not should_cse_run_in_legacy_mode and ext_in_legacy_mode:
        error_msg += \
            "Installed CSE is configured in legacy mode. Unable to run it " \
            "in non-legacy mode. Please use `cse upgrade` to configure " \
            "CSE to operate in non-legacy mode."

    # Trying to run a non legacy CSE in legacy mode
    if should_cse_run_in_legacy_mode and not ext_in_legacy_mode:
        error_msg += \
            "Installed CSE is configured in non-legacy mode. Unable to run " \
            "it in legacy mode."

    expected_runtime_rde_version = semantic_version.Version(
        server_utils.get_rde_version_in_use())  # noqa: E501
    if not ext_in_legacy_mode:
        # VCD downgrade?
        if ext_rde_in_use > expected_runtime_rde_version:
            error_msg += \
                "Installed CSE Runtime Defined Entity (RDE) version " \
                f"({ext_rde_in_use}) is higher than the expected RDE " \
                f"version ({expected_runtime_rde_version}). Please " \
                "upgrade VCD to proceed."

        # VCD got upgraded without `cse upgrade` being run.
        if ext_rde_in_use < expected_runtime_rde_version:
            error_msg += \
                "Installed CSE Runtime Defined Entity (RDE) version " \
                f"({ext_rde_in_use}) is lower than the expected RDE " \
                f"version ({expected_runtime_rde_version}). Please " \
                "use `cse upgrade` to upgrade CSE RDE version and " \
                "retry."

    if error_msg:
        raise cse_exception.VersionCompatibilityError(error_msg)