def _get_env_data(self, reload=False):
<EOL>if not reload and getattr(self, "<STR_LIT>", {}):<EOL><INDENT>return getattr(self, "<STR_LIT>")<EOL><DEDENT>env_data = {}<EOL>for supplyer in ENV_SUPPLYER:<EOL><INDENT>env_data.update(supplyer(self))<EOL><DEDENT>env_data = {name: env_data[name] for name in env_data if self.validate_env(name)}<EOL>new_kernels = [env for env in list(env_data.keys()) if env not in list(self._env_data_cache.keys())]<EOL>if new_kernels:<EOL><INDENT>self.log.info("<STR_LIT>", "<STR_LIT:U+002CU+0020>".join(new_kernels))<EOL><DEDENT>self._env_data_cache = env_data<EOL>return env_data<EOL>
Get the data about the available environments.

        env_data is a structure {name -> (resourcedir, kernel spec)}