2879: Support tag search in "in docker" Job filters.
authorBrett Smith <brett@curoverse.com>
Tue, 17 Jun 2014 17:51:18 +0000 (13:51 -0400)
committerBrett Smith <brett@curoverse.com>
Tue, 17 Jun 2014 17:51:18 +0000 (13:51 -0400)
The search uses the same `reponame:tagname` format used by
`docker tag`.

services/api/app/controllers/arvados/v1/jobs_controller.rb
services/api/test/functional/arvados/v1/job_reuse_controller_test.rb

index 20b809bb5eb344444cc0cc7dabf3a046c8a8f9dc..74bea41b1e1746df8f9b67d2852bd30710becf89 100644 (file)
@@ -190,7 +190,7 @@ class Arvados::V1::JobsController < ApplicationController
         false
       when ["docker_image_locator", "in docker"], ["docker_image_locator", "not in docker"]
         filter[1].sub!(/ docker$/, '')
-        filter[2] = Collection.uuids_for_docker_image(filter[2])
+        filter[2] = Collection.uuids_for_docker_image(*filter[2].split(':', 2))
         true
       else
         true
index 450093c75bb08e1773103dd12dda52b2b651d49d..5cdf6c75b55ef3c3ad5f141e79139c01d1c2c17e 100644 (file)
@@ -413,6 +413,34 @@ class Arvados::V1::JobReuseControllerTest < ActionController::TestCase
     end
   end
 
+  test "reuse Job with Docker image repo+tag" do
+    filter_h = BASE_FILTERS.
+      merge("script_version" =>
+              ["=", "4fe459abe02d9b365932b8f5dc419439ab4e2577"],
+            "docker_image_locator" =>
+              ["in docker", links(:docker_image_collection_tag2).name])
+    post(:create, {
+           job: {
+             script: "hash",
+             script_version: "4fe459abe02d9b365932b8f5dc419439ab4e2577",
+             repository: "foo",
+             script_parameters: {
+               input: 'fa7aeb5140e2848d39b416daeef4ffc5+45',
+               an_integer: '1'
+             },
+           },
+           filters: filters_from_hash(filter_h),
+           find_or_create: true,
+         })
+    assert_response :success
+    new_job = assigns(:object)
+    assert_not_nil new_job
+    target_job = jobs(:previous_docker_job_run)
+    [:uuid, :script_version, :docker_image_locator].each do |attr|
+      assert_equal(target_job.send(attr), new_job.send(attr))
+    end
+  end
+
   test "new job with unknown Docker image filter" do
     filter_h = BASE_FILTERS.
       merge("docker_image_locator" => ["in docker", "_nonesuchname_"])