Add configurable layers in manifest events
Signed-off-by: Andrew Leung <anwleung@gmail.com>
This commit is contained in:
parent
749f6afb45
commit
276fdce3d9
9 changed files with 66 additions and 18 deletions
|
@ -12,11 +12,12 @@ import (
|
|||
)
|
||||
|
||||
type bridge struct {
|
||||
ub URLBuilder
|
||||
actor ActorRecord
|
||||
source SourceRecord
|
||||
request RequestRecord
|
||||
sink Sink
|
||||
ub URLBuilder
|
||||
manfiestLayers bool
|
||||
actor ActorRecord
|
||||
source SourceRecord
|
||||
request RequestRecord
|
||||
sink Sink
|
||||
}
|
||||
|
||||
var _ Listener = &bridge{}
|
||||
|
@ -31,13 +32,14 @@ type URLBuilder interface {
|
|||
// using the actor and source. Any urls populated in the events created by
|
||||
// this bridge will be created using the URLBuilder.
|
||||
// TODO(stevvooe): Update this to simply take a context.Context object.
|
||||
func NewBridge(ub URLBuilder, source SourceRecord, actor ActorRecord, request RequestRecord, sink Sink) Listener {
|
||||
func NewBridge(ub URLBuilder, source SourceRecord, actor ActorRecord, request RequestRecord, sink Sink, manifestLayers bool) Listener {
|
||||
return &bridge{
|
||||
ub: ub,
|
||||
actor: actor,
|
||||
source: source,
|
||||
request: request,
|
||||
sink: sink,
|
||||
ub: ub,
|
||||
manfiestLayers: manifestLayers,
|
||||
actor: actor,
|
||||
source: source,
|
||||
request: request,
|
||||
sink: sink,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -135,7 +137,7 @@ func (b *bridge) createManifestEvent(action string, repo reference.Named, sm dis
|
|||
}
|
||||
|
||||
// Ensure we have the canonical manifest descriptor here
|
||||
_, desc, err := distribution.UnmarshalManifest(mt, p)
|
||||
manifest, desc, err := distribution.UnmarshalManifest(mt, p)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -144,6 +146,9 @@ func (b *bridge) createManifestEvent(action string, repo reference.Named, sm dis
|
|||
event.Target.Length = desc.Size
|
||||
event.Target.Size = desc.Size
|
||||
event.Target.Digest = desc.Digest
|
||||
if b.manfiestLayers {
|
||||
event.Target.Layers = append(event.Target.Layers, manifest.References()...)
|
||||
}
|
||||
|
||||
ref, err := reference.WithDigest(repo, event.Target.Digest)
|
||||
if err != nil {
|
||||
|
|
|
@ -26,9 +26,18 @@ var (
|
|||
Name: "test",
|
||||
}
|
||||
request = RequestRecord{}
|
||||
m = schema1.Manifest{
|
||||
Name: repo,
|
||||
Tag: "latest",
|
||||
layers = []schema1.FSLayer{
|
||||
{
|
||||
BlobSum: "asdf",
|
||||
},
|
||||
{
|
||||
BlobSum: "qwer",
|
||||
},
|
||||
}
|
||||
m = schema1.Manifest{
|
||||
Name: repo,
|
||||
Tag: "latest",
|
||||
FSLayers: layers,
|
||||
}
|
||||
|
||||
sm *schema1.SignedManifest
|
||||
|
@ -120,7 +129,7 @@ func createTestEnv(t *testing.T, fn testSinkFn) Listener {
|
|||
payload = sm.Canonical
|
||||
dgst = digest.FromBytes(payload)
|
||||
|
||||
return NewBridge(ub, source, actor, request, fn)
|
||||
return NewBridge(ub, source, actor, request, fn, true)
|
||||
}
|
||||
|
||||
func checkDeleted(t *testing.T, action string, events ...Event) {
|
||||
|
@ -170,6 +179,15 @@ func checkCommonManifest(t *testing.T, action string, events ...Event) {
|
|||
if event.Target.URL != u {
|
||||
t.Fatalf("incorrect url passed: \n%q != \n%q", event.Target.URL, u)
|
||||
}
|
||||
|
||||
if len(event.Target.Layers) != len(layers) {
|
||||
t.Fatalf("unexpected number of layers %v != %v", len(event.Target.Layers), len(layers))
|
||||
}
|
||||
for i, layer := range event.Target.Layers {
|
||||
if layer.Digest != layers[i].BlobSum {
|
||||
t.Fatalf("unexpected layer: %q != %q", layer.Digest, layers[i].BlobSum)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func checkCommon(t *testing.T, events ...Event) {
|
||||
|
|
|
@ -71,6 +71,9 @@ type Event struct {
|
|||
|
||||
// Tag provides the tag
|
||||
Tag string `json:"tag,omitempty"`
|
||||
|
||||
// Layers provides the layers descriptors.
|
||||
Layers []distribution.Descriptor `json:"layers,omitempty"`
|
||||
} `json:"target,omitempty"`
|
||||
|
||||
// Request covers the request that generated the event.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue