nova flavor
Flavor是nova非常重要的模块, flavor规定了主机的内存,cpu等的大小, 并且可以用来限制虚拟机的一系列参数, 就相当于一个生产模具,使用同一个flavor创建出来的虚拟机,在规格上基本保持一致。
openstack api 官网介绍如下:
flavor : Flavors are a way to describe the basic dimensions of a server to be created including how much cpu, ram, and disk space are allocated to a server built with this flavor.
一. 前言(源码分析的一些参考方法)
在源码分析过程中,有时候我们可以参考openstack nova api 的url来寻找对应的映射关系:
api的官网地址如下:
https://developer.openstack.org/api-ref/compute/
nova源码分析一个非常重要的参考文件是setup.cfg文件, 该文件列出了nova中所有功能的处理方法的路径,依据路径找到对应文件对应的处理方法即可
flavor相关的处理方法在setup.cfg如下:
flavors = nova.api.openstack.compute.flavors:Flavors
flavors_extraspecs = nova.api.openstack.compute.flavors_extraspecs:FlavorsExtraSpecs
flavor_access = nova.api.openstack.compute.flavor_access:FlavorAccess
flavor_rxtx = nova.api.openstack.compute.flavor_rxtx:FlavorRxtx
flavor_manage = nova.api.openstack.compute.flavor_manage:FlavorManage
command 命令行工具:
例如查看flavor功能相关的命令行
[root@cnsz92vl00945 ~]# nova help | grep flavor
flavor-access-add Add flavor access for the given tenant.
flavor-access-list Print access information about the given
flavor.
flavor-access-remove Remove flavor access for the given tenant.
flavor-create Create a new flavor.
flavor-delete Delete a specific flavor
flavor-key Set or unset extra_spec for a flavor.
flavor-list Print a list of available 'flavors' (sizes of
flavor-show Show details about the given flavor.
二. Flavor源码分析
这里先以flavors = nova.api.openstack.compute.flavors:Flavors 为例,查找Flavors
在源码文件nova/api/openstack/compute/flavors.py 中找到 Flavors
找到Flavors源码定义如下:
class Flavors(extensions.V21APIExtensionBase):
"""Flavors Extension."""
name = "Flavors"
alias = ALIAS
version = 1
def get_resources(self):
collection_actions = {'detail': 'GET'}
member_actions = {'action': 'POST'}
resources = [
extensions.ResourceExtension(ALIAS,
FlavorsController(),
member_name='flavor',
collection_actions=collection_actions,
member_actions=member_actions)
]
return resources
nova的url与处理方法的映射是通过urlmap中urlmap_factory进行统一处理映射的(这里暂不对urlmap进行分析)
通过基类 extensions.V21APIExtensionBase 可以看出flavor这里的功能映射到了/v2.1版本的url上
extensions.ResourceExtension(ALIAS,
FlavorsController(),
member_name='flavor',
collection_actions=collection_actions,
member_actions=member_actions)
Flavors 通过上面的方法将功能映射到FlavorsController类上
并且通过collection_actions = {‘detail’: ‘GET’} 可以看出新增了一个GET请求映射到detail方法上
在api文档Flavor部分也可以找到 对应url: /flavors/detail GET
openstack nova url采用restful api, 因此在源码分析中我们可以参考ÇET , POST , PUT, DELET 方法的含义进行分析,查找对应的处理函数
flavor功能:
- 先分析GET 方法 List Flavors 查询flavor列表
可以借助nova flavor-list 发送调用请求,也可以直接通过api进行调用进行调试
开启远程调试debug
@extensions.expected_er