diff options
| -rwxr-xr-x | smoketest/scripts/cli/test_service_snmp.py | 14 | ||||
| -rwxr-xr-x | src/conf_mode/service_snmp.py | 13 | 
2 files changed, 27 insertions, 0 deletions
| 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 | 
