在 Red Hat Satellite 中使用 Puppet 集成管理配置

Red Hat Satellite 6.11

使用 Puppet 集成来管理主机的配置,并将主机系统状态报告到 Satellite

Red Hat Satellite Documentation Team

摘要

本指南介绍了如何启用 Puppet 与 Satellite 集成,在主机上配置 Puppet 代理,如何导入 Puppet 模块,以及如何使用 Puppet 模块在 Red Hat Satellite 基础架构管理的主机上强制实施配置。

向红帽文档提供反馈

我们感谢您对文档提供反馈信息。请让我们了解如何改进文档。

您可以通过在 Bugzilla 中记录一个 ticket 来提交反馈:

  1. 导航到 Bugzilla 网站。
  2. Component 字段中,使用 Documentation
  3. Description 字段中,输入您要改进的建议。包括文档相关部分的链接。
  4. Submit Bug

第 1 章 使用 Puppet 介绍配置管理

您可以使用 Puppet 管理和自动化主机的配置。Puppet 使用声明性语言来描述受管主机 的所需状态

Puppet 提高了您的效率,因为您可以同时管理多个主机。同时,它会减少您的配置工作,与 Puppet 一样,可以轻松地验证并修正主机的状态。

其他资源

1.1. Puppet 如何与 Satellite 集成

Puppet 使用 server-agent 架构。Puppet 服务器是存储配置定义的核心组件。Satellite 服务器或任何 Capsule 通常通过 Puppet 服务器部署,Satellite 充当此类 Puppet 服务器的 外部节点分类器(ENC)。受管主机运行与 Puppet 服务器通信的 Puppet 代理。

Puppet 代理收集 主机的事实,并在每次运行时将其报告给 Puppet 服务器。您可以通过在主机上运行 puppet 事实,以 JSON 格式显示 Puppet 事实

Puppet 服务器 将事实 转发到 Satellite,并且 Satellite 存储它们以便稍后使用。根据 事实 和其他定义,Satellite 将 ENC 回答构建给 Puppet 服务器。Puppet 服务器基于 ENC 回答编译 目录,并将 目录 发送到 Puppet 代理。

Puppet 代理评估主机上的系统状态。如果 Puppet 代理发现差异(称为 drifts ),则 在目录中 定义 的所需状态 和实际状态之间称为 drifts,它会强制更正主机的状态。然后,Puppet 代理报告将结果更正回 Puppet 服务器,这会将它们报告给 Satellite。

Puppet 模块

主机 所需状态 在目录中 定义。目录 从分配给主机的一个或多个 Puppet 模块的 Puppet 清单编译。Puppet 模块是类、清单、资源、文件和模板的集合。Puppet 模块作为主机配置定义的组件工作。

智能类参数

如果模块支持使用参数,您可以使用 Smart Class 参数覆盖 Puppet 模块的参数。您可以将 Satellite 中的参数定义为 键值对,它们的行为类似于主机参数或 Ansible 变量。

Puppet 环境

您还可以创建多个 Puppet 环境来控制配置定义版本或管理定义的变体,并在在生产环境中部署定义前测试它们。

高级集成步骤

Puppet 与 Satellite 集成涉及以下高级别步骤:

  1. 启用 Puppet 集成
  2. 将 Puppet 代理软件包导入到 Satellite 中。Puppet 代理软件包可以像通过 Satellite 的任何其他内容一样进行管理,方法是 启用红帽存储库 并使用 Activation KeysContent Views
  3. 在调配、注册、手动或通过 远程作业执行的主机上安装 Puppet 代理。

其他资源

以下流程概述了如何使用 Puppet 模块安装、配置和管理 ntp 服务以提供示例。

1.2. 支持的 Puppet 版本和系统要求

在开始 Puppet 集成之前,请查看支持的 Puppet 版本和系统要求。

支持的 Puppet 版本

Satellite 支持以下 Puppet 版本:

  • puppet 7
系统要求
在开始将 Puppet 与 Satellite 集成之前,请确保满足系统要求。详情请参阅 开源 Puppet 文档中的 Puppet 7 的系统要求

