vendor: upgrade containers/storage
Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
parent
5addc8caf0
commit
ecd0006e80
114 changed files with 11464 additions and 1003 deletions
17
vendor/github.com/opencontainers/image-spec/Makefile
generated
vendored
17
vendor/github.com/opencontainers/image-spec/Makefile
generated
vendored
|
@ -26,7 +26,7 @@ DOC_FILES := \
|
|||
descriptor.md \
|
||||
image-layout.md \
|
||||
manifest.md \
|
||||
manifest-list.md \
|
||||
image-index.md \
|
||||
layer.md \
|
||||
config.md \
|
||||
annotations.md \
|
||||
|
@ -40,7 +40,7 @@ DOC_FILENAME ?= oci-image-spec
|
|||
|
||||
EPOCH_TEST_COMMIT ?= v0.2.0
|
||||
|
||||
default: help
|
||||
default: check-license lint test
|
||||
|
||||
help:
|
||||
@echo "Usage: make <target>"
|
||||
|
@ -75,12 +75,14 @@ $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: $(DOC_FILES) $(FIGURE_FILES)
|
|||
ls -sh $(shell readlink -f $@)
|
||||
endif
|
||||
|
||||
validate-examples:
|
||||
validate-examples: schema/fs.go
|
||||
go test -run TestValidate ./schema
|
||||
|
||||
schema-fs:
|
||||
schema/fs.go: $(wildcard schema/*.json) schema/gen.go
|
||||
cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go
|
||||
|
||||
schema-fs: schema/fs.go
|
||||
@echo "generating schema fs"
|
||||
@cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go
|
||||
|
||||
check-license:
|
||||
@echo "checking license headers"
|
||||
|
@ -90,7 +92,7 @@ lint:
|
|||
@echo "checking lint"
|
||||
@./.tool/lint
|
||||
|
||||
test:
|
||||
test: schema/fs.go
|
||||
go test -race -cover $(shell go list ./... | grep -v /vendor/)
|
||||
|
||||
img/%.png: img/%.dot
|
||||
|
@ -129,4 +131,5 @@ clean:
|
|||
clean \
|
||||
lint \
|
||||
docs \
|
||||
test
|
||||
test \
|
||||
schema-fs
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/README.md
generated
vendored
4
vendor/github.com/opencontainers/image-spec/README.md
generated
vendored
|
@ -19,7 +19,7 @@ Additional documentation about how this group operates:
|
|||
- [Releases](RELEASES.md)
|
||||
- [Project Documentation](project.md)
|
||||
|
||||
The _optional_ and _base_ layers of all OCI projects are tracked in the [OCI Scope Table](https://www.opencontainers.org/governance/oci-scope-table).
|
||||
The _optional_ and _base_ layers of all OCI projects are tracked in the [OCI Scope Table](https://www.opencontainers.org/about/oci-scope-table).
|
||||
|
||||
## Running an OCI Image
|
||||
|
||||
|
@ -39,7 +39,7 @@ To support this UX the OCI Image Format contains sufficient information to launc
|
|||
|
||||
**Q: Why doesn't this project mention distribution?**
|
||||
|
||||
A: Distribution, for example using HTTP as both Docker v2.2 and AppC do today, is currently out of scope on the [OCI Scope Table](https://www.opencontainers.org/governance/oci-scope-table).
|
||||
A: Distribution, for example using HTTP as both Docker v2.2 and AppC do today, is currently out of scope on the [OCI Scope Table](https://www.opencontainers.org/about/oci-scope-table).
|
||||
There has been [some discussion on the TOB mailing list](https://groups.google.com/a/opencontainers.org/d/msg/tob/A3JnmI-D-6Y/tLuptPDHAgAJ) to make distribution an optional layer, but this topic is a work in progress.
|
||||
|
||||
**Q: Why a new project?**
|
||||
|
|
3
vendor/github.com/opencontainers/image-spec/annotations.md
generated
vendored
3
vendor/github.com/opencontainers/image-spec/annotations.md
generated
vendored
|
@ -15,9 +15,10 @@ Consumers MUST NOT generate an error if they encounter an unknown annotation key
|
|||
|
||||
## Pre-Defined Annotation Keys
|
||||
|
||||
This specification defines the following annotation keys, intended for but not limited to manifest list and image manifest authors:
|
||||
This specification defines the following annotation keys, intended for but not limited to [image index](image-index.md) and image [manifest](manifest.md) authors:
|
||||
* **org.opencontainers.created** date on which the image was built (string, date-time as defined by [RFC 3339](https://tools.ietf.org/html/rfc3339#section-5.6)).
|
||||
* **org.opencontainers.authors** contact details of the people or organization responsible for the image (freeform string)
|
||||
* **org.opencontainers.homepage** URL to find more information on the image (string, a URL with scheme HTTP or HTTPS)
|
||||
* **org.opencontainers.documentation** URL to get documentation on the image (string, a URL with scheme HTTP or HTTPS)
|
||||
* **org.opencontainers.source** URL to get source code for the binary files in the image (string, a URL with scheme HTTP or HTTPS)
|
||||
* **org.opencontainers.ref.name** Name of the reference (string)
|
||||
|
|
2
vendor/github.com/opencontainers/image-spec/config.md
generated
vendored
2
vendor/github.com/opencontainers/image-spec/config.md
generated
vendored
|
@ -229,4 +229,4 @@ Here is an example image configuration JSON document:
|
|||
```
|
||||
|
||||
[rfc3339-s5.6]: https://tools.ietf.org/html/rfc3339#section-5.6
|
||||
[runtime-platform]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md#platform
|
||||
[runtime-platform]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md#platform
|
||||
|
|
2
vendor/github.com/opencontainers/image-spec/considerations.md
generated
vendored
2
vendor/github.com/opencontainers/image-spec/considerations.md
generated
vendored
|
@ -1,6 +1,6 @@
|
|||
# Extensibility
|
||||
|
||||
Implementations that are reading/processing [manifests](manifest.md) or [manifest lists](manifest-list.md) MUST NOT generate an error if they encounter an unknown property.
|
||||
Implementations that are reading/processing [manifests](manifest.md) or [image indexes](image-index.md) MUST NOT generate an error if they encounter an unknown property.
|
||||
Instead they MUST ignore unknown properties.
|
||||
|
||||
# Canonicalization
|
||||
|
|
|
@ -1,17 +1,19 @@
|
|||
# OCI Image Manifest List Specification
|
||||
# OCI Image Index Specification
|
||||
|
||||
The manifest list is a higher-level manifest which points to specific [image manifests](manifest.md) for one or more platforms.
|
||||
While the use of a manifest list is OPTIONAL for image providers, image consumers SHOULD be prepared to process them.
|
||||
The image index is a higher-level manifest which points to specific [image manifests](manifest.md), ideal for one or more platforms.
|
||||
While the use of an image index is OPTIONAL for image providers, image consumers SHOULD be prepared to process them.
|
||||
|
||||
This section defines the `application/vnd.oci.image.manifest.list.v1+json` [media type](media-types.md).
|
||||
This section defines the `application/vnd.oci.image.index.v1+json` [media type](media-types.md).
|
||||
For the media type(s) that this document is compatible with, see the [matrix][matrix].
|
||||
|
||||
## *Manifest List* Property Descriptions
|
||||
## *Image Index* Property Descriptions
|
||||
|
||||
- **`schemaVersion`** *int*
|
||||
|
||||
This REQUIRED property specifies the image manifest schema version.
|
||||
For this version of the specification, this MUST be `2` to ensure backward compatibility with older versions of Docker. The value of this field will not change. This field MAY be removed in a future version of the specification.
|
||||
For this version of the specification, this MUST be `2` to ensure backward compatibility with older versions of Docker.
|
||||
The value of this field will not change.
|
||||
This field MAY be removed in a future version of the specification.
|
||||
|
||||
- **`mediaType`** *string*
|
||||
|
||||
|
@ -20,10 +22,10 @@ For the media type(s) that this document is compatible with, see the [matrix][ma
|
|||
|
||||
- **`manifests`** *array of objects*
|
||||
|
||||
This REQUIRED property contains a list of manifests for specific platforms.
|
||||
While the property MUST be present, the size of the array MAY be zero.
|
||||
This REQUIRED property contains a list of [manifests](manifest.md) for specific platforms.
|
||||
While this property MUST be present, the size of the array MAY be zero.
|
||||
|
||||
Each object in `manifests` is a [descriptor](descriptor.md) with the following additional properties and restrictions:
|
||||
Each object in `manifests` has the base properties of [descriptor](descriptor.md) with the following additional properties and restrictions:
|
||||
|
||||
- **`mediaType`** *string*
|
||||
|
||||
|
@ -32,21 +34,24 @@ For the media type(s) that this document is compatible with, see the [matrix][ma
|
|||
|
||||
- [`application/vnd.oci.image.manifest.v1+json`](manifest.md)
|
||||
|
||||
Manifest lists concerned with portability SHOULD use one of the above media types.
|
||||
Image indexes concerned with portability SHOULD use one of the above media types.
|
||||
Future versions of the spec MAY use a different mediatype (i.e. a new versioned format).
|
||||
An encountered `mediaType` that is unknown SHOULD be safely ignored.
|
||||
|
||||
- **`platform`** *object*
|
||||
|
||||
This REQUIRED property describes the platform which the image in the manifest runs on.
|
||||
This OPTIONAL property describes the platform which the image in the manifest runs on.
|
||||
This property SHOULD be present if its target is platform-specific.
|
||||
|
||||
- **`architecture`** *string*
|
||||
|
||||
This REQUIRED property specifies the CPU architecture.
|
||||
Manifest lists SHOULD use, and implementations SHOULD understand, values [supported by runtime-spec's `platform.arch`][runtime-platform2].
|
||||
Image indexes SHOULD use, and implementations SHOULD understand, values [supported by runtime-spec's `platform.arch`][runtime-platform2].
|
||||
|
||||
- **`os`** *string*
|
||||
|
||||
This REQUIRED property specifies the operating system.
|
||||
Manifest lists SHOULD use, and implementations SHOULD understand, values [supported by runtime-spec's `platform.os`][runtime-platform2].
|
||||
Image indexes SHOULD use, and implementations SHOULD understand, values [supported by runtime-spec's `platform.os`][runtime-platform2].
|
||||
|
||||
- **`os.version`** *string*
|
||||
|
||||
|
@ -66,15 +71,15 @@ For the media type(s) that this document is compatible with, see the [matrix][ma
|
|||
|
||||
- **`annotations`** *string-string map*
|
||||
|
||||
This OPTIONAL property contains arbitrary metadata for the manifest list.
|
||||
This OPTIONAL property contains arbitrary metadata for the image index.
|
||||
This OPTIONAL property MUST use the [annotation rules](annotations.md#rules).
|
||||
|
||||
See [Pre-Defined Annotation Keys](annotations.md#pre-defined-annotation-keys).
|
||||
|
||||
## Example Manifest List
|
||||
## Example Image Index
|
||||
|
||||
*Example showing a simple manifest list pointing to image manifests for two platforms:*
|
||||
```json,title=Manifest%20List&mediatype=application/vnd.oci.image.manifest.list.v1%2Bjson
|
||||
*Example showing a simple image index pointing to image manifests for two platforms:*
|
||||
```json,title=Image%20Index&mediatype=application/vnd.oci.image.index.v1%2Bjson
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -107,5 +112,5 @@ For the media type(s) that this document is compatible with, see the [matrix][ma
|
|||
}
|
||||
```
|
||||
|
||||
[runtime-platform2]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md#platform
|
||||
[runtime-platform2]: https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md#platform
|
||||
[matrix]: media-types.md#compatibility-matrix
|
159
vendor/github.com/opencontainers/image-spec/image-layout.md
generated
vendored
159
vendor/github.com/opencontainers/image-spec/image-layout.md
generated
vendored
|
@ -3,29 +3,32 @@
|
|||
The OCI Image Layout is a slash separated layout of OCI content-addressable blobs and [location-addressable](https://en.wikipedia.org/wiki/Content-addressable_storage#Content-addressed_vs._location-addressed) references (refs).
|
||||
This layout MAY be used in a variety of different transport mechanisms: archive formats (e.g. tar, zip), shared filesystem environments (e.g. nfs), or networked file fetching (e.g. http, ftp, rsync).
|
||||
|
||||
Given an image layout and a ref, a tool can create an [OCI Runtime Specification bundle](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/bundle.md) by:
|
||||
Given an image layout and a ref, a tool can create an [OCI Runtime Specification bundle](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/bundle.md) by:
|
||||
|
||||
* Following the ref to find a [manifest](manifest.md#image-manifest), possibly via a [manifest list](manifest-list.md#manifest-list)
|
||||
* Following the ref to find a [manifest](manifest.md#image-manifest), possibly via an [image index](image-index.md)
|
||||
* [Applying the filesystem layers](layer.md#applying) in the specified order
|
||||
* Converting the [image configuration](config.md) into an [OCI Runtime Specification `config.json`](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc2/config.md)
|
||||
* Converting the [image configuration](config.md) into an [OCI Runtime Specification `config.json`](https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc3/config.md)
|
||||
|
||||
# Content
|
||||
|
||||
The image layout MUST contain two top level directories:
|
||||
The image layout is as follows:
|
||||
|
||||
- `blobs` contains content-addressable blobs.
|
||||
A blob has no schema and should be considered opaque.
|
||||
- `refs` contains [descriptors][descriptors].
|
||||
Commonly pointing to an [image manifest](manifest.md#image-manifest) or an [image manifest list](manifest-list.md#oci-image-manifest-list-specification).
|
||||
|
||||
Both `blobs` and `refs` MAY be empty.
|
||||
|
||||
The image layout MUST also contain an `oci-layout` file:
|
||||
|
||||
- It MUST be a JSON object
|
||||
- It MUST contain an `imageLayoutVersion` field
|
||||
- The `imageLayoutVersion` value will align with the OCI Image Specification version at the time changes to the layout are made, and will pin a given version until changes to the layout are required
|
||||
- It MAY include additional fields
|
||||
- `blobs` directory
|
||||
- Contains content-addressable blobs
|
||||
- A blob has no schema and should be considered opaque
|
||||
- Directory MUST exist and MAY be empty
|
||||
- See [blobs](#blobs) section
|
||||
- `oci-layout` file
|
||||
- It MUST exist
|
||||
- It MUST be a JSON object
|
||||
- It MUST contain an `imageLayoutVersion` field
|
||||
- See [oci-layout file](#oci-layout-file) section
|
||||
- It MAY include additional fields
|
||||
- `index.json` file
|
||||
- It MUST exist
|
||||
- It MUST be a JSON object
|
||||
- It MUST have the base properties of an [image index](image-index.md).
|
||||
- See [index.json](#indexjson-file) section
|
||||
|
||||
## Example Layout
|
||||
|
||||
|
@ -33,17 +36,12 @@ This is an example image layout:
|
|||
|
||||
```
|
||||
$ cd example.com/app/
|
||||
$ find .
|
||||
.
|
||||
./blobs
|
||||
./blobs/sha256/e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f
|
||||
./blobs/sha256/afff3924849e458c5ef237db5f89539274d5e609db5db935ed3959c90f1f2d51
|
||||
./blobs/sha256/9b97579de92b1c195b85bb42a11011378ee549b02d7fe9c17bf2a6b35d5cb079
|
||||
./blobs/sha256/5b0bcabd1ed22e9fb1310cf6c2dec7cdef19f0ad69efa1f392e94a4333501270
|
||||
$ find . -type f
|
||||
./index.json
|
||||
./oci-layout
|
||||
./refs
|
||||
./refs/v1.0
|
||||
./refs/stable-release
|
||||
./blobs/sha256/3588d02542238316759cbf24502f4344ffcc8a60c803870022f335d1390c13b4
|
||||
./blobs/sha256/4b0bc1c4050b03c95ef2a8e36e25feac42fd31283e8c30b3ee5df6b043155d3c
|
||||
./blobs/sha256/7968321274dc6b6171697c33df7815310468e694ac5be0ec03ff053bb135e768
|
||||
```
|
||||
|
||||
Blobs are named by their contents:
|
||||
|
@ -53,33 +51,6 @@ $ shasum -a 256 ./blobs/sha256/afff3924849e458c5ef237db5f89539274d5e609db5db935e
|
|||
afff3924849e458c5ef237db5f89539274d5e609db5db935ed3959c90f1f2d51 ./blobs/sha256/afff3924849e458c5ef237db5f89539274d5e609db5db935ed3959c90f1f2d51
|
||||
```
|
||||
|
||||
## Refs
|
||||
|
||||
Object names in the `refs` subdirectories MUST NOT include characters outside of the set of "A" to "Z", "a" to "z", "0" to "9", the hyphen `-`, the dot `.`, and the underscore `_`.
|
||||
|
||||
No semantic restriction is given for object names in the `refs` subdirectory.
|
||||
Each object in the `refs` subdirectory MUST be of type `application/vnd.oci.descriptor.v1+json`.
|
||||
In general the `mediaType` of this [descriptor][descriptors] object will be either `application/vnd.oci.image.manifest.list.v1+json` or `application/vnd.oci.image.manifest.v1+json` although future versions of the spec MAY use a different mediatype.
|
||||
|
||||
**Implementor's Note:**
|
||||
A common use case of refs is representing "tags" for a container image.
|
||||
For example, an image may have a tag for different versions or builds of the software.
|
||||
In the wild you often see "tags" like "v1.0.0-vendor.0", "2.0.0-debug", etc.
|
||||
Those tags will often be represented in an image-layout repository with matching refs names like "v1.0.0-vendor.0", "2.0.0-debug", etc.
|
||||
|
||||
### Example Ref
|
||||
|
||||
This is an example `v1.0` ref with a manifest-list descriptor:
|
||||
|
||||
```
|
||||
$ cat ./refs/v1.0 | jq
|
||||
{
|
||||
"size": 4096,
|
||||
"digest": "sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f",
|
||||
"mediaType": "application/vnd.oci.image.manifest.list.v1+json"
|
||||
}
|
||||
```
|
||||
|
||||
## Blobs
|
||||
|
||||
Object names in the `blobs` subdirectories are composed of a directory for each hash algorithm, the children of which will contain the actual content.
|
||||
|
@ -87,7 +58,7 @@ A blob, referenced with digest `<alg>:<hex>` (per [descriptor](descriptor.md#dig
|
|||
The character set of the entry name for `<hex>` and `<alg>` MUST match the respective grammar elements described in [descriptor](descriptor.md#digests-and-verification).
|
||||
For example `sha256:5b` will map to the layout `blobs/sha256/5b`.
|
||||
|
||||
The blobs directory MAY contain blobs which are not referenced by any of the refs.
|
||||
The blobs directory MAY contain blobs which are not referenced by any of the [refs](#indexjson-file).
|
||||
|
||||
The blobs directory MAY be missing referenced blobs, in which case the missing blobs SHOULD be fulfilled by an external blob store.
|
||||
|
||||
|
@ -156,4 +127,82 @@ $ cat ./blobs/sha256/e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7f
|
|||
[tar stream]
|
||||
```
|
||||
|
||||
## oci-layout file
|
||||
|
||||
This JSON object serves as a marker for the base of an Open Container Image Layout and to provide the version of the image-layout in use.
|
||||
The `imageLayoutVersion` value will align with the OCI Image Specification version at the time changes to the layout are made, and will pin a given version until changes to the image layout are required.
|
||||
|
||||
### oci-layout Example
|
||||
|
||||
```json
|
||||
{
|
||||
"imageLayoutVersion": "1.0.0"
|
||||
}
|
||||
```
|
||||
|
||||
## index.json file
|
||||
|
||||
This REQUIRED file is the entry point for references and descriptors of the image-layout.
|
||||
The [image index](image-index.md) is a multi-descriptor entry point.
|
||||
|
||||
This index provides an established path (`/index.json`) to have an entry point for an image-layout and to discover auxiliary descriptors.
|
||||
|
||||
No semantic restriction is given for the "org.opencontainers.ref.name" annotation of descriptors.
|
||||
In general the `mediaType` of each [descriptor][descriptors] object in the `manifests` field will be either `application/vnd.oci.image.index.v1+json` or `application/vnd.oci.image.manifest.v1+json`.
|
||||
Future versions of the spec MAY use a different mediatype (i.e. a new versioned format).
|
||||
An encountered `mediaType` that is unknown SHOULD be safely ignored.
|
||||
|
||||
|
||||
**Implementor's Note:**
|
||||
A common use case of descriptors with a "org.opencontainers.ref.name" annotation is representing a "tag" for a container image.
|
||||
For example, an image may have a tag for different versions or builds of the software.
|
||||
In the wild you often see "tags" like "v1.0.0-vendor.0", "2.0.0-debug", etc.
|
||||
Those tags will often be represented in an image-layout repository with matching "org.opencontainers.ref.name" annotations like "v1.0.0-vendor.0", "2.0.0-debug", etc.
|
||||
|
||||
|
||||
### Index Example
|
||||
|
||||
```json,title=Image%20Index&mediatype=application/vnd.oci.image.index.v1%2Bjson
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.index.v1+json",
|
||||
"size": 7143,
|
||||
"digest": "sha256:0228f90e926ba6b96e4f39cf294b2586d38fbb5a1e385c05cd1ee40ea54fe7fd",
|
||||
"annotations": {
|
||||
"org.opencontainers.ref.name": "stable-release"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/vnd.oci.image.manifest.v1+json",
|
||||
"size": 7143,
|
||||
"digest": "sha256:e692418e4cbaf90ca69d05a66403747baa33ee08806650b51fab815ad7fc331f",
|
||||
"platform": {
|
||||
"architecture": "ppc64le",
|
||||
"os": "linux"
|
||||
},
|
||||
"annotations": {
|
||||
"org.opencontainers.ref.name": "v1.0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"mediaType": "application/xml",
|
||||
"size": 7143,
|
||||
"digest": "sha256:b3d63d132d21c3ff4c35a061adf23cf43da8ae054247e32faa95494d904a007e",
|
||||
"annotations": {
|
||||
"org.freedesktop.specifications.metainfo.version": "1.0",
|
||||
"org.freedesktop.specifications.metainfo.type": "AppStream"
|
||||
}
|
||||
}
|
||||
],
|
||||
"annotations": {
|
||||
"com.example.index.revision": "r124356"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
This illustrates an index that provides two named manifest references and an auxiliary mediatype for this image layout.
|
||||
|
||||
|
||||
[descriptors]: ./descriptor.md
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/img/media-types.dot
generated
vendored
4
vendor/github.com/opencontainers/image-spec/img/media-types.dot
generated
vendored
|
@ -1,12 +1,12 @@
|
|||
digraph G {
|
||||
{
|
||||
manifestList [shape=note, label="Manifest list\n<<optional>>\napplication/vnd.oci.image.manifest.list.v1+json"]
|
||||
imageIndex [shape=note, label="Image Index\n<<optional>>\napplication/vnd.oci.image.index.v1+json"]
|
||||
manifest [shape=note, label="Image manifest\napplication/vnd.oci.image.manifest.v1+json"]
|
||||
config [shape=note, label="Image JSON\napplication/vnd.oci.image.config.v1+json"]
|
||||
layer [shape=note, label="Layer tar archive\napplication/vnd.oci.image.layer.v1.tar\napplication/vnd.oci.image.layer.v1.tar+gzip\napplication/vnd.oci.image.layer.nondistributable.v1.tar\napplication/vnd.oci.image.layer.nondistributable.v1.tar+gzip"]
|
||||
}
|
||||
|
||||
manifestList -> manifest [label="1..*"]
|
||||
imageIndex -> manifest [label="1..*"]
|
||||
manifest -> config [label="1..1"]
|
||||
manifest -> layer [label="1..*"]
|
||||
}
|
||||
|
|
BIN
vendor/github.com/opencontainers/image-spec/img/media-types.png
generated
vendored
BIN
vendor/github.com/opencontainers/image-spec/img/media-types.png
generated
vendored
Binary file not shown.
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 39 KiB |
4
vendor/github.com/opencontainers/image-spec/manifest.md
generated
vendored
4
vendor/github.com/opencontainers/image-spec/manifest.md
generated
vendored
|
@ -3,7 +3,7 @@
|
|||
There are three main goals of the Image Manifest Specification.
|
||||
The first goal is content-addressable images, by supporting an image model where the image's configuration can be hashed to generate a unique ID for the image and its components.
|
||||
The second goal is to allow multi-architecture images, through a "fat manifest" which references image manifests for platform-specific versions of an image.
|
||||
In OCI, this is codified in a [Manifest List](manifest-list.md).
|
||||
In OCI, this is codified in an [image index](image-index.md).
|
||||
The third goal is to be translatable to the [OCI Runtime Specification](https://github.com/opencontainers/runtime-spec).
|
||||
|
||||
This section defines the `application/vnd.oci.image.manifest.v1+json` [media type](media-types.md).
|
||||
|
@ -11,7 +11,7 @@ For the media type(s) that this is compatible with see the [matrix](media-types.
|
|||
|
||||
# Image Manifest
|
||||
|
||||
Unlike the [Manifest List](manifest-list.md), which contains information about a set of images that can span a variety of architectures and operating systems, an image manifest provides a configuration and set of layers for a single container image for a specific architecture and operating system.
|
||||
Unlike the [image index](image-index.md), which contains information about a set of images that can span a variety of architectures and operating systems, an image manifest provides a configuration and set of layers for a single container image for a specific architecture and operating system.
|
||||
|
||||
## *Image Manifest* Property Descriptions
|
||||
|
||||
|
|
6
vendor/github.com/opencontainers/image-spec/media-types.md
generated
vendored
6
vendor/github.com/opencontainers/image-spec/media-types.md
generated
vendored
|
@ -3,7 +3,7 @@
|
|||
The following media types identify the formats described here and their referenced resources:
|
||||
|
||||
- `application/vnd.oci.descriptor.v1+json`: [Content Descriptor](descriptor.md)
|
||||
- `application/vnd.oci.image.manifest.list.v1+json`: [Manifest list](manifest-list.md#manifest-list)
|
||||
- `application/vnd.oci.image.index.v1+json`: [Image Index](image-index.md)
|
||||
- `application/vnd.oci.image.manifest.v1+json`: [Image manifest](manifest.md#image-manifest)
|
||||
- `application/vnd.oci.image.config.v1+json`: [Image config](config.md)
|
||||
- `application/vnd.oci.image.layer.v1.tar`: ["Layer", as a tar archive](layer.md)
|
||||
|
@ -31,7 +31,7 @@ The OCI Image Specification strives to be backwards and forwards compatible when
|
|||
Breaking compatibility with existing systems creates a burden on users whether they are build systems, distribution systems, container engines, etc.
|
||||
This section shows where the OCI Image Specification is compatible with formats external to the OCI Image and different versions of this specification.
|
||||
|
||||
### application/vnd.oci.image.manifest.list.v1+json
|
||||
### application/vnd.oci.image.index.v1+json
|
||||
|
||||
**Similar/related schema**
|
||||
|
||||
|
@ -62,6 +62,6 @@ The following figure shows how the above media types reference each other:
|
|||

|
||||
|
||||
[Descriptors](descriptor.md) are used for all references.
|
||||
The manifest list being a "fat manifest" references one or more image manifests per target platform. An image manifest references exactly one target configuration and possibly many layers.
|
||||
The image-index being a "fat manifest" references one or more image manifests per target platform. An image manifest references exactly one target configuration and possibly many layers.
|
||||
|
||||
[rfc1952]: https://tools.ietf.org/html/rfc1952
|
||||
|
|
|
@ -25,7 +25,7 @@ import (
|
|||
)
|
||||
|
||||
var compatMap = map[string]string{
|
||||
"application/vnd.docker.distribution.manifest.list.v2+json": v1.MediaTypeImageManifestList,
|
||||
"application/vnd.docker.distribution.manifest.list.v2+json": v1.MediaTypeImageIndex,
|
||||
"application/vnd.docker.distribution.manifest.v2+json": v1.MediaTypeImageManifest,
|
||||
"application/vnd.docker.image.rootfs.diff.tar.gzip": v1.MediaTypeImageLayer,
|
||||
"application/vnd.docker.container.image.v1+json": v1.MediaTypeImageConfig,
|
||||
|
@ -42,15 +42,15 @@ func convertFormats(input string) string {
|
|||
return out
|
||||
}
|
||||
|
||||
func TestBackwardsCompatibilityManifestList(t *testing.T) {
|
||||
func TestBackwardsCompatibilityImageIndex(t *testing.T) {
|
||||
for i, tt := range []struct {
|
||||
manifestlist string
|
||||
digest digest.Digest
|
||||
fail bool
|
||||
imageIndex string
|
||||
digest digest.Digest
|
||||
fail bool
|
||||
}{
|
||||
{
|
||||
digest: "sha256:219f4b61132fe9d09b0ec5c15517be2ca712e4744b0e0cc3be71295b35b2a467",
|
||||
manifestlist: `{
|
||||
imageIndex: `{
|
||||
"schemaVersion": 2,
|
||||
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
|
||||
"manifests": [
|
||||
|
@ -109,14 +109,14 @@ func TestBackwardsCompatibilityManifestList(t *testing.T) {
|
|||
fail: false,
|
||||
},
|
||||
} {
|
||||
got := digest.FromString(tt.manifestlist)
|
||||
got := digest.FromString(tt.imageIndex)
|
||||
if tt.digest != got {
|
||||
t.Errorf("test %d: expected digest %s but got %s", i, tt.digest, got)
|
||||
}
|
||||
|
||||
manifestlist := convertFormats(tt.manifestlist)
|
||||
r := strings.NewReader(manifestlist)
|
||||
err := schema.MediaTypeManifestList.Validate(r)
|
||||
imageIndex := convertFormats(tt.imageIndex)
|
||||
r := strings.NewReader(imageIndex)
|
||||
err := schema.ValidatorMediaTypeImageIndex.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
||||
|
@ -178,7 +178,7 @@ func TestBackwardsCompatibilityManifest(t *testing.T) {
|
|||
|
||||
manifest := convertFormats(tt.manifest)
|
||||
r := strings.NewReader(manifest)
|
||||
err := schema.MediaTypeManifest.Validate(r)
|
||||
err := schema.ValidatorMediaTypeManifest.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
||||
|
@ -217,7 +217,7 @@ func TestBackwardsCompatibilityConfig(t *testing.T) {
|
|||
|
||||
config := convertFormats(tt.config)
|
||||
r := strings.NewReader(config)
|
||||
err := schema.MediaTypeImageConfig.Validate(r)
|
||||
err := schema.ValidatorMediaTypeImageConfig.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
105
vendor/github.com/opencontainers/image-spec/schema/config-schema.json
generated
vendored
105
vendor/github.com/opencontainers/image-spec/schema/config-schema.json
generated
vendored
|
@ -18,15 +18,114 @@
|
|||
"type": "string"
|
||||
},
|
||||
"config": {
|
||||
"$ref": "defs-config.json#/definitions/config"
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"User": {
|
||||
"type": "string"
|
||||
},
|
||||
"ExposedPorts": {
|
||||
"$ref": "defs.json#/definitions/mapStringObject"
|
||||
},
|
||||
"Env": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"Entrypoint": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Cmd": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Volumes": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "defs.json#/definitions/mapStringObject"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WorkingDir": {
|
||||
"type": "string"
|
||||
},
|
||||
"Labels": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "defs.json#/definitions/mapStringString"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rootfs": {
|
||||
"$ref": "defs-config.json#/definitions/rootfs"
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"diff_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"layers"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"diff_ids",
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"history": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "defs-config.json#/definitions/history"
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"created": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
"created_by": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
},
|
||||
"empty_layer": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
2
vendor/github.com/opencontainers/image-spec/schema/config_test.go
generated
vendored
2
vendor/github.com/opencontainers/image-spec/schema/config_test.go
generated
vendored
|
@ -211,7 +211,7 @@ func TestConfig(t *testing.T) {
|
|||
},
|
||||
} {
|
||||
r := strings.NewReader(tt.config)
|
||||
err := schema.MediaTypeImageConfig.Validate(r)
|
||||
err := schema.ValidatorMediaTypeImageConfig.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/schema/content-descriptor.json
generated
vendored
4
vendor/github.com/opencontainers/image-spec/schema/content-descriptor.json
generated
vendored
|
@ -23,6 +23,10 @@
|
|||
"type": "string",
|
||||
"format": "uri"
|
||||
}
|
||||
},
|
||||
"annotations": {
|
||||
"id": "https://opencontainers.org/schema/image/descriptor/annotations",
|
||||
"$ref": "defs-image.json#/definitions/annotations"
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
|
|
113
vendor/github.com/opencontainers/image-spec/schema/defs-config.json
generated
vendored
113
vendor/github.com/opencontainers/image-spec/schema/defs-config.json
generated
vendored
|
@ -1,113 +0,0 @@
|
|||
{
|
||||
"description": "Definitions particular to OpenContainer Config Specification",
|
||||
"definitions": {
|
||||
"config": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"User": {
|
||||
"type": "string"
|
||||
},
|
||||
"ExposedPorts": {
|
||||
"$ref": "defs.json#/definitions/mapStringObject"
|
||||
},
|
||||
"Env": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"Entrypoint": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Cmd": {
|
||||
"oneOf": [
|
||||
{
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"Volumes": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "defs.json#/definitions/mapStringObject"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
},
|
||||
"WorkingDir": {
|
||||
"type": "string"
|
||||
},
|
||||
"Labels": {
|
||||
"oneOf": [
|
||||
{
|
||||
"$ref": "defs.json#/definitions/mapStringString"
|
||||
},
|
||||
{
|
||||
"type": "null"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
"rootfs": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"diff_ids": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"type": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"layers"
|
||||
]
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"diff_ids",
|
||||
"type"
|
||||
]
|
||||
},
|
||||
"history": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"created": {
|
||||
"type": "string",
|
||||
"format": "date-time"
|
||||
},
|
||||
"author": {
|
||||
"type": "string"
|
||||
},
|
||||
"created_by": {
|
||||
"type": "string"
|
||||
},
|
||||
"comment": {
|
||||
"type": "string"
|
||||
},
|
||||
"empty_layer": {
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
7
vendor/github.com/opencontainers/image-spec/schema/defs-image.json
generated
vendored
7
vendor/github.com/opencontainers/image-spec/schema/defs-image.json
generated
vendored
|
@ -17,8 +17,7 @@
|
|||
"required": [
|
||||
"mediaType",
|
||||
"size",
|
||||
"digest",
|
||||
"platform"
|
||||
"digest"
|
||||
],
|
||||
"properties": {
|
||||
"mediaType": {
|
||||
|
@ -78,6 +77,10 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"annotations": {
|
||||
"id": "https://opencontainers.org/schema/image/descriptor/annotations",
|
||||
"$ref": "#/definitions/annotations"
|
||||
}
|
||||
}
|
||||
},
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/schema/descriptor_test.go
generated
vendored
4
vendor/github.com/opencontainers/image-spec/schema/descriptor_test.go
generated
vendored
|
@ -24,7 +24,7 @@ import (
|
|||
func TestDescriptor(t *testing.T) {
|
||||
for i, tt := range []struct {
|
||||
descriptor string
|
||||
fail bool
|
||||
fail bool
|
||||
}{
|
||||
// valid descriptor
|
||||
{
|
||||
|
@ -204,7 +204,7 @@ func TestDescriptor(t *testing.T) {
|
|||
},
|
||||
} {
|
||||
r := strings.NewReader(tt.descriptor)
|
||||
err := schema.MediaTypeDescriptor.Validate(r)
|
||||
err := schema.ValidatorMediaTypeDescriptor.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
||||
|
|
9602
vendor/github.com/opencontainers/image-spec/schema/fs.go
generated
vendored
9602
vendor/github.com/opencontainers/image-spec/schema/fs.go
generated
vendored
File diff suppressed because it is too large
Load diff
2
vendor/github.com/opencontainers/image-spec/schema/gen.go
generated
vendored
2
vendor/github.com/opencontainers/image-spec/schema/gen.go
generated
vendored
|
@ -18,4 +18,4 @@ package schema
|
|||
// using esc (https://github.com/mjibson/esc).
|
||||
|
||||
// This should generally be invoked with `make schema-fs`
|
||||
//go:generate esc -private -pkg=schema -ignore=.*go .
|
||||
//go:generate esc -private -pkg=schema -ignore=.*go -ignore=.*swp .
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{
|
||||
"description": "OpenContainer Image Manifest List Specification",
|
||||
"description": "OpenContainer Image Index Specification",
|
||||
"$schema": "http://json-schema.org/draft-04/schema#",
|
||||
"id": "https://opencontainers.org/schema/image/manifest-list",
|
||||
"id": "https://opencontainers.org/schema/image/index",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"schemaVersion": {
|
||||
"description": "This field specifies the image manifest-list schema version as an integer",
|
||||
"id": "https://opencontainers.org/schema/image/manifest-list/schemaVersion",
|
||||
"description": "This field specifies the image index schema version as an integer",
|
||||
"id": "https://opencontainers.org/schema/image/index/schemaVersion",
|
||||
"type": "integer",
|
||||
"minimum": 2,
|
||||
"maximum": 2
|
||||
|
@ -17,8 +17,14 @@
|
|||
"$ref": "defs-image.json#/definitions/manifestDescriptor"
|
||||
}
|
||||
},
|
||||
"elements": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"$ref": "content-descriptor.json"
|
||||
}
|
||||
},
|
||||
"annotations": {
|
||||
"id": "https://opencontainers.org/schema/image/manifest-list/annotations",
|
||||
"id": "https://opencontainers.org/schema/image/index/annotations",
|
||||
"$ref": "defs-image.json#/definitions/annotations"
|
||||
}
|
||||
},
|
2
vendor/github.com/opencontainers/image-spec/schema/image-manifest-schema.json
generated
vendored
2
vendor/github.com/opencontainers/image-spec/schema/image-manifest-schema.json
generated
vendored
|
@ -22,7 +22,7 @@
|
|||
}
|
||||
},
|
||||
"annotations": {
|
||||
"id": "https://opencontainers.org/schema/image/manifest-list/annotations",
|
||||
"id": "https://opencontainers.org/schema/image/manifest/annotations",
|
||||
"$ref": "defs-image.json#/definitions/annotations"
|
||||
}
|
||||
},
|
||||
|
|
|
@ -21,14 +21,14 @@ import (
|
|||
"github.com/opencontainers/image-spec/schema"
|
||||
)
|
||||
|
||||
func TestManifestList(t *testing.T) {
|
||||
func TestImageIndex(t *testing.T) {
|
||||
for i, tt := range []struct {
|
||||
manifestList string
|
||||
fail bool
|
||||
imageIndex string
|
||||
fail bool
|
||||
}{
|
||||
// expected failure: mediaType does not match pattern
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -49,7 +49,7 @@ func TestManifestList(t *testing.T) {
|
|||
|
||||
// expected failure: manifest.size is string, expected integer
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -73,7 +73,7 @@ func TestManifestList(t *testing.T) {
|
|||
|
||||
// expected failure: manifest.digest is missing, expected required
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -94,9 +94,9 @@ func TestManifestList(t *testing.T) {
|
|||
fail: true,
|
||||
},
|
||||
|
||||
// expected failure: manifest.platform is missing, expected required
|
||||
// expected pass: manifest.platform is optional
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -108,12 +108,12 @@ func TestManifestList(t *testing.T) {
|
|||
]
|
||||
}
|
||||
`,
|
||||
fail: true,
|
||||
fail: false,
|
||||
},
|
||||
|
||||
// expected failure: invalid referenced manifest media type
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -137,7 +137,7 @@ func TestManifestList(t *testing.T) {
|
|||
|
||||
// expected failure: empty referenced manifest media type
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -159,9 +159,9 @@ func TestManifestList(t *testing.T) {
|
|||
fail: true,
|
||||
},
|
||||
|
||||
// valid manifest list, with optional fields
|
||||
// valid image index, with optional fields
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -196,9 +196,9 @@ func TestManifestList(t *testing.T) {
|
|||
fail: false,
|
||||
},
|
||||
|
||||
// valid manifest list, with required fields only
|
||||
// valid image index, with required fields only
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -217,9 +217,9 @@ func TestManifestList(t *testing.T) {
|
|||
fail: false,
|
||||
},
|
||||
|
||||
// valid manifest list, with customized media type of referenced manifest
|
||||
// valid image index, with customized media type of referenced manifest
|
||||
{
|
||||
manifestList: `
|
||||
imageIndex: `
|
||||
{
|
||||
"schemaVersion": 2,
|
||||
"manifests": [
|
||||
|
@ -238,8 +238,8 @@ func TestManifestList(t *testing.T) {
|
|||
fail: false,
|
||||
},
|
||||
} {
|
||||
r := strings.NewReader(tt.manifestList)
|
||||
err := schema.MediaTypeManifestList.Validate(r)
|
||||
r := strings.NewReader(tt.imageIndex)
|
||||
err := schema.ValidatorMediaTypeImageIndex.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
2
vendor/github.com/opencontainers/image-spec/schema/manifest_test.go
generated
vendored
2
vendor/github.com/opencontainers/image-spec/schema/manifest_test.go
generated
vendored
|
@ -193,7 +193,7 @@ func TestManifest(t *testing.T) {
|
|||
},
|
||||
} {
|
||||
r := strings.NewReader(tt.manifest)
|
||||
err := schema.MediaTypeManifest.Validate(r)
|
||||
err := schema.ValidatorMediaTypeManifest.Validate(r)
|
||||
|
||||
if got := err != nil; tt.fail != got {
|
||||
t.Errorf("test %d: expected validation failure %t but got %t, err %v", i, tt.fail, got, err)
|
||||
|
|
20
vendor/github.com/opencontainers/image-spec/schema/schema.go
generated
vendored
20
vendor/github.com/opencontainers/image-spec/schema/schema.go
generated
vendored
|
@ -22,11 +22,12 @@ import (
|
|||
|
||||
// Media types for the OCI image formats
|
||||
const (
|
||||
MediaTypeDescriptor Validator = v1.MediaTypeDescriptor
|
||||
MediaTypeManifest Validator = v1.MediaTypeImageManifest
|
||||
MediaTypeManifestList Validator = v1.MediaTypeImageManifestList
|
||||
MediaTypeImageConfig Validator = v1.MediaTypeImageConfig
|
||||
MediaTypeImageLayer unimplemented = v1.MediaTypeImageLayer
|
||||
ValidatorMediaTypeDescriptor Validator = v1.MediaTypeDescriptor
|
||||
ValidatorMediaTypeManifest Validator = v1.MediaTypeImageManifest
|
||||
ValidatorMediaTypeImageIndex Validator = v1.MediaTypeImageIndex
|
||||
ValidatorMediaTypeImageConfig Validator = v1.MediaTypeImageConfig
|
||||
ValidatorTypeImageLayout Validator = v1.ImageLayoutFile
|
||||
ValidatorMediaTypeImageLayer unimplemented = v1.MediaTypeImageLayer
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -36,10 +37,11 @@ var (
|
|||
|
||||
// specs maps OCI schema media types to schema files.
|
||||
specs = map[Validator]string{
|
||||
MediaTypeDescriptor: "content-descriptor.json",
|
||||
MediaTypeManifest: "image-manifest-schema.json",
|
||||
MediaTypeManifestList: "manifest-list-schema.json",
|
||||
MediaTypeImageConfig: "config-schema.json",
|
||||
ValidatorMediaTypeDescriptor: "content-descriptor.json",
|
||||
ValidatorMediaTypeManifest: "image-manifest-schema.json",
|
||||
ValidatorMediaTypeImageIndex: "image-index-schema.json",
|
||||
ValidatorMediaTypeImageConfig: "config-schema.json",
|
||||
ValidatorTypeImageLayout: "image-layout-schema.json",
|
||||
}
|
||||
)
|
||||
|
||||
|
|
8
vendor/github.com/opencontainers/image-spec/schema/spec_test.go
generated
vendored
8
vendor/github.com/opencontainers/image-spec/schema/spec_test.go
generated
vendored
|
@ -41,8 +41,12 @@ func TestValidateManifest(t *testing.T) {
|
|||
validate(t, "../manifest.md")
|
||||
}
|
||||
|
||||
func TestValidateManifestList(t *testing.T) {
|
||||
validate(t, "../manifest-list.md")
|
||||
func TestValidateImageIndex(t *testing.T) {
|
||||
validate(t, "../image-index.md")
|
||||
}
|
||||
|
||||
func TestValidateImageLayout(t *testing.T) {
|
||||
validate(t, "../image-layout.md")
|
||||
}
|
||||
|
||||
func TestValidateConfig(t *testing.T) {
|
||||
|
|
2
vendor/github.com/opencontainers/image-spec/schema/validator.go
generated
vendored
2
vendor/github.com/opencontainers/image-spec/schema/validator.go
generated
vendored
|
@ -33,7 +33,7 @@ type Validator string
|
|||
type validateDescendantsFunc func(r io.Reader) error
|
||||
|
||||
var mapValidateDescendants = map[Validator]validateDescendantsFunc{
|
||||
MediaTypeManifest: validateManifestDescendants,
|
||||
ValidatorMediaTypeManifest: validateManifestDescendants,
|
||||
}
|
||||
|
||||
// ValidationError contains all the errors that happened during validation.
|
||||
|
|
19
vendor/github.com/opencontainers/image-spec/spec.md
generated
vendored
19
vendor/github.com/opencontainers/image-spec/spec.md
generated
vendored
|
@ -1,10 +1,11 @@
|
|||
# Open Container Initiative Image Format Specification
|
||||
# Open Container Initiative
|
||||
## Image Format Specification
|
||||
|
||||
This specification defines an OCI Image, consisting of a [manifest](manifest.md), a [manifest list](manifest-list.md) (optional), a set of [filesystem layers](layer.md), and a [configuration](config.md).
|
||||
This specification defines an OCI Image, consisting of a [manifest](manifest.md), an [image index](image-index.md) (optional), a set of [filesystem layers](layer.md), and a [configuration](config.md).
|
||||
|
||||
The goal of this specification is to enable the creation of interoperable tools for building, transporting, and preparing a container image to run.
|
||||
|
||||
## Table of Contents
|
||||
### Table of Contents
|
||||
|
||||
- [Introduction](spec.md)
|
||||
- [Notational Conventions](#notational-conventions)
|
||||
|
@ -14,7 +15,7 @@ The goal of this specification is to enable the creation of interoperable tools
|
|||
- [Content Descriptors](descriptor.md)
|
||||
- [Image Layout](image-layout.md)
|
||||
- [Image Manifest](manifest.md)
|
||||
- [Image Manifest List](manifest-list.md)
|
||||
- [Image Index](image-index.md)
|
||||
- [Filesystem Layers](layer.md)
|
||||
- [Image Configuration](config.md)
|
||||
- [Annotations](annotations.md)
|
||||
|
@ -22,7 +23,7 @@ The goal of this specification is to enable the creation of interoperable tools
|
|||
- [Extensibility](considerations.md#extensibility)
|
||||
- [Canonicalization](considerations.md#canonicalization)
|
||||
|
||||
# Notational Conventions
|
||||
## Notational Conventions
|
||||
|
||||
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in [RFC 2119](http://tools.ietf.org/html/rfc2119) (Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997).
|
||||
|
||||
|
@ -31,11 +32,11 @@ The key words "unspecified", "undefined", and "implementation-defined" are to be
|
|||
An implementation is not compliant if it fails to satisfy one or more of the MUST, REQUIRED, or SHALL requirements for the protocols it implements.
|
||||
An implementation is compliant if it satisfies all the MUST, REQUIRED, and SHALL requirements for the protocols it implements.
|
||||
|
||||
# Overview
|
||||
## Overview
|
||||
|
||||
At a high level the image manifest contains metadata about the contents and dependencies of the image including the content-addressable identity of one or more [filesystem layer changeset](layer.md) archives that will be unpacked to make up the final runnable filesystem.
|
||||
The image configuration includes information such as application arguments, environments, etc.
|
||||
The manifest list is a higher-level manifest which points to one or more manifests.
|
||||
The image index is a higher-level manifest which points to one or more manifests and descriptors.
|
||||
Typically, these manifests may provide different implementations of the image, possibly varying by platform or other attributes.
|
||||
|
||||

|
||||
|
@ -44,13 +45,13 @@ Once built the OCI Image can then be discovered by name, downloaded, verified by
|
|||
|
||||

|
||||
|
||||
## Understanding the Specification
|
||||
### Understanding the Specification
|
||||
|
||||
The [OCI Image Media Types](media-types.md) document is a starting point to understanding the overall structure of the specification.
|
||||
|
||||
The high-level components of the spec include:
|
||||
|
||||
* An archival format for container images, consisting of an [image manifest](manifest.md), a [manifest list](manifest-list.md) (optional), an [image layout](image-layout.md), a set of [filesystem layers](layer.md), and [image configuration](config.md) (base OCI layer)
|
||||
* An archival format for container images, consisting of an [image manifest](manifest.md), an [image index](image-index.md) (optional), an [image layout](image-layout.md), a set of [filesystem layers](layer.md), and [image configuration](config.md) (base OCI layer)
|
||||
* A [process of referencing container images by a cryptographic hash of their content](descriptor.md) (base OCI layer)
|
||||
* A format for [storing CAS blobs and references to them](image-layout.md) (optional OCI layer)
|
||||
* Signatures that are based on signing image content address (optional OCI layer)
|
||||
|
|
3
vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go
generated
vendored
3
vendor/github.com/opencontainers/image-spec/specs-go/v1/descriptor.go
generated
vendored
|
@ -30,4 +30,7 @@ type Descriptor struct {
|
|||
|
||||
// URLs specifies a list of URLs from which this object MAY be downloaded
|
||||
URLs []string `json:"urls,omitempty"`
|
||||
|
||||
// Annotations contains arbitrary metadata relating to the targeted content.
|
||||
Annotations map[string]string `json:"annotations,omitempty"`
|
||||
}
|
||||
|
|
|
@ -50,14 +50,14 @@ type ManifestDescriptor struct {
|
|||
Platform Platform `json:"platform"`
|
||||
}
|
||||
|
||||
// ManifestList references manifests for various platforms.
|
||||
// This structure provides `application/vnd.oci.image.manifest.list.v1+json` mediatype when marshalled to JSON.
|
||||
type ManifestList struct {
|
||||
// ImageIndex references manifests for various platforms.
|
||||
// This structure provides `application/vnd.oci.image.index.v1+json` mediatype when marshalled to JSON.
|
||||
type ImageIndex struct {
|
||||
specs.Versioned
|
||||
|
||||
// Manifests references platform specific manifests.
|
||||
Manifests []ManifestDescriptor `json:"manifests"`
|
||||
|
||||
// Annotations contains arbitrary metadata for the manifest list.
|
||||
// Annotations contains arbitrary metadata for the image index.
|
||||
Annotations map[string]string `json:"annotations,omitempty"`
|
||||
}
|
15
vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go
generated
vendored
15
vendor/github.com/opencontainers/image-spec/specs-go/v1/layout.go
generated
vendored
|
@ -14,18 +14,15 @@
|
|||
|
||||
package v1
|
||||
|
||||
import "regexp"
|
||||
|
||||
// ImageLayoutVersion is the version of ImageLayout
|
||||
const ImageLayoutVersion = "1.0.0"
|
||||
const (
|
||||
// ImageLayoutFile is the file name of oci image layout file
|
||||
ImageLayoutFile = "oci-layout"
|
||||
// ImageLayoutVersion is the version of ImageLayout
|
||||
ImageLayoutVersion = "1.0.0"
|
||||
)
|
||||
|
||||
// ImageLayout is the structure in the "oci-layout" file, found in the root
|
||||
// of an OCI Image-layout directory.
|
||||
type ImageLayout struct {
|
||||
Version string `json:"imageLayoutVersion"`
|
||||
}
|
||||
|
||||
var (
|
||||
// RefsRegexp matches requirement of image-layout 'refs' charset.
|
||||
RefsRegexp = regexp.MustCompile(`^[a-zA-Z0-9-._]+$`)
|
||||
)
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go
generated
vendored
4
vendor/github.com/opencontainers/image-spec/specs-go/v1/manifest.go
generated
vendored
|
@ -16,7 +16,7 @@ package v1
|
|||
|
||||
import "github.com/opencontainers/image-spec/specs-go"
|
||||
|
||||
// Manifest provides `application/vnd.oci.image.manifest.list.v1+json` mediatype structure when marshalled to JSON.
|
||||
// Manifest provides `application/vnd.oci.image.manifest.v1+json` mediatype structure when marshalled to JSON.
|
||||
type Manifest struct {
|
||||
specs.Versioned
|
||||
|
||||
|
@ -27,6 +27,6 @@ type Manifest struct {
|
|||
// Layers is an indexed list of layers referenced by the manifest.
|
||||
Layers []Descriptor `json:"layers"`
|
||||
|
||||
// Annotations contains arbitrary metadata for the manifest list.
|
||||
// Annotations contains arbitrary metadata for the manifest.
|
||||
Annotations map[string]string `json:"annotations,omitempty"`
|
||||
}
|
||||
|
|
4
vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go
generated
vendored
4
vendor/github.com/opencontainers/image-spec/specs-go/v1/mediatype.go
generated
vendored
|
@ -21,8 +21,8 @@ const (
|
|||
// MediaTypeImageManifest specifies the media type for an image manifest.
|
||||
MediaTypeImageManifest = "application/vnd.oci.image.manifest.v1+json"
|
||||
|
||||
// MediaTypeImageManifestList specifies the media type for an image manifest list.
|
||||
MediaTypeImageManifestList = "application/vnd.oci.image.manifest.list.v1+json"
|
||||
// MediaTypeImageIndex specifies the media type for an image index.
|
||||
MediaTypeImageIndex = "application/vnd.oci.image.index.v1+json"
|
||||
|
||||
// MediaTypeImageLayer is the media type used for layers referenced by the manifest.
|
||||
MediaTypeImageLayer = "application/vnd.oci.image.layer.v1.tar"
|
||||
|
|
2
vendor/github.com/opencontainers/image-spec/specs-go/version.go
generated
vendored
2
vendor/github.com/opencontainers/image-spec/specs-go/version.go
generated
vendored
|
@ -25,7 +25,7 @@ const (
|
|||
VersionPatch = 0
|
||||
|
||||
// VersionDev indicates development branch. Releases will be empty string.
|
||||
VersionDev = "-rc3-dev"
|
||||
VersionDev = "-rc5"
|
||||
)
|
||||
|
||||
// Version is the specification version that the package types support.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue