Flavors extra-specs (flavors, os-flavor-extra-specs)
Flavor 扩展属性设置, 扩展属性可以用来对虚拟机做一些额外的限制设置,具体的参数,将在后面的博客中做统一列出,这里暂时不做列出
openstack api 定义如下:
Lists, creates, deletes, and updates the extra-specs or keys for a flavor.
Refer to Compute Flavors for available built-in extra specs.
一. url及命令行
-
url
API为标准的restful API 风格 支持GET , POST, PUT, DELETE 方法:
/flavors/{flavor_id}/os-extra_specs
/flavors/{flavor_id}/os-extra_specs/{flavor_extra_spec_key} -
命令行
nova flavor-key
二. 源码分析
对应的方法在: flavors_extraspecs = nova.api.openstack.compute.flavors_extraspecs:FlavorsExtraSpecs
FlavorsExtraSpecs定义如下:
class FlavorsExtraSpecs(extensions.V21APIExtensionBase):
"""Flavors extra specs support."""
name = 'FlavorExtraSpecs'
alias = ALIAS
version = 1
def get_resources(self):
extra_specs = extensions.ResourceExtension(
'os-extra_specs',
FlavorExtraSpecsController(),
parent=dict(member_name='flavor', collection_name='flavors'))
return [extra_specs]
get_resources 将os-extra_specs 注册到collection flavors 下, 处理方法映射到FlavorExtraSpecsController
查看FlavorExtraSpecsController 为标准的restful api处理方法
def index(self, req, flavor_id):
"""Returns the list of extra specs for a given flavor."""
context = req.environ['nova.context']
context.can(fes_policies.POLICY_ROOT % 'index')
return self._get_extra_specs(context, flavor_id)
index实际处理_get_extra_specs函数
def _get_extra_specs(self, context, flavor_id):
flavor = common.get_flavor(context, flavor_id)
return dict(extra_specs=flavor.extra_specs)
flavor.extra_specs获取扩展属性,并转换为dict
get_flavor 实际调用的是Flavor show一样的方法,这里不做重复分析
1. 创建接口:
@extensions.expected_errors((400, 404, 409))