1.3. 启用 Puppet 与 Satellite 集成

默认情况下,Satellite 没有配置任何 Puppet 集成。您需要根据具体情况启用集成。这意味着,您可以将 Satellite 配置为在 Satellite 服务器或 Capsule 上管理和部署 Puppet 服务器。另外,您可以将 Puppet 服务器部署到外部 Satellite,并将它与 Satellite 集成,以进行报告、事实和外部节点分类(ENC)。

流程

  1. 启用 Puppet 集成并在 Satellite 服务器上安装 Puppet 服务器:

    # satellite-installer --enable-foreman-plugin-puppet \
    --enable-foreman-cli-puppet \
    --foreman-proxy-puppet true \
    --foreman-proxy-puppetca true \
    --foreman-proxy-content-puppet true \
    --enable-puppet \
    --puppet-server true \
    --puppet-server-foreman-ssl-ca /etc/pki/katello/puppet/puppet_client_ca.crt \
    --puppet-server-foreman-ssl-cert /etc/pki/katello/puppet/puppet_client.crt \
    --puppet-server-foreman-ssl-key /etc/pki/katello/puppet/puppet_client.key
  2. 如果要在 Capsule 上使用 Puppet 集成,请启用 Puppet 集成并在 Capsule 上安装 Puppet 服务器:

    # satellite-installer --foreman-proxy-puppet true \
    --foreman-proxy-puppetca true \
    --foreman-proxy-content-puppet true \
    --enable-puppet \
    --puppet-server true \
    --puppet-server-foreman-ssl-ca /etc/pki/katello/puppet/puppet_client_ca.crt \
    --puppet-server-foreman-ssl-cert /etc/pki/katello/puppet/puppet_client.crt \
    --puppet-server-foreman-ssl-key /etc/pki/katello/puppet/puppet_client.key \
    --puppet-server-foreman-url "https://satellite.example.com"

    输入您的 Satellite 服务器的 URL,作为 --puppet-server-foreman-url 参数的值。

1.4. 在主机置备过程中安装 Puppet 代理

在主机调配过程中安装 Puppet 代理。

流程

  1. 进入 Hosts > Provisioning Templates
  2. 根据您的主机置备方法选择置备模板。如需更多信息, 请参阅置备 指南中的置备模板类型
  3. 确保包含 puppet_setup 片断,如下所示:

    <%= snippet 'puppet_setup' %>
  4. 将 host 参数用于单个主机或主机组启用 Puppet:

    为 Puppet 7 添加名为 enable-puppet7 的主机参数,作为类型布尔值设为 true

  5. 可选: 要从 yum.puppet.com 直接安装 Puppet 代理,请为 Puppet 7 添加名为 enable-puppetlabs-puppet7-repo 的主机参数,作为类型布尔值设为 true。只有在您不使用其激活密钥向主机提供 Puppet 代理时,才使用此选项。

1.5. 在主机上手动安装和配置 Puppet 代理

在主机上手动安装和配置 Puppet 代理。

先决条件

  • 主机必须分配有 Puppet 环境。
  • 必须启用 Satellite Client 6 存储库并同步到 Satellite 服务器,并在主机上启用。如需更多信息,请参阅管理内容中的导入内容

流程

  1. root 用户身份登录主机。
  2. 安装 Puppet 代理软件包。

    • 在运行 Red Hat Enterprise Linux 8 及更高版本的主机上:

      # dnf install puppet-agent
    • 在运行 Red Hat Enterprise Linux 7 及更早版本的主机上:

      # yum install puppet-agent
  3. 使用以下脚本,将 Puppet 代理添加到当前 shell 中的 PATH 中:

    . /etc/profile.d/puppet-agent.sh
  4. 配置 Puppet 代理。将 environment 参数设置为主机所属的 Puppet 环境的名称:

    # puppet config set server satellite.example.com --section agent
    # puppet config set environment My_Puppet_Environment --section agent
  5. 启动 Puppet 代理服务:

    # puppet resource service puppet ensure=running enable=true
  6. 为主机创建证书:

    # puppet ssl bootstrap
  7. 在 Satellite Web UI 中,导航到 Infrastructure > Capsules
  8. 从所需 Capsule 服务器的 Actions 列中的列表中,选择 Certificates
  9. 单击所需主机右侧的 Sign,以签署 Puppet 代理的 SSL 证书。
  10. 在主机上再次运行 Puppet 代理:

    # puppet ssl bootstrap

