heat.engine.resource module

exception heat.engine.resource.NoActionRequired(res_name='Unknown', reason='')[source]

基础: Exception

当信号被忽略时引发的异常。

资源子类应从 handle_signal() 引发此异常,以抑制记录与信号对应的事件。

exception heat.engine.resource.PollDelay(period)[source]

基础: Exception

用于延迟资源轮询的异常。

此异常可以由资源子类的 check_*_complete() 方法引发,以指示无需立即再次轮询。如果引发此异常,则在资源再次有资格进行轮询之前,将不会再次调用 check_*_complete() 方法。PollDelay 周期为 1 等效于返回 False。

class heat.engine.resource.Resource(name, definition, stack)[source]

基类: ResourceStatus

BASE_ATTRIBUTES = ('show',)
FnGetAtt(key, path)[source]

用于内联函数 Fn::GetAtt。

参数:
  • key – 属性键。

  • path – 用于从属性中选择的路径组件列表。

返回值:

属性值。

FnGetRefId()[source]

用于内联函数 Ref。

结果:

资源的 ID 或名称。

LOCK_ACQUIRE = 1
LOCK_ACTIONS = (None, 1, -1, 0)
LOCK_NONE = None
LOCK_RELEASE = -1
LOCK_RESPECT = 0
SHOW = 'show'
action_handler_task(action, args=None, action_prefix=None)[source]

一个任务,用于调用资源子类的处理方法来执行操作。

调用给定操作的 handle_<ACTION>() 方法,然后在循环中调用 check_<ACTION>_complete() 方法,直到它返回 True。如果未提供这些方法,则省略调用。

提供的任何参数都将传递给处理程序。

如果提供了前缀,则调用 handle_<PREFIX>_<ACTION>() 方法而不是 handle_<ACTION>() 方法。

add_dependencies(deps)[source]

添加特定于资源类型的隐式依赖项。

某些资源类型可能对相同堆栈中的其他资源具有隐式依赖项,这些依赖项不由属性值链接(通过使用 get_resource 或 get_attr 设置,从而创建显式依赖项)。此类依赖项对用户不透明,应尽可能避免,但是,在某些情况下,由于底层 API 中的魔术,它们是必需的。

deps 参数是可向其添加依赖项对的 Dependencies 对象。

add_explicit_dependencies(deps)[source]

添加模板中显式指定的所有依赖项。

deps 参数是可向其添加依赖项对的 Dependencies 对象。

adopt(resource_data)[source]

采用现有的资源。

资源子类可以提供 handle_adopt() 方法来自定义采用。

always_replace_on_check_failed = True
attributes_schema = {}
base_attributes_schema = {'show': <heat.engine.attributes.Schema object>}
static build_template_dict(res_name, res_type, tmpl_type, params, props, outputs, description)[source]
calc_update_allowed(props)[source]
cancel_grace_period()[source]
check()[source]

检查物理资源是否处于其预期状态。

获取物理资源的当前状态,并相应地更新数据库。如果资源不支持检查,则默认操作是失败并将资源的状态恢复到其原始状态,并添加消息说明未执行检查。

classmethod check_is_substituted(new_res_type)[source]
cinder()[source]
clear_hook(hook)[source]
clear_stored_attributes()[source]
client(name=None, version=None)[source]
client_plugin(name=None)[source]
create()[source]

创建资源。

子类应提供 handle_create() 方法来自定义创建。

create_convergence(template_id, requires, engine_id, timeout, progress_callback=None)[source]

通过调用调度器 TaskRunner 创建资源。

data()[source]

返回此资源的资源数据。

使用方法 data_set 和 data_delete 修改此资源的资源数据。

返回值:

表示此资源的资源数据的字典。

data_delete(key)[source]

从资源数据中删除一个键。

返回值:

如果键存在则为 True。

data_set(key, value, redact=False)[source]

在资源数据中设置一个键。

default_client_name = None
delete()[source]

用于删除资源的任务。

子类应提供一个 handle_delete() 方法来自定义删除操作。

delete_convergence(template_id, engine_id, timeout, progress_callback=None)[source]

