5.3. 首次启动:自定义第一个引导配置
director 提供了一种机制,可在创建 Overcloud 的初始节点上执行配置。director 通过 cloud-init 达到此目的,您可以使用 OS::TripleO::NodeUserData 资源类型进行调用。
在本例中,您将使用所有节点上的自定义 IP 地址更新名称服务器。您必须首先创建一个基本的 heat 模板(/home/stack/templates/nameserver.yaml),该脚本将运行一个脚本,将每个节点的 resolv.conf 附加到特定名称服务器。您可以使用 OS::TripleO::MultipartMime 资源类型来发送配置脚本。
heat_template_version: 2014-10-16
description: >
Extra hostname configuration
resources:
userdata:
type: OS::Heat::MultipartMime
properties:
parts:
- config: {get_resource: nameserver_config}
nameserver_config:
type: OS::Heat::SoftwareConfig
properties:
config: |
#!/bin/bash
echo "nameserver 192.168.1.1" >> /etc/resolv.conf
outputs:
OS::stack_id:
value: {get_resource: userdata}
接下来,创建一个环境文件(/home/stack/templates/firstboot.yaml),将您的 heat 模板注册为 OS::TripleO::NodeUserData 资源类型。
resource_registry:
OS::TripleO::NodeUserData: /home/stack/templates/nameserver.yaml
要添加第一次引导配置,请在首先创建 Overcloud 时将环境文件添加到堆栈中,以及其他环境文件。例如:
$ openstack overcloud deploy --templates \
...
-e /home/stack/templates/firstboot.yaml \
...
-e 将环境文件应用到 Overcloud 堆栈。
这会在所有节点首次创建并首次引导时将配置添加到所有节点。这些模板的后续包含不会运行这些脚本,如更新 Overcloud 堆栈。
您只能将 OS::TripleO::NodeUserData 注册到一个 heat 模板。后续使用会覆盖要使用的 heat 模板。
这可实现:
-
OS::TripleO::NodeUserData是集合中其他模板中使用的基于 director 的 Heat 资源,并将第一个引导配置应用到所有节点。此资源传递在cloud-init中使用的数据。默认的NodeUserData是指生成空白值的 Heat 模板(first/userdata_default.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
本例演示了 Heat 模板如何将一个资源传递和 modfy 配置传递到另一个资源。它还演示了如何使用环境文件注册新的 Heat 资源或修改现有的资源。