1.6. 执行配置管理

在主机上部署 Puppet 代理后,您可以开始使用 Puppet 执行配置管理。这包括以下高级别步骤:

  1. 在 Puppet 服务器上管理 Puppet 模块,该模块正在安装和更新它们。
  2. 将 Puppet 类和环境从 Puppet 模块导入到 Satellite。
  3. 可选:从 Puppet 类创建配置组。
  4. 在各种级别上配置智能类参数覆盖。
  5. 将 Puppet 类或配置组分配给主机组或单个主机。
  6. 配置在主机上运行 Puppet 代理的时间间隔,以及配置强制运行 Puppet 服务器。
  7. 使用 Satellite Web UI 中的报告来监控配置管理。如需更多信息,请参阅管理 Red Hat Satellite 中的 监控资源
  8. 配置电子邮件通知.如需更多信息,请参阅管理 Red Hat Satellite 中的配置电子邮件通知

分配 Puppet 类或配置组后,Satellite 以配置的间隔自动运行配置管理,以便在受管主机上强制实施 Puppet 配置,或者您可以使用 Run Puppet Once 功能根据需要手动启动。更多信息请参阅 第 9.1 节 “使用 SSH 运行 Puppet 一次”

1.7. 禁用 Puppet 与 Satellite 集成

要在 Satellite 中使用 Puppet,请按照以下流程操作。

请注意,没有 --remove-all-data 参数的命令会删除 Satellite 数据库中所有与 Puppet 相关的数据。使用 --remove-all-data 参数时,命令还会移除 Puppet 服务器数据文件,包括 Puppet 环境。

警告

如果您使用 --remove-all-data 参数禁用 Puppet,则之后您将无法重新启用 Puppet。这是一个已知问题,请查看 Bug 2087067

前提条件

  • Satellite 上启用了 Puppet。

流程

  1. 如果您在任何 Capsules 上使用 Puppet 服务器,请在所有 Capsules 上禁用 Puppet 服务器:

    # satellite-maintain plugin purge-puppet --remove-all-data
  2. 在 Satellite 服务器上禁用 Puppet 服务器:

    # satellite-maintain plugin purge-puppet --remove-all-data

第 2 章 管理 Puppet 模块

2.1. 在 Satellite 服务器上安装 Puppet 模块

您可以从 Puppet the 安装预构建的 Puppet 模块。Puppet the 是提供由社区贡献的 Puppet 模块的存储库。标记为 支持的 Puppet 模块由 Puppet Inc 官方支持和测试。

本例演示了如何将 ntp 模块添加到 受管主机。

流程

  1. 导航到 forge.puppet.com 并搜索 ntp。第一个模块之一是 puppetlabs/ntp
  2. 使用 SSH 连接到您的 Satellite 服务器并安装 Puppet 模块:

    # puppet module install puppetlabs-ntp -i /etc/puppetlabs/code/environments/production/modules

    使用 -i 参数指定路径和 Puppet 环境,如 production

    安装完成后,输出类似如下:

    Notice: Preparing to install into /etc/puppetlabs/code/environments/production/modules ...
    Notice: Created target directory /etc/puppetlabs/code/environments/production/modules
    Notice: Downloading from https://forgeapi.puppet.com ...
    Notice: Installing -- do not interrupt ...
    /etc/puppetlabs/code/environments/production/modules
    |-| puppetlabs-ntp (v8.3.0)
      |-- puppetlabs-stdlib (v4.25.1) [/etc/puppetlabs/code/environments/production/modules]

安装 Puppet 模块的替代方法是将包含 Puppet 模块的文件夹复制到上述模块路径中。确保手动解析其依赖项。

2.2. 更新 Puppet 模块