如果资源不属于给定的模板,则销毁该资源。

给定的模板应该是当前正在配置的模板。

此外,由于此资源作为清理阶段的一部分被访问,因此应更新 needed_by。 如果此资源被更新的资源替换,则删除此资源并更新替换资源的 replaces 字段。

delete_snapshot(data)[source]
destroy()[source]

用于删除资源并将其从数据库中移除的任务。

entity = None
property external_id
frozen_definition()[source]

返回一个包含存储属性值的冻结的 ResourceDefinition。

返回的定义将包含从数据库读取的属性值,并且所有固有函数都将被解析(请注意,这使其无法用于计算依赖关系)。

frozen_properties()[source]

使用数据库中冻结的属性值的上下文管理器。

实时属性值始终在上下文结束时被替换回。

get_attribute(key, path)[source]

函数 get_attr 和 Fn::GetAtt 的默认实现。

资源插件可以覆盖此方法以添加特定于资源实现的额外逻辑。

get_live_resource_data()[source]

默认实现;可以被资源覆盖。

获取资源数据并使用异常处理它。

get_live_state(resource_properties)[source]

默认实现;应由资源覆盖。

参数:

resource_properties – 资源的 Properties 类的对象。

返回值:

资源属性的实际状态的字典。

get_nested_parameters_stack()[source]

返回用于模式验证的嵌套堆栈。

常规资源没有这样的东西。

get_reference_id()[source]

函数 get_resource 的默认实现。

资源插件可以覆盖此方法以添加特定于资源实现的额外逻辑。

classmethod getdoc()[source]
glance()[source]
handle_adopt(resource_data=None)[source]
handle_delete()[source]

默认实现;应由资源覆盖。

handle_metadata_reset()[source]

默认实现;应由资源覆盖。

现在我们覆盖此方法以重置 scale-policy 和 scale-group 资源的元数据,因为如果引擎在缩放时重新启动,它们的元数据可能会停留在错误的状态(‘scaling_in_progress’ 始终为 True)。

handle_preempt()[source]

当有新的更新可用时,抢占正在进行的更新。

当先前的收敛更新正在进行但资源有新的更新可用时,调用此方法。 默认情况下,它不执行任何操作,但子类可以覆盖它以取消正在进行的更新(如果这样做是安全的)。

请注意,此方法不在正在进行的更新的上下文中运行,并且无法访问有关它的运行时信息; 也不安全对数据库中的资源进行更改。 如果实现,此方法应通过外部方式完成现有的更新。 如果这使资源处于 FAILED 状态,则应在 needs_replace_failed() 中加以考虑。

handle_update(json_snippet, tmpl_diff, prop_diff)[source]
has_hook(hook)[source]
has_interface(resource_type)[source]

检查资源是否映射到 resource_type 或是“resource_type”。

检查此资源是否映射到 resource_type 或是“resource_type”。

has_nested()[source]

如果资源具有现有的嵌套堆栈,则返回 True。

对于大多数资源类型,这将始终返回 False。 StackResource 子类在适当的时候返回 True。 具有返回 True 的可能性的资源子类还必须提供一个 nested_identifier() 方法来返回嵌套堆栈的标识符,以及一个 nested() 方法来返回嵌套堆栈的 Stack 对象。

heat()[source]
identifier()[source]

返回此资源的标识符。

classmethod is_service_available(context)[source]
keystone()[source]
classmethod load(context, resource_id, current_traversal, is_update, data)[source]

从数据库加载指定的资源以进行检查。

返回一个元组,其中包含 Resource、与资源的 ResourceDefinition 对应的 StackDefinition(即上次更新的资源更新到的资源,或者尚未创建则将要创建的资源),以及包含最新 StackDefinition 的 Stack(即正在更新到的最新遍历)。

后两者必须保持在范围内,因为 Resource 包含对它们的弱引用。

lock(engine_id)[source]
make_replacement(new_tmpl_id, requires)[source]

在数据库中创建一个替换资源。

返回新资源的 DB ID,如果无法创建新资源(通常是因为模板 ID 不存在),则返回 None。 如果另一个遍历已经锁定当前资源,则引发 UpdateInProgress。

