Merge pull request #15168 from bcoca/script_exists_fix

Script exists fix
This commit is contained in:
Brian Coca 2016-03-26 22:08:13 -07:00
commit c6c3fd79c2
4 changed files with 29 additions and 8 deletions

View file

@ -92,6 +92,13 @@ class ActionBase(with_metaclass(ABCMeta, object)):
) )
return results return results
def _remote_file_exists(self, path):
cmd = self._connection._shell.exists(path)
result = self._low_level_execute_command(cmd=cmd, sudoable=True)
if result['rc'] == 0:
return True
return False
def _configure_module(self, module_name, module_args, task_vars=None): def _configure_module(self, module_name, module_args, task_vars=None):
''' '''
Handles the loading and templating of the module code through the Handles the loading and templating of the module code through the

View file

@ -26,12 +26,6 @@ from ansible.plugins.action import ActionBase
class ActionModule(ActionBase): class ActionModule(ActionBase):
TRANSFERS_FILES = True TRANSFERS_FILES = True
def _get_remote_raw_stat(self, path):
cmd = ['test', '-e', path]
result = self._low_level_execute_command(cmd=' '.join(cmd), sudoable=True)
if result['rc'] == 0:
return True
return False
def run(self, tmp=None, task_vars=None): def run(self, tmp=None, task_vars=None):
''' handler for file transfer operations ''' ''' handler for file transfer operations '''
@ -54,7 +48,7 @@ class ActionModule(ActionBase):
# do not run the command if the line contains creates=filename # do not run the command if the line contains creates=filename
# and the filename already exists. This allows idempotence # and the filename already exists. This allows idempotence
# of command executions. # of command executions.
if self._get_remote_raw_stat(creates): if self._remote_file_exists(creates):
return dict(skipped=True, msg=("skipped, since %s exists" % creates)) return dict(skipped=True, msg=("skipped, since %s exists" % creates))
removes = self._task.args.get('removes') removes = self._task.args.get('removes')
@ -62,7 +56,7 @@ class ActionModule(ActionBase):
# do not run the command if the line contains removes=filename # do not run the command if the line contains removes=filename
# and the filename does not exist. This allows idempotence # and the filename does not exist. This allows idempotence
# of command executions. # of command executions.
if self._get_remote_raw_stat(removes): if self._remote_file_exists(removes):
return dict(skipped=True, msg=("skipped, since %s does not exist" % removes)) return dict(skipped=True, msg=("skipped, since %s does not exist" % removes))
# the script name is the first item in the raw params, so we split it # the script name is the first item in the raw params, so we split it

View file

@ -94,6 +94,10 @@ class ShellBase(object):
cmd += '-r ' cmd += '-r '
return cmd + "%s %s" % (path, self._SHELL_REDIRECT_ALLNULL) return cmd + "%s %s" % (path, self._SHELL_REDIRECT_ALLNULL)
def exists(self, path):
cmd = ['test', '-e', pipes.quote(path)]
return ' '.join(cmd)
def mkdtemp(self, basefile=None, system=False, mode=None): def mkdtemp(self, basefile=None, system=False, mode=None):
if not basefile: if not basefile:
basefile = 'ansible-tmp-%s-%s' % (time.time(), random.randint(0, 2**48)) basefile = 'ansible-tmp-%s-%s' % (time.time(), random.randint(0, 2**48))

View file

@ -94,6 +94,22 @@ class ShellModule(object):
script = 'Write-Host "%s"' % self._escape(user_home_path) script = 'Write-Host "%s"' % self._escape(user_home_path)
return self._encode_script(script) return self._encode_script(script)
def exists(self, path):
path = self._escape(self._unquote(path))
script = '''
If (Test-Path "%s")
{
$res = 0;
}
Else
{
$res = 1;
}
Write-Host "$res";
Exit $res;
''' % path
return self._encode_script(script)
def checksum(self, path, *args, **kwargs): def checksum(self, path, *args, **kwargs):
path = self._escape(self._unquote(path)) path = self._escape(self._unquote(path))
script = ''' script = '''