### SUMMARY
After updating from ansible 2.9.9 to ansible 2.9.10 the delegate on one of our playbooks stopped working

##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
delegate_to

##### ANSIBLE VERSION
It does NOT work with following version of Ansible:
```
# ansible --version
ansible 2.9.10
  config file = /root/.ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Sep 26 2019, 13:23:47) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
# 
```

It works using the following version of Ansible:
```
# ansible --version
ansible 2.9.9
  config file = /root/.ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 2.7.5 (default, Sep 26 2019, 13:23:47) [GCC 4.8.5 20150623 (Red Hat 4.8.5-39)]
#
```

##### CONFIGURATION
```
# ansible-config dump --only-changed
CACHE_PLUGIN(/root/.ansible.cfg) = jsonfile
CACHE_PLUGIN_CONNECTION(/root/.ansible.cfg) = /tmp/ansible_fact_cache
CACHE_PLUGIN_TIMEOUT(/root/.ansible.cfg) = 3600
DEFAULT_CALLBACK_WHITELIST(/root/.ansible.cfg) = [u'timer', u'mail']
DEFAULT_FORKS(/root/.ansible.cfg) = 50
DEFAULT_GATHERING(/root/.ansible.cfg) = smart
DEFAULT_HOST_LIST(/root/.ansible.cfg) = [u'/<inventory script>']
DEFAULT_MANAGED_STR(/root/.ansible.cfg) = Ansible managed, do not manually edit: {file}
DISPLAY_SKIPPED_HOSTS(/root/.ansible.cfg) = False
INTERPRETER_PYTHON(/root/.ansible.cfg) = auto_legacy_silent
RETRY_FILES_SAVE_PATH(/root/.ansible.cfg) = /tmp
TRANSFORM_INVALID_GROUP_CHARS(/root/.ansible.cfg) = ignore
#
```

##### OS / ENVIRONMENT
Red Hat Enterprise Linux Server 7.8

##### STEPS TO REPRODUCE
Before running another task, we need to check if an application is running on the App server using the delegate:
```yaml
  - name: Get app running processes
    shell: "ps aux | grep app | grep -v grep"
    changed_when: False
    check_mode: no
    ignore_errors: yes
    register: app_processes
    delegate_to: "{{ vars[app_server] }}"
```
this is no longer working using Ansible 2.9.10

##### EXPECTED RESULTS
<!--- Describe what you expected to happen when running the steps above -->
```
TASK [Get App running processes] ******************************************************************************************************************************************************************************
ok: [<server hostname>] => {
    "changed": false, 
    "cmd": "ps aux | grep app | grep -v grep", 
    "delta": "0:00:00.018218", 
    "end": "2020-08-04 18:08:32.061806", 
    "invocation": {
        "module_args": {
            "_raw_params": "ps aux | grep app | grep -v grep", 
            "_uses_shell": true, 
            "argv": null, 
            "chdir": null, 
            "creates": null, 
            "executable": null, 
            "removes": null, 
            "stdin": null, 
            "stdin_add_newline": true, 
            "strip_empty_ends": true, 
            "warn": true
        }
    }, 
    "rc": 0, 
    "start": "2020-08-04 18:08:32.043588", 
    "stderr": "", 
    "stderr_lines": [], 
    "stdout": "app running info", 
    "stdout_lines": [
        "app running info"
    ]
}
```
##### ACTUAL RESULTS
It fails with the following error:

```
TASK [Get App running processes] ******************************************************************************************************************************************************************************
The full traceback is:
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 146, in run
    res = self._execute()
  File "/usr/lib/python2.7/site-packages/ansible/executor/task_executor.py", line 654, in _execute
    result = self._handler.run(task_vars=variables)
  File "/usr/lib/python2.7/site-packages/ansible/plugins/action/shell.py", line 27, in run
    result = command_action.run(task_vars=task_vars)
  File "/usr/lib/python2.7/site-packages/ansible/plugins/action/command.py", line 24, in run
    results = merge_hash(results, self._execute_module(task_vars=task_vars, wrap_async=wrap_async))
  File "/usr/lib/python2.7/site-packages/ansible/plugins/action/__init__.py", line 831, in _execute_module
    (module_style, shebang, module_data, module_path) = self._configure_module(module_name=module_name, module_args=module_args, task_vars=task_vars)
  File "/usr/lib/python2.7/site-packages/ansible/plugins/action/__init__.py", line 165, in _configure_module
    use_vars = task_vars.get('ansible_delegated_vars')[self._task.delegate_to]
KeyError: u'<server hostname>'
fatal: [<server hostname running the app>]: FAILED! => {
    "msg": "Unexpected failure during module execution.", 
    "stdout": ""
}
...ignoring
```

_hosts=None, _hosts_all=None, stage='task'):
        '''
        Returns the variables, with optional "context" given via the parameters
        for the play, host, and task (which could possibly result in different
        sets of variables being returned due to the additional context).
        The order of precedence is:
        - play->roles->get_default_vars (if there is a play context)
        - group_vars_files[host] (if there is a host context)
        - host_vars_files[host] (if there is a host context)
        - host->get_vars (if there is a host context)
        - fact_cache[host] (if there is a host context)
        - play vars (if there is a play context)
        - play vars_files (if there's no host context, ignore
          file names that cannot be templated)
        - task->get_vars (if there is a task context)
        - vars_cache[host] (if there is a host context)
        - extra vars
        ``_hosts`` and ``_hosts_all`` should be considered private args, with only internal trusted callers relying
        on the functionality they provide. These arguments may be removed at a later date without a deprecation
        period and without warning.
        '''
        display.debug("in VariableManager get_vars()")
        all_vars = dict()
        magic_variables = self._get_magic_variables(
            play=play,
            host=host,
            task=task,
            include_hostvars=include_hostvars,
            include_delegate_to=include_delegate_to,
            _hosts=_hosts,