基于openstack kilo版本中的Nova代码,新增根据特定项目中的特定用户对外提供计算资源:vcpu ,ram统计的接口。
原始openstack中的计算资源统计颗粒度只到达项目这个层面。所以需要新增针对单个用户的统计接口。思路是通过nova内部接口遍历出当前用户所在的项目中的所有虚机条目,然后根据用户ID进行匹配,获取匹配虚机的flavor,然后从flavor中取得ram,vcpu的值进行累加。最后返回单个用户的统计值。
除了要考虑涉及api外,还需要考虑命令行的实现。此文先记录nova的api扩展,命令行的实现在下一文记录。
nova中的扩展api作为一种扩展资源存在于nova的代码框架中。所以在下述目录中添加新的资源:
为此功能新建文件:
此文件中定义了资源类和操作资源的控制类;
对于资源类,是按照扩展资源框架,继承
extensions.ExtensionDescriptor
nova-api服务初始化加载extension资源时会遍历contrib目录,根据目录下的文件名,映射到文件中和文件同名的类,注册资源。所以,此文件中定义的资源类就是:
class Server_use_statistics(extensions.ExtensionDescriptor): """Server use statitistics support. currently only consider cpu ram sum by a user in a project """
在此类中定义get_resource方法:
def get_resources(self): resources = [] res = extensions.ResourceExtension('os-server-statistics'<