|
44 | 44 | from sonic_package_manager.reference import PackageReference
|
45 | 45 | from sonic_package_manager.registry import RegistryResolver
|
46 | 46 | from sonic_package_manager.service_creator import SONIC_CLI_COMMANDS
|
47 |
| -from sonic_package_manager.service_creator.creator import ServiceCreator |
| 47 | +from sonic_package_manager.service_creator.creator import ( |
| 48 | + ServiceCreator, |
| 49 | + run_command |
| 50 | +) |
48 | 51 | from sonic_package_manager.service_creator.feature import FeatureRegistry
|
49 | 52 | from sonic_package_manager.service_creator.sonic_db import (
|
50 | 53 | INIT_CFG_JSON,
|
@@ -483,7 +486,7 @@ def uninstall(self, name: str,
|
483 | 486 | # After all checks are passed we proceed to actual uninstallation
|
484 | 487 |
|
485 | 488 | try:
|
486 |
| - self._stop_feature(package) |
| 489 | + self._disable_feature(package) |
487 | 490 | self._uninstall_cli_plugins(package)
|
488 | 491 | self.service_creator.remove(package, keep_config=keep_config)
|
489 | 492 | self.service_creator.generate_shutdown_sequence_files(
|
@@ -934,18 +937,29 @@ def _get_installed_packages_except(self, package: Package) -> Dict[str, Package]
|
934 | 937 | packages.pop(package.name)
|
935 | 938 | return packages
|
936 | 939 |
|
937 |
| - def _start_feature(self, package: Package, block: bool = True): |
938 |
| - """ Starts the feature and blocks till operation is finished if |
939 |
| - block argument is set to True. |
| 940 | + def _stop_feature(self, package: Package): |
| 941 | + self._systemctl_action(package, 'stop') |
940 | 942 |
|
941 |
| - Args: |
942 |
| - package: Package object of the feature that will be started. |
943 |
| - block: Whether to block for operation completion. |
944 |
| - """ |
| 943 | + def _start_feature(self, package: Package): |
| 944 | + self._systemctl_action(package, 'start') |
| 945 | + |
| 946 | + def _systemctl_action(self, package: Package, action: str): |
| 947 | + """ Execute systemctl action for a service. """ |
| 948 | + |
| 949 | + name = package.manifest['service']['name'] |
| 950 | + log.info('Execute systemctl action {} on {} service'.format(action, name)) |
945 | 951 |
|
946 |
| - self._set_feature_state(package, 'enabled', block) |
| 952 | + host_service = package.manifest['service']['host-service'] |
| 953 | + asic_service = package.manifest['service']['asic-service'] |
| 954 | + single_instance = host_service or (asic_service and not self.is_multi_npu) |
| 955 | + multi_instance = asic_service and self.is_multi_npu |
| 956 | + if single_instance: |
| 957 | + run_command(['systemctl', action, name]) |
| 958 | + if multi_instance: |
| 959 | + for npu in range(self.num_npus): |
| 960 | + run_command(['systemctl', action, f'{name}@{npu}']) |
947 | 961 |
|
948 |
| - def _stop_feature(self, package: Package, block: bool = True): |
| 962 | + def _disable_feature(self, package: Package, block: bool = True): |
949 | 963 | """ Stops the feature and blocks till operation is finished if
|
950 | 964 | block argument is set to True.
|
951 | 965 |
|
|
0 commit comments