# Buggy code
def run(self):
    """
    Run the master service!
    """
    if salt.utils.is_windows():
        # Calculate function references since they can't be pickled.
        self.utils = salt.loader.utils(self.opts)
        if self.opts["__role"] == "master":
            self.runners = salt.loader.runner(self.opts, utils=self.utils)
        else:
            self.runners = []
        self.funcs = salt.loader.minion_mods(self.opts, utils=self.utils)

    self.engine = salt.loader.engines(
        self.opts, self.funcs, self.runners, proxy=self.proxy
    )
    kwargs = self.config or {}
    try:
        self.engine[self.fun](**kwargs)
    except Exception as exc:
        log.critical(
            "Engine {0} could not be started! Error: {1}".format(self.engine, exc)
        )


# 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 run(self):
    """
    Run the master service!
    """
    if salt.utils.is_windows():
        # Calculate function references since they can't be pickled.
        self.utils = salt.loader.utils(self.opts, proxy=self.proxy)
        if self.opts["__role"] == "master":
            self.runners = salt.loader.runner(self.opts, utils=self.utils)
        else:
            self.runners = []
        self.funcs = salt.loader.minion_mods(
            self.opts, utils=self.utils, proxy=self.proxy
        )

    self.engine = salt.loader.engines(
        self.opts, self.funcs, self.runners, proxy=self.proxy
    )
    kwargs = self.config or {}
    try:
        self.engine[self.fun](**kwargs)
    except Exception as exc:
        log.critical(
            "Engine {0} could not be started! Error: {1}".format(self.engine, exc)
        )