#60 Add tar-gz image support
Merged 8 years ago by mikem. Opened 8 years ago by mikem.
https://github.com/mikem23/koji-playground.git tar-gz  into  master

clean up the tar-gz patch a bit
Mike McLean • 8 years ago  
first stab at tar-gz image support
Mike McLean • 8 years ago  
builder/kojid
file modified
+35 -3
@@ -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

cli/koji
file modified
+1 -1
@@ -5354,7 +5354,7 @@

      formats = ('vmdk', 'qcow', 'qcow2', 'vdi', 'vpc', 'rhevm-ova',

                 'vsphere-ova', 'vagrant-virtualbox', 'vagrant-libvirt',

                 'vagrant-vmware-fusion', 'docker', 'raw-xz',

-                'liveimg-squashfs')

+                'liveimg-squashfs', 'tar-gz')

      usage = _("usage: %prog image-build [options] <name> <version> " +

                "<target> <install-tree-url> <arch> [<arch>...]")

      usage += _("\n       %prog image-build --config FILE")

no initial comment

Based on a user request. This format is useful for getting images into GCE

Pull-Request has been rebased

8 years ago

Pull-Request has been rebased

8 years ago

Pull-Request has been merged by mikem

8 years ago
Metadata