-
Notifications
You must be signed in to change notification settings - Fork 0
/
errataByHost.py
141 lines (125 loc) · 5.17 KB
/
errataByHost.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#!/usr/bin/python
import json
import collections
from pyexcel_ods import save_data
import argparse
import xlsxwriter
from satellite import Satellite
parser = argparse.ArgumentParser()
parser.add_argument("-d", "--debug", help="Print debugging messages", action="count")
parser.add_argument("-o", "--outfmt", help="Output format", choices=['xlsx', 'ods'], default='ods')
args = parser.parse_args()
errataWorkbook = collections.OrderedDict()
listOfHosts = {}
listOfErrata = {}
def printDBG(level, message):
if level>args.debug:
return
print(message)
with open('credentials.json') as credentialfile:
credentials = json.load(credentialfile)
printDBG(3, "Satellite credentials loaded.")
def collectData():
printDBG(1, "Collecting data from Satellite")
s = Satellite(credentials['hostname'])
s.setUsername(credentials['username'])
s.setPassword(credentials['password'])
h=s.listHosts()
for host in h:
printDBG(2, "Examining host "+host['name'])
host['errata_reboot_suggested'] = False
errata = s.getHostErrata(str(host['id']))
if len(errata) == 0:
pass
else:
printDBG(3, "Host has applicable errata.")
listOfHosts[host['name']] = host
listOfHosts[host['name']]['errata'] = {}
for erratum in errata:
if erratum['reboot_suggested']:
printDBG(3, "Host will require reboot after errata application")
host['errata_reboot_suggested'] = host['errata_reboot_suggested'] or erratum['reboot_suggested']
erratumID = erratum['errata_id']
if erratumID in listOfErrata:
pass
else:
listOfErrata[erratumID] = erratum
listOfHosts[host['name']]['errata'][erratumID] = erratum
def generateODS():
printDBG(1, "Generating report in ODS format")
sheet1 = {"Hosts Report":[]}
printDBG(2, "Generating host sheets")
for hostName in sorted(listOfHosts):
hostErrata = listOfHosts[hostName]['errata']
sheet1['Hosts Report'].append([hostName, len(listOfHosts[hostName]['errata']), 'REBOOT' if listOfHosts[hostName]['errata_reboot_suggested'] else '' ])
hostSheet = [["Errata Name", "Errata Type", "Number of packages"]]
for errataName in sorted(hostErrata):
errataInfo = hostErrata[errataName]
hostSheet.append([errataName, errataInfo['type'], len(errataInfo['packages']), 'REBOOT' if errataInfo['reboot_suggested'] else ''])
errataWorkbook.update(sheet1)
errataWorkbook.update({hostName:hostSheet})
printDBG(2, "Generating errata sheets")
for errataName in sorted(listOfErrata):
errata = listOfErrata[errataName]
errataID = errata['errata_id'].replace(":", "-")
errataSheet = []
errataSheet.append(["ID:", errata['errata_id']])
errataSheet.append(["Name:", errata['name']])
errataSheet.append(["Type:", errata['type']])
errataSheet.append(["Reboot Suggested:", 'YES' if errata['reboot_suggested'] else 'NO'])
errataSheet.append(["Affected packages:"])
for pkg in errata['packages']:
errataSheet.append(["",pkg])
errataWorkbook.update({errataID:errataSheet})
printDBG(2, "Saving workbook")
save_data('erratainfo.ods', errataWorkbook)
def generateXLSX():
printDBG(1, "Generating report in XLSX format")
workbook = xlsxwriter.Workbook('errataByHost.xlsx')
topSheet = workbook.add_worksheet('Hosts Report')
topSheetRow = 0
printDBG(2, "Generating host sheets")
for hostName in sorted(listOfHosts):
hostErrata = listOfHosts[hostName]['errata']
thisSheet = workbook.add_worksheet(hostName)
thisSheet.write(0, 0, "Errata Name")
thisSheet.write(0, 1, "Errata Type")
thisSheet.write(0, 2, "Number of packages")
topSheet.write(topSheetRow, 0, hostName)
topSheet.write(topSheetRow, 1, len(listOfHosts[hostName]['errata']))
topSheet.write(topSheetRow, 2, 'REBOOT' if listOfHosts[hostName]['errata_reboot_suggested'] else '')
topSheetRow+=1
hostSheetRow = 1
for errataName in sorted(hostErrata):
errataInfo = hostErrata[errataName]
thisSheet.write(hostSheetRow, 0, errataName)
thisSheet.write(hostSheetRow, 1, errataInfo['type'])
thisSheet.write(hostSheetRow, 2, len(errataInfo['packages']))
thisSheet.write(hostSheetRow, 3, 'REBOOT' if errataInfo['reboot_suggested'] else '')
hostSheetRow+=1
printDBG(2, "Generating errata sheets")
for errataName in sorted(listOfErrata):
errata = listOfErrata[errataName]
errataID = errata['errata_id'].replace(":", "-")
errataSheet = workbook.add_worksheet(errataID)
errataSheet.write(0, 0, "ID:")
errataSheet.write(0, 1, errata['errata_id'])
errataSheet.write(1, 0, "Name:")
errataSheet.write(1, 1, errata['name'])
errataSheet.write(2, 0, "Type:")
errataSheet.write(2, 1, errata['type'])
errataSheet.write(3, 0, "Reboot suggested:")
errataSheet.write(3, 1, 'YES' if errata['reboot_suggested'] else 'NO')
errataSheet.write(4, 0, "Affected packages:")
errataSheetRow = 5
for pkg in errata['packages']:
errataSheet.write(errataSheetRow, 1, pkg)
errataSheetRow+=1
printDBG(2, "Saving workbook")
workbook.close()
if __name__ == '__main__':
collectData()
if args.outfmt == 'ods':
generateODS()
elif args.outfmt == 'xlsx':
generateXLSX()