5.4. 在 Overcloud 配置前自定义配置
Overcloud 使用 Puppet 进行 OpenStack 组件的核心配置。director 提供了一组资源,以便在第一次引导完成后和核心配置开始前提供自定义配置。这些资源包括:
- OS::TripleO::ControllerExtraConfigPre
- 在核心 Puppet 配置前,应用到 Controller 节点的其他配置。
- OS::TripleO::ComputeExtraConfigPre
- 在 Puppet 核心配置之前,应用到 Compute 节点的其他配置。
- OS::TripleO::CephStorageExtraConfigPre
- 在 Puppet 核心配置之前,应用到 CephStorage 节点的其他配置。
- OS::TripleO::NodeExtraConfig
- 在核心 Puppet 配置前,应用到所有节点角色的其他配置。
在本例中,我们首先创建一个基本的 Heat 模板(/home/stack/templates/nameserver.yaml
),它运行一个脚本来附加每个节点的 resolv.conf
和变量 nameserver。
heat_template_version: 2014-10-16 parameters: server: type: server nameserver_ip: type: string resources: ExtraPreConfig: type: OS::Heat::SoftwareConfig properties: group: script config: str_replace: template: | #!/bin/sh echo "nameserver _NAMESERVER_IP_" >> /etc/resolve.conf params: _NAMESERVER_IP_: {get_param: nameserver_ip} ExtraPreDeployment: type: OS::Heat::SoftwareDeployment properties: config: {get_resource: ExtraPreConfig} server: {get_param: server} actions: ['CREATE'] outputs: deploy_stdout: description: Deployment reference, used to trigger post-deploy on changes value: {get_attr: [ExtraPreDeployment, deploy_stdout]}
servers
参数是要应用配置的服务器列表,由父模板提供。这个参数在所有预配置模板中都是必需的。
接下来,创建一个环境文件(/home/stack/templates/pre_config.yaml
),它将我们的 Heat 模板注册为 OS::TripleO::NodeExtraConfig
资源类型。
resource_registry: OS::TripleO::NodeExtraConfig: nameserver.yaml parameter_defaults: nameserver_ip: 192.168.1.1
这可实现以下目标:
-
OS::TripleO::NodeExtraConfig
是 Heat 模板集合中配置模板中使用的基于 director 的 Heat 资源。此资源通过*-puppet.yaml
模板将配置传递给每个节点类型。默认NodeExtraConfig
指的是生成空白值的 Heat 模板(puppet/extraconfig/pre_deploy/default.yaml
)。在我们的情形中,我们的pre_config.yaml
环境文件会将此默认值替换为对我们自己的nameserver.yaml
文件的引用。 -
环境文件也会将
nameserver_ip
作为我们的环境的parameter_default
值传递。这是一个存储我们名称服务器的 IP 地址的参数。然后,nameserver.yaml
Heat 模板接受在parameters
部分中定义的参数。 -
模板通过
OS::Heat::SoftwareConfig
将ExtraPreConfig
定义为配置资源。注意group: script
属性。组
定义要使用的软件配置工具,可以通过 Heat 的一组 hook 获得。在这种情况下,脚本
hook 运行一个可执行脚本,在SoftwareConfig
资源中定义作为config
属性。 脚本本身会附加
/etc/resolve.conf
和名称服务器 IP 地址。请注意str_replace
属性,它允许您将template
部分中的变量替换为params
部分中的参数。在本例中,我们将 NAMESERVER_IP 设置为名称服务器 IP 地址,这将替换脚本中的同一变量。这会生成以下脚本:#!/bin/sh echo "nameserver 192.168.1.1" >> /etc/resolve.conf
ExtraPreDeployments
将ExtraPreConfig
配置部署到节点。注意以下几点:-
config
属性引用ExtraPreConfig
资源,以便 Heat 知道要应用的配置。 -
servers
属性检索 Overcloud 节点的映射,overcloud-without-mergepy.yaml
通过它。 -
actions
属性定义何时应用配置。在这种情况下,我们仅在创建 Overcloud 时应用配置。可能的操作包括CREATE
、UPDATE
、DELETE
、SUSPEND
和RESUME
。
-
本例演示了如何创建 Heat 模板,该模板使用 OS::Heat:: SoftwareConfig 和
定义配置并部署它。它还介绍了如何在环境文件中定义参数,并将它们传递给配置中的模板。
OS::Heat
::SoftwareDeployments