VMware Cloud Foundation Offline Bundle Download (3.x)

Disclosure: the following procedure applies to VMware Cloud Foundation (VCF) 3.x, I personally tested on 3.8.1 and 3.9.
However the LCM bundle transfer tool has been around a long time (since VCF 2.3 according to my checks) but I never really had a chance to test it properly; reason being that nearly all VCF deployments I dealt with were VxRack SDDC (or more recently VCF on VxRail) and at Dell EMC we have our own repository which doesn’t require the use of the lcm-bundle-transfer-util tool.
Anyway enough talking, let’s get on with it!

LCM Bundle Transfer Tool: What it is

the Bundle transfer utility is a command line tool which is specifically used to identify the bundles applicable to the current domain, download the bundles using the credentials, and upload them to SDDC Manager.

https://docs.vmware.com/en/VMware-Cloud-Foundation/3.9/vcf-39-upgrade/GUID-D18F19D1-8F03-48A4-8DE9-FF8F1CFA099D.html

SDDC Manager LCM is capable of downloading updates directly from depot.vmware.com and it has been like so for a long time. However if SDDC Manager lives in a dark site (aka without direct or proxy’d internet connectivity) then you’ll have to manually download the bundles from somewhere else and transfer them over.
I recently re-deployed from scratch my SDDC lab based on VCF 3.9 (using the awesome VLC PS tool) so it was natural to me to RTFM and check out the 3.9 documentation. Unfortunately the Offline Bundle Download for VMware Cloud 3.9 Foundation page is, to say the least, very confusing and actually missing key steps for the offline process to work.
What I normally do in this case is flipping one or maybe two releases back from the drop-down menu (like so)

chances are this will generally display the same content but hopefully better articulated or at least not just a copy&paste. So I checked one for VCF 3.8 which is indeed better but still omitting details… I still couldn’t get it working

So I asked on the Slack VLC channel and Tom Stephens from the VMware Technical Marketing team was very helpful and I eventually got it working. Thanks Tom! With that said, let’s see how simple it actually is when you know all the required steps 🙂

LCM Bundle Transfer Tool Configuration

Check you have Java JRE installed on the internet connected client you’re going to run the transfer tool from

From SDDC Manager copy the entire directory /opt/vmware/vcf/lcm/lcm-tools to your client

The marker file (markerFile) is a JSON file that contains information on the current software versions running on SDDC Manager. It also contains the bundles IDs for bundles that were downloaded before this file was generated. The markerFile.md5 contains the checksum for the markerFile.

https://docs.vmware.com/en/VMware-Cloud-Foundation/3.8/vcf-38-upgrade/GUID-8FA44ACE-8F04-47DA-845E-E0863094F7B0.html

From SDDC Manager generate the marker file. This is basically the inventory of all SDDC software as well bundles ID already downloaded.

cd /opt/vmware/vcf/lcm/lcm-tools/bin 
./lcm-bundle-transfer-util --generateMarker 

The output contains the directory where the marker file is generated.

Copy the /opt/vmware/vcf/lcm/lcm-tools directory, and the markerFile and markerFile.md5 files to a computer with internet access. Keep the two files at the same root level of the lcm-tools folder like following:

Downloading the bundle(s)

We are now ready to kick-off the download of the bundles. In my setup I created vcf-bundles as the root folder for the downloads. We need now to invoke the script and pass the marker file and md5.
Using ..\ you can go back one folder in the path. My structure is the following:

f:\repo\vcf-bundles
          |--lcm-tools
          |--lcm-toool\bin\lcm-bundle-transfer-util.bat 
          |--markerFile
          |--markerFile.md5
cd f:\repo\vcf-bundles\lcm-tools\bin
.\lcm-bundle-transfer-util.bat -download -outputDirector f:\repo\vcf-bundles -depotUser VMwareDownload@dell.com -MarkerFile ..\..\markerFile -MarkerMd5File ..\..\markerFile.md5

Cancelling the download for all bundles will still create the delta files and the folder structure

To download a single bundle you can now use the -bundle option, as following:

.\lcm-bundle-transfer-util.bat -download -outputDirector f:\repo\vcf-bundles -depotUser VMwareDownload@dell.com -bundle bundle-16165

it’s also possible to download bundles by type using the -imageType option like so:

./lcm-bundle-transfer-util.bat -download f:\repo\vcf-bundles -depotUser VMwareDownload@dell.com -imageType INSTALL|PATCH

It’s also possible to download all bundles of a certain release. This is particularly useful when, for instance, a customer must go through a change control process and has to validate binaries ahead of time (aka before deployment starts).

