Skip to content

Commit 093ed4a

Browse files
[SPM] Add logic to disable the feature before stopping it and enabling it before starting (sonic-net#3344)
What I did Add logic to disable the feature before stopping and enabling it before starting in order to properly clean the systemd symlinks to avoid issues with delayed attribute explained in the How to verify it section. How I did it Add the systemctl disable ... after the systemctl stop... and the systemctl enable ... before the systemctl start .. for some feature. How to verify it Add repository for some featureX sonic-package-manager repository <featureX> <URL> Install featureX version 1.0.0 where the delayed flag is equal to false (delayed flag means - the feature will be started right after the system boots or after the PortInitDone event) sonic-package-manager install featureX==1.0.0 -y Enable the feature in SONiC config feature state featureX enabled Install featureX version 1.0.1 where the delayed flag is equal to true sonic-package-manager install featureX==1.0.1 -y Check the manifest file to verify the delayed field value sonic-package-manager show package manifest featureX config save -y reboot Check that the featureX is delayed on the system start
1 parent 7d013df commit 093ed4a

File tree

2 files changed

+13
-2
lines changed

2 files changed

+13
-2
lines changed

sonic_package_manager/manager.py

+2
Original file line numberDiff line numberDiff line change
@@ -1017,8 +1017,10 @@ def _get_installed_packages_except(self, package: Package) -> Dict[str, Package]
10171017

10181018
def _stop_feature(self, package: Package):
10191019
self._systemctl_action(package, 'stop')
1020+
self._systemctl_action(package, 'disable')
10201021

10211022
def _start_feature(self, package: Package):
1023+
self._systemctl_action(package, 'enable')
10221024
self._systemctl_action(package, 'start')
10231025

10241026
def _systemctl_action(self, package: Package, action: str):

tests/sonic_package_manager/test_manager.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,7 @@ def test_manager_installation_version_range(package_manager):
324324
package_manager.install(f'test-package>=1.6.0')
325325

326326

327-
def test_manager_upgrade(package_manager, sonic_fs):
327+
def test_manager_upgrade(package_manager, sonic_fs, mock_run_command):
328328
package_manager.install('test-package-6=1.5.0')
329329
package = package_manager.get_installed_package('test-package-6')
330330

@@ -333,6 +333,15 @@ def test_manager_upgrade(package_manager, sonic_fs):
333333
assert upgraded_package.entry.version == Version.parse('2.0.0')
334334
assert upgraded_package.entry.default_reference == package.entry.default_reference
335335

336+
mock_run_command.assert_has_calls(
337+
[
338+
call(['systemctl', 'stop', 'test-package-6']),
339+
call(['systemctl', 'disable', 'test-package-6']),
340+
call(['systemctl', 'enable', 'test-package-6']),
341+
call(['systemctl', 'start', 'test-package-6']),
342+
]
343+
)
344+
336345

337346
def test_manager_package_reset(package_manager, sonic_fs):
338347
package_manager.install('test-package-6=1.5.0')
@@ -370,7 +379,7 @@ def __init__(self, dockerd_sock):
370379
class Image:
371380
def __init__(self, image_id):
372381
self.image_id = image_id
373-
382+
374383
def save(self, named):
375384
return ["named: {}".format(named).encode()]
376385

0 commit comments

Comments
 (0)