Skip to content

Commit d421d21

Browse files
authored
Merge pull request #462 from SUSE/fix_offline_migrations_pre_check
Fix offline migrations pre check
2 parents 4f705e2 + 1acf651 commit d421d21

6 files changed

Lines changed: 86 additions & 7 deletions

File tree

suse_migration_services/migration_target.py

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import platform
2020
from glob import glob
2121
from fnmatch import fnmatch
22+
from textwrap import dedent
2223

2324
from suse_migration_services.migration_config import MigrationConfig
2425
from suse_migration_services.defaults import Defaults
@@ -41,9 +42,29 @@ def get_migration_target():
4142
migration_iso = glob('/migration-image/*-*Migration.*.iso')
4243
migration_iso = migration_iso[0] if migration_iso else ''
4344

44-
if fnmatch(migration_iso, '*SLES16*-*Migration*.iso'):
45-
# return default migration target
45+
if fnmatch(migration_iso, '*SLES15-SAP*Migration*.iso'):
46+
return {'identifier': 'SLES_SAP', 'version': '15.4', 'arch': platform.machine()}
47+
elif fnmatch(migration_iso, '*SLES16-SAP*Migration*.iso'):
48+
return {'identifier': 'SLES_SAP', 'version': '16.0', 'arch': platform.machine()}
49+
elif fnmatch(migration_iso, '*SLES16*-*Migration*.iso'):
4650
return {'identifier': 'SLES', 'version': '16.0', 'arch': platform.machine()}
4751
else:
48-
# return default migration target
49-
return {'identifier': 'SLES', 'version': '15.4', 'arch': platform.machine()}
52+
message = dedent(
53+
'''\n
54+
Migration target cannot be detected, fallback to SLES 15.7
55+
56+
Please make sure to install one of the following Migration packages
57+
58+
- SLES15-Migration
59+
- SLES15-SAP-Migration
60+
- SLES16-Migration
61+
- SLES16-SAP-Migration
62+
63+
Only with an installed Migration package, the DMS knows which migration
64+
target to use and can ask the registration server for an upgrade path.
65+
The following request to the registration server might provide incorrect
66+
information due to an assumption of the migration target:
67+
'''
68+
)
69+
log.warning(message)
70+
return {'identifier': 'SLES', 'version': '15.7', 'arch': platform.machine()}

suse_migration_services/prechecks/scc.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ def get_scc_credentials():
103103

104104
def get_registration_server_url():
105105
suseconnect_config = '/etc/SUSEConnect'
106+
if not os.path.isfile(suseconnect_config):
107+
return 'https://scc.suse.com'
106108
if os.path.isfile(suseconnect_config):
107109
try:
108110
with open(suseconnect_config, 'r') as config:

test/unit/migration_config_test.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -332,7 +332,11 @@ def test_get_migration_config_merge(
332332

333333
# Check no other key's exists
334334
assert list(self.config.config_data.keys()) == [
335-
'preserve', 'soft_reboot', 'network', 'debug', 'migration_product'
335+
'preserve',
336+
'soft_reboot',
337+
'network',
338+
'debug',
339+
'migration_product',
336340
]
337341

338342
def test_merge_config_dicts(self):

test/unit/migration_target_test.py

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def test_get_migration_target_no_migration_image_found(
3030
mock_os_path_isfile.return_value = False
3131
assert MigrationTarget.get_migration_target() == {
3232
'identifier': 'SLES',
33-
'version': '15.4',
33+
'version': '15.7',
3434
'arch': 'x86_64',
3535
}
3636

@@ -49,10 +49,52 @@ def test_get_migration_target_sles15(
4949
mock_os_path_isfile.return_value = False
5050
assert MigrationTarget.get_migration_target() == {
5151
'identifier': 'SLES',
52+
'version': '15.7',
53+
'arch': 'x86_64',
54+
}
55+
56+
@patch('platform.machine')
57+
@patch('os.path.isfile')
58+
@patch('suse_migration_services.migration_target.glob')
59+
@patch('suse_migration_services.migration_target.MigrationConfig')
60+
def test_get_migration_target_sles_sap15(
61+
self, mock_MigrationConfig, mock_glob, mock_os_path_isfile, mock_platform_machine
62+
):
63+
migration_config = Mock()
64+
migration_config.config_data = {}
65+
mock_MigrationConfig.return_value = migration_config
66+
mock_platform_machine.return_value = 'x86_64'
67+
mock_glob.return_value = [
68+
'/migration-image/SLES15-SAP_Migration.x86_64-2.1.9-Build6.64.99.iso'
69+
]
70+
mock_os_path_isfile.return_value = False
71+
assert MigrationTarget.get_migration_target() == {
72+
'identifier': 'SLES_SAP',
5273
'version': '15.4',
5374
'arch': 'x86_64',
5475
}
5576

77+
@patch('platform.machine')
78+
@patch('os.path.isfile')
79+
@patch('suse_migration_services.migration_target.glob')
80+
@patch('suse_migration_services.migration_target.MigrationConfig')
81+
def test_get_migration_target_sles_sap16(
82+
self, mock_MigrationConfig, mock_glob, mock_os_path_isfile, mock_platform_machine
83+
):
84+
migration_config = Mock()
85+
migration_config.config_data = {}
86+
mock_MigrationConfig.return_value = migration_config
87+
mock_platform_machine.return_value = 'x86_64'
88+
mock_glob.return_value = [
89+
'/migration-image/SLES16-SAP_Migration.x86_64-2.1.9-Build6.64.99.iso'
90+
]
91+
mock_os_path_isfile.return_value = False
92+
assert MigrationTarget.get_migration_target() == {
93+
'identifier': 'SLES_SAP',
94+
'version': '16.0',
95+
'arch': 'x86_64',
96+
}
97+
5698
@patch('platform.machine')
5799
@patch('os.path.isfile')
58100
@patch('suse_migration_services.migration_target.glob')

test/unit/pre_checks_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from suse_migration_services.exceptions import DistMigrationCommandException
2222
from suse_migration_services.defaults import Defaults
2323
from suse_migration_services.migration_target import MigrationTarget
24+
from suse_migration_services.prechecks.scc import get_registration_server_url
2425

2526

2627
@patch('suse_migration_services.logger.Logger.setup')
@@ -632,6 +633,13 @@ def test_check_lsm_migration_apparmor_disabled(
632633
check_lsm.check_lsm(migration_system=False)
633634
assert 'AppArmor disabled' in self._caplog.text
634635

636+
@patch('os.path.isfile')
637+
def test_check_scc_migration_default_registration_server_url(
638+
self, mock_os_path_isfile, mock_os_geteuid, mock_log
639+
):
640+
mock_os_path_isfile.return_value = False
641+
assert get_registration_server_url() == 'https://scc.suse.com'
642+
635643
@patch('yaml.safe_load')
636644
@patch('glob.glob')
637645
@patch('os.path.isfile')

test/unit/units/reboot_test.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ def skip_device(device):
5858
fstab_mock.get_devices.return_value = fstab.get_devices()
5959
mock_Fstab.return_value = fstab_mock
6060
mock_get_migration_config_file.return_value = '../data/migration-config.yml'
61-
mock_get_system_migration_custom_config_file.return_value = '../data/migration-config-soft-reboot.yml'
61+
mock_get_system_migration_custom_config_file.return_value = (
62+
'../data/migration-config-soft-reboot.yml'
63+
)
6264
main()
6365
assert mock_Command_run.call_args_list == [
6466
call(['systemctl', 'stop', 'suse-migration-console-log'], raise_on_error=False),

0 commit comments

Comments
 (0)