Allow upgrades only from supported versions
Introduces the `can_upgrade_from` field which is a list of supported versions. We can control upgrade process now by this field, so user won't start upgrade from the Fuel versions that we have not tested for upgrade. Change-Id: Id56a09845ade075fa4751c7eb164e065d5cad2ef Closes-Bug: #1392756
This commit is contained in:
parent
3e98ea8a04
commit
ffbb4da300
@ -242,3 +242,25 @@ class CheckUpgradeVersions(BaseBeforeUpgradeChecker):
|
||||
|
||||
if err_msg:
|
||||
raise errors.WrongVersionError(err_msg)
|
||||
|
||||
|
||||
class CheckRequiredVersion(BaseBeforeUpgradeChecker):
|
||||
"""Checks that user's going to upgrade Fuel from the required version.
|
||||
|
||||
:param context: a context object with config and required space info
|
||||
"""
|
||||
|
||||
def __init__(self, context):
|
||||
#: version of fuel which user wants to upgrade from
|
||||
self.from_version = context.config.from_version
|
||||
#: a list of versions from which user can upgrade
|
||||
self.can_upgrade_from = context.config.can_upgrade_from
|
||||
|
||||
def check(self):
|
||||
logger.info('Check required Fuel version')
|
||||
|
||||
if self.from_version not in self.can_upgrade_from:
|
||||
raise errors.WrongVersionError(
|
||||
'Cannot upgrade from Fuel {0}. You can upgrade only from '
|
||||
'one of next versions: {1}'.format(
|
||||
self.from_version, ', '.join(self.can_upgrade_from)))
|
||||
|
@ -26,6 +26,7 @@ from fuel_upgrade.engines.openstack import OpenStackUpgrader
|
||||
from fuel_upgrade.before_upgrade_checker import CheckFreeSpace
|
||||
from fuel_upgrade.before_upgrade_checker import CheckNoRunningOstf
|
||||
from fuel_upgrade.before_upgrade_checker import CheckNoRunningTasks
|
||||
from fuel_upgrade.before_upgrade_checker import CheckRequiredVersion
|
||||
from fuel_upgrade.before_upgrade_checker import CheckUpgradeVersions
|
||||
|
||||
|
||||
@ -51,6 +52,7 @@ class CheckerManager(object):
|
||||
CHECKERS_MAPPING = {
|
||||
DockerUpgrader: [
|
||||
CheckUpgradeVersions,
|
||||
CheckRequiredVersion,
|
||||
CheckFreeSpace,
|
||||
CheckNoRunningTasks,
|
||||
CheckNoRunningOstf],
|
||||
|
@ -228,6 +228,8 @@ def config(update_path, admin_password):
|
||||
"""
|
||||
fuel_config_path = '/etc/fuel/'
|
||||
|
||||
can_upgrade_from = ['5.1.1']
|
||||
|
||||
current_fuel_version_path = '/etc/fuel/version.yaml'
|
||||
new_upgrade_version_path = join(update_path, 'config/version.yaml')
|
||||
|
||||
|
@ -260,16 +260,17 @@ class OpenStackUpgrader(UpgradeEngine):
|
||||
metadata_path = self.config.openstack['metadata']
|
||||
|
||||
# do nothing in case of metadata.yaml absence - just assume
|
||||
# that we full repos
|
||||
# that we have full repos
|
||||
if not os.path.exists(metadata_path):
|
||||
return
|
||||
|
||||
with io.open(metadata_path, 'r', encoding='utf-8') as f:
|
||||
metadata = yaml.load(f)
|
||||
metadata = yaml.load(f) or {}
|
||||
|
||||
# keep diff-based releases
|
||||
releases = filter(
|
||||
lambda r: r['version'] in metadata['diff_releases'], releases)
|
||||
lambda r: r['version'] in metadata.get('diff_releases', {}),
|
||||
releases)
|
||||
|
||||
# inject repos from base releases
|
||||
for release in releases:
|
||||
|
@ -17,10 +17,12 @@
|
||||
import mock
|
||||
|
||||
import requests
|
||||
import six
|
||||
|
||||
from fuel_upgrade.before_upgrade_checker import CheckFreeSpace
|
||||
from fuel_upgrade.before_upgrade_checker import CheckNoRunningOstf
|
||||
from fuel_upgrade.before_upgrade_checker import CheckNoRunningTasks
|
||||
from fuel_upgrade.before_upgrade_checker import CheckRequiredVersion
|
||||
from fuel_upgrade.before_upgrade_checker import CheckUpgradeVersions
|
||||
from fuel_upgrade import errors
|
||||
from fuel_upgrade.tests.base import BaseTestCase
|
||||
@ -202,3 +204,26 @@ class TestCheckUpgradeVersions(BaseTestCase):
|
||||
err_msg,
|
||||
self.checker.check)
|
||||
compare_mock.assert_called_once_with('0', '9999')
|
||||
|
||||
|
||||
class TestCheckRequiredVersions(BaseTestCase):
|
||||
|
||||
def get_checker(self, user_conf={}):
|
||||
config = self.fake_config
|
||||
|
||||
for key, value in six.iteritems(user_conf):
|
||||
setattr(config, key, value)
|
||||
|
||||
return CheckRequiredVersion(mock.Mock(config=config))
|
||||
|
||||
def test_check_support_version(self):
|
||||
checker = self.get_checker({
|
||||
'from_version': '5.1.1',
|
||||
'can_upgrade_from': ['5.1.1']})
|
||||
checker.check()
|
||||
|
||||
def test_check_unsupport_version(self):
|
||||
checker = self.get_checker({
|
||||
'from_version': '5.1',
|
||||
'can_upgrade_from': ['5.1.1']})
|
||||
self.assertRaises(errors.WrongVersionError, checker.check)
|
||||
|
Loading…
Reference in New Issue
Block a user