public ListenableFuture createImage()

in profitbricks-rest/src/main/java/org/apache/jclouds/profitbricks/rest/compute/extensions/ProfitBricksImageExtension.java [91:128]


   public ListenableFuture<Image> createImage(ImageTemplate template) {
      final CloneImageTemplate cloneTemplate = (CloneImageTemplate) template;
      final DataCenterAndId datacenterAndId = DataCenterAndId.fromSlashEncoded(cloneTemplate.getSourceNodeId());

      final Server server = client.serverApi().getServer(datacenterAndId.getDataCenter(), datacenterAndId.getId());
      List<Volume> volumes = client.volumeApi().getList(server.dataCenterId());

      final Volume volume = Iterables.getOnlyElement(volumes);

      return userExecutor.submit(new Callable<Image>() {
         @Override
         public Image call() throws Exception {
            Snapshot snapshot = client.volumeApi().createSnapshot(Volume.Request.createSnapshotBuilder()
                    .dataCenterId(datacenterAndId.getDataCenter())
                    .volumeId(volume.id())
                    .name(cloneTemplate.getName())
                    .description(cloneTemplate.getName())
                    .build());

            trackables.waitUntilRequestCompleted(snapshot);
            logger.info(">> Registered new snapshot %s, waiting for it to become available.", snapshot.id());

            final Image image = new ImageBuilder()
                    .location(find(locations.get(), idEquals(snapshot.properties().location().getId())))
                    .id(snapshot.id())
                    .providerId(snapshot.id())
                    .name(cloneTemplate.getName())
                    .description(cloneTemplate.getName())
                    .operatingSystem(OperatingSystem.builder().description(cloneTemplate.getName()).build())
                    .status(Image.Status.PENDING).build();

            if (snapshotAvailablePredicate.apply(image.getId())) {
               return image;
            }
            throw new UncheckedTimeoutException("Image was not created within the time limit: " + image);
         }
      });
   }