[Autotest] Pass devserver selection from create_suite_job to dynamic_suite

Pass the selected devserver url from create_suite_job to dynamic_suite as an
argument in dynamic_suite.reimage_and_run method. Update method call of
reimage_and_run in all suite control files.

BUG=chromium:236540
TEST=tested with dev_harness.py in local workstation,
test run_suite for au suite in local setup.
test with manual update on job_repo_url:
1. start a dummy suite
2. after try job is finished, confirm the database has right job_repo_url in
afe_host_attributes
3. run sql query to modify the job_repo_url:
update chromeos_autotest_db.afe_host_attributes
set value='http://172.17.40.27:8082/static/archive/lumpy-release/R30-4342.0.0/'
where host_id=1
4. monitor the jobs in the suite, check autoserv.DEBUG log for job_repo_url
being updated:
|Devserver url changed, new devserver is http://172.22.73.38:8080old devserver
was http://172.22.73.138:8080|

DEPLOY=apache

Change-Id: I913f8f855a8d86335dd7ce708ea46046494e09d8
Reviewed-on: https://gerrit.chromium.org/gerrit/60722
Commit-Queue: Dan Shi <dshi@chromium.org>
Reviewed-by: Dan Shi <dshi@chromium.org>
Tested-by: Dan Shi <dshi@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/64239
Reviewed-by: Prashanth Balasubramanian <beeps@chromium.org>
diff --git a/server/cros/dynamic_suite/dynamic_suite.py b/server/cros/dynamic_suite/dynamic_suite.py
index dbdc19f..6b1fd56 100644
--- a/server/cros/dynamic_suite/dynamic_suite.py
+++ b/server/cros/dynamic_suite/dynamic_suite.py
@@ -43,7 +43,8 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='bvt', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    skip_reimage=dynamic_suite.skip_reimage(globals()))
+    skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
 
 This will -- at runtime -- find all control files that contain "bvt" in their
 "SUITE=" clause, schedule jobs to reimage |num| or less devices in the
@@ -325,7 +326,7 @@
                  try_job_timeout_mins=DEFAULT_TRY_JOB_TIMEOUT_MINS,
                  suite_dependencies=None,
                  reimage_type=constants.REIMAGE_TYPE_OS,
-                 bug_template={}, **dargs):
+                 bug_template={}, devserver_url=None, **dargs):
         """
         Vets arguments for reimage_and_run() and populates self with supplied
         values.
@@ -364,6 +365,7 @@
                              should be done before running tests.
         @param bug_template: A template dictionary specifying the default bug
                              filing options for failures in this suite.
+        @param devserver_url: url to the selected devserver.
         @param **dargs: these arguments will be ignored.  This allows us to
                         deprecate and remove arguments in ToT while not
                         breaking branch builds.
@@ -379,7 +381,10 @@
                     "reimage_and_run() needs %s=<%r>" % (key, expected))
         self.build = build
         self.board = 'board:%s' % board
-        self.devserver = dev_server.ImageServer.resolve(self.build)
+        if devserver_url:
+            self.devserver = dev_server.ImageServer(devserver_url)
+        else:
+            self.devserver = dev_server.ImageServer.resolve(self.build)
         self.name = name
         self.job = job
         if pool:
@@ -447,6 +452,7 @@
                          suite wishes to have done to the machines it will
                          run on. Valid arguments are given as constants in this
                          file.
+    @param devserver_url: url to the selected devserver.
     @raises AsynchronousBuildFailure: if there was an issue finishing staging
                                       from the devserver.
     @raises MalformedDependenciesException: if the dependency_info file for
diff --git a/server/hosts/site_host.py b/server/hosts/site_host.py
index a2ba95d..1a2b248 100644
--- a/server/hosts/site_host.py
+++ b/server/hosts/site_host.py
@@ -312,6 +312,7 @@
 
         @param image_name: The name of the image e.g.
                 lumpy-release/R27-3837.0.0
+
         """
         if not self._host_in_AFE():
             return
