forked from TrueCloudLab/distribution
Update documentation and examples in notifications.md
Signed-off-by: Richard Scothern <richard.scothern@gmail.com>
This commit is contained in:
parent
afe2bdd1c5
commit
7e552e1972
2 changed files with 55 additions and 34 deletions
|
@ -65,45 +65,64 @@ Events have a well-defined JSON structure and are sent as the body of
|
|||
notification requests. One or more events are sent in a structure called an
|
||||
envelope. Each event has a unique id that can be used to uniquely identify incoming
|
||||
requests, if required. Along with that, an _action_ is provided with a
|
||||
_target, identifying the object mutated during the event.
|
||||
_target_, identifying the object mutated during the event.
|
||||
|
||||
The fields available in an `event` are described below.
|
||||
|
||||
Field | Type | Description
|
||||
----- | ----- | -------------
|
||||
id | string |ID provides a unique identifier for the event.
|
||||
timestamp | Time | Timestamp is the time at which the event occurred.
|
||||
action | string | Action indicates what action encompasses the provided event.
|
||||
target | distribution.Descriptor | Target uniquely describes the target of the event.
|
||||
length | int | Length in bytes of content. Same as Size field in Descriptor.
|
||||
repository | string | Repository identifies the named repository.
|
||||
fromRepository | string | FromRepository identifies the named repository which a blob was mounted from if appropriate.
|
||||
url | string | URL provides a direct link to the content.
|
||||
tag | string | Tag identifies a tag name in tag events
|
||||
request | [RequestRecord](https://godoc.org/github.com/docker/distribution/notifications#RequestRecord) | Request covers the request that generated the event.
|
||||
actor | [ActorRecord](https://godoc.org/github.com/docker/distribution/notifications#ActorRecord). | Actor specifies the agent that initiated the event. For most situations, this could be from the authorization context of the request.
|
||||
source | [SourceRecord](https://godoc.org/github.com/docker/distribution/notifications#SourceRecord) | Source identifies the registry node that generated the event. Put differently, while the actor "initiates" the event, the source "generates" it.
|
||||
|
||||
The fields available in an event are described in detail in the
|
||||
[godoc](http://godoc.org/github.com/docker/distribution/notifications#Event).
|
||||
|
||||
**TODO:** Let's break out the fields here rather than rely on the godoc.
|
||||
|
||||
The following is an example of a JSON event, sent in response to the push of a
|
||||
manifest:
|
||||
|
||||
```json
|
||||
{
|
||||
"id": "asdf-asdf-asdf-asdf-0",
|
||||
"timestamp": "2006-01-02T15:04:05Z",
|
||||
"action": "push",
|
||||
"target": {
|
||||
"mediaType": "application/vnd.docker.distribution.manifest.v1+json",
|
||||
"size": 1,
|
||||
"digest": "sha256:0123456789abcdef0",
|
||||
"length": 1,
|
||||
"repository": "library/test",
|
||||
"url": "http://example.com/v2/library/test/manifests/latest"
|
||||
},
|
||||
"request": {
|
||||
"id": "asdfasdf",
|
||||
"addr": "client.local",
|
||||
"host": "registrycluster.local",
|
||||
"method": "PUT",
|
||||
"useragent": "test/0.1"
|
||||
},
|
||||
"actor": {
|
||||
"name": "test-actor"
|
||||
},
|
||||
"source": {
|
||||
"addr": "hostname.local:port"
|
||||
}
|
||||
"events": [
|
||||
{
|
||||
"id": "320678d8-ca14-430f-8bb6-4ca139cd83f7",
|
||||
"timestamp": "2016-03-09T14:44:26.402973972-08:00",
|
||||
"action": "pull",
|
||||
"target": {
|
||||
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
|
||||
"size": 708,
|
||||
"digest": "sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf",
|
||||
"length": 708,
|
||||
"repository": "hello-world",
|
||||
"url": "http://192.168.100.227:5000/v2/hello-world/manifests/sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf",
|
||||
"tag": "latest"
|
||||
},
|
||||
"request": {
|
||||
"id": "6df24a34-0959-4923-81ca-14f09767db19",
|
||||
"addr": "192.168.64.11:42961",
|
||||
"host": "192.168.100.227:5000",
|
||||
"method": "GET",
|
||||
"useragent": "curl/7.38.0"
|
||||
},
|
||||
"actor": {},
|
||||
"source": {
|
||||
"addr": "xtal.local:5000",
|
||||
"instanceID": "a53db899-3b4b-4a62-a067-8dd013beaca4"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
The target struct of events which are sent when manifests and blobs are deleted
|
||||
will contain a subset of the data contained in Get and Put events. Specifically,
|
||||
only the digest and repository will be sent.
|
||||
|
@ -156,9 +175,9 @@ Content-Type: application/vnd.docker.distribution.events.v1+json
|
|||
"target": {
|
||||
"mediaType": "application/vnd.docker.distribution.manifest.v1+json",
|
||||
"length": 1,
|
||||
"digest": "sha256:0123456789abcdef0",
|
||||
"digest": "sha256:fea8895f450959fa676bcc1df0611ea93823a735a01205fd8622846041d0c7cf",
|
||||
"repository": "library/test",
|
||||
"url": "http://example.com/v2/library/test/manifests/latest"
|
||||
"url": "http://example.com/v2/library/test/manifests/sha256:c3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5"
|
||||
},
|
||||
"request": {
|
||||
"id": "asdfasdf",
|
||||
|
@ -181,9 +200,9 @@ Content-Type: application/vnd.docker.distribution.events.v1+json
|
|||
"target": {
|
||||
"mediaType": "application/vnd.docker.container.image.rootfs.diff+x-gtar",
|
||||
"length": 2,
|
||||
"digest": "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5",
|
||||
"digest": "sha256:c3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5",
|
||||
"repository": "library/test",
|
||||
"url": "http://example.com/v2/library/test/manifests/latest"
|
||||
"url": "http://example.com/v2/library/test/blobs/sha256:c3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5"
|
||||
},
|
||||
"request": {
|
||||
"id": "asdfasdf",
|
||||
|
@ -206,9 +225,9 @@ Content-Type: application/vnd.docker.distribution.events.v1+json
|
|||
"target": {
|
||||
"mediaType": "application/vnd.docker.container.image.rootfs.diff+x-gtar",
|
||||
"length": 3,
|
||||
"digest": "sha256:3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d6",
|
||||
"digest": "sha256:c3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5",
|
||||
"repository": "library/test",
|
||||
"url": "http://example.com/v2/library/test/manifests/latest"
|
||||
"url": "http://example.com/v2/library/test/blobs/sha256:c3b3692957d439ac1928219a83fac91e7bf96c153725526874673ae1f2023f8d5"
|
||||
},
|
||||
"request": {
|
||||
"id": "asdfasdf",
|
||||
|
|
|
@ -63,8 +63,10 @@ func WithTag(tag string) ManifestServiceOption {
|
|||
return WithTagOption{tag}
|
||||
}
|
||||
|
||||
// WithTagOption holds a tag
|
||||
type WithTagOption struct{ Tag string }
|
||||
|
||||
// Apply conforms to the ManifestServiceOption interface
|
||||
func (o WithTagOption) Apply(m ManifestService) error {
|
||||
// no implementation
|
||||
return nil
|
||||
|
|
Loading…
Reference in a new issue