The replace and lineinfile modules do not allow for temporary directories to be set with environment variables. See https://github.com/ansible/ansible/issues/24082 for a similar bug report.

!component =lib/ansible/modules/files/lineinfile.py

However, this is for the facts directory. Here's how it is reproducible:

On the target server we are trying to write to `/etc/ansible/facts.d/cloudera.fact`:
```
# ls -al / | grep etc
drwxr-xr-x. 151 root     root         12288 Mar  9 08:38 etc
# ls -al /etc | grep ansible
drwxr-xr-x    3 root         root           4096 Nov 22  2016 ansible
# ls -al /etc/ansible/ | grep 'facts.d'
drwxr-xr-x    2 root root  4096 Mar 13 11:53 facts.d
# ls -al /etc/ansible/facts.d/ | grep cloudera.fact
-rw-rw-r--  1 cloudera-scm cloudera-scm   10 Mar 13 11:54 cloudera.fact
```

Here is the playbook:
```
cat playbooks/test_svcacct_lineinfile.yml
- hosts: all
  become: True
  become_user: cloudera-scm
  gather_facts: False
  tasks:
    - name: Add lineinfile
      lineinfile:
        line: 'key=value2'
        state: present
        create: False
        path: '/etc/ansible/facts.d/cloudera.fact'
```

This will fail since there is no way to override the directory that lineinfile hard-codes the destination directory as the one which has the file which is being edited, instead of `remote_tmp`  or any of the `['TMP', 'TEMP', 'TMPDIR']` environment variables:

https://github.com/ansible/ansible-modules-core/blob/devel/files/lineinfile.py#L213

which calls

https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/basic.py#L2238

Hardcoding the `dir` param as the argument to the `tempfile.mkstemp()` call.

Is there a way that this can be changed to be able to set a custom temp dir?
if len(b_lines) == index[1]:
            if b_lines[index[1] - 1].rstrip(b'\r\n') != b_line:
                b_lines.append(b_line + b_linesep)
                msg = 'line added'
                changed = True
        elif b_line != b_lines[index[1]].rstrip(b'\n\r'):
            b_lines.insert(index[1], b_line + b_linesep)
            msg = 'line added'
            changed = True
    
    else:
        b_lines.insert(index[1], b_line + b_linesep)
        msg = 'line added'
        changed = True
    if module._diff:
        diff['after'] = to_native(b''.join(b_lines))
    backupdest = ""
    if changed and not module.check_mode:
        if backup and os.path.exists(b_dest):
            backupdest = module.backup_local(dest)
        write_changes(module, b_lines, dest)
    if module.check_mode and not os.path.exists(b_dest):
        module.exit_json(changed=changed, msg=msg, backup=backupdest, diff=diff)
    attr_diff = {}
    msg, changed = check_file_attrs(module, changed, msg, attr_diff)
    attr_diff['before_header'] = '%s (file attributes)' % dest
    attr_diff['after_header'] = '%s (file attributes)' % dest
    difflist = [diff, attr_diff]
    module.exit_json(changed=changed, msg=msg, backup=backupdest, diff=difflist)
def absent(module, dest, regexp, line, backup):