You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

36 lines
1.8 KiB

# Copyright (C) 2005-2024 Splunk Inc. All Rights Reserved.
from ITOA.version_check import VersionCheck
from .migration_precheck_registry import MIGRATION_PRECHECK_REGISTRY
class MigrationPreCheckResolver(object):
"""
Resolves the list of migration prechecks to execute given a source version and target version
"""
def __init__(self, migration_pre_check_registry=MIGRATION_PRECHECK_REGISTRY):
self.migration_pre_check_registry = migration_pre_check_registry
def resolve_pre_check_specs(self, old_version, new_version):
"""
Resolve the prechecks given the old version to migrate from and new version to migrate to
:param old_version: the version to migrate from
:param new_version: the version to migrate to
:return: a list of precheck items
"""
def _registry_filter(pre_check_spec):
old_version_allowed_range = pre_check_spec['old_version']
new_version_allowed_range = pre_check_spec['new_version']
if isinstance(new_version_allowed_range, str):
new_version_allowed_range = (new_version_allowed_range, None)
if isinstance(old_version_allowed_range, str):
old_version_allowed_range = (old_version_allowed_range, None)
old_version_start, old_version_end = old_version_allowed_range
new_version_start, new_version_end = new_version_allowed_range
old_version_in_range = VersionCheck.in_range(old_version, old_version_start, old_version_end)
new_version_in_range = VersionCheck.in_range(new_version, new_version_start, new_version_end)
return old_version_in_range and new_version_in_range
resolved_pre_check_specs = list(filter(_registry_filter, self.migration_pre_check_registry))
return resolved_pre_check_specs