mirror of
https://github.com/imjasonh/kontain.me
synced 2026-07-18 06:40:04 +00:00
thread contexts through
This commit is contained in:
parent
87374b6124
commit
06e4bad278
5 changed files with 17 additions and 16 deletions
|
|
@ -151,7 +151,7 @@ func (s *server) serveBuildpackManifest(w http.ResponseWriter, r *http.Request)
|
|||
}
|
||||
|
||||
// Serve new image manifest.
|
||||
img, err := s.getImage(image)
|
||||
img, err := s.getImage(ctx, image)
|
||||
if err != nil {
|
||||
s.error.Println("ERROR:", err)
|
||||
serve.Error(w, err)
|
||||
|
|
@ -279,7 +279,7 @@ EOF`, tok.AccessToken),
|
|||
return image, nil
|
||||
}
|
||||
|
||||
func (s *server) getImage(image string) (v1.Image, error) {
|
||||
func (s *server) getImage(ctx context.Context, image string) (v1.Image, error) {
|
||||
ref, err := name.NewTag(image, name.WeakValidation)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -288,5 +288,5 @@ func (s *server) getImage(image string) (v1.Image, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return remote.Image(ref, remote.WithAuth(authn))
|
||||
return remote.Image(ref, remote.WithAuth(authn), remote.WithContext(ctx))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ func (s *server) serveFlattenManifest(w http.ResponseWriter, r *http.Request) {
|
|||
|
||||
switch d.MediaType {
|
||||
case types.DockerManifestList:
|
||||
idx, err := remote.Index(ref)
|
||||
idx, err := remote.Index(ref, remote.WithContext(ctx))
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (remote.Index): %v", err)
|
||||
serve.Error(w, err)
|
||||
|
|
@ -169,7 +169,7 @@ func (s *server) serveFlattenManifest(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
case types.DockerManifestSchema2:
|
||||
img, err := remote.Image(ref)
|
||||
img, err := remote.Image(ref, remote.WithContext(ctx))
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (remote.Image): %v", err)
|
||||
serve.Error(w, err)
|
||||
|
|
|
|||
|
|
@ -145,7 +145,7 @@ func (s *server) serveKanikoManifest(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
// Serve new image manifest.
|
||||
img, err := s.getImage(image)
|
||||
img, err := s.getImage(ctx, image)
|
||||
if err != nil {
|
||||
s.error.Println("ERROR:", err)
|
||||
serve.Error(w, err)
|
||||
|
|
@ -269,7 +269,7 @@ EOF`, tok.AccessToken),
|
|||
return image, nil
|
||||
}
|
||||
|
||||
func (s *server) getImage(image string) (v1.Image, error) {
|
||||
func (s *server) getImage(ctx context.Context, image string) (v1.Image, error) {
|
||||
ref, err := name.NewTag(image, name.WeakValidation)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -278,5 +278,5 @@ func (s *server) getImage(image string) (v1.Image, error) {
|
|||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return remote.Image(ref, remote.WithAuth(authn))
|
||||
return remote.Image(ref, remote.WithAuth(authn), remote.WithContext(ctx))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -110,7 +110,7 @@ func (s *server) serveMirrorManifest(w http.ResponseWriter, r *http.Request) {
|
|||
case types.DockerManifestList:
|
||||
// If the image is a manifest list, fetch and mirror
|
||||
// the image index.
|
||||
idx, err := remote.Index(ref)
|
||||
idx, err := remote.Index(ref, remote.WithContext(ctx))
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (remote.Index): %v", err)
|
||||
serve.Error(w, err)
|
||||
|
|
@ -124,7 +124,7 @@ func (s *server) serveMirrorManifest(w http.ResponseWriter, r *http.Request) {
|
|||
case types.DockerManifestSchema2:
|
||||
// If it's a simple image, fetch and mirror its
|
||||
// manifest.
|
||||
img, err := remote.Image(ref)
|
||||
img, err := remote.Image(ref, remote.WithContext(ctx))
|
||||
if err != nil {
|
||||
s.error.Printf("ERROR (remote.Image): %v", err)
|
||||
serve.Error(w, err)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
|
|
@ -37,6 +38,7 @@ type server struct {
|
|||
}
|
||||
|
||||
func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
||||
ctx := r.Context()
|
||||
s.info.Println("handler:", r.Method, r.URL)
|
||||
if r.Method != http.MethodPost {
|
||||
http.Error(w, "must be post", http.StatusMethodNotAllowed)
|
||||
|
|
@ -44,14 +46,13 @@ func (s *server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
|
|||
}
|
||||
|
||||
r.ParseForm()
|
||||
log.Println(r.Form) // TODO
|
||||
refs, err := images(r.FormValue("images"))
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
d, err := genDot(refs)
|
||||
d, err := genDot(ctx, refs)
|
||||
if err != nil {
|
||||
http.Error(w, err.Error(), http.StatusBadRequest)
|
||||
return
|
||||
|
|
@ -86,7 +87,7 @@ func images(s string) ([]name.Reference, error) {
|
|||
return refs, nil
|
||||
}
|
||||
|
||||
func genDot(refs []name.Reference) (string, error) {
|
||||
func genDot(ctx context.Context, refs []name.Reference) (string, error) {
|
||||
g := dot.NewGraph("images")
|
||||
g.SetType(dot.DIGRAPH)
|
||||
|
||||
|
|
@ -98,7 +99,7 @@ func genDot(refs []name.Reference) (string, error) {
|
|||
|
||||
edges := map[string]bool{}
|
||||
for _, ref := range refs {
|
||||
layers, err := getLayers(ref)
|
||||
layers, err := getLayers(ctx, ref)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("Failed to get layers for %q, ignoring: %v\n", ref, err)
|
||||
}
|
||||
|
|
@ -152,8 +153,8 @@ func short(layer v1.Descriptor) string {
|
|||
return fmt.Sprintf("%s\n%s", layer.Digest.String()[7:19], humanize.Bytes(uint64(layer.Size)))
|
||||
}
|
||||
|
||||
func getLayers(ref name.Reference) ([]v1.Descriptor, error) {
|
||||
i, err := remote.Image(ref)
|
||||
func getLayers(ctx context.Context, ref name.Reference) ([]v1.Descriptor, error) {
|
||||
i, err := remote.Image(ref, remote.WithContext(ctx))
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("remote.Image: %v", err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue