整体结构
从目录层次上来看,代码结构如下
--ceilometerclient
--common/
--openstack/
--tests/
--v1/
--v2/
--client.py
--shell.py
--exc.py
其中commonopenstack提供utils帮助类,tests是测试用例目录,v1v2分别对应ceilometer的v1和v2版本。client.py提供获取client的方法,包括keystone的client,提供获取endpoint和token的方法;还包括获取ceilometer的client的函数。shell.py是模块的入口,提供对命令行的解析和命令的调用。exc.py提供用到的异常类。
在每个版本目录下,代码的组织如下(v2为例):
--v2
--client.py
--shell.py
--alarms.py
--event_types.py
--events.py
--meters.py
-- … …
每个版本目录下也有一个client.py和一个shell.py,这里的shell.py里面提供了do_**的函数完成从上层shell.py传进来的命令并返回结果。其它的py文件按照名称以Manager类的形式分别对应ceilometer各个资源的操作实现。client.py引用所有的Manager,这样shell.py只需要依赖client一个就可以完成对各个资源的操作。所以从控制的角度分析,代码的依赖关系大致是:
shell.py ------> client.py ---->alarms/events/meters/samples.py …
^ ^
|(v1/v2) | (v1/v2)
| |
shell.py ------> client.py (根目录)