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