Added a new input that allows used to specify a one-time host when
creating a job. The job will be run against that host once, and the
host will not appear in the "Available hosts" selector.

Risk: medium (deleting records from database)
Visibility: medium (adding an input field)


git-svn-id: http://test.kernel.org/svn/autotest/trunk@1768 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/frontend/afe/rpc_interface.py b/frontend/afe/rpc_interface.py
index 2e03eff..f482530 100644
--- a/frontend/afe/rpc_interface.py
+++ b/frontend/afe/rpc_interface.py
@@ -250,7 +250,8 @@
 
 
 def create_job(name, priority, control_file, control_type, timeout=None,
-               is_synchronous=None, hosts=None, meta_hosts=None):
+               is_synchronous=None, hosts=None, meta_hosts=None,
+               one_time_hosts=None):
     """\
     Create and enqueue a job.
 
@@ -271,10 +272,10 @@
 
     owner = rpc_utils.get_user().login
     # input validation
-    if not hosts and not meta_hosts:
+    if not hosts and not meta_hosts and not one_time_hosts:
         raise model_logic.ValidationError({
-            'arguments' : "You must pass at least one of 'hosts' or "
-                          "'meta_hosts'"
+            'arguments' : "You must pass at least one of 'hosts', "
+                          "'meta_hosts', or 'one_time_hosts'"
             })
 
     requested_host_counts = {}
@@ -289,6 +290,9 @@
         host_objects.append(this_label)
         requested_host_counts.setdefault(this_label.name, 0)
         requested_host_counts[this_label.name] += 1
+    for host in one_time_hosts or []:
+        this_host = models.Host.create_one_time_host(host)
+        host_objects.append(this_host)
 
     # check that each metahost request has enough hosts under the label
     if meta_hosts: