diff options
author | Christian Poessinger <christian@poessinger.com> | 2018-06-14 21:12:58 +0200 |
---|---|---|
committer | Christian Poessinger <christian@poessinger.com> | 2018-06-14 21:12:58 +0200 |
commit | e98c53f7c1ba846b3d27eceec1d7c2789c3a5b04 (patch) | |
tree | 11f095b28100eadb3052f5ac4d191e106a6e8096 /src/op_mode/snmp.py | |
parent | 81db9345d117748a89059d2819b36b07ebdf708f (diff) | |
parent | a6c5fe6ea239fccb7769f9d9977f133161c58da4 (diff) | |
download | vyos-1x-e98c53f7c1ba846b3d27eceec1d7c2789c3a5b04.tar.gz vyos-1x-e98c53f7c1ba846b3d27eceec1d7c2789c3a5b04.zip |
Merge branch 'snmp-op-mode' into current
* snmp-op-mode:
T683: Initial version for SNMP op mode command definition in XML
Diffstat (limited to 'src/op_mode/snmp.py')
-rwxr-xr-x | src/op_mode/snmp.py | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/src/op_mode/snmp.py b/src/op_mode/snmp.py new file mode 100755 index 000000000..e08441f0e --- /dev/null +++ b/src/op_mode/snmp.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2018 VyOS maintainers and contributors +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 or later as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. +# +# File: snmp.py +# Purpose: +# Show SNMP community/remote hosts +# Used by the "run show snmp community" commands. + +import os +import sys +import argparse + +from vyos.config import Config + +config_file_daemon = r'/etc/snmp/snmpd.conf' + +parser = argparse.ArgumentParser(description='Retrieve infomration from running SNMP daemon') +parser.add_argument('--allowed', action="store_true", help='Show available SNMP communities') +parser.add_argument('--community', action="store", help='Show status of given SNMP community', type=str) +parser.add_argument('--host', action="store", help='SNMP host to connect to', type=str, default='localhost') + +config = { + 'communities': [], +} + +def read_config(): + with open(config_file_daemon, 'r') as f: + for line in f: + # Only get configured SNMP communitie + if line.startswith('rocommunity') or line.startswith('rwcommunity'): + string = line.split(' ') + # append community to the output list only once + c = string[1] + if c not in config['communities']: + config['communities'].append(c) + +def show_all(): + if len(config['communities']) > 0: + print(' '.join(config['communities'])) + +def show_community(c, h): + print('Status of SNMP community {0} on {1}'.format(c, h), flush=True) + os.system('/usr/bin/snmpstatus -t1 -v1 -c {0} {1}'.format(c, h)) + +if __name__ == '__main__': + args = parser.parse_args() + + # Do nothing if service is not configured + c = Config() + if not c.exists_effective('service snmp'): + print("SNMP service is not configured") + sys.exit(0) + + read_config() + + if args.allowed: + show_all() + sys.exit(1) + elif args.community: + show_community(args.community, args.host) + sys.exit(1) + else: + parser.print_help() + sys.exit(1) |