@@ -473,21 +474,30 @@
         @raises autoupdater.ChromiumOSError
 
         """
-        if not update_url and self._parser.options.image:
-            requested_build = self._parser.options.image
-            if requested_build.startswith('http://'):
-                update_url = requested_build
+        if update_url:
+            logging.debug('update url is set to %s', update_url)
+        else:
+            logging.debug('update url is not set, resolving...')
+            if self._parser.options.image:
+                requested_build = self._parser.options.image
+                if requested_build.startswith('http://'):
+                    update_url = requested_build
+                    logging.debug('update url is retrieved from requested_build'
+                                  ': %s', update_url)
+                else:
+                    # Try to stage any build that does not start with
+                    # http:// on the devservers defined in
+                    # global_config.ini.
+                    update_url = self._stage_image_for_update(requested_build)
+                    logging.debug('Build staged, and update_url is set to: %s',
+                                  update_url)
+            elif repair:
+                update_url = self._stage_image_for_update()
+                logging.debug('Build staged, and update_url is set to: %s',
+                              update_url)
             else:
-                # Try to stage any build that does not start with http:// on
-                # the devservers defined in global_config.ini.
-                update_url = self._stage_build_and_return_update_url(
-                        requested_build)
-        elif not update_url and not repair:
-            raise autoupdater.ChromiumOSError(
-                'Update failed. No update URL provided.')
-        elif not update_url and repair:
-            update_url = self._stage_build_and_return_update_url(
-                    self.get_repair_image_name())
+                raise autoupdater.ChromiumOSError(
+                    'Update failed. No update URL provided.')
 
         if repair:
             # In case the system is in a bad state, we always reboot the machine
diff --git a/test_suites/control.PGO_record b/test_suites/control.PGO_record
index 6f3536c..cb13467 100644
--- a/test_suites/control.PGO_record
+++ b/test_suites/control.PGO_record
@@ -50,4 +50,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='PGO_record', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=True, skip_reimage=False, bug_template=_BUG_TEMPLATE)
+    file_bugs=True, skip_reimage=False, bug_template=_BUG_TEMPLATE,
+    devserver_url=devserver_url)
diff --git a/test_suites/control.au b/test_suites/control.au
index 9ac2b720..30d672a 100644
--- a/test_suites/control.au
+++ b/test_suites/control.au
@@ -43,4 +43,4 @@
     build=build, board=board, name='au', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=file_bugs, skip_reimage=False,
-    max_runtime_mins=60)
+    max_runtime_mins=60, devserver_url=devserver_url)
diff --git a/test_suites/control.audio b/test_suites/control.audio
index 474a3e3..b23ffd0 100644
--- a/test_suites/control.audio
+++ b/test_suites/control.audio
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='audio', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.browsertests b/test_suites/control.browsertests
index 89e3bc7..94b3eb4 100644
--- a/test_suites/control.browsertests
+++ b/test_suites/control.browsertests
@@ -32,4 +32,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='browsertests', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.bvt b/test_suites/control.bvt
index 5498bb4..79f7349 100644
--- a/test_suites/control.bvt
+++ b/test_suites/control.bvt
@@ -45,4 +45,4 @@
     build=build, board=board, name='bvt', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    max_runtime_mins=20)
+    max_runtime_mins=20, devserver_url=devserver_url)
diff --git a/test_suites/control.dummy b/test_suites/control.dummy
index b46dc7d..5b4beca 100644
--- a/test_suites/control.dummy
+++ b/test_suites/control.dummy
@@ -23,4 +23,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='dummy', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.dummyflake b/test_suites/control.dummyflake
index d3ac455..98673c8 100644
--- a/test_suites/control.dummyflake
+++ b/test_suites/control.dummyflake
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='dummyflake', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.enterprise b/test_suites/control.enterprise
index 4b7234e..650c012 100644
--- a/test_suites/control.enterprise
+++ b/test_suites/control.enterprise
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='enterprise', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.enterprise_enroll b/test_suites/control.enterprise_enroll
index ca00c69..99de171 100644
--- a/test_suites/control.enterprise_enroll
+++ b/test_suites/control.enterprise_enroll
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='enterprise_enroll', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.faft_dev b/test_suites/control.faft_dev
index 49fc17c..7e16234 100644
--- a/test_suites/control.faft_dev
+++ b/test_suites/control.faft_dev
@@ -38,4 +38,4 @@
     build=build, board=board, name='faft_dev', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    firmware_reimage=True)
+    firmware_reimage=True, devserver_url=devserver_url)
diff --git a/test_suites/control.faft_ec b/test_suites/control.faft_ec
index 8336e04..9328134 100644
--- a/test_suites/control.faft_ec
+++ b/test_suites/control.faft_ec
@@ -36,4 +36,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='faft_ec', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.faft_normal b/test_suites/control.faft_normal
index cba95e3..501943b 100644
--- a/test_suites/control.faft_normal
+++ b/test_suites/control.faft_normal
@@ -38,4 +38,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='faft_normal', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.graphics b/test_suites/control.graphics
index e404458..efd9c7f 100644
--- a/test_suites/control.graphics
+++ b/test_suites/control.graphics
@@ -42,4 +42,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='graphics', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.graphicsGLES b/test_suites/control.graphicsGLES
index 5a8cd25..85e84e0 100644
--- a/test_suites/control.graphicsGLES
+++ b/test_suites/control.graphicsGLES
@@ -38,4 +38,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='graphicsGLES', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.graphics_per-build b/test_suites/control.graphics_per-build
index cee85c5..8761249 100644
--- a/test_suites/control.graphics_per-build
+++ b/test_suites/control.graphics_per-build
@@ -37,4 +37,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='graphics_per-build', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.hwqual b/test_suites/control.hwqual
index 73f7797..dd1165d 100644
--- a/test_suites/control.hwqual
+++ b/test_suites/control.hwqual
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='hwqual', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.kernel_daily_benchmarks b/test_suites/control.kernel_daily_benchmarks
index dc9cdec..1a438ff 100644
--- a/test_suites/control.kernel_daily_benchmarks
+++ b/test_suites/control.kernel_daily_benchmarks
@@ -31,4 +31,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='kernel_daily_benchmarks', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.kernel_daily_regression b/test_suites/control.kernel_daily_regression
index a94f436..40270a7 100644
--- a/test_suites/control.kernel_daily_regression
+++ b/test_suites/control.kernel_daily_regression
@@ -31,4 +31,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='kernel_daily_regression', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.kernel_per-build_benchmarks b/test_suites/control.kernel_per-build_benchmarks
index a5b190c..191713a 100644
--- a/test_suites/control.kernel_per-build_benchmarks
+++ b/test_suites/control.kernel_per-build_benchmarks
@@ -34,4 +34,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='kernel_per-build_benchmarks', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.kernel_per-build_regression b/test_suites/control.kernel_per-build_regression
index 7c881e4..9f41920 100644
--- a/test_suites/control.kernel_per-build_regression
+++ b/test_suites/control.kernel_per-build_regression
@@ -36,4 +36,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='kernel_per-build_regression', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.kernel_weekly_regression b/test_suites/control.kernel_weekly_regression
index 4891632..ce247a5 100644
--- a/test_suites/control.kernel_weekly_regression
+++ b/test_suites/control.kernel_weekly_regression
@@ -32,4 +32,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='kernel_weekly_regression', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.link_perf b/test_suites/control.link_perf
index bb6bab1..8805c47 100644
--- a/test_suites/control.link_perf
+++ b/test_suites/control.link_perf
@@ -19,4 +19,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='link_perf', job=job, pool=pool, num=num,
     add_experimental=True, file_bugs=file_bugs,
-    skip_reimage=dynamic_suite.skip_reimage(globals()))
+    skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.network3g b/test_suites/control.network3g
index 31f159b..86bae0d 100644
--- a/test_suites/control.network3g
+++ b/test_suites/control.network3g
@@ -26,4 +26,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='network3g', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.network3g_gobi b/test_suites/control.network3g_gobi
index b3f8a1d..b27b468 100644
--- a/test_suites/control.network3g_gobi
+++ b/test_suites/control.network3g_gobi
@@ -26,4 +26,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='network3g_gobi', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.network3g_tmobile b/test_suites/control.network3g_tmobile
index cd69c3b..085cbb3 100644
--- a/test_suites/control.network3g_tmobile
+++ b/test_suites/control.network3g_tmobile
@@ -27,4 +27,4 @@
     build=build, board=board, name='network3g_tmobile', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    suite_dependencies='carrier:tmobile')
+    suite_dependencies='carrier:tmobile', devserver_url=devserver_url)
diff --git a/test_suites/control.network3g_verizon b/test_suites/control.network3g_verizon
index 96d43d3..0c3100a 100644
--- a/test_suites/control.network3g_verizon
+++ b/test_suites/control.network3g_verizon
@@ -27,4 +27,4 @@
     build=build, board=board, name='network3g_verizon', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    suite_dependencies='carrier:verizon')
+    suite_dependencies='carrier:verizon', devserver_url=devserver_url)
diff --git a/test_suites/control.network_wifi b/test_suites/control.network_wifi
index f0a121b..6f776fe 100644
--- a/test_suites/control.network_wifi
+++ b/test_suites/control.network_wifi
@@ -32,4 +32,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='network_wifi', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.onccell b/test_suites/control.onccell
index 11eb728..53cf65c 100644
--- a/test_suites/control.onccell
+++ b/test_suites/control.onccell
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='onccell', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.pagecycler b/test_suites/control.pagecycler
index 7de01b2..ffd96b0 100644
--- a/test_suites/control.pagecycler
+++ b/test_suites/control.pagecycler
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='pagecycler', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.perf_v2 b/test_suites/control.perf_v2
index 3bf138e..d4dd934 100644
--- a/test_suites/control.perf_v2
+++ b/test_suites/control.perf_v2
@@ -45,4 +45,4 @@
     build=build, board=board, name='perf_v2', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=False, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    bug_template=_BUG_TEMPLATE)
+    bug_template=_BUG_TEMPLATE, devserver_url=devserver_url)
diff --git a/test_suites/control.perfalerts b/test_suites/control.perfalerts
index e7b3e67..f889f9c 100644
--- a/test_suites/control.perfalerts
+++ b/test_suites/control.perfalerts
@@ -32,4 +32,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='perfalerts', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.power_build b/test_suites/control.power_build
index 2d4499e..05aae67 100644
--- a/test_suites/control.power_build
+++ b/test_suites/control.power_build
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='power_build', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.power_daily b/test_suites/control.power_daily
index 5bfc2fe..4db6d06 100644
--- a/test_suites/control.power_daily
+++ b/test_suites/control.power_daily
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='power_daily', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.power_requirements b/test_suites/control.power_requirements
index b177435..8dd7efc 100644
--- a/test_suites/control.power_requirements
+++ b/test_suites/control.power_requirements
@@ -28,4 +28,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='power_requirements', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.pyauto b/test_suites/control.pyauto
index 4625226..185a8ad 100644
--- a/test_suites/control.pyauto
+++ b/test_suites/control.pyauto
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='pyauto', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.pyauto_basic b/test_suites/control.pyauto_basic
index 6aa9c04..c957388 100644
--- a/test_suites/control.pyauto_basic
+++ b/test_suites/control.pyauto_basic
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='pyauto_basic', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.pyauto_perf b/test_suites/control.pyauto_perf
index 8010917..1cd1a14 100644
--- a/test_suites/control.pyauto_perf
+++ b/test_suites/control.pyauto_perf
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='pyauto_perf', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.regression b/test_suites/control.regression
index f6d7c4f..282b300 100644
--- a/test_suites/control.regression
+++ b/test_suites/control.regression
@@ -31,4 +31,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='regression', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.security b/test_suites/control.security
index 574f805..c4860e7 100755
--- a/test_suites/control.security
+++ b/test_suites/control.security
@@ -33,4 +33,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='security', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.servo b/test_suites/control.servo
index e9ed8b7..fbf2c7c 100644
--- a/test_suites/control.servo
+++ b/test_suites/control.servo
@@ -23,4 +23,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='servo', job=job, pool=pool, num=num,
     add_experimental=True, file_bugs=file_bugs,
-    skip_reimage=dynamic_suite.skip_reimage(globals()))
+    skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.smoke b/test_suites/control.smoke
index 38248d1..f94302a 100644
--- a/test_suites/control.smoke
+++ b/test_suites/control.smoke
@@ -31,4 +31,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='smoke', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.sync b/test_suites/control.sync
index dc6fffe..8fae350 100644
--- a/test_suites/control.sync
+++ b/test_suites/control.sync
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='sync', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.vda b/test_suites/control.vda
index 8baf8dc..48dddac 100644
--- a/test_suites/control.vda
+++ b/test_suites/control.vda
@@ -34,4 +34,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='vda', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.video b/test_suites/control.video
index 26db9f8..bfebbf2 100644
--- a/test_suites/control.video
+++ b/test_suites/control.video
@@ -30,4 +30,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='video', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.video_weekly_regression b/test_suites/control.video_weekly_regression
index 6d3db01..eeac0c9 100644
--- a/test_suites/control.video_weekly_regression
+++ b/test_suites/control.video_weekly_regression
@@ -32,4 +32,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='video_weekly_regression', job=job,
     pool=pool, check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.webrtc b/test_suites/control.webrtc
index 74f4142..84b124c 100644
--- a/test_suites/control.webrtc
+++ b/test_suites/control.webrtc
@@ -42,4 +42,4 @@
     build=build, board=board, name='webrtc', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
     file_bugs=True, skip_reimage=dynamic_suite.skip_reimage(globals()),
-    bug_template=_BUG_TEMPLATE)
+    bug_template=_BUG_TEMPLATE, devserver_url=devserver_url)
diff --git a/test_suites/control.wificell b/test_suites/control.wificell
index 1e5a840..5e5f217 100644
--- a/test_suites/control.wificell
+++ b/test_suites/control.wificell
@@ -27,4 +27,5 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='wificell', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()))
+    file_bugs=file_bugs, skip_reimage=dynamic_suite.skip_reimage(globals()),
+    devserver_url=devserver_url)
diff --git a/test_suites/control.wifichaos b/test_suites/control.wifichaos
index ac3e71e..3bd01c2 100644
--- a/test_suites/control.wifichaos
+++ b/test_suites/control.wifichaos
@@ -27,4 +27,4 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='wifichaos', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs)
+    file_bugs=file_bugs, devserver_url=devserver_url)
diff --git a/test_suites/control.wifirvr b/test_suites/control.wifirvr
index 0f4ceb9..729b222 100644
--- a/test_suites/control.wifirvr
+++ b/test_suites/control.wifirvr
@@ -26,4 +26,4 @@
 dynamic_suite.reimage_and_run(
     build=build, board=board, name='wifirvr', job=job, pool=pool,
     check_hosts=check_hosts, add_experimental=True, num=num,
-    file_bugs=file_bugs, skip_reimage=True)
+    file_bugs=file_bugs, skip_reimage=True, devserver_url=devserver_url)
diff --git a/test_suites/dev_harness.py b/test_suites/dev_harness.py
index 336c438..622a268 100644
--- a/test_suites/dev_harness.py
+++ b/test_suites/dev_harness.py
@@ -56,5 +56,6 @@
     AFE.set_host_attribute(constants.JOB_REPO_URL, repo_url, hostname=m)
 else:
     ds.trigger_download(new_globals['build'])
+new_globals['devserver_url'] = ds.url()
 
 execfile(os.path.join(job.autodir, SUITE_CONTROL_FILE), new_globals, locals())