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