diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index c49abf17644..44dda4bc945 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -639,7 +639,7 @@ class Runner(object): cache = self.setup_cache.get(host, {}) module_name = utils.template(self.module_name, cache, self.setup_cache) - tmp = self._get_tmp_path(conn) + tmp = self._make_tmp_path(conn) result = None if self.module_name == 'copy': @@ -691,21 +691,21 @@ class Runner(object): # ***************************************************** - def _get_tmp_path(self, conn): - ''' gets a temporary path on a remote box ''' + def _make_tmp_path(self, conn): + ''' make and return a temporary path on a remote box ''' - basetmp = C.DEFAULT_REMOTE_TMP + basefile = 'ansible-%s-%s' % (time.time(), random.randint(0, 2**48)) + basetmp = os.path.join(C.DEFAULT_REMOTE_TMP, basefile) if self.remote_user == 'root': - basetmp ="/var/tmp" - cmd = "mktemp -d %s/ansible.XXXXXX" % basetmp + basetmp = os.path.join('/var/tmp', basefile) + + cmd = 'mkdir -p %s' % basetmp if self.remote_user != 'root': - cmd = "mkdir -p %s && %s" % (basetmp, cmd) + cmd += ' && chmod a+x %s' % basetmp + cmd += ' && echo %s' % basetmp result = self._low_level_exec_command(conn, cmd, None, sudoable=False) cleaned = result.split("\n")[0].strip() + '/' - if self.remote_user != 'root': - cmd = 'chmod a+x %s' % cleaned - self._low_level_exec_command(conn, cmd, None, sudoable=False) return cleaned @@ -720,7 +720,7 @@ class Runner(object): if not os.path.exists(in_path): raise errors.AnsibleFileNotFound("module not found: %s" % in_path) - out_path = tmp + module + out_path = os.path.join(tmp, module) conn.put_file(in_path, out_path) return out_path