5.4. pre-Configuration:自定义特定 Overcloud 角色
本文档的早期版本使用 OS::TripleO::Tasks::*PreConfig
资源来为每个角色提供预配置 hook。director 的 Heat 模板集合需要专用于使用这些 hook,这意味着您不应该将它们用于自定义用途。反之,请使用下面概述的 OS::TripleO::*ExtraConfigPre
hook。
Overcloud 使用 Puppet 作为 OpenStack 组件的核心配置。director 提供了一组 hook,用于在第一次引导完成并开始核心配置前为特定节点角色提供自定义配置。这些 hook 包括:
- OS::TripleO::ControllerExtraConfigPre
- 在核心 Puppet 配置前,应用到 Controller 节点的额外配置。
- OS::TripleO::ComputeExtraConfigPre
- 在 Puppet 核心配置之前,应用到 Compute 节点的额外配置。
- OS::TripleO::CephStorageExtraConfigPre
- 在核心 Puppet 配置之前,应用到 Ceph Storage 节点的额外配置。
- OS::TripleO::ObjectStorageExtraConfigPre
- 在 Puppet 核心配置之前,应用到 Object Storage 节点的额外配置。
- OS::TripleO::BlockStorageExtraConfigPre
- 在 Puppet 核心配置之前,应用到块存储节点的附加配置。
- OS::TripleO::[ROLE]ExtraConfigPre
-
在 Puppet 核心配置之前,应用到自定义节点的额外配置。用可组合角色名称替换
[ROLE]
。
在本例中,您首先创建一个基本的 heat 模板(/home/stack/templates/nameserver.yaml
),它将运行一个脚本来写入具有变量名称服务器的节点的 resolv.conf
。
heat_template_version: 2014-10-16 description: > Extra hostname configuration parameters: server: type: string nameserver_ip: type: string DeployIdentifier: type: string resources: CustomExtraConfigPre: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/sh echo "nameserver _NAMESERVER_IP_" > /etc/resolv.conf params: _NAMESERVER_IP_: {get_param: nameserver_ip} CustomExtraDeploymentPre: type: OS::Heat::SoftwareDeployment properties: server: {get_param: server} config: {get_resource: CustomExtraConfigPre} actions: ['CREATE','UPDATE'] input_values: deploy_identifier: {get_param: DeployIdentifier} outputs: deploy_stdout: description: Deployment reference, used to trigger pre-deploy on changes value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}
在本例中,Resources
部分包含以下内容:
- CustomExtraConfigPre
-
这定义了软件配置。在本例中,我们定义了 Bash
脚本
,Heat 将_NAMESERVER_IP_
替换为nameserver_ip
参数中存储的值。 - CustomExtraDeploymentPre
这会执行软件配置,这是来自
CustomExtraConfigPre
资源的软件配置。注意以下几点:-
配置参数引用
CustomExtraConfigPre
资源,因此 Heat 知道要应用的配置。 -
server
参数检索 Overcloud 节点的映射。此参数由父模板提供,是此 hook 模板中的强制要求。 -
actions
参数定义何时应用配置。在这种情况下,我们仅在创建或更新 Overcloud 时应用配置。可能的操作包括CREATE
、UPDATE
、DELETE
、SUSPEND
和RESUME
。 -
input_values
包含一个名为deploy_identifier
的参数,它存储来自父模板中的DeployIdentifier
。此参数为每个部署更新的资源提供时间戳。这可确保在后续的 overcloud 更新中资源恢复。
-
配置参数引用
接下来,创建一个环境文件(/home/stack/templates/pre_config.yaml
),将 heat 模板注册到基于角色的资源类型。例如,要仅应用到 Controller 节点,请使用 ControllerExtraConfigPre
hook:
resource_registry: OS::TripleO::ControllerExtraConfigPre: /home/stack/templates/nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
要应用配置,请在创建或更新 Overcloud 时将环境文件添加到堆栈中,以及其他环境文件。例如:
$ openstack overcloud deploy --templates \ ... -e /home/stack/templates/pre_config.yaml \ ...
这会在核心配置开始初始 Overcloud 创建或后续更新时,将配置应用到所有 Controller 节点。
您只能为每个 hook 只注册每个资源的一个 Heat 模板。后续使用会覆盖要使用的 Heat 模板。
这可实现:
-
OS::TripleO::ControllerExtraConfigPre
是 Heat 模板集合中配置模板中使用的基于 director 的 Heat 资源。此资源将配置传递给每个 Controller 节点。默认ControllerExtraConfigPre
是指生成空白值的 Heat 模板(puppet/extraconfig/pre_deploy/default.yaml
)。在我们的情形中,我们的pre_config.yaml
环境文件将这个默认文件替换为我们自己的nameserver.yaml
文件的引用。 -
环境文件还会将
nameserver_ip
传递为我们环境的parameter_default
值。这是存储名称服务器的 IP 地址的参数。然后,name.yaml
Heat 模板接受此参数,如parameters
部分中定义。 -
该模板通过
OS::Heat::SoftwareConfig
将CustomExtraConfigPre
定义为配置资源。注意group: script
属性。组
定义了要使用的软件配置工具,该工具通过一组用于 Heat 的 hook 使用。在本例中,脚本
hook 运行您在SoftwareConfig
资源中定义的可执行脚本,作为配置属性
。 脚本本身将
/etc/resolve.conf
附加至名称服务器 IP 地址。请注意str_replace
属性,它允许您使用params
部分中的参数替换template
部分中的变量。在本例中,我们将 NAMESERVER_IP 设置为名称服务器 IP 地址,这将替换 脚本中的相同变量。这会生成以下脚本:#!/bin/sh echo "nameserver 192.168.1.1" >> /etc/resolve.conf
本例演示了如何创建 Heat 模板,该模板在核心配置前使用 OS::Heat::SoftwareConfig
和 OS::Heat::SoftwareDeployments
进行部署。它还介绍了如何在环境文件中定义参数,并将其传递到配置中的模板。