diff --git a/lib/ansible/plugins/action/script.py b/lib/ansible/plugins/action/script.py index a0d66405486..c16fc227c47 100644 --- a/lib/ansible/plugins/action/script.py +++ b/lib/ansible/plugins/action/script.py @@ -26,6 +26,13 @@ from ansible.plugins.action import ActionBase class ActionModule(ActionBase): 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): ''' handler for file transfer operations ''' if task_vars is None: @@ -47,9 +54,7 @@ class ActionModule(ActionBase): # do not run the command if the line contains creates=filename # and the filename already exists. This allows idempotence # of command executions. - res = self._execute_module(module_name='stat', module_args=dict(path=creates), task_vars=task_vars, tmp=tmp, persist_files=True) - stat = res.get('stat', None) - if stat and stat.get('exists', False): + if self._get_remote_raw_stat(creates): return dict(skipped=True, msg=("skipped, since %s exists" % creates)) removes = self._task.args.get('removes') @@ -57,9 +62,7 @@ class ActionModule(ActionBase): # do not run the command if the line contains removes=filename # and the filename does not exist. This allows idempotence # of command executions. - res = self._execute_module(module_name='stat', module_args=dict(path=removes), task_vars=task_vars, tmp=tmp, persist_files=True) - stat = res.get('stat', None) - if stat and not stat.get('exists', False): + if self._get_remote_raw_stat(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 diff --git a/test/integration/roles/test_script/tasks/main.yml b/test/integration/roles/test_script/tasks/main.yml index ffbe40d6007..75a75d9d69e 100644 --- a/test/integration/roles/test_script/tasks/main.yml +++ b/test/integration/roles/test_script/tasks/main.yml @@ -66,4 +66,4 @@ - name: assert that the file was removed by the script assert: that: - - "script_result1.changed != True" + - "script_result1|changed"