您可以使用 puppet 命令更新现有的 Puppet 模块。

流程

  1. 使用 SSH 连接到您的 Puppet 服务器,并找出 Puppet 模块所在的位置:

    # puppet config print modulepath

    这会按如下方式返回输出:

    /etc/puppetlabs/code/environments/production/modules:/etc/puppetlabs/code/environments/common:/etc/puppetlabs/code/modules:/opt/puppetlabs/puppet/modules:/usr/share/puppet/modules
  2. 如果模块位于上面显示的路径中,以下命令会更新模块:

    # puppet module upgrade module name

第 3 章 将 Puppet 类和环境导入到 Satellite

在将任何类分配给受管主机之前,将 Puppet 类和环境从已安装的 Puppet 模块导入到 Satellite 服务器或任何附加的 Capsule 服务器。

前提条件

  • 确保选择 Any OrganizationAny Location 作为上下文,否则导入可能会失败。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > ClassesConfigure > Environments
  2. 单击右上角的 Import 按钮,再选择您要从中导入模块的 Capsule。您通常可以在 Satellite 服务器或任何附加的 Capsule 服务器之间进行选择。
  3. 使用左侧的复选框选择要导入的 Puppet 环境。
  4. 单击 Update 按钮,将 Puppet 环境和类导入到 Satellite。
  5. 导入应该会产生通知,如下所示:

    Successfully updated environments and Puppet classes from the on-disk Puppet installation

第 4 章 创建自定义 Puppet 环境

您可以在 Satellite 中创建 Puppet 环境。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Puppet Environments
  2. 单击 Create Puppet Environment 以创建 Puppet 环境。
  3. 允许 输入名称、字母数字字符和下划线,如 example_environment
  4. 可选:设置位置上下文。
  5. 可选:设置机构上下文。
  6. 单击 Submit 以创建 Puppet 环境。

请注意,在将 Puppet 模块导入到 Satellite 之前,该环境必须已作为 Puppet 服务器上的文件夹 /etc/puppetlabs/code/environments/example_environment 存在,并包含已安装的 Puppet 模块。

第 5 章 创建 Puppet 配置组

Puppet 配置组是 Puppet 类的命名列表,您可以组合其功能,并将它们分配到受管主机。这等同于纯 Puppet 中的配置集概念。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Config Groups
  2. Create Config Group 按钮。
  3. 选择您要添加到配置组中的类。

    1. 为 Puppet 配置组选择一个有意义的名称。
    2. 将所选 Puppet 类添加到 Included Classes 字段。
  4. Submit 保存更改。

第 6 章 配置 Puppet 智能类参数

6.1. Puppet 参数层次结构

Puppet 参数是结构化的。较低级别的参数覆盖更高级别的参数:

  1. 全局参数
  2. 机构参数
  3. 位置参数
  4. 主机组参数
  5. 主机参数

例如,主机特定参数覆盖任何更高级别的参数,而 location 参数则仅覆盖机构或全局级别的参数。当您使用位置或机构对主机进行分组时,此功能特别有用。

6.2. 全局覆盖智能类参数

您可以将 Puppet 类导入到 Satellite 服务器后,您可以配置它。这个示例覆盖默认的 ntp 服务器列表。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Classes
  2. 选择 ntp Puppet 类以更改其配置。
  3. 选择 智能类参数 选项卡并搜索 服务器
  4. 确保选择了 Override 复选框。
  5. Parameter Type 下拉菜单设置为 数组
  6. 将 ntp 服务器列表插入 为默认值

    ["0.de.pool.ntp.org","1.de.pool.ntp.org","2.de.pool.ntp.org","3.de.pool.ntp.org"]

    描述数组的替代方法是 yaml 语法:

    - 0.de.pool.ntp.org
    - 1.de.pool.ntp.org
    - 2.de.pool.ntp.org
    - 3.de.pool.ntp.org
  7. 添加值后点 Submit 按钮。这会更改 Puppet 模块 ntp 的默认配置。

6.3. 覆盖机构的智能类参数

您可以使用一组主机一次覆盖多个主机的 Puppet 参数。以下示例选择 组织上下文 来说明设置基于上下文的参数。

