1*** Settings ***
2Documentation  Remote syslog utilities keywords.
3
4Resource         ../lib/resource.robot
5Resource         ../lib/rest_client.robot
6Resource         ../lib/utils.robot
7
8*** Keywords ***
9
10Configure Remote Log Server With Parameters
11    [Documentation]  Configure the remote logging server on BMC.
12    [Arguments]  ${remote_host}=${REMOTE_LOG_SERVER_HOST}
13    ...          ${remote_port}=${REMOTE_LOG_SERVER_PORT}
14
15    # Description of argument(s):
16    # remote_host  The host name or IP address of the remote logging server
17    #              (e.g. "xx.xx.xx.xx").
18    # remote_port  Remote ryslog server port number (e.g. "514").
19
20    # Example:
21    # https://xx.xx.xx.xx/xyz/openbmc_project/logging/config/remote
22    # Response code:200, Content:{
23    # "data": {
24    #     "Address": "xx.xx.xx.xx",
25    #     "Port": 514
26    # },
27    # "message": "200 OK",
28    # "status": "ok"
29    # }
30
31    ${host_dict}=  Create Dictionary  data=${remote_host}
32    Write Attribute  ${REMOTE_LOGGING_URI}  Address  data=${host_dict}
33    ...  verify=${TRUE}  expected_value=${remote_host}
34
35    # TODO: From Dev to do bump up restart service time and bulk address and
36    # port update API.
37    # Reference: https://github.com/ibm-openbmc/dev/issues/59
38    Sleep  20s
39
40    ${remote_port}=  Convert To Integer  ${remote_port}
41    ${port_dict}=  Create Dictionary  data=${remote_port}
42    Write Attribute  ${REMOTE_LOGGING_URI}  Port  data=${port_dict}
43    ...  verify=${TRUE}  expected_value=${remote_port}
44
45    # TODO: From Dev to do bump up restart service time and bulk address and
46    # port update API.
47    # Reference: https://github.com/ibm-openbmc/dev/issues/59
48    Sleep  20s
49
50
51Configure Remote Log Server
52    [Documentation]  Configure the remote logging server on BMC.
53    [Arguments]  ${remote_host}=${REMOTE_LOG_SERVER_HOST}
54    ...          ${remote_port}=${REMOTE_LOG_SERVER_PORT}
55
56    # Description of argument(s):
57    # remote_host  The host name or IP address of the remote logging server
58    #              (e.g. "xx.xx.xx.xx").
59    # remote_port  Remote ryslog server port number (e.g. "514").
60
61    @{remote_parm_list}=  Create List  ${remote_host}  ${remote_port}
62
63    ${data}=  Create Dictionary  data=@{remote_parm_list}
64
65    ${resp}=  OpenBMC Post Request
66    ...  ${REMOTE_LOGGING_CONFIG_URI}/action/remote  data=${data}
67
68    Should Be Equal As Strings  ${resp.status_code}  ${HTTP_OK}
69
70
71Verify Rsyslog Config On BMC
72    [Documentation]  Check if the rsyslog configuration on BMC is correct.
73    [Arguments]  ${remote_host}=${REMOTE_LOG_SERVER_HOST}
74    ...          ${remote_port}=${REMOTE_LOG_SERVER_PORT}
75
76    # Description of argument(s):
77    # remote_host  The host name or IP address of the remote logging server
78    #              (e.g. "xx.xx.xx.xx").
79    # remote_port  Remote ryslog server port number (e.g. "514").
80
81    # Example:
82    # Configured:
83    # *.* @@xx.xx.xx.xx:514root@bmchostname
84    # By default:
85    # #*.* @@remote-host:port
86
87    ${ryslog_conf}  ${stderr}  ${rc}=  BMC Execute Command
88    ...  cat /etc/rsyslog.d/server.conf
89
90    ${config}=  Catenate  @@${remote_host}:${remote_port}
91
92    Should Contain  ${ryslog_conf}  ${config}
93    ...  msg=${remote_host} and ${remote_port} are not configured.
94
95
96Remote Logging Server Execute Command
97    [Documentation]  Login to remote logging server.
98    [Arguments]  ${command}
99    ...          ${remote_host}=${REMOTE_LOG_SERVER_HOST}
100    ...          ${username}=${REMOTE_USERNAME}
101    ...          ${password}=${REMOTE_PASSWORD}
102
103    # Description of argument(s):
104    # command          Command line string.
105    # remote_host    The host name or IP address of the remote logging server
106    #                (e.g. "xx.xx.xx.xx").
107    # username       Remote rsyslog server user name.
108    # password       Remote rsyslog server password.
109
110    ${remote_dict}=  Create Dictionary  host=${remote_host}
111    Open Connection And Log In  ${username}  ${password}
112    ...  &{remote_dict}
113    ${stdout}  ${stderr}=  Execute Command  ${command}  return_stderr=True
114    Should Be Empty  ${stderr}
115    [Return]  ${stdout}
116
117
118Get Remote Log Server Configured
119    [Documentation]  Check that remote logging server is not configured.
120
121    ${address}=  Read Attribute  ${REMOTE_LOGGING_URI}  Address
122    Should Not Be Equal  ${address}  ${REMOTE_LOG_SERVER_HOST}
123
124    ${port_number}=  Convert To Integer  ${REMOTE_LOG_SERVER_PORT}
125    ${port}=  Read Attribute  ${REMOTE_LOGGING_URI}  Port
126    Should Not Be Equal  ${port}  ${port_number}
127