F:\repo\vcf-bundles\lcm-tools\bin>.\lcm-bundle-transfer-util.bat -download -outputDirector f:\repo\vcf-bundles -depotUser VMwareDownload@dell.com -p 3.9.0.0

In case you have a VxRail system deployed with VCF you also need to download extra components (for example VxRail Manager) then you’d use the option –download “downloadPartnerBundle”
Reference https://docs.vmware.com/en/VMware-Cloud-Foundation/3.9/com.vmware.vcf.vxrail.admin.doc/GUID-7925F6DD-2008-4CCA-87ED-0AA12BC56EE5.html

Once the download is finished, you will see the following folders and files in your root directory.
What we need to do now (and the VMware documentation is not telling you) is that according to KB 66612 we have to move inside the same folder the compressed bundle file (.tar) the manifest file (.manifest) and the manifest signature (.manifest.sig)

  • bundles folder containing the actual bundle files (.tar)
  • manifest folder containing the manifest and manifest signature files (.manifest and .manifest.sig)
    as well as
  • deltaFileDownloaded
  • deltaFileDownloaded.md5
  • index.v3

In the following example, in SDDC Manager I created a folder “bundle-14561” under “/nfs/vmware/vcf/nfs-mount” and then uploaded the files from WinSCP

I’m showing here that no bundles have been downloaded from SDDC Manager GUI yet.

Setting Permissions

From vcf user change to root then set permissions to the folder recursively (the documentation tells you to ssh in as vcf user but this isn’t enough to change permissions!)

So to summarise:

  • create the bundle folder from vcf (bundle-<id>)
  • upload
    • bundle.tar
    • bundle.manifest
    • bundle.manifest.sig
    • deltaFileDownloaded
    • DeltaFildeDownloaded.md5
    • index.v3
  • set ownership to vcf_lcm:vcf and permission to 777 to the bundle folder recursively

Bundle push to LCM

All we have left now is to push the bundle to LCM… or at least that’s what you’d think according to the documentation:

cd /opt/vmware/vcf/lcm/lcm-tools/bin 
./lcm-bundle-transfer-util -upload -bundleDirectory ${absolute-path-output-dir} 

Unfortunately this command is simply not working for me. Tried any combination of folder structure. This is the error I’m getting is:

Error occurred uploading bundle The specified bundle directory:/nfs/vmware/vcf/nfs-mount/bundle-14561 doesn't have all the required bundle files. Please verify the bundles and manifests folder in the upload directory. 
 These directories should contain the files: 
 /nfs/vmware/vcf/nfs-mount/bundle-14561/manifests/bundle-EVORACK-2.1.0-4816335.manifest,/nfs/vmware/vcf/nfs-mount/bundle-14561/manifests/bundle-EVORACK-2.1.0-4816335.manifest.sig and /nfs/vmware/vcf/nfs-mount/bundle-14561/bundles/bundle-EVORACK-2.1.0-4816335.tar

The error message seems to suggest that lcm-bundle-transfer-util is expecting a destination folder structured like this:

/bundle-14561
  |--index.v3
  |--deltaFileDownloaded.md5
  |--deltaFileDownloaded
  |--manifests/bundle-14561.manifest
  |--manifests/bundle-14561.manifest.sig
  |--bundles/bundle-14561.tar

However I tried that too and didn’t work either. I’m suspecting a bug but I couldn’t find anything so if you know how to get the upload command working please leave a comment.

The API call workaround

So the upload via the tool isn’t working 😐

Long story short, going back to KB 66612 we can see all we really need are 3 files inside the bundle folder:

 /bundle-14561
  |--manifests/bundle-14561.manifest
  |--manifests/bundle-14561.manifest.sig
  |--bundles/bundle-14561.tar

The API call we need to invoke is:

curl -X POST http://127.0.0.1/lcm/bundle/upload -d '{"bundle":"/nfs/vmware/vcf/nfs-mount/bundle-14561/bundle-14561.tar","manifest":"/nfs/vmware/vcf/nfs-mount/bundle-14561/bundle-14561.manifest","signature":"/nfs/vmware/vcf/nfs-mount/bundle-14561/bundle-14561.manifest.sig"}' -H 'Content-Type:application/json'

and works like a charm

SDDC Manager validation will take some time

and there you have it now loaded and visible

To wrap up, this was supposed to be a very quick blog post but because of the issue it turned out to be way longer than I expected, but I hope it helps!

VMware: can we have a fix for this bundle transfer utility please? Cheers

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.

2 Trackbacks

  1. vRSLCM deployment from SDDC Manager | blog.bertello.org (Pingback)
  2. VMware Cloud Foundation 3.9.1 LCM Update | blog.bertello.org (Pingback)