第 4 章 配置 hook

使用配置 hook 将您自己的自定义配置功能注入 overcloud 部署过程中。您可以创建 hook 在主 overcloud 服务配置之前和之后注入自定义配置,以及用于修改和包含基于 Puppet 的配置的 hook。

4.1. 第一次引导:自定义第一次引导配置

director 使用 cloud-init 在初始创建 overcloud 后在所有节点上执行配置。您可以使用 NodeUserData 资源类型调用 cloud-init

OS::TripleO::NodeUserData
应用到所有节点的 cloud-init 配置。
OS::TripleO::Controller::NodeUserData
应用到 Controller 节点的 cloud-init 配置。
OS::TripleO::Compute::NodeUserData
应用到 Compute 节点的 cloud-init 配置。
OS::TripleO::CephStorage::NodeUserData
应用到 Ceph Storage 节点的 cloud-init 配置。
OS::TripleO::ObjectStorage::NodeUserData
应用到 Object Storage 节点的 cloud-init 配置。
OS::TripleO::BlockStorage::NodeUserData
应用到块存储节点的 cloud-init 配置。
OS::TripleO::[ROLE]::NodeUserData
应用到自定义节点的 cloud-init 配置。将 [ROLE] 替换为可组合角色名称。

在本例中,使用所有节点上的自定义 IP 地址更新名称服务器:

流程

  1. 创建一个基本的 heat 模板 ~/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}
  2. 创建一个环境文件 ~/templates/firstboot.yaml,它将 heat 模板注册为 OS::TripleO::NodeUserData 资源类型。

    resource_registry:
      OS::TripleO::NodeUserData: /home/stack/templates/nameserver.yaml
  3. 要在 overcloud 中添加第一次引导配置,请将环境文件添加到堆栈中,以及其他环境文件:

    $ openstack overcloud deploy --templates \
        ...
        -e /home/stack/templates/firstboot.yaml \
        ...

    这会在首次创建和第一次引导时将配置添加到所有节点中。后续包含这些模板(如更新 overcloud 堆栈)不会运行这些脚本。

重要

您只能将 NodeUserData 资源注册到每个资源的一个 heat 模板中。后续用法会覆盖要使用的 heat 模板。