Merge "Handle non-valid HEAD"
diff --git a/zuul/launcher/ansiblelaunchserver.py b/zuul/launcher/ansiblelaunchserver.py
index ea0aa4e..40d0d5a 100644
--- a/zuul/launcher/ansiblelaunchserver.py
+++ b/zuul/launcher/ansiblelaunchserver.py
@@ -68,11 +68,16 @@
     MASS_DO = 101
 
     def sendMassDo(self, functions):
-        data = b'\x00'.join([gear.convert_to_bytes(x) for x in functions])
+        names = [gear.convert_to_bytes(x) for x in functions]
+        data = b'\x00'.join(names)
+        new_function_dict = {}
+        for name in names:
+            new_function_dict[name] = gear.FunctionRecord(name)
         self.broadcast_lock.acquire()
         try:
             p = gear.Packet(gear.constants.REQ, self.MASS_DO, data)
             self.broadcast(p)
+            self.functions = new_function_dict
         finally:
             self.broadcast_lock.release()
 
@@ -601,11 +606,6 @@
             self.username = config.get('launcher', 'username')
         else:
             self.username = 'zuul'
-        if self.config.has_option('launcher', 'register_labels'):
-            self.register_labels = config.getboolean('launcher',
-                                                     'register_labels')
-        else:
-            self.register_labels = True
         self.callback_dir = callback_dir
         self.library_dir = library_dir
         self.options = options
@@ -745,9 +745,8 @@
             if not matching_labels:
                 return ret
         ret.add('build:%s' % (job['name'],))
-        if self.register_labels:
-            for label in matching_labels:
-                ret.add('build:%s:%s' % (job['name'], label))
+        for label in matching_labels:
+            ret.add('build:%s:%s' % (job['name'], label))
         return ret
 
     def register(self):
@@ -1188,8 +1187,8 @@
             error_block = []
             variables = []
 
-            shellargs = "ssh-keyscan %s > %s" % (
-                self.host, jobdir.known_hosts)
+            shellargs = "ssh-keyscan {{ ansible_host }} > %s" % (
+                jobdir.known_hosts)
             pre_tasks.append(dict(shell=shellargs,
                              delegate_to='127.0.0.1'))
 
@@ -1269,6 +1268,9 @@
             config.write('gathering = explicit\n')
             config.write('callback_plugins = %s\n' % self.callback_dir)
             config.write('library = %s\n' % self.library_dir)
+            # bump the timeout because busy nodes may take more than
+            # 10s to respond
+            config.write('timeout = 30\n')
 
             config.write('[ssh_connection]\n')
             ssh_args = "-o ControlMaster=auto -o ControlPersist=60s " \