Starting Step:
Create an abstract process for IOS/IOS-XE, IOS-XR, NX-OS, JunOS, and Arista.
Basically a series of steps of what an OS upgrade for each of these platforms would consist of. Obviously, there will be a lot of variations here depending on what the hardware is.
High level questions:
What is the control channel? I am assuming that SSH will be used as the general purpose control channel (at least initially). What part of this can be accomplished via APIs?
What is the transfer mechanism? I am assuming SCP as the standard transfer mechanism. Does there need to be others. If they are others, I would have a pretty strong preference to have them be initiated from the network device (i.e. they are things that just are executed from the SSH control channel).
Post-transfer requirements. MD5 or checksum on file. Is this required/optional, what should the default be?
Mechanics of specifying image to be used.
Reload mechanics. Default will definitely be off here.
Post-transfer requirements (i.e. information gathered post-transfer) and what is done with the information. Are all modules/interfaces still present?
High-availability contexts and what are their requirements. Other platform specific idiosyncrasies.
Any other caveats like ROM requirements, sanity checking if ROM is supported, memory requirements.
Not saying any of these will/should be included, but just specifying some of the issues.
One the biggest issues I run into on Junos is space. Either running out of space on the upload or during unpacking/verifying.
I am sure that issue must exist on other platforms so a necessary step would be checking free space and doing remediation if needed/wanted.
From the top of my head, this is similar to what I tested for small IOS and ASA devices. Note, I didn't have any auto detection of the nature of the remote device.
Verify boot variable, if appropriate.
Operational verification of device.
@lampwins Since I don't know the Junos OS upgrade process...it would definitely be helpful if you are someone else could sketch out what you would typically do during a manual OS upgrade.
@ktbyers for perspective, we use netmiko for device interaction, but there's a higher level device driver. we built code upgrade logic into the layer above netmiko. Some things, like the source of the file and md5 hash are going to be pretty environment specific. Also, regular reload vs fast reload is worth thinking about.