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 模板。

这可实现:

  1. OS::TripleO::NodeUserData 是集合中其他模板中使用的基于 director 的 Heat 资源,并将第一个引导配置应用到所有节点。此资源传递在 cloud-init 中使用的数据。默认的 NodeUserData 是指生成空白值的 Heat 模板(first/userdata_default.yaml)。在我们的示例中,我们的 firstboot.yaml 环境文件会将此默认值替换为我们自己的 nameserver.yaml 文件的引用。
  2. nameserver_config 定义了要在第一次引导时运行的 Bash 脚本。OS::Heat::SoftwareConfig 资源定义为要应用的配置的一部分。
  3. userdata 使用 OS::Heat::MultipartMime 资源,将配置从 nameserver_config 转换为多部分 MIME 消息。
  4. 输出 提供一个输出参数 OS::stack_id,它取来自 userdata 的 MIME 消息并将其提供给 Heat 模板/资源调用它。

因此,每个节点在第一次引导时运行以下 Bash 脚本:

#!/bin/bash
echo "nameserver 192.168.1.1" >> /etc/resolve.conf

本例演示了 Heat 模板如何将一个资源传递和 modfy 配置传递到另一个资源。它还演示了如何使用环境文件注册新的 Heat 资源或修改现有的资源。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部