metadata_get(refresh=False)[source]
metadata_set(metadata, merge_metadata=None)[source]

将新的元数据写入数据库。

调用者可以选择提供一个 merge_metadata() 函数,该函数接受两个参数 - 传递给 metadata_set() 的元数据和资源的当前元数据 - 并返回要写入的合并后的元数据。 如果未提供 merge_metadata,则传递给 metadata_set() 的元数据将按原样写入,覆盖任何现有的元数据。

如果检测到竞争条件,则将使用 merge_metadata() 的新结果(如果提供)或按原样的数据(如果未提供)重试写入。

metadata_update(new_metadata=None)[source]

对于不显式覆盖此方法的资源,则不执行任何操作。

needs_replace(after_props)[source]

基于某些属性强制替换。

needs_replace_failed()[source]

如果资源处于 *_FAILED 状态,则需要替换。

needs_replace_with_prop_diff(changed_properties_set, after_props, before_props)[source]

基于 prop_diff 需要替换。

needs_replace_with_tmpl_diff(tmpl_diff)[source]

基于 tmpl_diff 需要替换。

neutron()[source]
no_signal_actions = ('SUSPEND', 'DELETE')
node_data(stk_defn=None, for_resources=True, for_outputs=False)[source]

返回表示资源的 NodeData 对象。

返回的 NodeData 对象包含有关资源的的基本数据,包括其名称、ID 和状态,以及其引用 ID 和任何使用的属性值。

默认情况下,将包含由其他资源引用的那些属性值。 可以通过将 for_resources 参数设置为 False 来忽略这些属性值。 如果 for_outputs 参数为 True,则将包含由堆栈输出引用的那些属性值。 如果 for_outputs 参数是输出名称的可迭代对象,则仅包含由指定的堆栈输出引用的那些属性值。

引用的属性集是从提供的 StackDefinition 对象计算得出的,或者如果未传递任何对象,则从堆栈的当前定义计算得出。

调用此方法后,资源的属性缓存将填充任何由堆栈输出引用的可缓存属性值,即使它们也未被其他资源引用。

nova()[source]
parse_live_resource_data(resource_properties, resource_data)[source]

默认实现;可以被资源覆盖。

解析资源数据,以便将其用于使用实时状态更新属性。 :param resource_properties: 存储的资源插件的属性。 :param resource_data: 来自资源当前实时状态的数据。

static pause()[source]
physical_resource_name()[source]
physical_resource_name_limit = 255
physical_resource_name_or_FnGetRefId()[source]
prepare_abandon()[source]
prepare_for_replace()[source]

准备资源以进行替换。

某些资源在替换之前需要额外的操作。 如果需要在替换之前更改资源,则应在资源类中实现此方法。

preview()[source]

Resource.preview 的默认实现。

子类应为特定行为覆盖此方法。

preview_update(after, before, after_props, before_props, prev_resource, check_init_complete=False)[source]

模拟更新,而无需实际更新资源。

如果需要替换,则引发 UpdateReplace,或者如果需要就地更新,则返回 True。

static reduce_physical_resource_name(name, limit)[source]

将物理资源名称的长度减少到限制。

缩减后的名称将由以下内容组成

  • 名称的前 2 个字符

  • 一个连字符

  • 名称的结尾,从左侧截断以使名称长度在限制范围内

参数:
  • name – 要缩减长度的名称

  • limit – 最大长度限制

返回值:

长度小于或等于限制的名称

referenced_attrs(stk_defn=None, in_resources=True, in_outputs=True, load_all=False)[source]

返回模板中引用的所有属性的集合。

这使资源能够计算其哪些属性将被使用。 默认情况下,将包含由其他资源或输出引用的那些属性。 可以通过将 in_resourcesin_outputs 参数设置为 False 来排除这些属性。 如果 in_outputs 参数是输出名称的可迭代对象,则仅包含由指定的堆栈输出引用的那些属性。

引用的属性集是从提供的 StackDefinition 对象计算得出的,或者如果未传递任何对象,则从堆栈的当前定义计算得出。

regenerate_info_schema(definition)[source]

