1Documentation  Utility for SNMP configurations via Redfish.
2
3*** Settings ***
4
5Resource                ../../lib/utils.robot
6Resource                ../../lib/connection_client.robot
7Library                 ../../lib/gen_misc.py
8Library                 ../../lib/utils.py
9
10
11*** Keywords ***
12
13Get SNMP Manager List
14    [Documentation]  Get the list of SNMP managers and return IP addresses and ports.
15
16    # Get the list of SNMP manager URIs.
17    @{snmp_mgr_uris}=  Get SNMP Child URIs
18
19    ${snmp_mgr_list}=  Create List
20
21    FOR  ${snmp_mgr_uri}  IN  @{snmp_mgr_uris}
22      # Sample output:
23      # {
24      #  "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp1",
25      #  "@odata.type": "#EventDestination.v1_7_0.EventDestination",
26      #  "Context": "",
27      #  "Destination": "snmp://xx.xx.xx.xx:162",
28      #  "EventFormatType": "Event",
29      #  "Id": "snmp1",
30      #  "Name": "Event Destination snmp1",
31      #  "Protocol": "SNMPv2c",
32      #  "SubscriptionType": "SNMPTrap"
33
34      ${resp}=  Redfish.Get  ${snmp_mgr_uri}
35      ${snmp_mgr}=  Get From Dictionary  ${resp.dict}  Destination
36      Append To List  ${snmp_mgr_list}  ${snmp_mgr}
37    END
38
39    [Return]  ${snmp_mgr_list}
40
41
42Configure SNMP Manager Via Redfish
43    [Documentation]  Configure SNMP manager on BMC via Redfish.
44    [Arguments]  ${snmp_mgr_ip}  ${snmp_port}  ${valid_status_codes}=${HTTP_CREATED}
45
46    # Description of argument(s):
47    # snmp_mgr_ip  SNMP manager IP address
48    # snmp_port  SNMP manager port
49    # valid_status_code  expected code
50
51    ${snmp_mgr_data}=  Create Dictionary  Destination=snmp://${snmp_mgr_ip}:${snmp_port}
52    ...  SubscriptionType=${snmp_function}  Protocol=${snmp_version}
53
54    Redfish.Post  ${subscription_uri}  body=&{snmp_mgr_data}
55    ...  valid_status_codes=[${valid_status_codes}]
56
57
58Verify SNMP Manager Configured On BMC
59    [Documentation]  Verify SNMP manager configured on BMC.
60    [Arguments]  ${snmp_mgr_ip}  ${snmp_port}
61
62    # Description of argument(s):
63    # snmp_mgr_ip  SNMP manager IP address
64    # snmp_port  SNMP manager port
65
66    # Get the list of SNMP managers that are configured on BMC.
67    @{snmp_mgr_list}=  Get SNMP Manager List
68
69    ${snmp_ip_port}=  Catenate  ${snmp_mgr_ip}:${snmp_port}
70
71    List Should Contain Value  ${snmp_mgr_list}  snmp://${snmp_ip_port}
72    ...  msg=SNMP manager is not configured.
73
74
75Get SNMP Child URIs
76    [Documentation]  Get the list of all SNMP manager URIs.
77
78    # Sample output of SNMP URI:
79    # {
80    #  "@odata.id": "/redfish/v1/EventService/Subscriptions",
81    #  "@odata.type": "#EventDestinationCollection.EventDestinationCollection",
82    #  "Members": [
83    #    {
84    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp6"
85    #    },
86    #    {
87    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp2"
88    #    },
89    #    {
90    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp9"
91    #    },
92    #    {
93    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp1"
94    #    },
95    #    {
96    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp8"
97    #    },
98    #    {
99    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp4"
100    #    },
101    #    {
102    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp7"
103    #    },
104    #    {
105    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp5"
106    #    },
107    #    {
108    #      "@odata.id": "/redfish/v1/EventService/Subscriptions/snmp3"
109    #    }
110    #  ],
111    #  "Members@odata.count": 9,
112    #  "Name": "Event Destination Collections"
113
114    # Get the list of child URIs.
115    @{snmp_mgr_uris}=  Redfish.Get Members List  ${subscription_uri}  filter=snmp
116
117    [Return]  ${snmp_mgr_uris}
118