简单分析如何使用aggregate_instance_extra_spec filter

本文详细介绍了在Nova中如何使用aggregate_instance_extra_spec filter进行虚拟机主机匹配,包括如何设置主机元数据、flavor的extra spec,以及如何利用不同操作符进行条件匹配,如's!='、'<or>'等,以实现特定场景的需求,如避免在特定主机上创建虚拟机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Nova 中,aggregate_instance_extra_spec filter的一般的使用方法都是在host的metadata中写好需要用的键值对,并且也在flavor中写好相应的键值对。再使用aggregate_instance_extra_spec filter  进行匹配,当这两个值匹配时,就认为是合适的主机。但其实还有这样一种需求,我们可能会要求在创建虚拟机时让其不创建在某些主机上。其实aggregate_instance_extra_spec filter 已经提供了这种功能。在进行匹配的过程中,会调用extra_spec_ops的match方法:

for aggregate_val in aggregate_vals:
if extra_specs_ops.match(aggregate_val, req):
break
在extra_spec_ops中,预先定义好了一系列可使用的操作符:

op_methods = {
  
  '=': lambda x, y: float(x) >= float(y),
'<in>': lambda x, y: y in x,
'<all-in>': lambda x, y: all(val in x for val in y),
'==': lambda x, y: float(x) == float(y),
'!=': lambda x, y: float(x) != float(y),
'>=': lambda x, y: float(x) >= float(y),
'<=': lambda x, y: float(x) <= float(y),
's==': operator.eq,
's!=': operator.ne,
's<': operator.lt,
's<=': operator.le,
's>': operator.gt,
's>=': operator.ge}
以及 '<or>' 操作符

这些操作符的使用方式是这样的:
除 '<or>' 之外, 在flavor 中定义extra spec时这样定义: 'key': '操作符' '字段',
如定义不选择在aggragate1上创建 'key1':  's!=' 'aggragate1'

'<or>' 操作符的使用方法是:
在flavor中定义 extra spec 时这样定义:
'key' :  '<or>'   'value1' '<or>'  'value2' '<or>'  'value3' 只要其中有一个value匹配就能匹配。



1. 根据extra_spec_ops的代码逻辑,不指定任何操作符和指定 's=='('=='for非string)的作用是相同的。 
使用的时候,先使用aggregate-set-metadata(CLI)或 os-aggregates API (REST) 对某个aggregate 的 metadata 进行编辑,比如增加这样一组键值对:

"reserved_for": "GPU" 用来表示这个aggregate是期望只保留给有GPU要求的虚拟机所使用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值