默认实现;应由资源覆盖。

应由需要在更新期间刷新模式的资源覆盖,例如 TemplateResource。

定义:

资源定义

reparse(client_resolve=True)[source]

重新解析资源属性。

可选的 translate 标志用于属性转换,client_resolve 标志用于通过执行客户端查找来解析属性。

required_by()[source]

依赖此资源作为依赖项的资源列表。

返回直接依赖此资源的资源的名称列表。

required_service_extension = None
requires_deferred_auth = False
resource_id_set(inst)[source]
classmethod resource_to_template(resource_type, template_type='cfn')[source]

生成镜像资源的提供程序模板。

参数:
  • resource_type – 要在模板中显示的资源类型

  • template_type – 要生成的模板类型,cfn 或 hot。

返回值:

一个模板,其中资源的 properties_schema 映射为参数,资源的 attributes_schema 映射为输出

restore_prev_rsrc(convergence=False)[source]

回滚后恢复资源。

某些资源在回滚后需要额外的操作。如果资源需要在回滚期间更改,则应在资源类中实现此方法。

resume()[source]

返回一个任务以恢复资源。

子类应提供 handle_resume() 方法来实现恢复。

rpc_client()[source]

返回一个客户端,用于进行引擎 RPC 调用。

signal(details=None, need_check=True)[source]

向资源发送信号。

如果由于信号导致堆栈的所有资源的元数据需要重新生成,则返回 True,否则返回 False。

子类应提供 handle_signal() 方法来实现信号。如果未实现处理程序,则基类会引发异常。

signal_needs_metadata_updates = True
snapshot()[source]

快照资源并返回创建的数据(如果有)。

property stack
property state

返回状态,操作和状态的元组。

state_reset()[source]

将状态重置为 (INIT, COMPLETE)。

state_set(action, status, reason='state changed', lock=None)[source]
store(set_metadata=False, lock=None)[source]

在数据库中创建资源。

如果设置了 self.id,则更新现有的堆栈。

store_attributes()[source]
strict_dependency = True
support_status = <heat.engine.support.SupportStatus object>
suspend()[source]

返回一个任务以暂停资源。

子类应提供 handle_suspend() 方法来实现暂停。

swift()[source]
translate_properties(properties, client_resolve=True, ignore_resolve_error=False)[source]

设置资源特定的属性转换规则。

properties 参数是一个属性对象,可选的 client_resolve 标志用于指定是否使用客户端查找进行“RESOLVE”转换。

translation_rules(properties)[source]

返回资源的指定规则。

trigger_hook(hook)[source]
trove()[source]
type()[source]
update(after, before=None, prev_resource=None, new_template_id=None, new_requires=None)[source]

返回一个任务以更新资源。

子类应提供 handle_update() 方法来自定义更新,默认情况下,基类 handle_update 将失败。

update_allowed_properties = ()
update_convergence(template_id, new_requires, engine_id, timeout, new_stack, progress_callback=None)[source]

同步更新资源。

将资源的 current_template_id 持续到 template_id,并将资源的 requires 更新为从给定的 resource_data 和现有资源的 requires 中获取的所需资源 ID 列表,然后通过调用 scheduler TaskRunner 更新资源。

update_policy_schema = {}
update_template_diff(after, before)[source]

返回 before 和 after json 片段之间的差异。

如果在 after 中删除了在 before 中存在的某个内容,则将其设置为 None。

update_template_diff_properties(after_props, before_props)[source]

返回 before 和 after 属性之间的更改的属性。

如果更新了具有 immutable 为 True 的任何属性,则引发 NotSupported 错误。如果更改了不在 update_allowed_properties 中的任何属性,则引发 UpdateReplace。

validate()[source]

验证资源。

资源插件可以覆盖此方法以添加特定于资源实现的额外验证逻辑。

classmethod validate_deletion_policy(policy)[source]
validate_external()[source]
validate_template()[source]

验证资源的定义结构/语法方面。

资源插件不应覆盖此方法,因为此接口预计在创建前调用,因此通常在覆盖的 validate() 中有效的操作(例如访问属性)可能无法工作。