|
@@ -24,14 +24,13 @@ import (
|
|
|
)
|
|
|
|
|
|
// Creates an image from Pull or from Import
|
|
|
-func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
-
|
|
|
+func (ir *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
var (
|
|
|
- image = r.Form.Get("fromImage")
|
|
|
+ img = r.Form.Get("fromImage")
|
|
|
repo = r.Form.Get("repo")
|
|
|
tag = r.Form.Get("tag")
|
|
|
message = r.Form.Get("message")
|
|
@@ -54,7 +53,7 @@ func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWrite
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- if image != "" { // pull
|
|
|
+ if img != "" { // pull
|
|
|
metaHeaders := map[string][]string{}
|
|
|
for k, v := range r.Header {
|
|
|
if strings.HasPrefix(k, "X-Meta-") {
|
|
@@ -65,10 +64,10 @@ func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWrite
|
|
|
// For a pull it is not an error if no auth was given. Ignore invalid
|
|
|
// AuthConfig to increase compatibility with the existing API.
|
|
|
authConfig, _ := registry.DecodeAuthConfig(r.Header.Get(registry.AuthHeader))
|
|
|
- progressErr = s.backend.PullImage(ctx, image, tag, platform, metaHeaders, authConfig, output)
|
|
|
+ progressErr = ir.backend.PullImage(ctx, img, tag, platform, metaHeaders, authConfig, output)
|
|
|
} else { // import
|
|
|
src := r.Form.Get("fromSrc")
|
|
|
- progressErr = s.backend.ImportImage(src, repo, platform, tag, message, r.Body, output, r.Form["changes"])
|
|
|
+ progressErr = ir.backend.ImportImage(src, repo, platform, tag, message, r.Body, output, r.Form["changes"])
|
|
|
}
|
|
|
if progressErr != nil {
|
|
|
if !output.Flushed() {
|
|
@@ -80,7 +79,7 @@ func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWrite
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
metaHeaders := map[string][]string{}
|
|
|
for k, v := range r.Header {
|
|
|
if strings.HasPrefix(k, "X-Meta-") {
|
|
@@ -112,7 +111,7 @@ func (s *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter,
|
|
|
|
|
|
img := vars["name"]
|
|
|
tag := r.Form.Get("tag")
|
|
|
- if err := s.backend.PushImage(ctx, img, tag, metaHeaders, authConfig, output); err != nil {
|
|
|
+ if err := ir.backend.PushImage(ctx, img, tag, metaHeaders, authConfig, output); err != nil {
|
|
|
if !output.Flushed() {
|
|
|
return err
|
|
|
}
|
|
@@ -121,7 +120,7 @@ func (s *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter,
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) getImagesGet(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) getImagesGet(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -137,7 +136,7 @@ func (s *imageRouter) getImagesGet(ctx context.Context, w http.ResponseWriter, r
|
|
|
names = r.Form["names"]
|
|
|
}
|
|
|
|
|
|
- if err := s.backend.ExportImage(ctx, names, output); err != nil {
|
|
|
+ if err := ir.backend.ExportImage(ctx, names, output); err != nil {
|
|
|
if !output.Flushed() {
|
|
|
return err
|
|
|
}
|
|
@@ -146,7 +145,7 @@ func (s *imageRouter) getImagesGet(ctx context.Context, w http.ResponseWriter, r
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) postImagesLoad(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) postImagesLoad(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -156,7 +155,7 @@ func (s *imageRouter) postImagesLoad(ctx context.Context, w http.ResponseWriter,
|
|
|
|
|
|
output := ioutils.NewWriteFlusher(w)
|
|
|
defer output.Close()
|
|
|
- if err := s.backend.LoadImage(ctx, r.Body, output, quiet); err != nil {
|
|
|
+ if err := ir.backend.LoadImage(ctx, r.Body, output, quiet); err != nil {
|
|
|
_, _ = output.Write(streamformatter.FormatError(err))
|
|
|
}
|
|
|
return nil
|
|
@@ -170,7 +169,7 @@ func (missingImageError) Error() string {
|
|
|
|
|
|
func (missingImageError) InvalidParameter() {}
|
|
|
|
|
|
-func (s *imageRouter) deleteImages(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) deleteImages(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -184,7 +183,7 @@ func (s *imageRouter) deleteImages(ctx context.Context, w http.ResponseWriter, r
|
|
|
force := httputils.BoolValue(r, "force")
|
|
|
prune := !httputils.BoolValue(r, "noprune")
|
|
|
|
|
|
- list, err := s.backend.ImageDelete(ctx, name, force, prune)
|
|
|
+ list, err := ir.backend.ImageDelete(ctx, name, force, prune)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -192,13 +191,13 @@ func (s *imageRouter) deleteImages(ctx context.Context, w http.ResponseWriter, r
|
|
|
return httputils.WriteJSON(w, http.StatusOK, list)
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) getImagesByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
- image, err := s.backend.GetImage(vars["name"], nil)
|
|
|
+func (ir *imageRouter) getImagesByName(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+ img, err := ir.backend.GetImage(vars["name"], nil)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- imageInspect, err := s.toImageInspect(image)
|
|
|
+ imageInspect, err := ir.toImageInspect(img)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -206,10 +205,9 @@ func (s *imageRouter) getImagesByName(ctx context.Context, w http.ResponseWriter
|
|
|
return httputils.WriteJSON(w, http.StatusOK, imageInspect)
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, error) {
|
|
|
- refs := s.referenceBackend.References(img.ID().Digest())
|
|
|
- repoTags := []string{}
|
|
|
- repoDigests := []string{}
|
|
|
+func (ir *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, error) {
|
|
|
+ refs := ir.referenceBackend.References(img.ID().Digest())
|
|
|
+ var repoTags, repoDigests []string
|
|
|
for _, ref := range refs {
|
|
|
switch ref.(type) {
|
|
|
case reference.NamedTagged:
|
|
@@ -221,13 +219,12 @@ func (s *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, err
|
|
|
|
|
|
var size int64
|
|
|
var layerMetadata map[string]string
|
|
|
- layerID := img.RootFS.ChainID()
|
|
|
- if layerID != "" {
|
|
|
- l, err := s.layerStore.Get(layerID)
|
|
|
+ if layerID := img.RootFS.ChainID(); layerID != "" {
|
|
|
+ l, err := ir.layerStore.Get(layerID)
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
|
- defer layer.ReleaseAndLog(s.layerStore, l)
|
|
|
+ defer layer.ReleaseAndLog(ir.layerStore, l)
|
|
|
size = l.Size()
|
|
|
layerMetadata, err = l.Metadata()
|
|
|
if err != nil {
|
|
@@ -240,7 +237,7 @@ func (s *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, err
|
|
|
comment = img.History[len(img.History)-1].Comment
|
|
|
}
|
|
|
|
|
|
- lastUpdated, err := s.imageStore.GetLastUpdated(img.ID())
|
|
|
+ lastUpdated, err := ir.imageStore.GetLastUpdated(img.ID())
|
|
|
if err != nil {
|
|
|
return nil, err
|
|
|
}
|
|
@@ -264,7 +261,7 @@ func (s *imageRouter) toImageInspect(img *image.Image) (*types.ImageInspect, err
|
|
|
Size: size,
|
|
|
VirtualSize: size, // TODO: field unused, deprecate
|
|
|
GraphDriver: types.GraphDriverData{
|
|
|
- Name: s.layerStore.DriverName(),
|
|
|
+ Name: ir.layerStore.DriverName(),
|
|
|
Data: layerMetadata,
|
|
|
},
|
|
|
RootFS: rootFSToAPIType(img.RootFS),
|
|
@@ -285,7 +282,7 @@ func rootFSToAPIType(rootfs *image.RootFS) types.RootFS {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -310,7 +307,7 @@ func (s *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter,
|
|
|
sharedSize = httputils.BoolValue(r, "shared-size")
|
|
|
}
|
|
|
|
|
|
- images, err := s.backend.Images(ctx, types.ImageListOptions{
|
|
|
+ images, err := ir.backend.Images(ctx, types.ImageListOptions{
|
|
|
All: httputils.BoolValue(r, "all"),
|
|
|
Filters: imageFilters,
|
|
|
SharedSize: sharedSize,
|
|
@@ -322,9 +319,8 @@ func (s *imageRouter) getImagesJSON(ctx context.Context, w http.ResponseWriter,
|
|
|
return httputils.WriteJSON(w, http.StatusOK, images)
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) getImagesHistory(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
- name := vars["name"]
|
|
|
- history, err := s.backend.ImageHistory(name)
|
|
|
+func (ir *imageRouter) getImagesHistory(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+ history, err := ir.backend.ImageHistory(vars["name"])
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -332,18 +328,18 @@ func (s *imageRouter) getImagesHistory(ctx context.Context, w http.ResponseWrite
|
|
|
return httputils.WriteJSON(w, http.StatusOK, history)
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) postImagesTag(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) postImagesTag(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
- if _, err := s.backend.TagImage(vars["name"], r.Form.Get("repo"), r.Form.Get("tag")); err != nil {
|
|
|
+ if _, err := ir.backend.TagImage(vars["name"], r.Form.Get("repo"), r.Form.Get("tag")); err != nil {
|
|
|
return err
|
|
|
}
|
|
|
w.WriteHeader(http.StatusCreated)
|
|
|
return nil
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -371,14 +367,14 @@ func (s *imageRouter) getImagesSearch(ctx context.Context, w http.ResponseWriter
|
|
|
// For a search it is not an error if no auth was given. Ignore invalid
|
|
|
// AuthConfig to increase compatibility with the existing API.
|
|
|
authConfig, _ := registry.DecodeAuthConfig(r.Header.Get(registry.AuthHeader))
|
|
|
- query, err := s.backend.SearchRegistryForImages(ctx, searchFilters, r.Form.Get("term"), limit, authConfig, headers)
|
|
|
+ query, err := ir.backend.SearchRegistryForImages(ctx, searchFilters, r.Form.Get("term"), limit, authConfig, headers)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|
|
|
return httputils.WriteJSON(w, http.StatusOK, query.Results)
|
|
|
}
|
|
|
|
|
|
-func (s *imageRouter) postImagesPrune(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
+func (ir *imageRouter) postImagesPrune(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
|
if err := httputils.ParseForm(r); err != nil {
|
|
|
return err
|
|
|
}
|
|
@@ -388,7 +384,7 @@ func (s *imageRouter) postImagesPrune(ctx context.Context, w http.ResponseWriter
|
|
|
return err
|
|
|
}
|
|
|
|
|
|
- pruneReport, err := s.backend.ImagesPrune(ctx, pruneFilters)
|
|
|
+ pruneReport, err := ir.backend.ImagesPrune(ctx, pruneFilters)
|
|
|
if err != nil {
|
|
|
return err
|
|
|
}
|