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);
}
});
}