5.3. 在第一次引导时自定义配置
director 提供了在 overcloud 初始创建后在所有节点上执行配置的机制。director 通过 cloud-init 达到此目的,您可以使用 OS::TripleO::NodeUserData 资源类型调用它。
在本例中,我们的目标是使用所有节点上的自定义 IP 地址更新名称服务器。我们首先创建一个基本的 Heat 模板(nameserver.yaml),它将运行脚本来附加带有特定名称服务器的 resolv.conf。我们使用 OS::TripleO::MultipartMime 资源类型发送配置脚本。
接下来,创建一个环境文件(firstboot.yaml),它将我们的 Heat 模板注册为 OS::TripleO::NodeUserData 资源类型。
resource_registry: OS::TripleO::NodeUserData: nameserver.yaml
resource_registry:
OS::TripleO::NodeUserData: nameserver.yaml
这可实现以下目标:
-
OS::TripleO::NodeUserData是集合中的其他模板中使用的基于 director 的 Heat 资源,并将第一次引导配置应用到所有节点。此资源传递在cloud-init中使用的数据。默认NodeUserData是指生成空白值的 Heat 模板(firstboot/userdata_default.yaml)。在我们的 firstboot.yaml 环境文件中,我们的firstboot.yaml环境文件会替换为对我们自己的nameserver.yaml文件的引用。 -
nameserver_config定义要在第一次引导时运行的 Bash 脚本。OS::Heat::SoftwareConfig资源将它定义为要应用的配置片段。 -
userData使用OS::Heat::MultipartMime资源将来自nameserver_config的配置转换为多部分 MIME 消息。 -
输出提供了一个输出参数OS::stack_id,它取了来自userdata的 MIME 消息并将其提供给调用它的 Heat 模板/资源。
因此,每个节点在第一次引导时都运行以下 Bash 脚本:
#!/bin/bash echo "nameserver 192.168.1.1" >> /etc/resolve.conf
#!/bin/bash
echo "nameserver 192.168.1.1" >> /etc/resolve.conf
本例演示了 Heat 模板如何从一个资源向另一个资源传递和 modfy 配置。它还介绍了如何使用环境文件注册新的 Heat 资源或修改现有 Heat 资源。