Skip to content

Commit 5fc0ee6

Browse files
authored
[spm]: Clean up timers auto generation logic. (sonic-net#3523)
Config Reload Enhancements PR sonic-net/SONiC#1203 does not completely remove TIMERs from SONiC Package Manager infra. This PR is intended to complete the original changes. `Systemd` TIMERs infra was replaced by `hostcfgd` service management. That was done to improve reliability of service management. #### What I did * Removed redundant TIMERs infra #### How I did it * Updated SPM auto generation logic #### How to verify it 1. Install application extension ```bash spm install --from-tarball <app_ext_path> ``` 2. Make sure `delayed` flag is set ```bash docker image inspect <app_ext_image> | jq '.[].Config.Labels["com.azure.sonic.manifest"]' | python -c 'import sys,ast; print(ast.literal_eval(sys.stdin.read()))' | jq .service.delayed true ``` 3. Check no TIMERs were generated
1 parent 2cb8cc6 commit 5fc0ee6

File tree

5 files changed

+2
-76
lines changed

5 files changed

+2
-76
lines changed

sonic-utilities-data/templates/timer.unit.j2

-19
This file was deleted.

sonic_package_manager/service_creator/creator.py

+1-19
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232

3333
SERVICE_FILE_TEMPLATE = 'sonic.service.j2'
34-
TIMER_UNIT_TEMPLATE = 'timer.unit.j2'
3534

3635
SYSTEMD_LOCATION = '/usr/lib/systemd/system'
3736
ETC_SYSTEMD_LOCATION = '/etc/systemd/system'
@@ -305,7 +304,7 @@ def generate_service_mgmt(self, package: Package):
305304
log.info(f'generated {script_path}')
306305

307306
def generate_systemd_service(self, package: Package):
308-
""" Generates systemd service(s) file and timer(s) (if needed) for package.
307+
""" Generates systemd service(s) file for package.
309308
310309
Args:
311310
package: Package object to generate service for.
@@ -333,23 +332,6 @@ def generate_systemd_service(self, package: Package):
333332
render_template(template, output_file, template_vars)
334333
log.info(f'generated {output_file}')
335334

336-
if package.manifest['service']['delayed']:
337-
template_vars = {
338-
'source': get_tmpl_path(TIMER_UNIT_TEMPLATE),
339-
'manifest': package.manifest.unmarshal(),
340-
'multi_instance': False,
341-
}
342-
output_file = os.path.join(SYSTEMD_LOCATION, f'{name}.timer')
343-
template = os.path.join(TEMPLATES_PATH, TIMER_UNIT_TEMPLATE)
344-
render_template(template, output_file, template_vars)
345-
log.info(f'generated {output_file}')
346-
347-
if package.manifest['service']['asic-service']:
348-
output_file = os.path.join(SYSTEMD_LOCATION, f'{name}@.timer')
349-
template_vars['multi_instance'] = True
350-
render_template(template, output_file, template_vars)
351-
log.info(f'generated {output_file}')
352-
353335
def update_generated_services_conf_file(self, package: Package, remove=False):
354336
""" Updates generated_services.conf file.
355337

sonic_package_manager/service_creator/feature.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,7 @@ def update(self,
105105
old_manifest: Manifest,
106106
new_manifest: Manifest):
107107
""" Migrate feature configuration. It can be that non-configurable
108-
feature entries have to be updated. e.g: "delayed" for example if
109-
the new feature introduces a service timer or name of the service has
108+
feature entries have to be updated. e.g: name of the service has
110109
changed, but user configurable entries are not changed).
111110
112111
Args:

tests/sonic_package_manager/conftest.py

-1
Original file line numberDiff line numberDiff line change
@@ -412,7 +412,6 @@ def sonic_fs(fs):
412412
fs.create_dir(SERVICE_MGMT_SCRIPT_LOCATION)
413413
fs.create_file(GENERATED_SERVICES_CONF_FILE)
414414
fs.create_file(os.path.join(TEMPLATES_PATH, SERVICE_FILE_TEMPLATE))
415-
fs.create_file(os.path.join(TEMPLATES_PATH, TIMER_UNIT_TEMPLATE))
416415
fs.create_file(os.path.join(TEMPLATES_PATH, SERVICE_MGMT_SCRIPT_TEMPLATE))
417416
fs.create_file(os.path.join(TEMPLATES_PATH, DOCKER_CTL_SCRIPT_TEMPLATE))
418417
fs.create_file(os.path.join(TEMPLATES_PATH, DEBUG_DUMP_SCRIPT_TEMPLATE))

tests/sonic_package_manager/test_service_creator.py

-35
Original file line numberDiff line numberDiff line change
@@ -137,20 +137,6 @@ def read_file(name):
137137
assert not sonic_fs.exists(os.path.join(ETC_SYSTEMD_LOCATION, '[email protected]'))
138138

139139

140-
def test_service_creator_with_timer_unit(sonic_fs, manifest, service_creator):
141-
entry = PackageEntry('test', 'azure/sonic-test')
142-
package = Package(entry, Metadata(manifest))
143-
service_creator.create(package)
144-
145-
assert not sonic_fs.exists(os.path.join(SYSTEMD_LOCATION, 'test.timer'))
146-
147-
manifest['service']['delayed'] = True
148-
package = Package(entry, Metadata(manifest))
149-
service_creator.create(package)
150-
151-
assert sonic_fs.exists(os.path.join(SYSTEMD_LOCATION, 'test.timer'))
152-
153-
154140
def test_service_creator_with_debug_dump(sonic_fs, manifest, service_creator):
155141
entry = PackageEntry('test', 'azure/sonic-test')
156142
package = Package(entry, Metadata(manifest))
@@ -396,27 +382,6 @@ def test_feature_update(mock_sonic_db, manifest):
396382
], any_order=True)
397383

398384

399-
def test_feature_registration_with_timer(mock_sonic_db, manifest):
400-
manifest['service']['delayed'] = True
401-
mock_connector = Mock()
402-
mock_connector.get_entry = Mock(return_value={})
403-
mock_sonic_db.get_connectors = Mock(return_value=[mock_connector])
404-
mock_sonic_db.get_initial_db_connector = Mock(return_value=mock_connector)
405-
feature_registry = FeatureRegistry(mock_sonic_db)
406-
feature_registry.register(manifest)
407-
mock_connector.set_entry.assert_called_with('FEATURE', 'test', {
408-
'state': 'disabled',
409-
'auto_restart': 'enabled',
410-
'high_mem_alert': 'disabled',
411-
'set_owner': 'local',
412-
'has_per_asic_scope': 'False',
413-
'has_global_scope': 'True',
414-
'delayed': 'True',
415-
'check_up_status': 'False',
416-
'support_syslog_rate_limit': 'False',
417-
})
418-
419-
420385
def test_feature_registration_with_non_default_owner(mock_sonic_db, manifest):
421386
mock_connector = Mock()
422387
mock_connector.get_entry = Mock(return_value={})

0 commit comments

Comments
 (0)