fa27580c |
package graph
import ( |
6e38a53f |
"io" |
fa27580c |
"net/http"
"net/url"
|
30d5a42c |
"github.com/docker/docker/pkg/archive" |
c30a55f1 |
"github.com/docker/docker/pkg/httputils" |
12b278d3 |
"github.com/docker/docker/pkg/progressreader" |
0cd6c05d |
"github.com/docker/docker/pkg/streamformatter" |
17abfc3d |
"github.com/docker/docker/runconfig" |
fa27580c |
"github.com/docker/docker/utils"
)
|
6e38a53f |
type ImageImportConfig struct { |
ae406358 |
Changes []string
InConfig io.ReadCloser
OutStream io.Writer
ContainerConfig *runconfig.Config |
6e38a53f |
}
|
ae406358 |
func (s *TagStore) Import(src string, repo string, tag string, imageImportConfig *ImageImportConfig) error { |
fa27580c |
var ( |
6b700bda |
sf = streamformatter.NewJSONStreamFormatter() |
ae406358 |
archive archive.ArchiveReader
resp *http.Response |
fa27580c |
)
if src == "-" { |
6e38a53f |
archive = imageImportConfig.InConfig |
fa27580c |
} else {
u, err := url.Parse(src)
if err != nil { |
c79b9bab |
return err |
fa27580c |
}
if u.Scheme == "" {
u.Scheme = "http"
u.Host = src
u.Path = ""
} |
6e38a53f |
imageImportConfig.OutStream.Write(sf.FormatStatus("", "Downloading from %s", u)) |
c30a55f1 |
resp, err = httputils.Download(u.String()) |
fa27580c |
if err != nil { |
c79b9bab |
return err |
fa27580c |
} |
12b278d3 |
progressReader := progressreader.New(progressreader.Config{
In: resp.Body, |
6e38a53f |
Out: imageImportConfig.OutStream, |
12b278d3 |
Formatter: sf,
Size: int(resp.ContentLength),
NewLines: true,
ID: "",
Action: "Importing",
}) |
fa27580c |
defer progressReader.Close()
archive = progressReader
} |
17abfc3d |
|
ae406358 |
img, err := s.graph.Create(archive, "", "", "Imported from "+src, "", nil, imageImportConfig.ContainerConfig) |
fa27580c |
if err != nil { |
c79b9bab |
return err |
fa27580c |
}
// Optionally register the image at REPO/TAG
if repo != "" { |
99f6309b |
if err := s.Tag(repo, tag, img.ID, true); err != nil { |
c79b9bab |
return err |
fa27580c |
}
} |
6e38a53f |
imageImportConfig.OutStream.Write(sf.FormatStatus("", img.ID)) |
ef741525 |
logID := img.ID
if tag != "" { |
a2b0c977 |
logID = utils.ImageReference(logID, tag) |
ef741525 |
} |
c9eb37f9 |
s.eventsService.Log("import", logID, "") |
c79b9bab |
return nil |
fa27580c |
} |