... | ... |
@@ -356,18 +356,13 @@ func postImagesTag(srv *Server, version float64, w http.ResponseWriter, r *http. |
356 | 356 |
if err := parseForm(r); err != nil { |
357 | 357 |
return err |
358 | 358 |
} |
359 |
- repo := r.Form.Get("repo") |
|
360 |
- tag := r.Form.Get("tag") |
|
361 | 359 |
if vars == nil { |
362 | 360 |
return fmt.Errorf("Missing parameter") |
363 | 361 |
} |
364 |
- name := vars["name"] |
|
365 |
- force, err := getBoolParam(r.Form.Get("force")) |
|
366 |
- if err != nil { |
|
367 |
- return err |
|
368 |
- } |
|
369 | 362 |
|
370 |
- if err := srv.ContainerTag(name, repo, tag, force); err != nil { |
|
363 |
+ job := srv.Eng.Job("tag", vars["name"], r.Form.Get("repo"), r.Form.Get("tag")) |
|
364 |
+ job.Setenv("force", r.Form.Get("force")) |
|
365 |
+ if err := job.Run(); err != nil { |
|
371 | 366 |
return err |
372 | 367 |
} |
373 | 368 |
w.WriteHeader(http.StatusCreated) |
... | ... |
@@ -1120,7 +1120,7 @@ func TestDeleteImages(t *testing.T) { |
1120 | 1120 |
t.Fatal(err) |
1121 | 1121 |
} |
1122 | 1122 |
|
1123 |
- if err := srv.ContainerTag(unitTestImageName, "test", "test", false); err != nil { |
|
1123 |
+ if err := eng.Job("tag", unitTestImageName, "test", "test").Run(); err != nil { |
|
1124 | 1124 |
t.Fatal(err) |
1125 | 1125 |
} |
1126 | 1126 |
images, err := srv.Images(false, "") |
... | ... |
@@ -910,8 +910,7 @@ run [ "$(ls -d /var/run/sshd)" = "/var/run/sshd" ] |
910 | 910 |
t.Fatal(err) |
911 | 911 |
} |
912 | 912 |
|
913 |
- err = mkServerFromEngine(eng, t).ContainerTag(image.ID, "test", "latest", false) |
|
914 |
- if err != nil { |
|
913 |
+ if err := eng.Job("tag", image.ID, "test").Run(); err != nil { |
|
915 | 914 |
t.Fatal(err) |
916 | 915 |
} |
917 | 916 |
|
... | ... |
@@ -8,7 +8,7 @@ import ( |
8 | 8 |
"testing" |
9 | 9 |
) |
10 | 10 |
|
11 |
-func TestContainerTagImageDelete(t *testing.T) { |
|
11 |
+func TestImageTagImageDelete(t *testing.T) { |
|
12 | 12 |
eng := NewTestEngine(t) |
13 | 13 |
defer mkRuntimeFromEngine(eng, t).Nuke() |
14 | 14 |
|
... | ... |
@@ -18,14 +18,15 @@ func TestContainerTagImageDelete(t *testing.T) { |
18 | 18 |
if err != nil { |
19 | 19 |
t.Fatal(err) |
20 | 20 |
} |
21 |
- if err := srv.ContainerTag(unitTestImageName, "utest", "tag1", false); err != nil { |
|
21 |
+ if err := eng.Job("tag", unitTestImageName, "utest", "tag1").Run(); err != nil { |
|
22 | 22 |
t.Fatal(err) |
23 | 23 |
} |
24 | 24 |
|
25 |
- if err := srv.ContainerTag(unitTestImageName, "utest/docker", "tag2", false); err != nil { |
|
25 |
+ if err := eng.Job("tag", unitTestImageName, "utest/docker", "tag2").Run(); err != nil { |
|
26 | 26 |
t.Fatal(err) |
27 | 27 |
} |
28 |
- if err := srv.ContainerTag(unitTestImageName, "utest:5000/docker", "tag3", false); err != nil { |
|
28 |
+ |
|
29 |
+ if err := eng.Job("tag", unitTestImageName, "utest:5000/docker", "tag3").Run(); err != nil { |
|
29 | 30 |
t.Fatal(err) |
30 | 31 |
} |
31 | 32 |
|
... | ... |
@@ -265,8 +266,7 @@ func TestRmi(t *testing.T) { |
265 | 265 |
t.Fatal(err) |
266 | 266 |
} |
267 | 267 |
|
268 |
- err = srv.ContainerTag(imageID, "test", "0.1", false) |
|
269 |
- if err != nil { |
|
268 |
+ if err := eng.Job("tag", imageID, "test", "0.1").Run(); err != nil { |
|
270 | 269 |
t.Fatal(err) |
271 | 270 |
} |
272 | 271 |
|
... | ... |
@@ -329,14 +329,15 @@ func TestImagesFilter(t *testing.T) { |
329 | 329 |
|
330 | 330 |
srv := mkServerFromEngine(eng, t) |
331 | 331 |
|
332 |
- if err := srv.ContainerTag(unitTestImageName, "utest", "tag1", false); err != nil { |
|
332 |
+ if err := eng.Job("tag", unitTestImageName, "utest", "tag1").Run(); err != nil { |
|
333 | 333 |
t.Fatal(err) |
334 | 334 |
} |
335 | 335 |
|
336 |
- if err := srv.ContainerTag(unitTestImageName, "utest/docker", "tag2", false); err != nil { |
|
336 |
+ if err := eng.Job("tag", unitTestImageName, "utest/docker", "tag2").Run(); err != nil { |
|
337 | 337 |
t.Fatal(err) |
338 | 338 |
} |
339 |
- if err := srv.ContainerTag(unitTestImageName, "utest:5000/docker", "tag3", false); err != nil { |
|
339 |
+ |
|
340 |
+ if err := eng.Job("tag", unitTestImageName, "utest:5000/docker", "tag3").Run(); err != nil { |
|
340 | 341 |
t.Fatal(err) |
341 | 342 |
} |
342 | 343 |
|
... | ... |
@@ -95,6 +95,10 @@ func jobInitApi(job *engine.Job) engine.Status { |
95 | 95 |
job.Error(err) |
96 | 96 |
return engine.StatusErr |
97 | 97 |
} |
98 |
+ if err := job.Eng.Register("tag", srv.ImageTag); err != nil { |
|
99 |
+ job.Error(err) |
|
100 |
+ return engine.StatusErr |
|
101 |
+ } |
|
98 | 102 |
return engine.StatusOK |
99 | 103 |
} |
100 | 104 |
|
... | ... |
@@ -769,12 +773,20 @@ func (srv *Server) ContainerCommit(name, repo, tag, author, comment string, conf |
769 | 769 |
return img.ID, err |
770 | 770 |
} |
771 | 771 |
|
772 |
-// FIXME: this should be called ImageTag |
|
773 |
-func (srv *Server) ContainerTag(name, repo, tag string, force bool) error { |
|
774 |
- if err := srv.runtime.repositories.Set(repo, tag, name, force); err != nil { |
|
775 |
- return err |
|
772 |
+func (srv *Server) ImageTag(job *engine.Job) engine.Status { |
|
773 |
+ if len(job.Args) != 2 && len(job.Args) != 3 { |
|
774 |
+ job.Errorf("Usage: %s IMAGE REPOSITORY [TAG]\n", job.Name) |
|
775 |
+ return engine.StatusErr |
|
776 | 776 |
} |
777 |
- return nil |
|
777 |
+ var tag string |
|
778 |
+ if len(job.Args) == 3 { |
|
779 |
+ tag = job.Args[2] |
|
780 |
+ } |
|
781 |
+ if err := srv.runtime.repositories.Set(job.Args[1], tag, job.Args[0], job.GetenvBool("force")); err != nil { |
|
782 |
+ job.Error(err) |
|
783 |
+ return engine.StatusErr |
|
784 |
+ } |
|
785 |
+ return engine.StatusOK |
|
778 | 786 |
} |
779 | 787 |
|
780 | 788 |
func (srv *Server) pullImage(r *registry.Registry, out io.Writer, imgID, endpoint string, token []string, sf *utils.StreamFormatter) error { |