public Blob toTarballBlob(ImageReference imageReference) throws IOException { TarStreamBuilder tarStreamBuilder = new TarStreamBuilder(); DockerLoadManifestEntryTemplate manifestTemplate = new DockerLoadManifestEntryTemplate(); // Adds all the layers to the tarball and manifest. for (Layer layer : image.getLayers()) { String layerName = layer.getBlobDescriptor().getDigest().getHash() + LAYER_FILE_EXTENSION; tarStreamBuilder.addBlobEntry( layer.getBlob(), layer.getBlobDescriptor().getSize(), layerName); manifestTemplate.addLayerFile(layerName); } // Adds the container configuration to the tarball. Blob containerConfigurationBlob = new ImageToJsonTranslator(image).getContainerConfigurationBlob(); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray(containerConfigurationBlob), CONTAINER_CONFIGURATION_JSON_FILE_NAME); // Adds the manifest to tarball. manifestTemplate.setRepoTags(imageReference.toStringWithTag()); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray( JsonTemplateMapper.toBlob(Collections.singletonList(manifestTemplate))), MANIFEST_JSON_FILE_NAME); return tarStreamBuilder.toBlob(); } }
/** * Adds a layer. Removes any prior occurrences of the same layer. * * <p>Note that only subclasses of {@link Layer} that implement {@code equals/hashCode} will be * guaranteed to not be duplicated. * * @param layer the layer to add * @return this * @throws LayerPropertyNotFoundException if adding the layer fails */ public Builder<T> add(T layer) throws LayerPropertyNotFoundException { layerDigestsBuilder.add(layer.getBlobDescriptor().getDigest()); layers.add(layer); return this; }
template.addLayerDiffId(layer.getDiffId());
/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
template.addLayerDiffId(layer.getDiffId());
layer.getBlobDescriptor().getSize(), layer.getBlobDescriptor().getDigest());
public Blob toTarballBlob(ImageReference imageReference) throws IOException { TarStreamBuilder tarStreamBuilder = new TarStreamBuilder(); DockerLoadManifestEntryTemplate manifestTemplate = new DockerLoadManifestEntryTemplate(); // Adds all the layers to the tarball and manifest. for (Layer layer : image.getLayers()) { String layerName = layer.getBlobDescriptor().getDigest().getHash() + LAYER_FILE_EXTENSION; tarStreamBuilder.addBlobEntry( layer.getBlob(), layer.getBlobDescriptor().getSize(), layerName); manifestTemplate.addLayerFile(layerName); } // Adds the container configuration to the tarball. Blob containerConfigurationBlob = new ImageToJsonTranslator(image).getContainerConfigurationBlob(); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray(containerConfigurationBlob), CONTAINER_CONFIGURATION_JSON_FILE_NAME); // Adds the manifest to tarball. manifestTemplate.setRepoTags(imageReference.toStringWithTag()); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray( JsonTemplateMapper.toBlob(Collections.singletonList(manifestTemplate))), MANIFEST_JSON_FILE_NAME); return tarStreamBuilder.toBlob(); } }
template.addLayerDiffId(layer.getDiffId());
@Override public ImmutableList<PullAndCacheBaseImageLayerStep> call() throws ExecutionException, LayerPropertyNotFoundException { BaseImageWithAuthorization pullBaseImageStepResult = NonBlockingSteps.get(pullBaseImageStep); ImmutableList<Layer> baseImageLayers = pullBaseImageStepResult.getBaseImage().getLayers(); try (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.create( BuildStepType.PULL_AND_CACHE_BASE_IMAGE_LAYER, "checking base image layers", baseImageLayers.size()); TimerEventDispatcher ignored = new TimerEventDispatcher(buildConfiguration.getEventDispatcher(), DESCRIPTION)) { ImmutableList.Builder<PullAndCacheBaseImageLayerStep> pullAndCacheBaseImageLayerStepsBuilder = ImmutableList.builderWithExpectedSize(baseImageLayers.size()); for (Layer layer : baseImageLayers) { pullAndCacheBaseImageLayerStepsBuilder.add( new PullAndCacheBaseImageLayerStep( listeningExecutorService, buildConfiguration, progressEventDispatcher.newChildProducer(), layer.getBlobDescriptor().getDigest(), pullBaseImageStepResult.getBaseImageAuthorization())); } return pullAndCacheBaseImageLayerStepsBuilder.build(); } } }
public Blob toTarballBlob(ImageReference imageReference) throws IOException { TarStreamBuilder tarStreamBuilder = new TarStreamBuilder(); DockerLoadManifestEntryTemplate manifestTemplate = new DockerLoadManifestEntryTemplate(); // Adds all the layers to the tarball and manifest. for (Layer layer : image.getLayers()) { String layerName = layer.getBlobDescriptor().getDigest().getHash() + LAYER_FILE_EXTENSION; tarStreamBuilder.addBlobEntry( layer.getBlob(), layer.getBlobDescriptor().getSize(), layerName); manifestTemplate.addLayerFile(layerName); } // Adds the container configuration to the tarball. Blob containerConfigurationBlob = new ImageToJsonTranslator(image).getContainerConfigurationBlob(); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray(containerConfigurationBlob), CONTAINER_CONFIGURATION_JSON_FILE_NAME); // Adds the manifest to tarball. manifestTemplate.setRepoTags(imageReference.toStringWithTag()); tarStreamBuilder.addByteEntry( Blobs.writeToByteArray( JsonTemplateMapper.toBlob(Collections.singletonList(manifestTemplate))), MANIFEST_JSON_FILE_NAME); return tarStreamBuilder.toBlob(); } }
/** * Adds a layer. Removes any prior occurrences of the same layer. * * <p>Note that only subclasses of {@link Layer} that implement {@code equals/hashCode} will be * guaranteed to not be duplicated. * * @param layer the layer to add * @return this * @throws LayerPropertyNotFoundException if adding the layer fails */ public Builder<T> add(T layer) throws LayerPropertyNotFoundException { layerDigestsBuilder.add(layer.getBlobDescriptor().getDigest()); layers.add(layer); return this; }
/** * Adds a layer. Removes any prior occurrences of the same layer. * * <p>Note that only subclasses of {@link Layer} that implement {@code equals/hashCode} will be * guaranteed to not be duplicated. * * @param layer the layer to add * @return this * @throws LayerPropertyNotFoundException if adding the layer fails */ public Builder<T> add(T layer) throws LayerPropertyNotFoundException { layerDigestsBuilder.add(layer.getBlobDescriptor().getDigest()); layers.add(layer); return this; }
/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
/** * @param digest the digest used to retrieve the layer * @return the layer found, or {@code null} if not found * @throws LayerPropertyNotFoundException if getting the layer's blob descriptor fails */ @Nullable public T get(DescriptorDigest digest) throws LayerPropertyNotFoundException { if (!has(digest)) { return null; } for (T layer : layers) { if (layer.getBlobDescriptor().getDigest().equals(digest)) { return layer; } } throw new IllegalStateException("Layer digest exists but layer not found"); }
layer.getBlobDescriptor().getSize(), layer.getBlobDescriptor().getDigest());
layer.getBlobDescriptor().getSize(), layer.getBlobDescriptor().getDigest());
@Override public ImmutableList<PullAndCacheBaseImageLayerStep> call() throws ExecutionException, LayerPropertyNotFoundException { BaseImageWithAuthorization pullBaseImageStepResult = NonBlockingSteps.get(pullBaseImageStep); ImmutableList<Layer> baseImageLayers = pullBaseImageStepResult.getBaseImage().getLayers(); try (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.create( "checking base image layers", baseImageLayers.size()); TimerEventDispatcher ignored = new TimerEventDispatcher(buildConfiguration.getEventDispatcher(), DESCRIPTION)) { ImmutableList.Builder<PullAndCacheBaseImageLayerStep> pullAndCacheBaseImageLayerStepsBuilder = ImmutableList.builderWithExpectedSize(baseImageLayers.size()); for (Layer layer : baseImageLayers) { pullAndCacheBaseImageLayerStepsBuilder.add( new PullAndCacheBaseImageLayerStep( listeningExecutorService, buildConfiguration, progressEventDispatcher.newChildProducer(), layer.getBlobDescriptor().getDigest(), pullBaseImageStepResult.getBaseImageAuthorization())); } return pullAndCacheBaseImageLayerStepsBuilder.build(); } } }
@Override public ImmutableList<PullAndCacheBaseImageLayerStep> call() throws ExecutionException, LayerPropertyNotFoundException { BaseImageWithAuthorization pullBaseImageStepResult = NonBlockingSteps.get(pullBaseImageStep); ImmutableList<Layer> baseImageLayers = pullBaseImageStepResult.getBaseImage().getLayers(); try (ProgressEventDispatcher progressEventDispatcher = progressEventDispatcherFactory.create( "checking base image layers", baseImageLayers.size()); TimerEventDispatcher ignored = new TimerEventDispatcher(buildConfiguration.getEventDispatcher(), DESCRIPTION)) { ImmutableList.Builder<PullAndCacheBaseImageLayerStep> pullAndCacheBaseImageLayerStepsBuilder = ImmutableList.builderWithExpectedSize(baseImageLayers.size()); for (Layer layer : baseImageLayers) { pullAndCacheBaseImageLayerStepsBuilder.add( new PullAndCacheBaseImageLayerStep( listeningExecutorService, buildConfiguration, progressEventDispatcher.newChildProducer(), layer.getBlobDescriptor().getDigest(), pullBaseImageStepResult.getBaseImageAuthorization())); } return pullAndCacheBaseImageLayerStepsBuilder.build(); } } }