Ceilometer的Discovery插件的作用是获取Pollster所需要轮询的端点资源信息,作为resource参数传递给Pollster的get_samples方法。所有的Discovery插件都必须是ceilometer.agent.plugin_base.DiscoveryBase抽象类的子类,需要实现其中的接口。DiscoveryBase的定义如下:
@six.add_metaclass(abc.ABCMeta)class DiscoveryBase(object):@abc.abstractpropertydef discovery(self, manager, param=None): """返回需要轮询的资源"""
Discovery插件需要实现discovery接口,结果返回一个列表,列表中的值一般用来表示端点信息,具体解释由不同的Pollster实现而定,即不同的Discovery插件和Pollster插件可能在这个列表中支持返回不同类型的数据。discovery接口的输入参数含义如下。
1)manager:指向其运行的agent service manager对象的句柄。
2)param:包含了discovery URL中的netloc和path部分的字符串。
Discovery插件需要注册在ceilometer.discovery的NameSpace下。Discovery插件和Pollster插件之间的对应关系可以由两种方式指定:一种是在Pipeline配置文件中指定此Pipeline中Pollster所需要的Discovery插件,一种是在Pollster实现中,Pollster开发者通过default_discovery方法来指定此Pollster需要使用的Discovery插件。第一种方式的优先级高于第二种方式。不管是哪种方式,都是通过discovery URL字符串的方式来指定Discovery插件。Discovery URL字符串的格式如下:
<scheme>://<netloc>/<path>
其中,scheme部分用来匹配Discovery插件在ceilometer.discovery的NameSpace下的注册名,netloc部分和path部分则作为param参数传递给Discovery插件的Discovery方法。