Skip to content

Instantly share code, notes, and snippets.

@robdyke
Forked from eshizhan/conv2vmx-ovf.py
Last active October 24, 2016 04:26
Show Gist options
  • Save robdyke/d81b0f1976be440052af to your computer and use it in GitHub Desktop.
Save robdyke/d81b0f1976be440052af to your computer and use it in GitHub Desktop.
script to convert VBox .ova export for import to VMWare ESXi
#!/usr/bin/env python
# Neova Health
# Helper script to convert VBox .ova export for import to VMWare ESXi
# usage:
# conv-ova4vmx.py some-vbox-export.ova
# forked from : https://gist.github.com/eshizhan/6650285
import sys
import tarfile
import os
import hashlib
srcfile = sys.argv[1]
fileName,fileExtension = os.path.splitext(srcfile)
destfile = '%s%s%s' %('vm-',fileName,'.ova')
t = tarfile.open(srcfile, 'r')
ovaFiles = t.getnames()
print ovaFiles
ovaF = ovaFiles[0];
ovaV = ovaFiles[1];
ovaM = ovaFiles[2];
tar = tarfile.open(srcfile)
tar.extractall()
tar.close()
fn = ovaF
fp = open(fn).read()
if hasattr(fp,'decode'):
fp = fp.decode('utf-8')
fp = fp.replace('<OperatingSystemSection ovf:id="80">', '<OperatingSystemSection ovf:id="101">')
fp = fp.replace('<vssd:VirtualSystemType>virtualbox-2.2', '<vssd:VirtualSystemType>vmx-7')
fp = fp.replace('<rasd:Caption>sataController', '<rasd:Caption>scsiController')
fp = fp.replace('<rasd:Description>SATA Controller', '<rasd:Description>SCSI Controller')
fp = fp.replace('<rasd:ElementName>sataController', '<rasd:ElementName>scsiController')
fp = fp.replace('<rasd:ResourceSubType>AHCI', '<rasd:ResourceSubType>lsilogic')
fp = fp.replace('<rasd:ResourceType>20', '<rasd:ResourceType>6')
end = fp.find('<rasd:Caption>sound')
start = fp.rfind('<Item>', 0, end)
fp = fp[:start] + '<Item ovf:required="false">' + fp[start+len('<Item>'):]
nfp = open(fn, 'wb')
nfp.write(fp.encode('utf8'))
nfp.close()
# calculates the sha256sum of the files
fovaF = open(ovaF).read()
sovaF = hashlib.sha1(fovaF).hexdigest()
fovaV = open(ovaV).read()
sovaV = hashlib.sha1(fovaV).hexdigest()
of = open(ovaM,"w") # opens file
of.write(('%s%s%s%s' %('SHA1 (',ovaF,')= ',sovaF)) + '\n' + ('%s%s%s%s' %('SHA1 (',ovaV,')= ',sovaV)))
of.close()
# Create new .ova
tar = tarfile.open(destfile, "w")
for name in ovaFiles:
tar.add(name)
tar.close()
# Tidy up
for name in ovaFiles:
os.remove(name)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment