private void convertImages(final List<ImageInfo> images) {
    for (final ImageInfo image : images) {
      if (!(image instanceof MachineImageInfo)) continue;
      try {
        final MachineImageInfo machineImage = (MachineImageInfo) image;
        final String kernelId = machineImage.getKernelId();
        final String ramdiskId = machineImage.getRamdiskId();
        if (kernelId == null || ramdiskId == null) {
          LOG.warn(
              String.format(
                  "Kernel and ramdisk are not found for the image %s", image.getDisplayName()));
          continue;
        }

        final KernelImageInfo kernel = Images.lookupKernel(kernelId);
        final RamdiskImageInfo ramdisk = Images.lookupRamdisk(ramdiskId);
        final ServiceConfiguration osg = Topology.lookup(ObjectStorage.class);
        final URI osgUri = osg.getUri();
        final String osgPrefix =
            String.format(
                "%s://%s:%d%s",
                osgUri.getScheme(), osgUri.getHost(), osgUri.getPort(), osgUri.getPath());

        final String kernelManifest =
            String.format("%s/%s", osgPrefix, kernel.getManifestLocation());
        final String ramdiskManifest =
            String.format("%s/%s", osgPrefix, ramdisk.getManifestLocation());
        final String machineManifest =
            String.format("%s/%s", osgPrefix, machineImage.getManifestLocation());
        final String[] tokens = machineImage.getRunManifestLocation().split("/");
        final String bucket = tokens[0];
        final String prefix = tokens[1].replace(".manifest.xml", "");

        String taskId = null;
        try {
          final ImportImageBuilder builder = new ImportImageBuilder();
          final ImportImageTask task =
              new ImportImageTask(
                  builder
                      .withArchitecture(machineImage.getArchitecture().name())
                      .withBucket(bucket)
                      .withPrefix(prefix)
                      .withKernel(
                          kernel.getDisplayName(), kernelManifest, kernel.getImageSizeBytes())
                      .withRamdisk(
                          ramdisk.getDisplayName(), ramdiskManifest, ramdisk.getImageSizeBytes())
                      .withMachineImage(
                          machineImage.getDisplayName(),
                          machineManifest,
                          machineImage.getImageSizeBytes())
                      .withBucketUploadPolicy(bucket, prefix));
          final CheckedListenableFuture<Boolean> result = task.dispatch();
          if (result.get()) {
            taskId = task.getTaskId();
          }
        } catch (final Exception ex) {
          throw ex;
        }
        if (taskId == null) throw new Exception("ImportImage Task id is null");
        Images.setConversionTaskId(machineImage.getDisplayName(), taskId);
      } catch (final Exception ex) {
        LOG.error("Failed to convert the image: " + image.getDisplayName(), ex);
        try {
          this.cleanupBuckets(Lists.newArrayList(image), false);
          resetImagePendingAvailable(image.getDisplayName(), "Failed to request conversion");
        } catch (final Exception ex2) {
          LOG.error(
              "Failed to cleanup the image's system bucket; setting image state failed: "
                  + image.getDisplayName());
          try {
            Images.setImageState(image.getDisplayName(), ImageMetadata.State.failed);
          } catch (final Exception ex3) {;
          }
        }
      }
    }
  }