BIGdiff - A Little Help For Software Upgrades

Published on behalf of DevCentral MVP Leonardo Souza

If you have been to F5 Agility in Boston and went to my presentation, you should have already an idea of what I will talk about in this article, but you will learn more things, so continue reading.

If you haven’t heard of BIGdiff yet, have you been living in Mars?
Don’t worry I will explain what that is and how it can help you with software upgrades, and whatever you find useful.
It is not an AI that will do the upgrade for you but will help you with the upgrade.


These are the challenges BIGdiff addresses:

You are upgrading a F5 device with 1,000 virtual servers and 1,000 wide IPs.

  1. How do you know if you have the same number of virtual servers and wide IPs after the upgrade?
  2. How do you know if you have the same number of available virtual servers and wide IPs after the upgrade?
  3. If the number of available virtual servers or wide IPs changed after upgrade, how can you find what changed?

Existing Solutions

First Challenge:

There are multiple solutions already for this challenge.

Both for LTM and GTM, you can take a print screen of the statistics before the upgrade and compare after the upgrade.
For LTM, Statistics > Module Statistics > Local Traffic
For GTM, Statistics > Module Statistics > DNS > GSLB
This in, but I think this exist since v9, and will be in similar place in all versions.

Qkview and iHealth combination.
iHealth will show you configuration totals but is mainly LTM and does not show you GTM objects.

Network Map is another option.
However, network map is only for LTM.
Also, that is a map that start from a virtual server, so if you have a pool that is not linked to a virtual server that will not count in the totals.

Second Challenge:

The statistics also tell you the status of the objects, so that solution works for both challenges.

Third Challenge:

There is no automated way to get this.
You could run multiple tmsh commands to get the status before the upgrade, or just generate a qkview that will run those commands for you.
However, you will still need to compare the objects one by one.
If the only slot you got for the software upgrade was 3am in a Sunday, I am sure you will miss some objects or fall asleep.


I hope you are thinking about the same, computers don’t need to sleep, and they are better/faster than humans to compare 2 strings or numbers (that is basically 0 or 1, so they are not that smart).
So, the conclusion is simple, let the computer do the work comparing objects while you drink another coffee to keep you awake to complete the software upgrade.

The idea is simple, get the list of objects, and their respective status, before and after the software upgrade, then compare them and report the result.
In this context, object is any entity that has a status in a BIG-IP device that may be affected by the software upgrade.
Looking BIG-IP modules, that translate to LTM and GTM objects, for example, virtual servers and wide IPs.

That is where BIGdiff script comes to help you and automate that process.
You run BIGdiff before the upgrade, upgrade the device, and run again after the upgrade.
The script will then generate a HTML file with the results.

Technical Bits

BIGdiff is a bash script and uses dialog program to generate the graphical menus.
Dialog is a common program for CLI menus and is what F5 uses for the config command for example.

The script uses snmpwalk to query locally the device for the object status, because so far has been the faster option I tested.
That basically generates the same text file before and after the upgrade.
Those text files that are used after to compare the objects.

The script will generate the results in a HTML format, with tables.
If something already exists and do the job well, there is no reason why not to use, so the script uses the TableFilter JavaScript library, that provide filter functionalities for HTML tables.
You just need to have the JavaScript library file in the same folder that you have the HTML file, and the magic will happen.
If you don’t need the filter functionality, you don’t need to have the JavaScript library, and static tables will be presented.

The script is optimized to use mainly bash functionality, to be as faster as possible.
I tested the script to compare 13 thousand objects, and it complete the task in a couple minutes.
13K objects is a really big configuration, so even if the device you plan to run the script has a large configuration, that will be just a couple minutes in your change window to run the script.


The script only supports BIG-IP software, no support for EM or BIG-IQ.
The reason is simple, there is no use case for those software.

Versions 11.x.x/12.x.x/13.x.x/14.x.x were tested and are supported.
As new versions are released, I will be testing to see if any change is needed to support that version.

LTM objects are supported and will be listed even if LTM is not provisioned, as majority of the other modules do use LTM internally.
GTM objects and partitions are also supported.

Using BIGdiff

Go to the code share link: BIGdiff
Download the tablefilter.js file, if you want to use the table filter functionality as described above.
Download the that is the script file.

In the F5 device, create a folder in /shared/tmp, as /shared is shared between all volumes.
Upload the file to the F5 device.

Change the file permission to run:

chmod +x

Run the script:



Run the script before the upgrade.
Upgrade the F5 device.
Run the script after the upgrade.

Download the file ending in .html from the F5 device.
Open the HTML file with your favourite browser.
Make sure you have the tablefilter.js in the same folder as the HTML file, if you want the filter functionalities.

Other Use Cases

The reason I wrote the script was to help with the software upgrades, but you are not limited to software upgrades.
You can use the script to compare the objects after you have done something, that can be an upgrade or something else.

You can use the software for consolidations, for example 2 devices that will be replaced by a single device.
You run the script in the old devices, merge the txt files that are created with the list of objects.
Import the configuration in the new device, upload the script and merged txt file you created.
Run the script in the new device, and the script will report to you if the objects have the same status as in the old devices.

Another use case is for major changes.
You can run the script, do the changes, and run the script again.
The script will then tell you if you broke something.

Silent Mode

Silent mode is mainly to be used to integrate with other tools.
The image above explains how to use.


Read the information in the code share page about know issues.
I hope you find the script useful.

Published Aug 24, 2018
Version 1.0

Was this article helpful?


  • This indeed is a great stuff. Ill plan to modify the code for multi other purpose too!!!


    I really like the comparing part :D


  • Sorry for the delay, but I have been in a well deserved holidays.


    @jaikumar_f5 if you have ideas/code, please send me via direct message in DevCentral. Any improvement is welcomed.