请注意,org-level Puppet 参数由 location-level Puppet 参数覆盖。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Classes
  2. 点类名称来选择类。
  3. Smart Class 参数 选项卡中,选择一个参数。
  4. 使用 Order 列表定义 Puppet 参数的层次结构。单个主机(fqdn)标记最接近,以及组织上下文(组织)。
  5. 如果要在找到第一个匹配项后添加所有进一步匹配的参数,请选择 Merge Overrides
  6. 如果要同时包含默认值,选择 Merge Default,即使定义了更具体的值。
  7. 如果要为所选参数创建唯一值列表,请选择 Avoid Duplicates
  8. matcher 字段需要 顺序列表中的 属性类型
  9. 使用 Add Matcher 按钮添加更多匹配者。
  10. Submit 保存更改。

6.4. 覆盖位置的智能类参数

您可以使用一组主机一次覆盖多个主机的 Puppet 参数。以下示例选择 位置上下文 来说明设置基于上下文的参数。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Classes
  2. 点类名称来选择类。
  3. Smart Class 参数 选项卡中,选择一个参数。
  4. 使用 Order 列表定义 Puppet 参数的层次结构。单个主机(fqdn)标记最接近,位置上下文(位置 )标记最相关的位置上下文。
  5. 如果要在找到第一个匹配项后添加所有进一步匹配的参数,请选择 Merge Overrides
  6. 如果要同时包含默认值,选择 Merge Default,即使定义了更具体的值。
  7. 如果要为所选参数创建唯一值列表,请选择 Avoid Duplicates
  8. matcher 字段需要 顺序列表中的 属性类型 。例如,您可以选择 Paris 作为 位置上下文,并将值设为法语 ntp 服务器。
  9. 使用 Add Matcher 按钮添加更多匹配者。
  10. Submit 保存更改。

6.5. 覆盖单个主机上的智能类参数

您可以覆盖单个主机上的参数。如果您有多个主机,且只想更改单个主机,则建议使用。

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All Hosts
  2. 点主机名来选择主机。
  3. Edit
  4. Host 选项卡上,选择 Puppet Environment
  5. 选择 Puppet ENC 选项卡。
  6. 单击 Override 按钮,以编辑 Puppet 参数。
  7. Submit 保存更改。

第 7 章 将 Puppet 类分配给主机组

使用主机组一次性将 ntp Puppet 类分配给多个主机。您基于此主机组部署的每个主机均安装了此 Puppet 类。

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Host Groups 以创建主机组或编辑现有组。
  2. Host Group 选项卡中设置以下参数:

    1. Lifecycle Environment 描述了主机有特定版本内容的阶段。
    2. 内容视图 由产品组成,允许对内容存储库的版本控制。
    3. 环境 允许您为一组主机提供自己的专用配置。
  3. 导航到 Puppet ENC 选项卡。
  4. 如果配置了 Puppet 配置组,请将 Puppet 类添加到包含类或包含的配置组中。
  5. Submit 保存更改。

第 8 章 将 Puppet 类分配给单个主机

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All hosts
  2. 单击您要添加 ntp Puppet 类的主机的 Edit 按钮。
  3. 选择 Puppet ENC 选项卡并查找 ntp 类。
  4. 单击 ntp 旁边的 + 符号,将 ntp 子模块添加到 所含类 的列表。
  5. 点底部的 Submit 按钮保存您的更改。

    提示

    如果单个主机的 Puppet 类 选项卡为空,请检查是否将其分配给正确的 Puppet 环境。

  6. 验证 Puppet 配置。

    1. 导航到 Hosts > All Hosts 并选择主机。
    2. 在顶部溢出菜单中选择 Legacy UI
    3. 在详细信息 下,单击 Puppet YAML 按钮。这会生成类似如下的输出:

      ---
      parameters:
        // shortened YAML output
      classes:
        ntp:
          servers: '["0.de.pool.ntp.org","1.de.pool.ntp.org","2.de.pool.ntp.org","3.de.pool.ntp.org"]'
      environment: production
      ...
  7. 验证 ntp 配置。

    使用 SSH 连接到您的主机,并检查 /etc/ntp.conf 的内容。

    本例假定您的主机正在运行 CentOS 7。其他操作系统可能会将 ntp 配置文件存储在不同的路径中。

    提示

    您可能需要通过执行以下命令在主机上运行 Puppet 代理:

    # puppet agent -t
  8. 在主机中运行以下命令检查使用哪个 ntp 服务器进行时钟同步:

    # cat /etc/ntp.conf

    这会返回类似如下的输出:

    # ntp.conf: Managed by puppet.
    server 0.de.pool.ntp.org
    server 1.de.pool.ntp.org
    server 2.de.pool.ntp.org
    server 3.de.pool.ntp.org

