Dre4m Shell
Server IP : 85.214.239.14  /  Your IP : 3.139.235.59
Web Server : Apache/2.4.62 (Debian)
System : Linux h2886529.stratoserver.net 4.9.0 #1 SMP Tue Jan 9 19:45:01 MSK 2024 x86_64
User : www-data ( 33)
PHP Version : 7.4.18
Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : OFF
Directory :  /lib/python3/dist-packages/ansible_collections/arista/eos/plugins/modules/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ HOME SHELL ]     

Current File : /lib/python3/dist-packages/ansible_collections/arista/eos/plugins/modules//eos_snmp_server.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
# Copyright 2021 Red Hat
# GNU General Public License v3.0+
# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

"""
The module file for eos_snmp_server
"""

from __future__ import absolute_import, division, print_function


__metaclass__ = type

DOCUMENTATION = """
module: eos_snmp_server
short_description: Manages snmp_server resource module
description: This module configures and manages the attributes of snmp_server on Arista
  EOS platforms.
version_added: 3.2.0
author: Gomathi Selvi Srinivasan (@GomathiselviS)
notes:
- Tested against Arista EOS 4.24.6F
- This module works with connection C(network_cli) and C(httpapi).
options:
  config:
    description: SNMP server configuration.
    type: dict
    suboptions:
      chassis_id:
        description: SNMP chassis identifier.
        type: str
      communities:
        description: Community name configuration.
        type: list
        elements: dict
        suboptions:
          name:
            description: Community name
            type: str
          acl_v4:
            description: standard access_list name
            type: str
          acl_v6:
            description: IPv6 access list name.
            type: str
          ro:
            description: Only reads are permitted.
            type: bool
          rw:
            description: Read_write access
            type: bool
          view:
            description: MIB view name
            type: str
      contact:
        description: Person to contact about the syste,.
        type: str
      traps:
        description: Enable traps to all configured recipients.
        type: dict
        suboptions:
          bgp:
            description: Enable Bgp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_backward_transition:
                description: arista_backward_transition
                type: bool
              arista_established:
                description: arista_established
                type: bool
              backward_transition:
                description: backward_transition
                type: bool
              established:
                description: established.
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          bridge:
            description: Enable Bridge traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_mac_age:
                description: arista_mac_age
                type: bool
              arista_mac_learn:
                description: arista_mac_learn
                type: bool
              arista_mac_move:
                description: arista_mac_move
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          capacity:
            description: Enable Capacity traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_hardware_utilization_alert:
                description: arista_hardware_utilization_alert
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          entity:
            description: Enable Entity traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_ent_sensor_alarm:
                description: arista_ent_sensor_alarm
                type: bool
              ent_config_change:
                description: ent_config_change
                type: bool
              ent_state_oper:
                description: ent_state_oper
                type: bool
              ent_state_oper_disabled:
                description: ent_state_oper_disabled.
                type: bool
              ent_state_oper_enabled:
                description: ent_state_oper_enabled.
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          external_alarm:
            description: Enable external alarm traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_external_alarm_asserted_notif:
                description: arista_external_alarm_asserted_notif
                type: bool
              arista_external_alarm_deasserted_notif:
                description: arista_external_alarm_deasserted_notif
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          isis:
            description: Enable isis traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              adjacency_change:
                description: adjacency_change
                type: bool
              area_mismatch:
                description: area_mismatch
                type: bool
              attempt_to_exceed_max_sequence:
                description: attempt_to_exceed_max_sequence
                type: bool
              authentication_type_failure:
                description: authentication_type_failure.
                type: bool
              database_overload:
                description: database_overload
                type: bool
              own_lsp_purge:
                description: own_lsp_purge
                type: bool
              rejected_adjacency:
                description: rejected_adjacency
                type: bool
              sequence_number_skip:
                description: sequence_number_skip.
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          lldp:
            description: Enable Lldp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              rem_tables_change:
                description: rem_tables_change
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          mpls_ldp:
            description: Enable mpls_ldp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              mpls_ldp_session_down:
                description: mpls_ldp_session_down
                type: bool
              mpls_ldp_session_up:
                description: mpls_ldp_session_up
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          msdp:
            description: Enable msdp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              backward_transition:
                description: backward_transition.
                type: bool
              established:
                description: established.
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          ospf:
            description: Enable Ospf traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              if_config_error:
                description: if_config_error
                type: bool
              if_auth_failure:
                description: if_auth_failure
                type: bool
              if_state_change:
                description: if_state_change
                type: bool
              nbr_state_change:
                description: nbr_state_change.
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          ospfv3:
            description: Enable Ospfv3 traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              if_config_error:
                description: if_config_error
                type: bool
              if_rx_bad_packet:
                description: if_rx_bad_packet
                type: bool
              if_state_change:
                description: if_state_change
                type: bool
              nbr_state_change:
                description: nbr_state_change.
                type: bool
              nbr_restart_helper_status_change:
                description: Enable ospfv3NbrRestartHelperStatusChange trap
                type: bool
              nssa_translator_status_change:
                description: Enable ospfv3NssaTranslatorStatusChange trap
                type: bool
              restart_status_change:
                description: restart_status_change
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          pim:
            description: Enable Pim traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              neighbor_loss:
                description: neighbor_loss
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          snmp:
            description: Enable snmp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              authentication:
                description: authentication
                type: bool
              link_down:
                description: link_down
                type: bool
              link_up:
                description: link_up
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          snmpConfigManEvent:
            description: Enable snmpConfigManEvent traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_config_man_event:
                description: arista_config_man_event
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          switchover:
            description: Enable switchover traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_redundancy_switch_over_notif:
                description: arista_redundancy_switch_over_notif
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          test:
            description: Enable test traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              arista_test_notification:
                description: arista_test_notification
                type: bool
              enabled:
                description: All traps are set.
                type: bool
          vrrp:
            description: Enable vrrp traps. If set to enabled , all the traps are set.
            type: dict
            suboptions:
              trap_new_master:
                description: vrrp
                type: bool
              enabled:
                description: All traps are set.
                type: bool
      engineid:
        description: SNMPv3 engine ID configuration.
        type: dict
        suboptions:
          local:
            description:  Local SNMP agent
            type: str
          remote:
            description: Remote SNMP agent
            type: dict
            suboptions:
              host:
                description: Hostname or IP address of remote SNMP notification host
                type: str
              udp_port:
                description: The remote SNMP notification host's UDP port number.
                type: int
              id:
                description: engine ID octet string
                type: str
      extension:
        description: Configure extension script to serve an OID range
        type: dict
        suboptions:
          root_oid:
            description: Extension root oid
            type: str
          script_location:
            description: script location
            type: str
          oneshot:
            description: Use inefficient one_shot interface
            type: bool
      groups:
        description: SNMP USM group
        type: list
        elements: dict
        suboptions:
          group:
            description: SNMP group for the user
            type: str
          version:
            description: snmp security group version
            type: str
            choices: ['v1', 'v3', 'v2c']
          auth_privacy:
            description: auth and privacy config. Valid when version = v3.
            type: str
            choices: ['auth', 'noauth', 'priv']
          context:
            description: Specify a context to associate with the group
            type: str
          notify:
            description: View to restrict notifications
            type: str
          read:
            description: View to restrict read access
            type: str
          write:
            description: View to restrict write access
            type: str
      hosts:
        description: Notification destinations
        type: list
        elements: dict
        suboptions:
          host:
            description: Hostname or IP address of SNMP notification host.
            type: str
          user:
            description: Community or user name.
            type: str
          udp_port:
            description: UDP destination port for notification messages.
            type: int
          informs:
            description: Use SNMP inform messages.
            type: bool
          traps:
            description: Use SNMP trap messages
            type: bool
          version:
            description: Notification message SNMP version.
            type: str
            choices: ['1', '2c', '3 auth', '3 noauth', '3 priv']
          vrf:
            description: Specify the VRF in which the host is configured
            type: str
      acls:
        description: ipv4/ipv6 access_lists
        type: list
        elements: dict
        suboptions:
          afi:
            description: ipv4/ipv6
            type: str
            choices: ['ipv4', 'ipv6']
          acl:
            description: acl name
            type: str
          vrf:
            description: vrf name
            type: str
      local_interface:
        description: Configure the source interface for SNMP notifications.
        type: str
      location:
        description: The sysLocation string.
        type: str
      notification:
        description: Maximum number of notifications in the log
        type: int
      objects:
        description: when True Disable implementation of a group of objects
        type: dict
        suboptions:
          mac_address_tables:
            description: dot1dTpFdbTable, dot1qTpFdbTable
            type: bool
          route_tables:
            description: ipCidrRouteTable, ipCidrRouteNumber, aristaFIBStats*
            type: bool
      qos:
        description: Configure QoS parameters.
        type: int
      qosmib:
        description: Set QOS_MIB counter update interval
        type: int
      transmit:
        description: Maximum number of bytes in SNMP message (UDP/TCP payload)
        type: int
      transport:
        description: Enable snmpd transport layer protocol
        type: str
      users:
        description: SNMP user configuration.
        type: list
        elements: dict
        suboptions:
          user:
            description: SNMP user name
            type: str
          group:
            description: SNMP group for the user.
            type: str
          remote:
            description: System where an SNMPv3 user is hosted
            type: str
          udp_port:
            description: UDP port used by the remote SNMP system
            type: int
          version:
            description: snmp security version
            type: str
            choices: ['v1', 'v2c', 'v3']
          auth:
            description: User authentication settings
            type: dict
            suboptions:
              algorithm:
                description: algorithm for authentication
                type: str
              auth_passphrase:
                description: authentication passphrase hex string
                type: str
              encryption:
                description: algorithm for encryption.
                type: str
              priv_passphrase:
                description: privacy passphrase hexstring
                type: str
          localized:
            description: localized auth and privacy passphrases.
            type: dict
            suboptions:
              engineid:
                description: Engine id
                type: str
              algorithm:
                description: algorithm for authentication
                type: str
              auth_passphrase:
                description: authentication passphrase hex string
                type: str
              encryption:
                description: algorithm for encryption.
                type: str
              priv_passphrase:
                description: privacy passphrase hexstring
                type: str
      views:
        description: SNMPv2 MIB view configuration
        type: list
        elements: dict
        suboptions:
          view:
            description: SNMP view name
            type: str
          mib:
            description: SNMP MIB name
            type: str
          action:
            description: Action to be performed.
            type: str
            choices: ['excluded', 'included']
      vrfs:
        description: Specify the VRF in which the source address is used
        type: list
        elements: dict
        suboptions:
          vrf:
            description: vrf name.
            type: str
          local_interface:
            description: Configure the source interface for SNMP notifications
            type: str
  running_config:
    description:
    - This option is used only with state I(parsed).
    - The value of this option should be the output received from the EOS device by
      executing the command B(show running_config | section snmp_server).
    - The state I(parsed) reads the configuration from C(running_config) option and
      transforms it into Ansible structured data as per the resource module's argspec
      and the value is then returned in the I(parsed) key within the result.
    type: str
  state:
    description:
    - The state the configuration should be left in.
    - The states I(replaced) and I(overridden) have identical
       behaviour for this module.
    - Please refer to examples for more details.
    type: str
    choices: [deleted, merged, overridden, replaced, gathered, rendered, parsed]
    default: merged
"""
EXAMPLES = """
# Using merged:
# Before State
# eos#show running-config | section snmp-server
# eos#

    - name: merge given snmp_server configuration
      arista.eos.eos_snmp_server:
        config:
          communities:
            - name: "comm3"
              acl_v6: "list1"
              view: "view1"
            - name: "comm4"
              acl_v4: "list3"
              view: "view1"
            - name: "comm5"
              acl_v4: "list4"
              ro: True
          contact: "admin"
          engineid:
            remote:
              host: 1.1.1.1
              id: "1234567"
          groups:
            - group: "group1"
              version: "v1"
              read: "view1"
            - group: "group2"
              version: "v3"
              auth_privacy: "priv"
              notify: "view1"
              write: "view2"
          hosts:
            - host: "host02"
              user: "user01"
              udp_port: 23
              version: "2c"
            - host: "host01"
              user: "user01"
              udp_port: 23
              version: "3 priv"
          traps:
            capacity:
              arista_hardware_utilization_alert: True
            bgp:
              enabled: True
            external_alarm:
              arista_external_alarm_deasserted_notif: True
              arista_external_alarm_asserted_notif: True
          vrfs:
            - vrf: "vrf01"
              local_interface: "Ethernet1"

# After state
# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community comm4 view view1 list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server contact admin
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif
#
# Module Execution
#
# "after": {
#         "communities": [
#             {
#                 "acl_v6": "list1",
#                 "name": "comm3",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list3",
#                 "name": "comm4",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list4",
#                 "name": "comm5",
#                 "ro": true
#             }
#         ],
#         "contact": "admin",
#         "groups": [
#             {
#                 "group": "group1",
#                 "read": "view1",
#                 "version": "v1"
#             },
#             {
#                 "auth_privacy": "priv",
#                 "group": "group2",
#                 "notify": "view1",
#                 "version": "v3",
#                 "write": "view2"
#             }
#         ],
#         "hosts": [
#             {
#                 "host": "host01",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "3 priv"
#             },
#             {
#                 "host": "host02",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "2c"
#             }
#         ],
#         "traps": {
#             "bgp": {
#                 "enabled": true
#             },
#             "capacity": {
#                 "arista_hardware_utilization_alert": true
#             },
#             "external_alarm": {
#                 "arista_external_alarm_asserted_notif": true,
#                 "arista_external_alarm_deasserted_notif": true
#             }
#         },
#         "vrfs": [
#             {
#                 "local_interface": "Ethernet1",
#                 "vrf": "vrf01"
#             }
#         ]
#     },
#     "before": {},
#     "changed": true,
#     "commands": [
#         "snmp-server community comm3 view view1 ipv6 list1",
#         "snmp-server community comm4 view view1 list3",
#         "snmp-server community comm5 ro list4",
#         "snmp-server group group1 v1 read view1",
#         "snmp-server group group2 v3 priv write view2 notify view1",
#         "snmp-server host host02 version 2c user01 udp-port 23",
#         "snmp-server host host01 version 3 priv user01 udp-port 23",
#         "snmp-server vrf vrf01 local-interface Ethernet1",
#         "snmp-server contact admin",
#         "snmp-server engineID remote 1.1.1.1 1234567",
#         "snmp-server enable traps bgp",
#         "snmp-server enable traps capacity arista-hardware-utilization-alert",
#         "snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif"
#     ],
#

# Using replaced:
# Before State:
# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community comm4 view view1 list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server contact admin
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif

    - name: Replace given snmp_server configuration
      become: true
      register: result
      arista.eos.eos_snmp_server: &replaced
        state: replaced
        config:
          communities:
            - name: "comm3"
              acl_v6: "list1"
              view: "view1"
            - name: "replacecomm"
              acl_v4: "list4"
          extension:
            root_oid: "123456"
            script_location: "flash:"
          traps:
            test:
              arista_test_notification: True
            bgp:
              enabled: True
          vrfs:
            - vrf: "vrf_replace"
              local_interface: "Ethernet1"

# After State:

# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community replacecomm list4
# snmp-server vrf vrf_replace local-interface Ethernet1
# snmp-server extension 123456 flash:
# snmp-server enable traps test arista-test-notification
# snmp-server enable traps bgp

# Module Execution:
#    "after": {
#        "communities": [
#            {
#                "acl_v6": "list1",
#                "name": "comm3",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list4",
#                "name": "replacecomm",
#                "ro": true
#            }
#        ],
#        "extension": {
#            "root_oid": "0.123456",
#            "script_location": "flash:"
#        },
#        "traps": {
#            "bgp": {
#                "enabled": true
#            },
#            "test": {
#                "arista_test_notification": true
#            }
#        },
#        "vrfs": [
#            {
#                "local_interface": "Ethernet1",
#                "vrf": "vrf_replace"
#            }
#        ]
#    },
#    "before": {
#        "communities": [
#            {
#                "acl_v6": "list1",
#                "name": "comm3",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list3",
#                "name": "comm4",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list4",
#                "name": "comm5",
#                "ro": true
#            }
#        ],
#        "contact": "admin",
#        "groups": [
#            {
#                "group": "group1",
#                "read": "view1",
#                "version": "v1"
#            },
#            {
#                "auth_privacy": "priv",
#                "group": "group2",
#                "notify": "view1",
#                "version": "v3",
#                "write": "view2"
#            }
#        ],
#        "hosts": [
#            {
#                "host": "host01",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "3 priv"
#            },
#            {
#                "host": "host02",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "2c"
#            }
#        ],
#        "traps": {
#            "bgp": {
#                "enabled": true
#            },
#            "capacity": {
#                "arista_hardware_utilization_alert": true
#            },
#            "external_alarm": {
#                "arista_external_alarm_asserted_notif": true,
#                "arista_external_alarm_deasserted_notif": true
#            }
#        },
#        "vrfs": [
#            {
#                "local_interface": "Ethernet1",
#                "vrf": "vrf01"
#            }
#        ]
#    },
#    "changed": true,
#    "commands": [
#        "snmp-server community comm3 view view1 ipv6 list1",
#        "snmp-server community replacecomm list4",
#        "no snmp-server community comm4 view view1 ro list3",
#        "no snmp-server community comm5 ro list4",
#        "no snmp-server group group1 v1 read view1",
#        "no snmp-server group group2 v3 priv write view2 notify view1",
#        "no snmp-server host host01 version 3 priv user01 udp-port 23",
#        "no snmp-server host host02 version 2c user01 udp-port 23",
#        "snmp-server vrf vrf_replace local-interface Ethernet1",
#        "no snmp-server vrf vrf01 local-interface Ethernet1",
#        "snmp-server extension 123456 flash:",
#        "default snmp-server enable traps capacity arista-hardware-utilization-alert",
#        "default snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif",
#        "snmp-server enable traps test arista-test-notification",
#        "no snmp-server contact admin"
#    ],

# Using overridden:
# Before State:
# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community comm4 view view1 list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server contact admin
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif

    - name: Override given snmp_server configuration
      arista.eos.eos_snmp_server:
        state: overridden
        config:
          communities:
            - name: "comm3"
              acl_v6: "list1"
              view: "view1"
            - name: "replacecomm"
              acl_v4: "list4"
          extension:
            root_oid: "123456"
            script_location: "flash:"
          traps:
            test:
              arista_test_notification: True
            bgp:
              enabled: True
          vrfs:
            - vrf: "vrf_replace"
              local_interface: "Ethernet1"

# After State:

# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community replacecomm list4
# snmp-server vrf vrf_replace local-interface Ethernet1
# snmp-server extension 123456 flash:
# snmp-server enable traps test arista-test-notification
# snmp-server enable traps bgp

# Module Execution:
#    "after": {
#        "communities": [
#            {
#                "acl_v6": "list1",
#                "name": "comm3",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list4",
#                "name": "replacecomm",
#                "ro": true
#            }
#        ],
#        "extension": {
#            "root_oid": "0.123456",
#            "script_location": "flash:"
#        },
#        "traps": {
#            "bgp": {
#                "enabled": true
#            },
#            "test": {
#                "arista_test_notification": true
#            }
#        },
#        "vrfs": [
#            {
#                "local_interface": "Ethernet1",
#                "vrf": "vrf_replace"
#            }
#        ]
#    },
#    "before": {
#        "communities": [
#            {
#                "acl_v6": "list1",
#                "name": "comm3",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list3",
#                "name": "comm4",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list4",
#                "name": "comm5",
#                "ro": true
#            }
#        ],
#        "contact": "admin",
#        "groups": [
#            {
#                "group": "group1",
#                "read": "view1",
#                "version": "v1"
#            },
#            {
#                "auth_privacy": "priv",
#                "group": "group2",
#                "notify": "view1",
#                "version": "v3",
#                "write": "view2"
#            }
#        ],
#        "hosts": [
#            {
#                "host": "host01",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "3 priv"
#            },
#            {
#                "host": "host02",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "2c"
#            }
#        ],
#        "traps": {
#            "bgp": {
#                "enabled": true
#            },
#            "capacity": {
#                "arista_hardware_utilization_alert": true
#            },
#            "external_alarm": {
#                "arista_external_alarm_asserted_notif": true,
#                "arista_external_alarm_deasserted_notif": true
#            }
#        },
#        "vrfs": [
#            {
#                "local_interface": "Ethernet1",
#                "vrf": "vrf01"
#            }
#        ]
#    },
#    "changed": true,
#    "commands": [
#        "snmp-server community comm3 view view1 ipv6 list1",
#        "snmp-server community replacecomm list4",
#        "no snmp-server community comm4 view view1 ro list3",
#        "no snmp-server community comm5 ro list4",
#        "no snmp-server group group1 v1 read view1",
#        "no snmp-server group group2 v3 priv write view2 notify view1",
#        "no snmp-server host host01 version 3 priv user01 udp-port 23",
#        "no snmp-server host host02 version 2c user01 udp-port 23",
#        "snmp-server vrf vrf_replace local-interface Ethernet1",
#        "no snmp-server vrf vrf01 local-interface Ethernet1",
#        "snmp-server extension 123456 flash:",
#        "default snmp-server enable traps capacity arista-hardware-utilization-alert",
#        "default snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif",
#        "snmp-server enable traps test arista-test-notification",
#        "no snmp-server contact admin"
#    ],

# Using deleted:
# Before State:
# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community comm4 view view1 list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server contact admin
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif

    - name: Delete given snmp_server configuration
      arista.eos.eos_snmp_server:
        state: deleted

# After State:
# eos#show running-config | section snmp-server
#

# Module Execution:
#   "after": {},
#    "before": {
#        "communities": [
#            {
#                "acl_v6": "list1",
#                "name": "comm3",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list3",
#                "name": "comm4",
#                "ro": true,
#                "view": "view1"
#            },
#            {
#                "acl_v4": "list4",
#                "name": "comm5",
#                "ro": true
#            }
#        ],
#        "contact": "admin",
#        "groups": [
#            {
#                "group": "group1",
#                "read": "view1",
#                "version": "v1"
#            },
#            {
#                "auth_privacy": "priv",
#                "group": "group2",
#                "notify": "view1",
#                "version": "v3",
#                "write": "view2"
#            }
#        ],
#        "hosts": [
#            {
#                "host": "host01",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "3 priv"
#            },
#            {
#                "host": "host02",
#                "udp_port": 23,
#                "user": "user01",
#                "version": "2c"
#            }
#        ],
#        "traps": {
#            "bgp": {
#                "enabled": true
#            },
#            "capacity": {
#                "arista_hardware_utilization_alert": true
#            },
#            "external_alarm": {
#                "arista_external_alarm_asserted_notif": true,
#                "arista_external_alarm_deasserted_notif": true
#            }
#        },
#        "vrfs": [
#            {
#                "local_interface": "Ethernet1",
#                "vrf": "vrf01"
#            }
#        ]
#    },
#    "changed": true,
#    "commands": [
#        "no snmp-server community comm3 view view1 ro ipv6 list1",
#        "no snmp-server community comm4 view view1 ro list3",
#        "no snmp-server community comm5 ro list4",
#        "no snmp-server group group1 v1 read view1",
#        "no snmp-server group group2 v3 priv write view2 notify view1",
#        "no snmp-server host host01 version 3 priv user01 udp-port 23",
#        "no snmp-server host host02 version 2c user01 udp-port 23",
#        "no snmp-server vrf vrf01 local-interface Ethernet1",
#        "no snmp-server contact admin",
#        "default snmp-server enable traps bgp",
#        "default snmp-server enable traps capacity arista-hardware-utilization-alert",
#        "default snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif"
#    ],
#

# Using parsed:

# _parsed.cfg
# snmp-server contact admin
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server community comm3 view view1 ro ipv6 list1
# snmp-server community comm4 view view1 ro list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif
# snmp-server enable traps external-alarm arista-external-alarm-deasserted-notif

    - name: Provide the running configuration for parsing (config to be parsed)
      arista.eos.eos_snmp_server:
        running_config: "{{ lookup('file', '_parsed.cfg') }}"
        state: parsed

# Module Execution:
#     "parsed": {
#         "communities": [
#             {
#                 "acl_v6": "list1",
#                 "name": "comm3",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list3",
#                 "name": "comm4",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list4",
#                 "name": "comm5",
#                 "ro": true
#             }
#         ],
#         "contact": "admin",
#         "groups": [
#             {
#                 "group": "group1",
#                 "read": "view1",
#                 "version": "v1"
#             },
#             {
#                 "auth_privacy": "priv",
#                 "group": "group2",
#                 "notify": "view1",
#                 "version": "v3",
#                 "write": "view2"
#             }
#         ],
#         "hosts": [
#             {
#                 "host": "host01",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "3 priv"
#             },
#             {
#                 "host": "host02",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "2c"
#             }
#         ],
#         "traps": {
#             "bgp": {
#                 "enabled": true
#             },
#             "capacity": {
#                 "arista_hardware_utilization_alert": true
#             },
#             "external_alarm": {
#                 "arista_external_alarm_asserted_notif": true,
#                 "arista_external_alarm_deasserted_notif": true
#             }
#         },
#         "vrfs": [
#             {
#                 "local_interface": "Ethernet1",
#                 "vrf": "vrf01"
#             }
#         ]
#   }

# Using rendered:
    - name: Render given snmp_server configuration
      arista.eos.eos_snmp_server:
        state: "rendered"
        config:
          communities:
            - name: "comm3"
              acl_v6: "list1"
              view: "view1"
            - name: "comm4"
              acl_v4: "list3"
              view: "view1"
            - name: "comm5"
              acl_v4: "list4"
              ro: True
          contact: "admin"
          engineid:
            remote:
              host: 1.1.1.1
              id: "1234567"
          groups:
            - group: "group1"
              version: "v1"
              read: "view1"
            - group: "group2"
              version: "v3"
              auth_privacy: "priv"
              notify: "view1"
              write: "view2"
          hosts:
            - host: "host02"
              user: "user01"
              udp_port: 23
              version: "2c"
            - host: "host01"
              user: "user01"
              udp_port: 23
              version: "3 priv"
          traps:
            capacity:
              arista_hardware_utilization_alert: True
            bgp:
              enabled: True
            external_alarm:
              arista_external_alarm_deasserted_notif: True
              arista_external_alarm_asserted_notif: True
          vrfs:
            - vrf: "vrf01"
              local_interface: "Ethernet1"

# Module Execution:
#    "rendered": [
#        "snmp-server community comm3 view view1 ipv6 list1",
#        "snmp-server community comm4 view view1 list3",
#        "snmp-server community comm5 ro list4",
#        "snmp-server group group1 v1 read view1",
#        "snmp-server group group2 v3 priv write view2 notify view1",
#        "snmp-server host host02 version 2c user01 udp-port 23",
#        "snmp-server host host01 version 3 priv user01 udp-port 23",
#        "snmp-server vrf vrf01 local-interface Ethernet1",
#        "snmp-server contact admin",
#        "snmp-server engineID remote 1.1.1.1 1234567",
#        "snmp-server enable traps bgp",
#        "snmp-server enable traps capacity arista-hardware-utilization-alert",
#        "snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif"
#    ]

# using gathered:

# eos#show running-config | section snmp-server
# snmp-server community comm3 view view1 ipv6 list1
# snmp-server community comm4 view view1 list3
# snmp-server community comm5 ro list4
# snmp-server group group1 v1 read view1
# snmp-server group group2 v3 priv write view2 notify view1
# snmp-server host host02 version 2c user01 udp-port 23
# snmp-server host host01 version 3 priv user01 udp-port 23
# snmp-server vrf vrf01 local-interface Ethernet1
# snmp-server contact admin
# snmp-server enable traps bgp
# snmp-server enable traps capacity arista-hardware-utilization-alert
# snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif

    - name: Gathered the provided configuration with the exisiting running configuration
      arista.eos.eos_snmp_server:
        config:
        state: gathered

# Module Execution:
#     "gathered": {
#         "communities": [
#             {
#                 "acl_v6": "list1",
#                 "name": "comm3",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list3",
#                 "name": "comm4",
#                 "ro": true,
#                 "view": "view1"
#             },
#             {
#                 "acl_v4": "list4",
#                 "name": "comm5",
#                 "ro": true
#             }
#         ],
#         "contact": "admin",
#         "groups": [
#             {
#                 "group": "group1",
#                 "read": "view1",
#                 "version": "v1"
#             },
#             {
#                 "auth_privacy": "priv",
#                 "group": "group2",
#                 "notify": "view1",
#                 "version": "v3",
#                 "write": "view2"
#             }
#         ],
#         "hosts": [
#             {
#                 "host": "host01",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "3 priv"
#             },
#             {
#                 "host": "host02",
#                 "udp_port": 23,
#                 "user": "user01",
#                 "version": "2c"
#             }
#         ],
#         "traps": {
#             "bgp": {
#                 "enabled": true
#             },
#             "capacity": {
#                 "arista_hardware_utilization_alert": true
#             },
#             "external_alarm": {
#                 "arista_external_alarm_asserted_notif": true,
#                 "arista_external_alarm_deasserted_notif": true
#             }
#         },
#         "vrfs": [
#             {
#                 "local_interface": "Ethernet1",
#                 "vrf": "vrf01"
#             }
#         ]
#     },

"""

