Revert "Put script string in directly instead of in files"
This reverts commit a192814194dd26978f78a38eb52eefc60bf1254d.
Change-Id: Idd17e474d3ac8842855cb47f74d5ba7c331a074e
diff --git a/zuul/launcher/ansiblelaunchserver.py b/zuul/launcher/ansiblelaunchserver.py
index c57a84c..0173426 100644
--- a/zuul/launcher/ansiblelaunchserver.py
+++ b/zuul/launcher/ansiblelaunchserver.py
@@ -12,7 +12,6 @@
# License for the specific language governing permissions and limitations
# under the License.
-import getopt
import json
import logging
import os
@@ -26,6 +25,7 @@
import time
import traceback
import Queue
+import uuid
import gear
import yaml
@@ -52,45 +52,6 @@
return bool(x)
-def deal_with_shebang(data):
- # Ansible shell blocks do not honor shebang lines. That's fine - but
- # we do have a bunch of scripts that have either nothing, -x, -xe,
- # -ex or -eux. Transform those into leading set commands
- if not data.startswith('#!'):
- return (None, data)
- data_lines = data.split('\n')
- data_lines.reverse()
- shebang = data_lines.pop()
- split_line = shebang.split()
- # Strip the # and the !
- executable = split_line[0][2:]
- if executable == '/bin/sh':
- # Ansible default
- executable = None
- if len(split_line) > 1:
- flag_x = False
- flag_e = False
- flag_u = False
- optlist, args = getopt.getopt(split_line[1:], 'uex')
- for opt, _ in optlist:
- if opt == '-x':
- flag_x = True
- elif opt == '-e':
- flag_e = True
- elif opt == '-u':
- flag_u = True
-
- if flag_x:
- data_lines.append('set -x')
- if flag_e:
- data_lines.append('set -e')
- if flag_u:
- data_lines.append('set -u')
- data_lines.reverse()
- data = '\n'.join(data_lines)
- return (executable, data)
-
-
class LaunchGearWorker(gear.Worker):
def __init__(self, *args, **kw):
self.__launch_server = kw.pop('launch_server')
@@ -157,7 +118,9 @@
self.playbook = os.path.join(self.ansible_root, 'playbook')
self.post_playbook = os.path.join(self.ansible_root, 'post_playbook')
self.config = os.path.join(self.ansible_root, 'ansible.cfg')
+ self.script_root = os.path.join(self.ansible_root, 'scripts')
self.ansible_log = os.path.join(self.ansible_root, 'ansible_log.txt')
+ os.makedirs(self.script_root)
self.staging_root = os.path.join(self.root, 'staging')
os.makedirs(self.staging_root)
@@ -1307,16 +1270,30 @@
def _makeBuilderTask(self, jobdir, builder, parameters):
tasks = []
+ script_fn = '%s.sh' % str(uuid.uuid4().hex)
+ script_path = os.path.join(jobdir.script_root, script_fn)
+ with open(script_path, 'w') as script:
+ data = builder['shell']
+ if not data.startswith('#!'):
+ data = '#!/bin/bash -x\n %s' % (data,)
+ script.write(data)
- (executable, shell) = deal_with_shebang(builder['shell'])
+ remote_path = os.path.join('/tmp', script_fn)
+ copy = dict(src=script_path,
+ dest=remote_path,
+ mode=0o555)
+ task = dict(copy=copy)
+ tasks.append(task)
- task = dict(shell=shell)
+ task = dict(command=remote_path)
task['name'] = 'command generated from JJB'
task['environment'] = "{{ zuul.environment }}"
task['args'] = dict(chdir=parameters['WORKSPACE'])
- if executable:
- task['args']['executable'] = executable
+ tasks.append(task)
+ filetask = dict(path=remote_path,
+ state='absent')
+ task = dict(file=filetask)
tasks.append(task)
return tasks