From 2f52106dc160f217d6e27da45674c0231a93382a Mon Sep 17 00:00:00 2001
From: khramshinr <khramshinr@gmail.com>
Date: Thu, 18 Jul 2024 14:41:58 +0600
Subject: T6525: Add default dir for ext-scripts without absolute path

---
 smoketest/scripts/cli/test_service_snmp.py | 14 ++++++++++++++
 src/conf_mode/service_snmp.py              | 13 +++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/smoketest/scripts/cli/test_service_snmp.py b/smoketest/scripts/cli/test_service_snmp.py
index b3daa90d0..7d5eaa440 100755
--- a/smoketest/scripts/cli/test_service_snmp.py
+++ b/smoketest/scripts/cli/test_service_snmp.py
@@ -246,5 +246,19 @@ class TestSNMPService(VyOSUnitTestSHIM.TestCase):
         for excluded in snmpv3_view_oid_exclude:
             self.assertIn(f'view {snmpv3_view} excluded .{excluded}', tmp)
 
+    def test_snmp_script_extensions(self):
+        extensions = {
+            'default': 'snmp_smoketest_extension_script.sh',
+            'external': '/run/external_snmp_smoketest_extension_script.sh'
+        }
+
+        for key, val in extensions.items():
+            self.cli_set(base_path + ['script-extensions', 'extension-name', key, 'script', val])
+        self.cli_commit()
+
+        self.assertEqual(get_config_value('extend default'), f'/config/user-data/{extensions["default"]}')
+        self.assertEqual(get_config_value('extend external'), extensions["external"])
+
+
 if __name__ == '__main__':
     unittest.main(verbosity=2)
diff --git a/src/conf_mode/service_snmp.py b/src/conf_mode/service_snmp.py
index 6f025cc23..c9c0ed9a0 100755
--- a/src/conf_mode/service_snmp.py
+++ b/src/conf_mode/service_snmp.py
@@ -41,6 +41,7 @@ config_file_client  = r'/etc/snmp/snmp.conf'
 config_file_daemon  = r'/etc/snmp/snmpd.conf'
 config_file_access  = r'/usr/share/snmp/snmpd.conf'
 config_file_user    = r'/var/lib/snmp/snmpd.conf'
+default_script_dir  = r'/config/user-data/'
 systemd_override    = r'/run/systemd/system/snmpd.service.d/override.conf'
 systemd_service     = 'snmpd.service'
 
@@ -85,8 +86,20 @@ def get_config(config=None):
             tmp = {'::1': {'port': '161'}}
             snmp['listen_address'] = dict_merge(tmp, snmp['listen_address'])
 
+    if 'script_extensions' in snmp and 'extension_name' in snmp['script_extensions']:
+        for key, val in snmp['script_extensions']['extension_name'].items():
+            if 'script' not in val:
+                continue
+            script_path = val['script']
+            # if script has not absolute path, use pre configured path
+            if not os.path.isabs(script_path):
+                script_path = os.path.join(default_script_dir, script_path)
+
+            snmp['script_extensions']['extension_name'][key]['script'] = script_path
+
     return snmp
 
+
 def verify(snmp):
     if 'deleted' in snmp:
         return None
-- 
cgit v1.2.3