5abfc91021
To provide a single package with v2 API definitions, the locked down portions of the API have been merged into a single package. References to exported items will appear as v2.XXX, indicating their origin. The definitions in this package will soon be locked down for change, acceppting only additions that will not change protocol behavior.
142 lines
4.9 KiB
Go
142 lines
4.9 KiB
Go
package v2
|
|
|
|
import "net/http"
|
|
|
|
// ErrorDescriptor provides relevant information about a given error code.
|
|
type ErrorDescriptor struct {
|
|
// Code is the error code that this descriptor describes.
|
|
Code ErrorCode
|
|
|
|
// Value provides a unique, string key, often captilized with
|
|
// underscores, to identify the error code. This value is used as the
|
|
// keyed value when serializing api errors.
|
|
Value string
|
|
|
|
// Message is a short, human readable decription of the error condition
|
|
// included in API responses.
|
|
Message string
|
|
|
|
// Description provides a complete account of the errors purpose, suitable
|
|
// for use in documentation.
|
|
Description string
|
|
|
|
// HTTPStatusCodes provides a list of status under which this error
|
|
// condition may arise. If it is empty, the error condition may be seen
|
|
// for any status code.
|
|
HTTPStatusCodes []int
|
|
}
|
|
|
|
// ErrorDescriptors provides a list of HTTP API Error codes that may be
|
|
// encountered when interacting with the registry API.
|
|
var ErrorDescriptors = []ErrorDescriptor{
|
|
{
|
|
Code: ErrorCodeUnknown,
|
|
Value: "UNKNOWN",
|
|
Message: "unknown error",
|
|
Description: `Generic error returned when the error does not have an
|
|
API classification.`,
|
|
},
|
|
{
|
|
Code: ErrorCodeDigestInvalid,
|
|
Value: "DIGEST_INVALID",
|
|
Message: "provided digest did not match uploaded content",
|
|
Description: `When a blob is uploaded, the registry will check that
|
|
the content matches the digest provided by the client. The error may
|
|
include a detail structure with the key "digest", including the
|
|
invalid digest string. This error may also be returned when a manifest
|
|
includes an invalid layer digest.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
|
},
|
|
{
|
|
Code: ErrorCodeSizeInvalid,
|
|
Value: "SIZE_INVALID",
|
|
Message: "provided length did not match content length",
|
|
Description: `When a layer is uploaded, the provided size will be
|
|
checked against the uploaded content. If they do not match, this error
|
|
will be returned.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest},
|
|
},
|
|
{
|
|
Code: ErrorCodeNameInvalid,
|
|
Value: "NAME_INVALID",
|
|
Message: "manifest name did not match URI",
|
|
Description: `During a manifest upload, if the name in the manifest
|
|
does not match the uri name, this error will be returned.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
|
},
|
|
{
|
|
Code: ErrorCodeTagInvalid,
|
|
Value: "TAG_INVALID",
|
|
Message: "manifest tag did not match URI",
|
|
Description: `During a manifest upload, if the tag in the manifest
|
|
does not match the uri tag, this error will be returned.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
|
},
|
|
{
|
|
Code: ErrorCodeNameUnknown,
|
|
Value: "NAME_UNKNOWN",
|
|
Message: "repository name not known to registry",
|
|
Description: `This is returned if the name used during an operation is
|
|
unknown to the registry.`,
|
|
HTTPStatusCodes: []int{http.StatusNotFound},
|
|
},
|
|
{
|
|
Code: ErrorCodeManifestUnknown,
|
|
Value: "MANIFEST_UNKNOWN",
|
|
Message: "manifest unknown",
|
|
Description: `This error is returned when the manifest, identified by
|
|
name and tag is unknown to the repository.`,
|
|
HTTPStatusCodes: []int{http.StatusNotFound},
|
|
},
|
|
{
|
|
Code: ErrorCodeManifestInvalid,
|
|
Value: "MANIFEST_INVALID",
|
|
Message: "manifest invalid",
|
|
Description: `During upload, manifests undergo several checks ensuring
|
|
validity. If those checks fail, this error may be returned, unless a
|
|
more specific error is included. The detail will contain information
|
|
the failed validation.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest},
|
|
},
|
|
{
|
|
Code: ErrorCodeManifestUnverified,
|
|
Value: "MANIFEST_UNVERIFIED",
|
|
Message: "manifest failed signature verification",
|
|
Description: `During manifest upload, if the manifest fails signature
|
|
verification, this error will be returned.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest},
|
|
},
|
|
{
|
|
Code: ErrorCodeBlobUnknown,
|
|
Value: "BLOB_UNKNOWN",
|
|
Message: "blob unknown to registry",
|
|
Description: `This error may be returned when a blob is unknown to the
|
|
registry in a specified repository. This can be returned with a
|
|
standard get or if a manifest references an unknown layer during
|
|
upload.`,
|
|
HTTPStatusCodes: []int{http.StatusBadRequest, http.StatusNotFound},
|
|
},
|
|
|
|
{
|
|
Code: ErrorCodeBlobUploadUnknown,
|
|
Value: "BLOB_UPLOAD_UNKNOWN",
|
|
Message: "blob upload unknown to registry",
|
|
Description: `If a blob upload has been cancelled or was never
|
|
started, this error code may be returned.`,
|
|
HTTPStatusCodes: []int{http.StatusNotFound},
|
|
},
|
|
}
|
|
|
|
var errorCodeToDescriptors map[ErrorCode]ErrorDescriptor
|
|
var idToDescriptors map[string]ErrorDescriptor
|
|
|
|
func init() {
|
|
errorCodeToDescriptors = make(map[ErrorCode]ErrorDescriptor, len(ErrorDescriptors))
|
|
idToDescriptors = make(map[string]ErrorDescriptor, len(ErrorDescriptors))
|
|
|
|
for _, descriptor := range ErrorDescriptors {
|
|
errorCodeToDescriptors[descriptor.Code] = descriptor
|
|
idToDescriptors[descriptor.Value] = descriptor
|
|
}
|
|
}
|