Make command optional in schema 2 manifests (as per OCI spec) and pull out additional information
Also updates the manifest view page to show the comment or digest if there is no command defined
This commit is contained in:
parent
fc691cefb4
commit
71b7a2b3a2
7 changed files with 53 additions and 16 deletions
|
|
@ -108,12 +108,14 @@ DOCKER_SCHEMA2_CONFIG_HISTORY_KEY = "history"
|
|||
DOCKER_SCHEMA2_CONFIG_ROOTFS_KEY = "rootfs"
|
||||
DOCKER_SCHEMA2_CONFIG_CREATED_KEY = "created"
|
||||
DOCKER_SCHEMA2_CONFIG_CREATED_BY_KEY = "created_by"
|
||||
DOCKER_SCHEMA2_CONFIG_COMMENT_KEY = "comment"
|
||||
DOCKER_SCHEMA2_CONFIG_AUTHOR_KEY = "author"
|
||||
DOCKER_SCHEMA2_CONFIG_EMPTY_LAYER_KEY = "empty_layer"
|
||||
DOCKER_SCHEMA2_CONFIG_TYPE_KEY = "type"
|
||||
|
||||
|
||||
LayerHistory = namedtuple('LayerHistory', ['created', 'created_datetime', 'command', 'is_empty',
|
||||
'raw_entry'])
|
||||
'author', 'comment', 'raw_entry'])
|
||||
|
||||
|
||||
class MalformedSchema2Config(ManifestException):
|
||||
|
|
@ -151,8 +153,15 @@ class DockerSchema2Config(object):
|
|||
'description': 'The command used to create the layer',
|
||||
'x-example': '\/bin\/sh -c #(nop) ADD file:somesha in /',
|
||||
},
|
||||
DOCKER_SCHEMA2_CONFIG_COMMENT_KEY: {
|
||||
'type': 'string',
|
||||
'description': 'Comment describing the layer',
|
||||
},
|
||||
DOCKER_SCHEMA2_CONFIG_AUTHOR_KEY: {
|
||||
'type': 'string',
|
||||
'description': 'The author of the layer',
|
||||
},
|
||||
},
|
||||
'required': [DOCKER_SCHEMA2_CONFIG_CREATED_KEY, DOCKER_SCHEMA2_CONFIG_CREATED_BY_KEY],
|
||||
'additionalProperties': True,
|
||||
},
|
||||
},
|
||||
|
|
@ -211,7 +220,7 @@ class DockerSchema2Config(object):
|
|||
for history_entry in self._parsed[DOCKER_SCHEMA2_CONFIG_HISTORY_KEY]:
|
||||
if history_entry.get(DOCKER_SCHEMA2_CONFIG_EMPTY_LAYER_KEY, False):
|
||||
return True
|
||||
|
||||
|
||||
return False
|
||||
|
||||
@property
|
||||
|
|
@ -220,8 +229,10 @@ class DockerSchema2Config(object):
|
|||
for history_entry in self._parsed[DOCKER_SCHEMA2_CONFIG_HISTORY_KEY]:
|
||||
created_datetime = parse_date(history_entry[DOCKER_SCHEMA2_CONFIG_CREATED_KEY])
|
||||
yield LayerHistory(created_datetime=created_datetime,
|
||||
created=history_entry[DOCKER_SCHEMA2_CONFIG_CREATED_KEY],
|
||||
command=history_entry[DOCKER_SCHEMA2_CONFIG_CREATED_BY_KEY],
|
||||
created=history_entry.get(DOCKER_SCHEMA2_CONFIG_CREATED_KEY),
|
||||
command=history_entry.get(DOCKER_SCHEMA2_CONFIG_CREATED_BY_KEY),
|
||||
author=history_entry.get(DOCKER_SCHEMA2_CONFIG_AUTHOR_KEY),
|
||||
comment=history_entry.get(DOCKER_SCHEMA2_CONFIG_COMMENT_KEY),
|
||||
is_empty=history_entry.get(DOCKER_SCHEMA2_CONFIG_EMPTY_LAYER_KEY, False),
|
||||
raw_entry=history_entry)
|
||||
|
||||
|
|
@ -235,9 +246,18 @@ class DockerSchema2Config(object):
|
|||
if v1_parent_id is not None:
|
||||
v1_compatibility['parent'] = v1_parent_id
|
||||
|
||||
if 'created' not in v1_compatibility:
|
||||
if 'created' not in v1_compatibility and history.created:
|
||||
v1_compatibility['created'] = history.created
|
||||
|
||||
if 'author' not in v1_compatibility and history.author:
|
||||
v1_compatibility['author'] = history.author
|
||||
|
||||
if 'comment' not in v1_compatibility and history.comment:
|
||||
v1_compatibility['comment'] = history.comment
|
||||
|
||||
if 'throwaway' not in v1_compatibility and history.is_empty:
|
||||
v1_compatibility['throwaway'] = True
|
||||
|
||||
if 'container_config' not in v1_compatibility:
|
||||
v1_compatibility['container_config'] = {
|
||||
'Cmd': [history.command],
|
||||
|
|
|
|||
Reference in a new issue