Make ACI generation consistent across calls
This will ensure that no matter which signature we write for the generated ACI, it is correct for that image.
This commit is contained in:
parent
f02d295dd8
commit
4ec3a6c231
5 changed files with 60 additions and 16 deletions
|
@ -1,5 +1,6 @@
|
|||
import json
|
||||
import re
|
||||
import calendar
|
||||
|
||||
from uuid import uuid4
|
||||
|
||||
|
@ -17,16 +18,21 @@ class ACIImage(TarImageFormatter):
|
|||
|
||||
def stream_generator(self, namespace, repository, tag, synthetic_image_id,
|
||||
layer_json, get_image_iterator, get_layer_iterator, get_image_json):
|
||||
image_mtime = 0
|
||||
created = next(get_image_iterator()).created
|
||||
if created is not None:
|
||||
image_mtime = calendar.timegm(created.utctimetuple())
|
||||
|
||||
# ACI Format (.tar):
|
||||
# manifest - The JSON manifest
|
||||
# rootfs - The root file system
|
||||
|
||||
# Yield the manifest.
|
||||
yield self.tar_file('manifest', self._build_manifest(namespace, repository, tag, layer_json,
|
||||
synthetic_image_id))
|
||||
manifest = self._build_manifest(namespace, repository, tag, layer_json, synthetic_image_id)
|
||||
yield self.tar_file('manifest', manifest, mtime=image_mtime)
|
||||
|
||||
# Yield the merged layer dtaa.
|
||||
yield self.tar_folder('rootfs')
|
||||
yield self.tar_folder('rootfs', mtime=image_mtime)
|
||||
|
||||
layer_merger = StreamLayerMerger(get_layer_iterator, path_prefix='rootfs/')
|
||||
for entry in layer_merger.get_generator():
|
||||
|
@ -187,7 +193,6 @@ class ACIImage(TarImageFormatter):
|
|||
|
||||
env_vars.append(pieces)
|
||||
|
||||
|
||||
manifest = {
|
||||
"acKind": "ImageManifest",
|
||||
"acVersion": "0.6.1",
|
||||
|
|
Reference in a new issue