| |
@@ -3066,7 +3066,7 @@
|
| |
Some image formats require others to be processed first, which is why
|
| |
we have to do this. raw files in particular may not be kept.
|
| |
"""
|
| |
- supported = ('raw', 'raw-xz', 'liveimg-squashfs', 'vmdk', 'qcow', 'qcow2', 'vdi', 'rhevm-ova', 'vsphere-ova', 'docker', 'vagrant-virtualbox', 'vagrant-libvirt', 'vagrant-vmware-fusion', 'vpc')
|
| |
+ supported = ('raw', 'raw-xz', 'liveimg-squashfs', 'vmdk', 'qcow', 'qcow2', 'vdi', 'rhevm-ova', 'vsphere-ova', 'docker', 'vagrant-virtualbox', 'vagrant-libvirt', 'vagrant-vmware-fusion', 'vpc', "tar-gz")
|
| |
for f in formats:
|
| |
if f not in supported:
|
| |
raise koji.ApplianceError('Invalid format: %s' % f)
|
| |
@@ -3092,6 +3092,7 @@
|
| |
"""
|
| |
fcalls = {'raw': self._buildBase,
|
| |
'raw-xz': self._buildXZ,
|
| |
+ 'tar-gz': self._buildTarGZ,
|
| |
'liveimg-squashfs': self._buildSquashfs,
|
| |
'vmdk': self._buildConvert,
|
| |
'vdi': self._buildConvert,
|
| |
@@ -3250,6 +3251,38 @@
|
| |
logerror=1)
|
| |
return {'image': newimg}
|
| |
|
| |
+
|
| |
+ def _buildTarGZ(self, format):
|
| |
+ """
|
| |
+ Use tar and gzip to compress a raw disk image.
|
| |
+
|
| |
+ @args:
|
| |
+ format - not used, we only handle tar-gz
|
| |
+ @returns:
|
| |
+ a dict with some metadata about the image
|
| |
+ """
|
| |
+ orig = self.base_img.base_image.data
|
| |
+ newimg = os.path.join(self.workdir, self.imgname + '.tar.gz')
|
| |
+
|
| |
+ # see also: https://cloud.google.com/compute/docs/creating-custom-image
|
| |
+
|
| |
+ # the image in the tarball must be named disk.raw
|
| |
+ imgdir = os.path.dirname(orig)
|
| |
+ rawimg = os.path.join(imgdir, 'disk.raw')
|
| |
+ os.link(orig, rawimg)
|
| |
+
|
| |
+ # make the tarball
|
| |
+ cmd = ['/bin/tar', '-Sczvf', newimg, 'disk.raw']
|
| |
+ conlog = os.path.join(self.workdir, 'tar-gz-%s.log' % self.arch)
|
| |
+ log_output(self.session, cmd[0], cmd, conlog, self.getUploadDir(),
|
| |
+ logerror=1, cwd=imgdir)
|
| |
+
|
| |
+ # now that we've made the tarball, we don't need this hardlink
|
| |
+ os.unlink(rawimg)
|
| |
+
|
| |
+ return {'image': newimg}
|
| |
+
|
| |
+
|
| |
def _buildSquashfs(self, format):
|
| |
"""
|
| |
Use squashfs to wrap a raw disk image into liveimg compatible image.
|
| |
@@ -3485,8 +3518,7 @@
|
| |
# upload the results
|
| |
for format in (f for f in self.formats.keys() if self.formats[f]):
|
| |
newimg = images[format]['image']
|
| |
- if ('ova' in format or format == 'raw-xz' or
|
| |
- format == 'liveimg-squashfs'):
|
| |
+ if ('ova' in format or format in ('raw-xz', 'liveimg-squashfs', 'tar-gz')):
|
| |
newname = self.imgname + '.' + format.replace('-', '.')
|
| |
elif 'vagrant' in format:
|
| |
# This embeds the vagrant target and the ".box" format in the name
|
| |