The code was comparing two string constants, instead of
a variable to a constant. Correct the problem to enable
the preflight checks to work as intended.
The strategy of duping file descriptors
is inadequate. The copies share
identical offsets.
Fix this by reading the file once into
memory, and using BytesIO to fake a file.
This is relatively memory intensive in theory, but in practice
pyghmi library had been duping everything to memory
anyway, so it is a wash for now.
With confluent running as non-root, it is now very much more
likely that it is a directory permission issue.
Since the root user is commonly asking a lesser privileged service to do the operation.
In the event of an unanticipated firmware exception,
capture to log. Expected error conditions should have specific handlers
to avoid the tracellog treatment.
To keep the concurrent update level to a fairly widely attainable limit,
impose 256 at a time limit. This is a gigantic improvement over most
previous circumstances still, and can comfortably accommodate three of
the most dense racks at a time.
Some things on update are active immediately, others are pending reboot.
Documentation needs to use this to let users know what they need to do
or not need to do after the firmware update.
str will tend to present a more normal looking error string. Use
that so that a user does not have the impression there is a code
issue on expected errors.