| ... | ... |
@@ -534,32 +534,6 @@ func getImagesSearch(eng *engine.Engine, version version.Version, w http.Respons |
| 534 | 534 |
return job.Run() |
| 535 | 535 |
} |
| 536 | 536 |
|
| 537 |
-// FIXME: 'insert' is deprecated as of 0.10, and should be removed in a future version. |
|
| 538 |
-func postImagesInsert(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
| 539 |
- if err := parseForm(r); err != nil {
|
|
| 540 |
- return err |
|
| 541 |
- } |
|
| 542 |
- if vars == nil {
|
|
| 543 |
- return fmt.Errorf("Missing parameter")
|
|
| 544 |
- } |
|
| 545 |
- job := eng.Job("insert", vars["name"], r.Form.Get("url"), r.Form.Get("path"))
|
|
| 546 |
- if version.GreaterThan("1.0") {
|
|
| 547 |
- job.SetenvBool("json", true)
|
|
| 548 |
- streamJSON(job, w, false) |
|
| 549 |
- } else {
|
|
| 550 |
- job.Stdout.Add(w) |
|
| 551 |
- } |
|
| 552 |
- if err := job.Run(); err != nil {
|
|
| 553 |
- if !job.Stdout.Used() {
|
|
| 554 |
- return err |
|
| 555 |
- } |
|
| 556 |
- sf := utils.NewStreamFormatter(version.GreaterThan("1.0"))
|
|
| 557 |
- w.Write(sf.FormatError(err)) |
|
| 558 |
- } |
|
| 559 |
- |
|
| 560 |
- return nil |
|
| 561 |
-} |
|
| 562 |
- |
|
| 563 | 537 |
func postImagesPush(eng *engine.Engine, version version.Version, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
| 564 | 538 |
if vars == nil {
|
| 565 | 539 |
return fmt.Errorf("Missing parameter")
|
| ... | ... |
@@ -1111,7 +1085,6 @@ func createRouter(eng *engine.Engine, logging, enableCors bool, dockerVersion st |
| 1111 | 1111 |
"/commit": postCommit, |
| 1112 | 1112 |
"/build": postBuild, |
| 1113 | 1113 |
"/images/create": postImagesCreate, |
| 1114 |
- "/images/{name:.*}/insert": postImagesInsert,
|
|
| 1115 | 1114 |
"/images/load": postImagesLoad, |
| 1116 | 1115 |
"/images/{name:.*}/push": postImagesPush,
|
| 1117 | 1116 |
"/images/{name:.*}/tag": postImagesTag,
|
| ... | ... |
@@ -84,42 +84,6 @@ type Container struct {
|
| 84 | 84 |
activeLinks map[string]*links.Link |
| 85 | 85 |
} |
| 86 | 86 |
|
| 87 |
-// Inject the io.Reader at the given path. Note: do not close the reader |
|
| 88 |
-func (container *Container) Inject(file io.Reader, pth string) error {
|
|
| 89 |
- if err := container.Mount(); err != nil {
|
|
| 90 |
- return fmt.Errorf("inject: error mounting container %s: %s", container.ID, err)
|
|
| 91 |
- } |
|
| 92 |
- defer container.Unmount() |
|
| 93 |
- |
|
| 94 |
- // Return error if path exists |
|
| 95 |
- destPath := container.getResourcePath(pth) |
|
| 96 |
- if _, err := os.Stat(destPath); err == nil {
|
|
| 97 |
- // Since err is nil, the path could be stat'd and it exists |
|
| 98 |
- return fmt.Errorf("%s exists", pth)
|
|
| 99 |
- } else if !os.IsNotExist(err) {
|
|
| 100 |
- // Expect err might be that the file doesn't exist, so |
|
| 101 |
- // if it's some other error, return that. |
|
| 102 |
- |
|
| 103 |
- return err |
|
| 104 |
- } |
|
| 105 |
- |
|
| 106 |
- // Make sure the directory exists |
|
| 107 |
- if err := os.MkdirAll(container.getResourcePath(path.Dir(pth)), 0755); err != nil {
|
|
| 108 |
- return err |
|
| 109 |
- } |
|
| 110 |
- |
|
| 111 |
- dest, err := os.Create(destPath) |
|
| 112 |
- if err != nil {
|
|
| 113 |
- return err |
|
| 114 |
- } |
|
| 115 |
- defer dest.Close() |
|
| 116 |
- |
|
| 117 |
- if _, err := io.Copy(dest, file); err != nil {
|
|
| 118 |
- return err |
|
| 119 |
- } |
|
| 120 |
- return nil |
|
| 121 |
-} |
|
| 122 |
- |
|
| 123 | 87 |
func (container *Container) FromDisk() error {
|
| 124 | 88 |
data, err := ioutil.ReadFile(container.jsonPath()) |
| 125 | 89 |
if err != nil {
|
| ... | ... |
@@ -63,6 +63,9 @@ Trusted builds are now Automated Builds - `is_trusted` is now `is_automated`. |
| 63 | 63 |
**New!** |
| 64 | 64 |
You can now ping the server via the `_ping` endpoint. |
| 65 | 65 |
|
| 66 |
+**Removed Insert Endpoint** |
|
| 67 |
+The insert endpoint has been removed. |
|
| 68 |
+ |
|
| 66 | 69 |
`GET /events` |
| 67 | 70 |
|
| 68 | 71 |
**New!** |
| ... | ... |
@@ -756,31 +756,6 @@ Create an image, either by pull it from the registry or by importing it |
| 756 | 756 |
- **200** – no error |
| 757 | 757 |
- **500** – server error |
| 758 | 758 |
|
| 759 |
-### Insert a file in an image |
|
| 760 |
- |
|
| 761 |
-`POST /images/(name)/insert` |
|
| 762 |
- |
|
| 763 |
-Insert a file from `url` in the image `name` at `path` |
|
| 764 |
- |
|
| 765 |
- **Example request**: |
|
| 766 |
- |
|
| 767 |
- POST /images/test/insert?path=/usr&url=myurl HTTP/1.1 |
|
| 768 |
- |
|
| 769 |
- **Example response**: |
|
| 770 |
- |
|
| 771 |
- HTTP/1.1 200 OK |
|
| 772 |
- Content-Type: application/json |
|
| 773 |
- |
|
| 774 |
- {"status":"Inserting..."}
|
|
| 775 |
- {"status":"Inserting", "progress":"1/? (n/a)", "progressDetail":{"current":1}}
|
|
| 776 |
- {"error":"Invalid..."}
|
|
| 777 |
- ... |
|
| 778 |
- |
|
| 779 |
- Status Codes: |
|
| 780 |
- |
|
| 781 |
- - **200** – no error |
|
| 782 |
- - **500** – server error |
|
| 783 |
- |
|
| 784 | 759 |
### Inspect an image |
| 785 | 760 |
|
| 786 | 761 |
`GET /images/(name)/json` |
| ... | ... |
@@ -398,28 +398,6 @@ func TestImagesFilter(t *testing.T) {
|
| 398 | 398 |
} |
| 399 | 399 |
} |
| 400 | 400 |
|
| 401 |
-// FIXE: 'insert' is deprecated and should be removed in a future version. |
|
| 402 |
-func TestImageInsert(t *testing.T) {
|
|
| 403 |
- eng := NewTestEngine(t) |
|
| 404 |
- defer mkDaemonFromEngine(eng, t).Nuke() |
|
| 405 |
- srv := mkServerFromEngine(eng, t) |
|
| 406 |
- |
|
| 407 |
- // bad image name fails |
|
| 408 |
- if err := srv.Eng.Job("insert", "foo", "https://www.docker.io/static/img/docker-top-logo.png", "/foo").Run(); err == nil {
|
|
| 409 |
- t.Fatal("expected an error and got none")
|
|
| 410 |
- } |
|
| 411 |
- |
|
| 412 |
- // bad url fails |
|
| 413 |
- if err := srv.Eng.Job("insert", unitTestImageID, "http://bad_host_name_that_will_totally_fail.com/", "/foo").Run(); err == nil {
|
|
| 414 |
- t.Fatal("expected an error and got none")
|
|
| 415 |
- } |
|
| 416 |
- |
|
| 417 |
- // success returns nil |
|
| 418 |
- if err := srv.Eng.Job("insert", unitTestImageID, "https://www.docker.io/static/img/docker-top-logo.png", "/foo").Run(); err != nil {
|
|
| 419 |
- t.Fatalf("expected no error, but got %v", err)
|
|
| 420 |
- } |
|
| 421 |
-} |
|
| 422 |
- |
|
| 423 | 401 |
func TestListContainers(t *testing.T) {
|
| 424 | 402 |
eng := NewTestEngine(t) |
| 425 | 403 |
srv := mkServerFromEngine(eng, t) |
| ... | ... |
@@ -138,7 +138,6 @@ func InitServer(job *engine.Job) engine.Status {
|
| 138 | 138 |
"history": srv.ImageHistory, |
| 139 | 139 |
"viz": srv.ImagesViz, |
| 140 | 140 |
"container_copy": srv.ContainerCopy, |
| 141 |
- "insert": srv.ImageInsert, |
|
| 142 | 141 |
"attach": srv.ContainerAttach, |
| 143 | 142 |
"logs": srv.ContainerLogs, |
| 144 | 143 |
"changes": srv.ContainerChanges, |
| ... | ... |
@@ -645,56 +644,6 @@ func (srv *Server) recursiveLoad(eng *engine.Engine, address, tmpImageDir string |
| 645 | 645 |
return nil |
| 646 | 646 |
} |
| 647 | 647 |
|
| 648 |
-// FIXME: 'insert' is deprecated and should be removed in a future version. |
|
| 649 |
-func (srv *Server) ImageInsert(job *engine.Job) engine.Status {
|
|
| 650 |
- fmt.Fprintf(job.Stderr, "Warning: '%s' is deprecated and will be removed in a future version. Please use 'build' and 'ADD' instead.\n", job.Name) |
|
| 651 |
- if len(job.Args) != 3 {
|
|
| 652 |
- return job.Errorf("Usage: %s IMAGE URL PATH\n", job.Name)
|
|
| 653 |
- } |
|
| 654 |
- |
|
| 655 |
- var ( |
|
| 656 |
- name = job.Args[0] |
|
| 657 |
- url = job.Args[1] |
|
| 658 |
- path = job.Args[2] |
|
| 659 |
- ) |
|
| 660 |
- |
|
| 661 |
- sf := utils.NewStreamFormatter(job.GetenvBool("json"))
|
|
| 662 |
- |
|
| 663 |
- out := utils.NewWriteFlusher(job.Stdout) |
|
| 664 |
- img, err := srv.daemon.Repositories().LookupImage(name) |
|
| 665 |
- if err != nil {
|
|
| 666 |
- return job.Error(err) |
|
| 667 |
- } |
|
| 668 |
- |
|
| 669 |
- file, err := utils.Download(url) |
|
| 670 |
- if err != nil {
|
|
| 671 |
- return job.Error(err) |
|
| 672 |
- } |
|
| 673 |
- defer file.Body.Close() |
|
| 674 |
- |
|
| 675 |
- config, _, _, err := runconfig.Parse([]string{img.ID, "echo", "insert", url, path}, srv.daemon.SystemConfig())
|
|
| 676 |
- if err != nil {
|
|
| 677 |
- return job.Error(err) |
|
| 678 |
- } |
|
| 679 |
- |
|
| 680 |
- c, _, err := srv.daemon.Create(config, "") |
|
| 681 |
- if err != nil {
|
|
| 682 |
- return job.Error(err) |
|
| 683 |
- } |
|
| 684 |
- |
|
| 685 |
- if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf, false, utils.TruncateID(img.ID), "Downloading"), path); err != nil {
|
|
| 686 |
- return job.Error(err) |
|
| 687 |
- } |
|
| 688 |
- // FIXME: Handle custom repo, tag comment, author |
|
| 689 |
- img, err = srv.daemon.Commit(c, "", "", img.Comment, img.Author, nil) |
|
| 690 |
- if err != nil {
|
|
| 691 |
- out.Write(sf.FormatError(err)) |
|
| 692 |
- return engine.StatusErr |
|
| 693 |
- } |
|
| 694 |
- out.Write(sf.FormatStatus("", img.ID))
|
|
| 695 |
- return engine.StatusOK |
|
| 696 |
-} |
|
| 697 |
- |
|
| 698 | 648 |
func (srv *Server) ImagesViz(job *engine.Job) engine.Status {
|
| 699 | 649 |
images, _ := srv.daemon.Graph().Map() |
| 700 | 650 |
if images == nil {
|