#!/usr/bin/env python3 import os import sys import yaml from sonic_py_common.logger import Logger from swsssdk import ConfigDBConnector db = ConfigDBConnector() db.connect() SYSLOG_IDENTIFIER = 'snmp_yml_to_configdb.py' logger = Logger(SYSLOG_IDENTIFIER) logger.set_min_log_priority_info() snmp_comm_config_db = db.get_table('SNMP_COMMUNITY') snmp_config_db_communities = snmp_comm_config_db.keys() snmp_general_config_db = db.get_table('SNMP') snmp_general_keys = snmp_general_config_db.keys() full_snmp_comm_list = ['snmp_rocommunity', 'snmp_rocommunities', 'snmp_rwcommunity', 'snmp_rwcommunities'] if not os.path.exists('/etc/sonic/snmp.yml'): logger.log_info('/etc/sonic/snmp.yml does not exist') sys.exit(1) with open('/etc/sonic/snmp.yml', 'r') as yaml_file: yaml_snmp_info = yaml.load(yaml_file, Loader=yaml.FullLoader) for comm_type in full_snmp_comm_list: if comm_type in yaml_snmp_info.keys(): if comm_type.startswith('snmp_rocommunities'): for community in yaml_snmp_info[comm_type]: if community not in snmp_config_db_communities: db.set_entry('SNMP_COMMUNITY', community, {"TYPE": "RO"}) elif comm_type.startswith('snmp_rocommunity'): community = yaml_snmp_info['snmp_rocommunity'] if community not in snmp_config_db_communities: db.set_entry('SNMP_COMMUNITY', community, {"TYPE": "RO"}) elif comm_type.startswith('snmp_rwcommunities'): for community in yaml_snmp_info[comm_type]: if community not in snmp_config_db_communities: db.set_entry('SNMP_COMMUNITY', community, {"TYPE": "RW"}) elif comm_type.startswith('snmp_rwcommunity'): community = yaml_snmp_info['snmp_rwcommunity'] if community not in snmp_config_db_communities: db.set_entry('SNMP_COMMUNITY', community, {"TYPE": "RW"}) if yaml_snmp_info.get('snmp_location'): if 'LOCATION' not in snmp_general_keys: db.set_entry('SNMP', 'LOCATION', {'Location': yaml_snmp_info['snmp_location']}) else: logger.log_info('snmp_location does not exist in snmp.yml file') sys.exit(1)