|
| 1 | +from pysnmp.entity import config, engine |
| 2 | + |
| 3 | +from cloudshell.snmp.core.snmp_context_manager import SnmpContextManager |
| 4 | +from cloudshell.snmp.core.tools.snmp_constants import SNMP_RETRIES_COUNT, SNMP_TIMEOUT |
| 5 | +from cloudshell.snmp.core.tools.snmp_context import SnmpContext |
| 6 | +from cloudshell.snmp.core.tools.snmp_parameters_helper import SnmpParametersConverter |
| 7 | +from cloudshell.snmp.core.tools.snmp_security import SnmpSecurity |
| 8 | +from cloudshell.snmp.core.tools.snmp_trasnport import SnmpTransport |
| 9 | + |
| 10 | + |
| 11 | +class Snmp(object): |
| 12 | + def __init__(self, timeout=SNMP_TIMEOUT, retry_count=SNMP_RETRIES_COUNT): |
| 13 | + self._snmp_timeout = timeout |
| 14 | + self._snmp_retry_count = retry_count |
| 15 | + |
| 16 | + def get_snmp_service(self, snmp_parameters, logger): |
| 17 | + """Get SNMP service. |
| 18 | +
|
| 19 | + :param cloudshell.snmp.snmp_parameters.SnmpV2Parameters snmp_parameters: |
| 20 | + :param logging.Logger logger: |
| 21 | + """ |
| 22 | + pysnmp_params = SnmpParametersConverter(snmp_parameters) |
| 23 | + snmp_engine = self._get_snmp_engine(pysnmp_params, logger) |
| 24 | + snmp_context = SnmpContext( |
| 25 | + snmp_parameters.context_engine_id, snmp_parameters.context_name |
| 26 | + ) |
| 27 | + get_bulk_flag = pysnmp_params.version > 0 |
| 28 | + return SnmpContextManager( |
| 29 | + snmp_engine=snmp_engine, |
| 30 | + v3_context_engine_id=snmp_context.context_engine_id, |
| 31 | + v3_context_name=snmp_context.context_name, |
| 32 | + logger=logger, |
| 33 | + get_bulk_flag=get_bulk_flag, |
| 34 | + is_snmp_read_only=pysnmp_params.is_read_only, |
| 35 | + ) |
| 36 | + |
| 37 | + def _get_snmp_engine(self, pysnmp_params, logger): |
| 38 | + """Get SNMP engine. |
| 39 | +
|
| 40 | + :param cloudshell.snmp.core.tools.snmp_parameters_helper.SnmpParametersConverter pysnmp_params: # noqa: E501 |
| 41 | + """ |
| 42 | + snmp_engine = engine.SnmpEngine() |
| 43 | + config.addTargetParams( |
| 44 | + snmp_engine, |
| 45 | + "pms", |
| 46 | + pysnmp_params.user, |
| 47 | + pysnmp_params.security, |
| 48 | + pysnmp_params.version, |
| 49 | + ) |
| 50 | + transport = SnmpTransport( |
| 51 | + snmp_parameters=pysnmp_params.snmp_parameters, logger=logger |
| 52 | + ) |
| 53 | + transport.add_udp_endpoint( |
| 54 | + snmp_engine, self._snmp_timeout, self._snmp_retry_count |
| 55 | + ) |
| 56 | + security = SnmpSecurity(py_snmp_params=pysnmp_params, logger=logger) |
| 57 | + security.add_security(snmp_engine) |
| 58 | + |
| 59 | + return snmp_engine |
0 commit comments