currently we have a lot of different versions of idrac installed which has meant we have had to add some hacks to the redfish module in spicerack to handle different redfish versions. As such it would be nice to agree upon and work towards up upgrading the idrac version to some minimum.
I have done a bit of research and there seems to be two versions that are worth highlighting as milestones in the upgrade path
* 3.30.30.30: adds HttpPushUri, anything below this requires a manual upgrade to this before progressing
** This is the first version which is supported by the firmware upgrade cookbook
** you must upgrade to this version before progressing to anything larger (i.e. you cant go straight to 6.*)
** once on this version it appears that you can upgrade to the most recent version, using the current cookbook
** unfortunately the supermicro update serviette does not support HttpPushUri
* 4.40.00.00: Introduces MultipartHttpPushUri which is preferred
** This allows for a nicer interface for uploading firmware files
** This method is supported by super-micro as well
* 6.10.0.0: The current idrac version
please not the above numbers relate to the generation 14 (idrac9), ill need to look separately at the gen 13 (idrac8) cards.
Ideally i think it would be nice if we can get everything up to the current version 6.*, however as a priority i think it would be nice if we can upgrade everything that with `3.30.30.30 <= version < 4.40.0.0`. this would allow us to at the very least migrate current cookbooks to all use the MultipartHttpPushUri API.
Anything below 3.30.30.30 would need a manual upgrade to 3.30.30.30 so i think its reasonable to say for those machines you have to do two manual
updates before redfish is supported i.e. $current -> 3.30.30.30, 30.30.30.30 -> $latest
However even with this constrant that is still ~25% or our serveres
```
lines=10
alert1001.wikimedia.org
alert2001.wikimedia.org
an-conf1001.eqiad.wmnet
an-conf1002.eqiad.wmnet
an-conf1003.eqiad.wmnet
an-druid1001.eqiad.wmnet
an-druid1002.eqiad.wmnet
an-test-coord1001.eqiad.wmnet
an-test-master1001.eqiad.wmnet
an-test-master1002.eqiad.wmnet
an-test-worker1001.eqiad.wmnet
an-test-worker1002.eqiad.wmnet
an-test-worker1003.eqiad.wmnet
an-tool1010.eqiad.wmnet
an-worker1096.eqiad.wmnet
an-worker1097.eqiad.wmnet
an-worker1098.eqiad.wmnet
an-worker1099.eqiad.wmnet
an-worker1100.eqiad.wmnet
an-worker1101.eqiad.wmnet
an-worker1102.eqiad.wmnet
an-worker1103.eqiad.wmnet
an-worker1104.eqiad.wmnet
an-worker1105.eqiad.wmnet
an-worker1106.eqiad.wmnet
an-worker1107.eqiad.wmnet
an-worker1108.eqiad.wmnet
an-worker1109.eqiad.wmnet
an-worker1110.eqiad.wmnet
an-worker1111.eqiad.wmnet
an-worker1112.eqiad.wmnet
an-worker1113.eqiad.wmnet
an-worker1114.eqiad.wmnet
an-worker1115.eqiad.wmnet
an-worker1116.eqiad.wmnet
an-worker1117.eqiad.wmnet
backup1002.eqiad.wmnet
backup2001.codfw.wmnet
backup2002.codfw.wmnet
backup2003.codfw.wmnet
cloudbackup2001.codfw.wmnet
cloudbackup2002.codfw.wmnet
cloudcephmon1001.eqiad.wmnet
cloudcephmon1002.eqiad.wmnet
cloudcephmon1003.eqiad.wmnet
cloudcephmon2004-dev.codfw.wmnet
cloudcephosd1001.eqiad.wmnet
cloudcephosd1002.eqiad.wmnet
cloudcephosd1003.eqiad.wmnet
cloudcephosd1004.eqiad.wmnet
cloudcephosd1005.eqiad.wmnet
cloudcephosd1006.eqiad.wmnet
cloudcephosd1007.eqiad.wmnet
cloudcephosd1008.eqiad.wmnet
cloudcephosd1009.eqiad.wmnet
cloudcephosd1010.eqiad.wmnet
cloudcephosd1011.eqiad.wmnet
cloudcephosd1012.eqiad.wmnet
cloudcephosd1013.eqiad.wmnet
cloudcephosd1014.eqiad.wmnet
cloudcephosd1015.eqiad.wmnet
cloudcephosd2001-dev.codfw.wmnet
cloudcephosd2002-dev.codfw.wmnet
cloudcephosd2003-dev.codfw.wmnet
cloudcontrol1005.wikimedia.org
cloudcontrol2004-dev.wikimedia.org
clouddb1013.eqiad.wmnet
clouddb1014.eqiad.wmnet
clouddb1015.eqiad.wmnet
clouddb1016.eqiad.wmnet
clouddb1017.eqiad.wmnet
clouddb1018.eqiad.wmnet
clouddb1019.eqiad.wmnet
clouddb1020.eqiad.wmnet
cloudelastic1005.wikimedia.org
cloudgw2002-dev.codfw.wmnet
cloudvirt-wdqs1002.eqiad.wmnet
cloudvirt-wdqs1003.eqiad.wmnet
cloudvirt1031.eqiad.wmnet
cloudvirt1032.eqiad.wmnet
cloudvirt1033.eqiad.wmnet
cloudvirt1034.eqiad.wmnet
cloudvirt1035.eqiad.wmnet
cloudvirt1036.eqiad.wmnet
cloudvirt1037.eqiad.wmnet
cloudvirt1038.eqiad.wmnet
cloudvirt1039.eqiad.wmnet
conf2004.codfw.wmnet
conf2005.codfw.wmnet
conf2006.codfw.wmnet
cp2042.codfw.wmnet
cumin2002.codfw.wmnet
db1131.eqiad.wmnet
db1133.eqiad.wmnet
db1141.eqiad.wmnet
db1142.eqiad.wmnet
db1143.eqiad.wmnet
db1144.eqiad.wmnet
db1145.eqiad.wmnet
db1146.eqiad.wmnet
db1147.eqiad.wmnet
db1148.eqiad.wmnet
db1149.eqiad.wmnet
db1150.eqiad.wmnet
db1151.eqiad.wmnet
db1152.eqiad.wmnet
db1153.eqiad.wmnet
db1154.eqiad.wmnet
db1155.eqiad.wmnet
db1162.eqiad.wmnet
db2103.codfw.wmnet
db2104.codfw.wmnet
db2105.codfw.wmnet
db2106.codfw.wmnet
db2109.codfw.wmnet
db2110.codfw.wmnet
db2111.codfw.wmnet
db2113.codfw.wmnet
db2115.codfw.wmnet
db2116.codfw.wmnet
db2117.codfw.wmnet
db2118.codfw.wmnet
db2119.codfw.wmnet
db2120.codfw.wmnet
db2121.codfw.wmnet
db2122.codfw.wmnet
db2123.codfw.wmnet
db2124.codfw.wmnet
db2125.codfw.wmnet
db2126.codfw.wmnet
db2127.codfw.wmnet
db2128.codfw.wmnet
db2129.codfw.wmnet
db2130.codfw.wmnet
db2131.codfw.wmnet
db2132.codfw.wmnet
db2133.codfw.wmnet
db2134.codfw.wmnet
db2135.codfw.wmnet
db2137.codfw.wmnet
db2138.codfw.wmnet
db2139.codfw.wmnet
db2141.codfw.wmnet
db2142.codfw.wmnet
db2143.codfw.wmnet
db2144.codfw.wmnet
db2145.codfw.wmnet
db2146.codfw.wmnet
db2147.codfw.wmnet
db2148.codfw.wmnet
db2149.codfw.wmnet
db2150.codfw.wmnet
db2151.codfw.wmnet
db2152.codfw.wmnet
dbprov1001.eqiad.wmnet
dbprov1002.eqiad.wmnet
dbprov1003.eqiad.wmnet
dbprov2001.codfw.wmnet
dbprov2002.codfw.wmnet
dbprov2003.codfw.wmnet
dbproxy1018.eqiad.wmnet
dbproxy1019.eqiad.wmnet
dbproxy1020.eqiad.wmnet
dbproxy1021.eqiad.wmnet
dbproxy2001.codfw.wmnet
dbproxy2002.codfw.wmnet
dbproxy2003.codfw.wmnet
dbproxy2004.codfw.wmnet
deploy1002.eqiad.wmnet
deploy2002.codfw.wmnet
dns3001.wikimedia.org
dns3002.wikimedia.org
druid1007.eqiad.wmnet
druid1008.eqiad.wmnet
dumpsdata1003.eqiad.wmnet
elastic1053.eqiad.wmnet
elastic1054.eqiad.wmnet
elastic1055.eqiad.wmnet
elastic1056.eqiad.wmnet
elastic1057.eqiad.wmnet
elastic1058.eqiad.wmnet
elastic1059.eqiad.wmnet
elastic1060.eqiad.wmnet
elastic1061.eqiad.wmnet
elastic1062.eqiad.wmnet
elastic1063.eqiad.wmnet
elastic1064.eqiad.wmnet
elastic1065.eqiad.wmnet
elastic1066.eqiad.wmnet
elastic1067.eqiad.wmnet
elastic2037.codfw.wmnet
elastic2050.codfw.wmnet
elastic2055.codfw.wmnet
elastic2056.codfw.wmnet
elastic2057.codfw.wmnet
elastic2058.codfw.wmnet
elastic2059.codfw.wmnet
elastic2060.codfw.wmnet
es1020.eqiad.wmnet
es1021.eqiad.wmnet
es1022.eqiad.wmnet
es1023.eqiad.wmnet
es1024.eqiad.wmnet
es1025.eqiad.wmnet
es1026.eqiad.wmnet
es1027.eqiad.wmnet
es1028.eqiad.wmnet
es1029.eqiad.wmnet
es1030.eqiad.wmnet
es1031.eqiad.wmnet
es1032.eqiad.wmnet
es1033.eqiad.wmnet
es1034.eqiad.wmnet
es2020.codfw.wmnet
es2022.codfw.wmnet
es2023.codfw.wmnet
es2024.codfw.wmnet
es2025.codfw.wmnet
es2026.codfw.wmnet
es2027.codfw.wmnet
es2028.codfw.wmnet
es2029.codfw.wmnet
es2030.codfw.wmnet
es2032.codfw.wmnet
es2033.codfw.wmnet
es2034.codfw.wmnet
ganeti1009.eqiad.wmnet
ganeti1010.eqiad.wmnet
ganeti1011.eqiad.wmnet
ganeti1012.eqiad.wmnet
ganeti1013.eqiad.wmnet
ganeti1014.eqiad.wmnet
ganeti1015.eqiad.wmnet
ganeti1016.eqiad.wmnet
ganeti1017.eqiad.wmnet
ganeti1018.eqiad.wmnet
ganeti1019.eqiad.wmnet
ganeti1020.eqiad.wmnet
ganeti1021.eqiad.wmnet
ganeti1022.eqiad.wmnet
ganeti2018.codfw.wmnet
ganeti2019.codfw.wmnet
ganeti2020.codfw.wmnet
ganeti2021.codfw.wmnet
ganeti2022.codfw.wmnet
ganeti2023.codfw.wmnet
ganeti2024.codfw.wmnet
gerrit1001.wikimedia.org
htmldumper1001.eqiad.wmnet
kafka-jumbo1007.eqiad.wmnet
kafka-jumbo1008.eqiad.wmnet
kafka-jumbo1009.eqiad.wmnet
kafka-logging2001.codfw.wmnet
kafka-logging2002.codfw.wmnet
kafka-logging2003.codfw.wmnet
kafka-main1001.eqiad.wmnet
kafka-main1002.eqiad.wmnet
kafka-main1003.eqiad.wmnet
kafka-main1004.eqiad.wmnet
kafka-main1005.eqiad.wmnet
kafka-main2004.codfw.wmnet
kafka-main2005.codfw.wmnet
krb1001.eqiad.wmnet
kubernetes1007.eqiad.wmnet
kubernetes1008.eqiad.wmnet
kubernetes1009.eqiad.wmnet
kubernetes1010.eqiad.wmnet
kubernetes1011.eqiad.wmnet
kubernetes1012.eqiad.wmnet
kubernetes1013.eqiad.wmnet
kubernetes1014.eqiad.wmnet
kubernetes1017.eqiad.wmnet
kubernetes2007.codfw.wmnet
kubernetes2008.codfw.wmnet
kubernetes2009.codfw.wmnet
kubernetes2010.codfw.wmnet
kubernetes2011.codfw.wmnet
kubernetes2012.codfw.wmnet
kubernetes2013.codfw.wmnet
kubernetes2014.codfw.wmnet
kubernetes2017.codfw.wmnet
kubestage2001.codfw.wmnet
kubestage2002.codfw.wmnet
logstash2033.codfw.wmnet
logstash2034.codfw.wmnet
logstash2035.codfw.wmnet
lvs2007.codfw.wmnet
lvs2008.codfw.wmnet
lvs2009.codfw.wmnet
lvs2010.codfw.wmnet
lvs3005.esams.wmnet
lvs3006.esams.wmnet
lvs3007.esams.wmnet
maps1005.eqiad.wmnet
maps1006.eqiad.wmnet
maps1007.eqiad.wmnet
maps1008.eqiad.wmnet
maps1009.eqiad.wmnet
maps1010.eqiad.wmnet
maps2005.codfw.wmnet
maps2006.codfw.wmnet
maps2007.codfw.wmnet
maps2008.codfw.wmnet
maps2009.codfw.wmnet
maps2010.codfw.wmnet
mc-gp1001.eqiad.wmnet
mc-gp1002.eqiad.wmnet
mc-gp1003.eqiad.wmnet
mc-gp2001.codfw.wmnet
mc-gp2002.codfw.wmnet
mc-gp2003.codfw.wmnet
ml-serve2001.codfw.wmnet
ml-serve2002.codfw.wmnet
ml-serve2003.codfw.wmnet
ml-serve2004.codfw.wmnet
moss-fe2001.codfw.wmnet
moss-fe2002.codfw.wmnet
ms-backup2001.codfw.wmnet
ms-backup2002.codfw.wmnet
ms-be1060.eqiad.wmnet
ms-be1061.eqiad.wmnet
ms-be1062.eqiad.wmnet
ms-be1063.eqiad.wmnet
ms-be2057.codfw.wmnet
ms-be2059.codfw.wmnet
ms-be2060.codfw.wmnet
ms-be2061.codfw.wmnet
mw1349.eqiad.wmnet
mw1350.eqiad.wmnet
mw1351.eqiad.wmnet
mw1352.eqiad.wmnet
mw1353.eqiad.wmnet
mw1354.eqiad.wmnet
mw1355.eqiad.wmnet
mw1356.eqiad.wmnet
mw1357.eqiad.wmnet
mw1358.eqiad.wmnet
mw1359.eqiad.wmnet
mw1360.eqiad.wmnet
mw1361.eqiad.wmnet
mw1362.eqiad.wmnet
mw1363.eqiad.wmnet
mw1364.eqiad.wmnet
mw1365.eqiad.wmnet
mw1366.eqiad.wmnet
mw1367.eqiad.wmnet
mw1368.eqiad.wmnet
mw1369.eqiad.wmnet
mw1370.eqiad.wmnet
mw1371.eqiad.wmnet
mw1372.eqiad.wmnet
mw1373.eqiad.wmnet
mw1374.eqiad.wmnet
mw1375.eqiad.wmnet
mw1376.eqiad.wmnet
mw1377.eqiad.wmnet
mw1378.eqiad.wmnet
mw1379.eqiad.wmnet
mw1380.eqiad.wmnet
mw1381.eqiad.wmnet
mw1382.eqiad.wmnet
mw1383.eqiad.wmnet
mw1384.eqiad.wmnet
mw1385.eqiad.wmnet
mw1386.eqiad.wmnet
mw1387.eqiad.wmnet
mw1388.eqiad.wmnet
mw1389.eqiad.wmnet
mw1390.eqiad.wmnet
mw1391.eqiad.wmnet
mw1392.eqiad.wmnet
mw1393.eqiad.wmnet
mw1394.eqiad.wmnet
mw1395.eqiad.wmnet
mw1396.eqiad.wmnet
mw1397.eqiad.wmnet
mw1398.eqiad.wmnet
mw1399.eqiad.wmnet
mw1400.eqiad.wmnet
mw1401.eqiad.wmnet
mw1402.eqiad.wmnet
mw1403.eqiad.wmnet
mw1404.eqiad.wmnet
mw1405.eqiad.wmnet
mw1406.eqiad.wmnet
mw1407.eqiad.wmnet
mw1408.eqiad.wmnet
mw1409.eqiad.wmnet
mw1410.eqiad.wmnet
mw1411.eqiad.wmnet
mw1412.eqiad.wmnet
mw1413.eqiad.wmnet
mw1451.eqiad.wmnet
mw2291.codfw.wmnet
mw2292.codfw.wmnet
mw2293.codfw.wmnet
mw2294.codfw.wmnet
mw2295.codfw.wmnet
mw2296.codfw.wmnet
mw2297.codfw.wmnet
mw2298.codfw.wmnet
mw2299.codfw.wmnet
mw2300.codfw.wmnet
mw2301.codfw.wmnet
mw2302.codfw.wmnet
mw2303.codfw.wmnet
mw2304.codfw.wmnet
mw2305.codfw.wmnet
mw2306.codfw.wmnet
mw2307.codfw.wmnet
mw2308.codfw.wmnet
mw2309.codfw.wmnet
mw2310.codfw.wmnet
mw2311.codfw.wmnet
mw2312.codfw.wmnet
mw2313.codfw.wmnet
mw2314.codfw.wmnet
mw2315.codfw.wmnet
mw2316.codfw.wmnet
mw2317.codfw.wmnet
mw2318.codfw.wmnet
mw2319.codfw.wmnet
mw2320.codfw.wmnet
mw2321.codfw.wmnet
mw2322.codfw.wmnet
mw2323.codfw.wmnet
mw2324.codfw.wmnet
mw2325.codfw.wmnet
mw2326.codfw.wmnet
mw2327.codfw.wmnet
mw2328.codfw.wmnet
mw2329.codfw.wmnet
mw2330.codfw.wmnet
mw2331.codfw.wmnet
mw2332.codfw.wmnet
mw2333.codfw.wmnet
mw2334.codfw.wmnet
mw2335.codfw.wmnet
mw2337.codfw.wmnet
mw2338.codfw.wmnet
mw2339.codfw.wmnet
mw2350.codfw.wmnet
mw2351.codfw.wmnet
mw2352.codfw.wmnet
mw2353.codfw.wmnet
mw2354.codfw.wmnet
mw2355.codfw.wmnet
mw2356.codfw.wmnet
mw2357.codfw.wmnet
mw2358.codfw.wmnet
mw2359.codfw.wmnet
mw2360.codfw.wmnet
mw2361.codfw.wmnet
mw2362.codfw.wmnet
mw2363.codfw.wmnet
mw2364.codfw.wmnet
mw2365.codfw.wmnet
mw2366.codfw.wmnet
mw2367.codfw.wmnet
mw2368.codfw.wmnet
mw2369.codfw.wmnet
mw2370.codfw.wmnet
mw2371.codfw.wmnet
mw2372.codfw.wmnet
mw2373.codfw.wmnet
mw2374.codfw.wmnet
mw2375.codfw.wmnet
mw2376.codfw.wmnet
mw2377.codfw.wmnet
mw2378.codfw.wmnet
mw2379.codfw.wmnet
mw2380.codfw.wmnet
mw2381.codfw.wmnet
mw2382.codfw.wmnet
mw2384.codfw.wmnet
mw2385.codfw.wmnet
mw2386.codfw.wmnet
mw2387.codfw.wmnet
mw2388.codfw.wmnet
mw2389.codfw.wmnet
mw2390.codfw.wmnet
mw2391.codfw.wmnet
mw2392.codfw.wmnet
mw2393.codfw.wmnet
mw2394.codfw.wmnet
mw2395.codfw.wmnet
mw2396.codfw.wmnet
mw2397.codfw.wmnet
mw2398.codfw.wmnet
mw2399.codfw.wmnet
mw2400.codfw.wmnet
mw2401.codfw.wmnet
mw2402.codfw.wmnet
mw2403.codfw.wmnet
mw2404.codfw.wmnet
mw2405.codfw.wmnet
mw2406.codfw.wmnet
mw2407.codfw.wmnet
mw2408.codfw.wmnet
mw2409.codfw.wmnet
mw2410.codfw.wmnet
mw2411.codfw.wmnet
mwlog2002.codfw.wmnet
mwmaint2002.codfw.wmnet
parse2001.codfw.wmnet
parse2002.codfw.wmnet
parse2003.codfw.wmnet
parse2004.codfw.wmnet
parse2005.codfw.wmnet
parse2006.codfw.wmnet
parse2007.codfw.wmnet
parse2008.codfw.wmnet
parse2009.codfw.wmnet
parse2010.codfw.wmnet
parse2011.codfw.wmnet
parse2012.codfw.wmnet
parse2013.codfw.wmnet
parse2014.codfw.wmnet
parse2015.codfw.wmnet
parse2016.codfw.wmnet
parse2017.codfw.wmnet
parse2018.codfw.wmnet
parse2019.codfw.wmnet
parse2020.codfw.wmnet
rdb2007.codfw.wmnet
rdb2008.codfw.wmnet
rdb2009.codfw.wmnet
rdb2010.codfw.wmnet
restbase1028.eqiad.wmnet
restbase1029.eqiad.wmnet
restbase1030.eqiad.wmnet
restbase2014.codfw.wmnet
restbase2021.codfw.wmnet
restbase2022.codfw.wmnet
restbase2023.codfw.wmnet
snapshot1010.eqiad.wmnet
stat1008.eqiad.wmnet
thanos-be1001.eqiad.wmnet
thanos-be1002.eqiad.wmnet
thanos-be1003.eqiad.wmnet
thanos-be1004.eqiad.wmnet
thanos-be2001.codfw.wmnet
thanos-be2002.codfw.wmnet
thanos-be2003.codfw.wmnet
thanos-be2004.codfw.wmnet
thanos-fe1001.eqiad.wmnet
thanos-fe1002.eqiad.wmnet
thanos-fe1003.eqiad.wmnet
thanos-fe2001.codfw.wmnet
thanos-fe2002.codfw.wmnet
thanos-fe2003.codfw.wmnet
wdqs1011.eqiad.wmnet
wdqs1012.eqiad.wmnet
wdqs1013.eqiad.wmnet
wdqs2007.codfw.wmnet
wdqs2008.codfw.wmnet
556
```
generated with
```
lang=python
#!/usr/bin/env python3
from collections import defaultdict
from pypuppetdb import connect
from pypuppetdb.QueryBuilder import RegexOperator
from os.path import basename
from packaging.version import Version
from textwrap import fill
def main():
idrac_upgrades = {
'manual': defaultdict(list),
'unsupported': defaultdict(list),
}
good_lower = Version('4.40.0.0')
unsupported_lower = Version('3.30.0.0')
db = connect()
pql = """inventory[certname, facts] { facts.firmware_idrac ~ '^[1234].+' }"""
nodes = db.pql(pql)
for node in nodes:
version = Version(node['facts']['firmware_idrac'])
if version < unsupported_lower:
idrac_upgrades['manual'][str(version)].append(node['certname'])
continue
if version < good_lower:
idrac_upgrades['unsupported'][str(version)].append(node['certname'])
continue
print('### Hosts that require Manual upgrade:')
for version, hosts in dict(sorted(idrac_upgrades['manual'].items())).items():
print(f'#### {version} ({len(hosts)})')
print(fill(', '.join(sorted(hosts)), width=100, break_on_hyphens=False))
print()
print('\n### Unsupported hosts which can be upgrade automaticly:')
for version, hosts in dict(sorted(idrac_upgrades['unsupported'].items())).items():
print(f'#### {version} ({len(hosts)})')
print(fill(', '.join(sorted(hosts)), width=100, break_on_hyphens=False))
print()
if __name__ == '__main__':
raise SystemExit(main())
```