插件类型说明
ESR常用的的插件有2类,一类是js相关的http插件,通常都是实现一些esr的管理相关操作,例如bigdesk,head,kopf,gui等,基本上安装2个就能够满足日常的管理功能,推进使用bigdesk和head。另外一些是功能扩展类的插件,例如analysis-ik,delete-by-query,discovery-multicast等,此类插件大多采用java开放,实现了esr的plugin的接口。
插件配置
js管理类插件
这类插件只需要一个插件描述文件:plugin-descriptor.properties和一个插件实现目录_site,_site下放置一个index.html作为插件的首页即可。
plugin-descriptor.properties简短的内容为:
<pre>
description=bigdesk - A web front end for an esr cluster
version=esr2.0
site=true
name=bigdesk
</pre>
功能扩展类插件
这类插件可以没有页面,也不需要_site,仅仅需要plugin-descriptor.properties和功能实现的jar文件,如果需要其他第三方的jar也一并放到插件下就可以
plugin-descriptor.properties简短的内容为:
<pre>
mandatory elements for all plugins:
'description': simple summary of the plugin
description=http-basic for ESR
'version': plugin's version
version=1.0.0
'name': the plugin name
name=http-basic
mandatory elements for site plugins:
'site': set to true to indicate contents of the _site/
directory in the root of the plugin should be served.
site=false
mandatory elements for jvm plugins :
'jvm': true if the 'classname' class should be loaded
from jar files in the root directory of the plugin.
Note that only jar files in the root directory are
added to the classpath for the plugin! If you need
other resources, package them into a resources jar.
jvm=true
'classname': the name of the class to load, fully-qualified.
classname=com.xxxx.esr.plugin.http.HttpBasicServerPlugin
'java.version' version of java the code is built against
use the system property java.specification.version
version string must be a sequence of nonnegative decimal integers
separated by "."'s and may have leading zeros
java.version=${maven.compiler.target}
'elasticsearch.version' version of elasticsearch compiled against
You will have to release a new version of the plugin for each new
elasticsearch release. This version is checked when the plugin
is loaded so Elasticsearch will refuse to start in the presence of
plugins with the incorrect elasticsearch.version.
esr.version=2.0.0
deprecated elements for jvm plugins :
'isolated': true if the plugin should have its own classloader.
passing false is deprecated, and only intended to support plugins
that have hard dependencies against each other. If this is
not specified, then the plugin is isolated by default.
isolated=${elasticsearch.plugin.isolated}
</pre>
简单的java实现如下:
<pre>
public class HttpBasicServerPlugin extends Plugin {
private boolean enabledByDefault = true;
private final Settings settings;
@Inject public HttpBasicServerPlugin(Settings settings) {
this.settings = settings;
}
@Override public String name() {
return "http-basic-server-plugin";
}
@Override public String description() {
return "HTTP Basic Server Plugin";
}
@Override
public Collection<Module> nodeModules() {
Collection< Module> modules = Lists.newArrayList();
if (settings.getAsBoolean("http.basic.enabled", enabledByDefault)) {
return Collections.<Module>singletonList(new HttpBasicServerModule(settings));
}
return modules;
}
@Override public Settings additionalSettings() {
if (settings.getAsBoolean("http.basic.enabled", enabledByDefault)) {
return Settings.settingsBuilder().
put("http.enabled", false).
build();
} else {
return Settings.Builder.EMPTY_SETTINGS;
}
}
@Override public Collection<Class<? extends LifecycleComponent>> nodeServices() {
Collection<Class<? extends LifecycleComponent>> services = Lists.newArrayList();
if (settings.getAsBoolean("http.basic.enabled", enabledByDefault)) {
services.add(HttpBasicServer.class);
}
return services;
}
}
</pre>