RETURN = """
before:
  description: The configuration prior to the module execution.
  returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged)
  type: dict
  sample: >
    This output will always be in the same format as the
    module argspec.
after:
  description: The resulting configuration after module execution.
  returned: when changed
  type: dict
  sample: >
    This output will always be in the same format as the
    module argspec.
commands:
  description: The set of commands pushed to the remote device.
  returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged)
  type: list
  sample:
    - "snmp-server community comm3 view view1 ipv6 list1"
    - "snmp-server community comm4 view view1 list3"
    - "snmp-server community comm5 ro list4"
    - "snmp-server group group1 v1 read view1"
    - "snmp-server group group2 v3 priv write view2 notify view1"
    - "snmp-server host host02 version 2c user01 udp-port 23"
    - "snmp-server host host01 version 3 priv user01 udp-port 23"
    - "snmp-server vrf vrf01 local-interface Ethernet1"
    - "snmp-server contact admin"
    - "snmp-server engineID remote 1.1.1.1 1234567"
    - "snmp-server enable traps bgp"
    - "snmp-server enable traps capacity arista-hardware-utilization-alert"
    - "snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif"

rendered:
  description: The provided configuration in the task rendered in device-native format (offline).
  returned: when I(state) is C(rendered)
  type: list
  sample:
    - "snmp-server community comm3 view view1 ipv6 list1"
    - "snmp-server community comm4 view view1 list3"
    - "snmp-server community comm5 ro list4"
    - "snmp-server group group1 v1 read view1"
    - "snmp-server group group2 v3 priv write view2 notify view1"
    - "snmp-server host host02 version 2c user01 udp-port 23"
    - "snmp-server host host01 version 3 priv user01 udp-port 23"
    - "snmp-server vrf vrf01 local-interface Ethernet1"
    - "snmp-server contact admin"
    - "snmp-server engineID remote 1.1.1.1 1234567"
    - "snmp-server enable traps bgp"
    - "snmp-server enable traps capacity arista-hardware-utilization-alert"
    - "snmp-server enable traps external-alarm arista-external-alarm-asserted-notif arista-external-alarm-deasserted-notif"
gathered:
  description: Facts about the network resource gathered from the remote device as structured data.
  returned: when I(state) is C(gathered)
  type: list
  sample: >
    This output will always be in the same format as the
    module argspec.
parsed:
  description: The device native config provided in I(running_config) option parsed into structured data as per module argspec.
  returned: when I(state) is C(parsed)
  type: list
  sample: >
    This output will always be in the same format as the
    module argspec.
"""

from ansible.module_utils.basic import AnsibleModule

from ansible_collections.arista.eos.plugins.module_utils.network.eos.argspec.snmp_server.snmp_server import (
    Snmp_serverArgs,
)
from ansible_collections.arista.eos.plugins.module_utils.network.eos.config.snmp_server.snmp_server import (
    Snmp_server,
)


def main():
    """
    Main entry point for module execution

    :returns: the result form module invocation
    """
    module = AnsibleModule(
        argument_spec=Snmp_serverArgs.argument_spec,
        mutually_exclusive=[["config", "running_config"]],
        required_if=[
            ["state", "merged", ["config"]],
            ["state", "replaced", ["config"]],
            ["state", "overridden", ["config"]],
            ["state", "rendered", ["config"]],
            ["state", "parsed", ["running_config"]],
        ],
        supports_check_mode=True,
    )

    result = Snmp_server(module).execute_module()
    module.exit_json(**result)


if __name__ == "__main__":
    main()

Anon7 - 2022
AnonSec Team