| ... | ... |
@@ -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 {
|