Fix KeyError exceptions in GetLogs command (#59877)

* fix KeyError exceptions in GetLogs command

* add changelog fragment

* refine the list of LogEntry properties to collect
pull/61655/merge
Bill Dodd 5 years ago committed by ansibot
parent 86b38a0ead
commit 088d821f75

@ -0,0 +1,3 @@
---
bugfixes:
- redfish_facts - fix KeyError exceptions in GetLogs (https://github.com/ansible/ansible/issues/59797)

@ -269,6 +269,8 @@ class RedfishUtils(object):
def get_logs(self): def get_logs(self):
log_svcs_uri_list = [] log_svcs_uri_list = []
list_of_logs = [] list_of_logs = []
properties = ['Severity', 'Created', 'EntryType', 'OemRecordFormat',
'Message', 'MessageId', 'MessageArgs']
# Find LogService # Find LogService
response = self.get_request(self.root_uri + self.manager_uri) response = self.get_request(self.root_uri + self.manager_uri)
@ -284,12 +286,13 @@ class RedfishUtils(object):
if response['ret'] is False: if response['ret'] is False:
return response return response
data = response['data'] data = response['data']
for log_svcs_entry in data[u'Members']: for log_svcs_entry in data.get('Members', []):
response = self.get_request(self.root_uri + log_svcs_entry[u'@odata.id']) response = self.get_request(self.root_uri + log_svcs_entry[u'@odata.id'])
if response['ret'] is False: if response['ret'] is False:
return response return response
_data = response['data'] _data = response['data']
log_svcs_uri_list.append(_data['Entries'][u'@odata.id']) if 'Entries' in _data:
log_svcs_uri_list.append(_data['Entries'][u'@odata.id'])
# For each entry in LogServices, get log name and all log entries # For each entry in LogServices, get log name and all log entries
for log_svcs_uri in log_svcs_uri_list: for log_svcs_uri in log_svcs_uri_list:
@ -299,15 +302,16 @@ class RedfishUtils(object):
if response['ret'] is False: if response['ret'] is False:
return response return response
data = response['data'] data = response['data']
logs['Description'] = data['Description'] logs['Description'] = data.get('Description',
'Collection of log entries')
# Get all log entries for each type of log found # Get all log entries for each type of log found
for logEntry in data[u'Members']: for logEntry in data.get('Members', []):
# I only extract some fields - Are these entry names standard? entry = {}
list_of_log_entries.append(dict( for prop in properties:
Name=logEntry[u'Name'], if prop in logEntry:
Created=logEntry[u'Created'], entry[prop] = logEntry.get(prop)
Message=logEntry[u'Message'], if entry:
Severity=logEntry[u'Severity'])) list_of_log_entries.append(entry)
log_name = log_svcs_uri.split('/')[-1] log_name = log_svcs_uri.split('/')[-1]
logs[log_name] = list_of_log_entries logs[log_name] = list_of_log_entries
list_of_logs.append(logs) list_of_logs.append(logs)

Loading…
Cancel
Save