您现在有一个正常工作的 ntp 模块,您可以添加到主机或一组主机,以自动推出 ntp 配置。

第 9 章 在受管主机上强制实施 Puppet 配置

您可以根据需要(运行一次)或者以可配置的间隔自动从 Satellite 执行配置。

9.1. 使用 SSH 运行 Puppet 一次

将正确的任务模板分配给 Run Puppet Once 功能,以在受管主机上运行 Puppet。

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Remote Execution Features
  2. 选择 puppet_run_host 远程执行功能。
  3. 分配 Run Puppet Once - SSH Default 作业模板。

通过运行某个作业并选择类别 Puppet 和模板 Run Puppet Once - SSH Default 来在受管主机上运行 Puppet。或者,单击主机详细信息页面上的 Schedule Remote Job 下拉菜单中的 Run Puppet Once 按钮。

9.2. 了解自动强制的间隔

如果最后一个 Puppet 报告早于分钟设定的 outofsync_intervalpuppet_interval 的组合值,Satellite 会认为主机不同步。默认情况下,受管主机上的 Puppet 代理每 30 分钟运行一次,puppet_interval 设置为 35 分钟,全局 outofsync_interval 设置为 30 分钟。

主机被视为不同步的有效时间是 outofsync_intervalpuppet_interval 的总和。例如,将全局 outofsync _interval 设置为 30,将 puppet_interval 设置为 60 会导致总计 90 分钟,主机状态变为不同步。

9.3. 设置 Puppet 代理在主机上运行间隔

设置 Puppet 代理运行时的时间间隔,并将报告发送到 Satellite。

流程

  1. 使用 SSH 连接到您的受管主机。
  2. 将 Puppet 代理运行间隔添加到 /etc/puppetlabs/puppet/puppet.conf,如 runinterval = 1h

9.4. 设置全局 Out-of-Sync Interval

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Settings
  2. General 选项卡中,编辑不同步间隔。以分钟为单位设置主机被视为不同步的持续时间。

    您还可以通过添加 outofsync_interval 参数来覆盖 主机组 或单个主机上的这个间隔。???

9.5. 设置 Puppet Out-of-Sync Interval

流程

  1. 在 Satellite Web UI 中,导航到 Administer > Settings,然后点击 Config Management 选项卡。
  2. Puppet interval 字段中,以分钟为单位将值设置为使用 Puppet 报告的主机被视为不同步。

9.6. 覆盖主机组的 Out-of-Sync Interval

流程

  1. 在 Satellite Web UI 中,导航到 Configure > Host Groups
  2. 选择一个主机组。
  3. Parameters 选项卡中,单击 Add Parameter
  4. Name 字段中输入 outofsync_interval
  5. Type 下拉菜单中选择 整数
  6. Value 字段中,以分钟为单位输入新间隔。
  7. 单击 Submit 按钮。

9.7. 覆盖单个主机的 Out-of-Sync Interval

流程

  1. 在 Satellite Web UI 中,导航到 Hosts > All Hosts
  2. 为所选主机点 Edit
  3. Parameters 选项卡中,单击 Add Parameter
  4. Name 字段中输入 outofsync_interval
  5. Type 下拉菜单中选择 整数
  6. Value 字段中,以分钟为单位输入新间隔。
  7. 单击 Submit 按钮。

法律通告

Copyright © 2024 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.