Don't use bash eval for Linux.runCommand

Linux.runCommand method used to pass script
in a command line argument and evaluated it using
"eval". This approach failed when the script contained
input redirection.

With this fix script is passed as a file which is specified
as an entry point in execution plan.
Also we supported explicit files in execution plan but not
for the script entry point. This was fixed as well.

Change-Id: Ifd15fc57b08e33ed61cd2765613cd705ce12a5f2
Closes-Bug: #1562954
This commit is contained in:
Stan Lagun 2016-03-31 17:09:19 +03:00 committed by Kirill Zaitsev
parent e59ece4f92
commit f1956eb624
3 changed files with 14 additions and 14 deletions

View File

@ -2,18 +2,19 @@ FormatVersion: 2.0.0
Version: 1.0.0
Name: $planName
Parameters:
command: $command
Body: return runCommand()
Body: |
return runCommand("{0}".format(args.command))
Files:
scriptFile:
BodyType: Text
Name: scriptFile.sh
Body: $command
Scripts:
runCommand:
Type: Application
Version: 1.0.0
EntryPoint: runCommand.sh
Files: []
EntryPoint: scriptFile.sh
Options:
captureStdout: $captureStdout
captureStderr: $captureStderr

View File

@ -1,3 +0,0 @@
#!/bin/bash
eval ${*}

View File

@ -243,11 +243,13 @@ class Agent(object):
if 'EntryPoint' not in script:
raise ValueError('No entry point in script ' + name)
if 'Application' in script['Type']:
script['EntryPoint'] = self._place_file(scripts_folder,
script['EntryPoint'],
template, resources,
files)
if 'Application' == script['Type']:
if script['EntryPoint'] not in files:
script['EntryPoint'] = self._place_file(
scripts_folder, script['EntryPoint'],
template, resources, files)
else:
script['EntryPoint'] = files[script['EntryPoint']]
if 'Files' in script:
for i, file in enumerate(script['Files']):
if self._get_name(file) not in files: