Red Hat Training

A Red Hat training course is available for Red Hat OpenStack Platform

4.2. pre-Configuration:自定义特定 Overcloud 角色

重要

本文档的早期版本使用 OS::TripleO::Tasks::*PreConfig 资源来为每个角色提供预配置 hook。director 的 Heat 模板集合需要专用于使用这些 hook,这意味着您不应该将它们用于自定义用途。反之,请使用下面概述的 OS::TripleO::*ExtraConfigPre hook。

Overcloud 使用 Puppet 作为 OpenStack 组件的核心配置。director 提供了一组 hook,用于在第一次引导完成并开始核心配置前为特定节点角色提供自定义配置。这些 hook 包括:

OS::TripleO::ControllerExtraConfigPre
在核心 Puppet 配置前,应用到 Controller 节点的额外配置。
OS::TripleO::ComputeExtraConfigPre
在 Puppet 核心配置之前,应用到 Compute 节点的额外配置。
OS::TripleO::CephStorageExtraConfigPre
在核心 Puppet 配置之前,应用到 Ceph Storage 节点的额外配置。
OS::TripleO::ObjectStorageExtraConfigPre
在 Puppet 核心配置之前,应用到 Object Storage 节点的额外配置。
OS::TripleO::BlockStorageExtraConfigPre
在 Puppet 核心配置之前,应用到块存储节点的附加配置。
OS::TripleO::[ROLE]ExtraConfigPre
在 Puppet 核心配置之前,应用到自定义节点的额外配置。用可组合角色名称替换 [ROLE]

在本例中,您首先创建一个基本的 heat 模板(/home/stack/templates/nameserver.yaml),它将运行一个脚本来写入具有变量名称服务器的节点的 resolv.conf

heat_template_version: 2014-10-16

description: >
  Extra hostname configuration

parameters:
  server:
    type: string
  nameserver_ip:
    type: string
  DeployIdentifier:
    type: string

resources:
  CustomExtraConfigPre:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config:
        str_replace:
          template: |
            #!/bin/sh
            echo "nameserver _NAMESERVER_IP_" > /etc/resolv.conf
          params:
            _NAMESERVER_IP_: {get_param: nameserver_ip}

  CustomExtraDeploymentPre:
    type: OS::Heat::SoftwareDeployment
    properties:
      server: {get_param: server}
      config: {get_resource: CustomExtraConfigPre}
      actions: ['CREATE','UPDATE']
      input_values:
        deploy_identifier: {get_param: DeployIdentifier}

outputs:
  deploy_stdout:
    description: Deployment reference, used to trigger pre-deploy on changes
    value: {get_attr: [CustomExtraDeploymentPre, deploy_stdout]}

在本例中,Resources 部分包含以下内容:

CustomExtraConfigPre
这定义了软件配置。在本例中,我们定义了 Bash 脚本,Heat 将 _NAMESERVER_IP_ 替换为 nameserver_ip 参数中存储的值。
CustomExtraDeploymentPre

这会执行软件配置,这是来自 CustomExtraConfigPre 资源的软件配置。注意以下几点:

  • 配置参数引用 CustomExtraConfigPre 资源,因此 Heat 知道要应用的配置。
  • server 参数检索 Overcloud 节点的映射。此参数由父模板提供,是此 hook 模板中的强制要求。
  • actions 参数定义何时应用配置。在这种情况下,我们仅在创建或更新 Overcloud 时应用配置。可能的操作包括 CREATEUPDATEDELETESUSPENDRESUME
  • input_values 包含一个名为 deploy_identifier 的参数,它存储来自父模板中的 DeployIdentifier。此参数为每个部署更新的资源提供时间戳。这可确保在后续的 overcloud 更新中资源恢复。

接下来,创建一个环境文件(/home/stack/templates/pre_config.yaml),将 heat 模板注册到基于角色的资源类型。例如,要仅应用到 Controller 节点,请使用 ControllerExtraConfigPre hook:

resource_registry:
  OS::TripleO::ControllerExtraConfigPre: /home/stack/templates/nameserver.yaml

parameter_defaults:
  nameserver_ip: 192.168.1.1

要应用配置,请在创建或更新 Overcloud 时将环境文件添加到堆栈中,以及其他环境文件。例如:

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

这会在核心配置开始初始 Overcloud 创建或后续更新时,将配置应用到所有 Controller 节点。

重要

您只能为每个 hook 只注册每个资源的一个 Heat 模板。后续使用会覆盖要使用的 Heat 模板。