# Buggy code
def module_refresh(self):
    """
    Refresh all the modules
    """
    log.debug("Refreshing modules...")
    if self.opts["grains"].get("os") != "MacOS":
        # In case a package has been installed into the current python
        # process 'site-packages', the 'site' module needs to be reloaded in
        # order for the newly installed package to be importable.
        try:
            reload(site)
        except RuntimeError:
            log.error(
                "Error encountered during module reload. Modules were not reloaded."
            )
        except TypeError:
            log.error(
                "Error encountered during module reload. Modules were not reloaded."
            )
    self.load_modules(proxy=self.proxy)
    if not self.opts.get("local", False) and self.opts.get("multiprocessing", True):
        self.functions["saltutil.refresh_modules"]()


# Traceback (KeyError)
Invoking the same function in state files

$ salt cluster state.show_highstate
cluster:
- Rendering SLS 'base:esxcluster' failed: Jinja error: 'esxcluster.get_details'
Traceback (most recent call last):
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/utils/templates.py", line 368, in render_jinja_tmpl
output = template.render(**decoded_context)
File ".../jinja2/2.7.3-py27/lib/Jinja2-2.7.3-py2.7.egg/jinja2/environment.py", line 969, in render
return self.environment.handle_exception(exc_info, True)
File ".../jinja2/2.7.3-py27/lib/Jinja2-2.7.3-py2.7.egg/jinja2/environment.py", line 742, in handle_exception
reraise(exc_type, exc_value, tb)
File "<template>", line 29, in top-level template code
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/modules/vsphere.py", line 262, in __supports_proxies
return fn(*args, **clean_kwargs(**kwargs))
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/modules/vsphere.py", line 295, in _gets_service_instance_via_proxy
connection_details = _get_proxy_connection_details()
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/modules/vsphere.py", line 233, in _get_proxy_connection_details
details = __salt__['esxcluster.get_details']()
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/modules/esxcluster.py", line 29, in get_details
return __proxy__['esxcluster.get_details']()
File "/var/tmp/bleotu/virtual/saltstack/install/common/lib/salt/utils/context.py", line 191, in __getitem__
return self._dict()[key]
KeyError: 'esxcluster.get_details'

; line 29

---
[...]
esxcluster.cluster_configured:
- {{ cluster_config }}
{%- endif %}

{%- if esxcluster_states_enabled.get('cluster_vsan_datastore') %}
{%- if pillar.get('vsan', {}).get('datastore_name') and     <======================
**salt['vsphere.get_cluster_vsan_data']()**.get('datastore_name') %}
cluster_vsan_datastore:
esxcluster.vsan_datastore_configured:
- datastore_name : {{ pillar['vsan']['datastore_name'] }}
{%- endif %}
[...]
---

# Fixed code
def module_refresh(self):
    """
    Refresh all the modules
    """
    log.debug("Refreshing modules...")
    if self.opts["grains"].get("os") != "MacOS":
        # In case a package has been installed into the current python
        # process 'site-packages', the 'site' module needs to be reloaded in
        # order for the newly installed package to be importable.
        try:
            reload(site)
        except RuntimeError:
            log.error(
                "Error encountered during module reload. Modules were not reloaded."
            )
        except TypeError:
            log.error(
                "Error encountered during module reload. Modules were not reloaded."
            )
    self.load_modules()
    if not self.opts.get("local", False) and self.opts.get("multiprocessing", True):
        self.functions["saltutil.refresh_modules"]()