Skip to content

Commit 0e7e4d5

Browse files
authored
Added support to render template format of delayed flag on Feature Table. (#135) (#137)
What I did: Added support to render template format of delayed flag on Feature Table. Why I did: To fix: sonic-net/sonic-buildimage#19126 How I verify: Manual Verification UT updated Signed-off-by: Abhishek Dosi [email protected]
1 parent 235c2a4 commit 0e7e4d5

3 files changed

Lines changed: 46 additions & 1 deletion

File tree

scripts/featured

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class Feature(object):
7676
self.name = feature_name
7777
self.state = self._get_feature_table_key_render_value(feature_cfg.get('state'), device_config or {}, ['enabled', 'disabled', 'always_enabled', 'always_disabled'])
7878
self.auto_restart = feature_cfg.get('auto_restart', 'disabled')
79-
self.delayed = safe_eval(feature_cfg.get('delayed', 'False'))
79+
self.delayed = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('delayed', 'False'), device_config or {}, ['True', 'False']))
8080
self.has_global_scope = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('has_global_scope', 'True'), device_config or {}, ['True', 'False']))
8181
self.has_per_asic_scope = safe_eval(self._get_feature_table_key_render_value(feature_cfg.get('has_per_asic_scope', 'False'), device_config or {}, ['True', 'False']))
8282
self.has_per_dpu_scope = safe_eval(feature_cfg.get('has_per_dpu_scope', 'False'))
@@ -224,6 +224,7 @@ class FeatureHandler(object):
224224
self.update_feature_state(feature)
225225
self.sync_feature_scope(feature)
226226
self.resync_feature_state(feature)
227+
self.sync_feature_delay_state(feature)
227228

228229
def update_feature_state(self, feature):
229230
cached_feature = self._cached_config[feature.name]
@@ -472,6 +473,17 @@ class FeatureHandler(object):
472473
for ns, db in self.ns_cfg_db.items():
473474
db.mod_entry('FEATURE', feature.name, {'state': feature.state})
474475

476+
def sync_feature_delay_state(self, feature):
477+
current_entry = self._config_db.get_entry('FEATURE', feature.name)
478+
current_feature_delay_state = current_entry.get('delayed') if current_entry else None
479+
480+
if str(feature.delayed) == str(current_feature_delay_state):
481+
return
482+
483+
self._config_db.mod_entry('FEATURE', feature.name, {'delayed': str(feature.delayed)})
484+
for ns, db in self.ns_cfg_db.items():
485+
db.mod_entry('FEATURE', feature.name, {'delayed': str(feature.delayed)})
486+
475487
def set_feature_state(self, feature, state):
476488
self._feature_state_table.set(feature.name, [('state', state)])
477489

tests/featured/featured_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -263,6 +263,7 @@ def test_feature_config_parsing_defaults(self):
263263
@mock.patch('featured.FeatureHandler.update_systemd_config', mock.MagicMock())
264264
@mock.patch('featured.FeatureHandler.update_feature_state', mock.MagicMock())
265265
@mock.patch('featured.FeatureHandler.sync_feature_scope', mock.MagicMock())
266+
@mock.patch('featured.FeatureHandler.sync_feature_delay_state', mock.MagicMock())
266267
def test_feature_resync(self):
267268
mock_db = mock.MagicMock()
268269
mock_db.get_entry = mock.MagicMock()

tests/featured/test_vectors.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,14 @@
4747
"set_owner": "kube",
4848
"state": "enabled"
4949
},
50+
"pmon": {
51+
"state": "enabled",
52+
"delayed": "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}False{% else %}True{% endif %}",
53+
"has_global_scope": "False",
54+
"has_per_asic_scope": "True",
55+
"auto_restart": "enabled",
56+
"high_mem_alert": "disabled"
57+
}
5058
},
5159
},
5260
"expected_config_db": {
@@ -78,6 +86,14 @@
7886
"set_owner": "kube",
7987
"state": "enabled"
8088
},
89+
"pmon": {
90+
"auto_restart": "enabled",
91+
"has_global_scope": "False",
92+
"has_per_asic_scope": "True",
93+
"delayed": "True",
94+
"high_mem_alert": "disabled",
95+
"state": "enabled"
96+
}
8197
},
8298
},
8399
"enable_feature_subprocess_calls": [
@@ -1095,6 +1111,14 @@
10951111
"has_per_asic_scope": "True",
10961112
"auto_restart": "enabled",
10971113
"high_mem_alert": "disabled"
1114+
},
1115+
"pmon": {
1116+
"state": "enabled",
1117+
"delayed": "{% if 'type' in DEVICE_METADATA['localhost'] and DEVICE_METADATA['localhost']['type'] == 'SpineRouter' %}False{% else %}True{% endif %}",
1118+
"has_global_scope": "False",
1119+
"has_per_asic_scope": "True",
1120+
"auto_restart": "enabled",
1121+
"high_mem_alert": "disabled"
10981122
}
10991123
},
11001124
},
@@ -1131,6 +1155,14 @@
11311155
"delayed": "False",
11321156
"high_mem_alert": "disabled",
11331157
"state": "enabled"
1158+
},
1159+
"pmon": {
1160+
"auto_restart": "enabled",
1161+
"has_global_scope": "False",
1162+
"has_per_asic_scope": "True",
1163+
"delayed": "False",
1164+
"high_mem_alert": "disabled",
1165+
"state": "enabled"
11341166
}
11351167
},
11361168
},

0 commit comments

Comments
 (0)