9.4. 存储和维护主机信息


Red Hat Satellite 6 使用应用程序组合来收集有关受管主机的信息,并确保这些主机在所需状态中维护。这些应用程序包括:
  • Foreman:提供物理和虚拟系统的调配和生命周期管理。Foreman 使用各种方法(包括 Kickstart 和 Puppet 模块)自动配置这些系统。
  • Puppet:用于配置主机的客户端/服务器架构,由 Puppet Master (服务器)和 Puppet 代理(客户端)组成。
  • Facter:Puppet 的系统库存工具.Facter 收集主机的基本信息(事实),如硬件详情、网络设置、操作系统类型和版本、IP 地址、MAC 地址、SSH 密钥等。这些事实随后在 Puppet 清单中作为变量提供。
以下更为详细地讨论了 Puppet、Facter 和事实的使用。

9.4.1. Puppet 架构

Puppet 通常在代理/主控机(也称为客户端/服务器)架构中运行,其中的 Puppet 服务器控制重要配置信息,而受管主机(客户端)仅请求自己的配置目录。Puppet 在两个步骤中配置主机:
  • 它编译目录
  • 它将该目录应用到适当的主机
在 agent/master 设置中,Puppet 客户端会向 Puppet Master 发送由 Facter 和其他信息收集的事实。Puppet Master 根据这些事实编译目录,然后将此目录发送到客户端。客户端将对其所做的所有更改发送报告,或者如果已使用了- noop 参数,则将发出的报告到 Puppet Master,后者后者后者后者后者将结果发送到 Foreman。此目录描述了特定主机的所需状态。它列出要在该主机上管理的资源,包括这些资源之间的所有依赖项。代理将目录应用到主机。
默认情况下,master 和代理之间的这个通信每 30 分钟发生。您可以使用 runinterval 参数在 /etc/puppet/puppet.conf 文件中指定不同的值。您还可以运行 puppet 代理应用来 手动启动通信。

9.4.2. 使用 Facter 和 Facts

Facter 是 Puppet 的系统库存工具,包含大量内置事实。您可以在本地主机上的命令行中运行 Facter,以显示事实名称和值。您可以使用自定义事实扩展 Facter,然后使用它们将主机的特定站点详情公开给您的 Puppet 清单。您还可以使用 Facter 提供的事实来通知 Puppet 中的条件表达式。
Puppet 根据资源确定系统状态;例如,您可以告知 Puppet httpd 服务应始终处于运行状态,并且 Puppet 知道如何处理它。如果您要管理不同的操作系统,您可以使用 osfamily 事实创建条件表达式,以告知 Puppet 哪个服务监视或要安装的软件包。您可以使用 operatingsystemmajreleaseversioncmp 参数,根据同一操作系统的不同版本创建条件表达式。有关使用条件表达式的示例,请参阅 例 9.1 “将条件表达式与事实搭配使用”

例 9.1. 将条件表达式与事实搭配使用

if $:: osfamily == 'RedHat' {
  if $::operatingsystemmajrelease == '6' {
   $ntp_service_name = 'ntpd'
   }

  elseif versioncmp($::operatingsystemmajrelease, '7') >= 0 {
   $ntp_service_name = 'chrony'
   }
 }
Copy to Clipboard Toggle word wrap
注意
这个示例使用表达式 "versioncmp ($::operatingsystemmajrelease, '7')>= 0" 来测试 Red Hat Enterprise Linux 版本 7 或更高版本。不要使用 "$::operatingsystemmajrelease >= '7'" 表达式来执行此测试。有关此内容和其他 Puppet 功能的更多信息,请参阅 https://docs.puppetlabs.com/references/latest/function.html#versioncmp
Puppet 还设置行为类似于事实的其他特殊变量。请参阅 Puppet 添加的 Special 变量Core Facts 更多信息。

9.4.2.1. 显示父主机的事实

Puppet 可以访问 Facter 的内置核心事实,以及 Puppet 模块中存在的任何自定义或外部事实。您可以从命令行(facter -p)以及 Web UI (监控 事实 )查看可用的事实。您可以浏览事实列表,或者 使用搜索框 搜索特定事实。例如,键入 "facts." 以显示可用事实的列表。
注意
可用事实列表非常长。UI 一次仅显示 20 个事实。在输入更多详细信息时,事实列表会逐渐过滤。例如,键入 "facts.e" 以显示以字母"e"开头的所有事实。

过程 9.19. 查看参与主机的事实:

  1. 在主菜单中,单击 Hosts All Hosts,然后单击您要检查的主机的名称。
  2. Details 窗格中,单击 Facts 以显示主机的所有已知事实。
注意
  • 对于此页面中列出的任何事实,您可以单击 Chart 以显示此事实名称在所有受管主机上分布的图表。
  • 您可以为搜索添加书签,以便以后更轻松地使用。优化搜索后,点 Search 按钮旁边的下拉箭头,然后单击 Bookmark this search。书签的搜索会出现在 搜索 下拉列表中,以及主菜单上的 Administer Bookmarks 下。

9.4.2.2. 根据事实搜索主机

您可以使用 Facter 信息来搜索特定主机。这意味着,您可以搜索符合特定事实条件的所有主机,如 facts.architecture = x86_64

过程 9.20. 根据事实搜索主机:

  1. 在主菜单中,单击 Monitor Facts 以显示 Fact Values 页面。
  2. Search 字段中,开始输入您要过滤的事实名称。您可以根据特定名称、名称/值对进行搜索,等等。
  3. 单击 Search 以检索匹配主机的列表。

9.4.2.3. 自定义事实报告

Red Hat Satellite 6 完全支持从受管主机获取自定义信息。本节演示了使用从 Puppet Forge 获取的 Puppet 模块,但其原则对于 Puppet 模块的其他来源同样应用。
通过标准 Facter 接口报告的事实数量可以扩展。例如,要收集模块中用作变量的事实:如果有描述安装的软件包的事实,您可以搜索此数据并根据信息做出明智的配置管理决策。
要获取在主机上安装的软件包的报告,如下所示:
  • 清单 pkginventory 从 Puppet Forge 获取,并保存到基础系统中。
  • Puppet 模块添加到内容视图中,然后这会提升到系统并部署到该系统。
  • 然后,使用软件包名称查询系统的事实。在本例中,对于名为 hostname 的主机,并使用具有凭证 用户名和密码的 Satellite 用户,以下 API 查询将返回与搜索字符串 "bash" 匹配的事实:
    curl -u username:password -X GET http://localhost/api/hosts/:hostname/facts?search=bash
    {"hostname":{"pkg_bash":"4.2.45-5.el7_0.4"}}
    
    Copy to Clipboard Toggle word wrap
    搜索返回软件包版本。然后,这可用于填充外部数据库。

添加 pkginventory Puppet 模块

要将 pkginventory Puppet 模块添加到 Red Hat Satellite Server 应用程序,请将模块从 https://forge.puppetlabs.com/ody/pkginventory 下载到安装 Satellite 服务器应用程序的基本系统,然后按照以下步骤操作。
Puppet 模块通常存储在名为 Puppet 模块的自定义存储库中。以下流程假设您已创建了带有该名称的自定义存储库。如果您还没有为 Puppet 模块创建自定义存储库,请参阅 Red Hat Satellite 快速入门指南 中的创建自定义产品 启用存储库。

过程 9.21. 将 Puppet 模块上传到存储库:

  1. 将 Puppet 模块下载到基础系统。下载的模块将有一个 .tar.gz 扩展。
  2. 单击 Content Products,然后单击与 Puppet 模块存储库关联的 Name 字段中的产品名称。例如,自定义产品
  3. Repositories 选项卡上,选择您要修改的 Puppet 模块存储库。例如,Puppet 模块
  4. Upload Puppet Module 部分中,单击 Browse,再导航到您下载的模块。
  5. Upload
若要将 Puppet 模块分发给客户端,内容主机必须应用到内容视图和发布模块。按照以下步骤将模块添加到内容视图中。

过程 9.22. 要在内容视图中添加模块:

  1. 单击 Content Content Views,然后从 Name 菜单中选择内容视图。
  2. Puppet 模块 选项卡上,单击 添加新模块。此时会出现安装模块列表。
  3. Actions 列中,单击 Select a Version 以选择您要添加的模块。此时会出现可用版本表。
  4. 单击您要添加的模块版本旁边的 Select Version
  5. 单击 Publish New Version 以创建新的内容视图。
  6. (可选)添加描述信息并点 Save


[3] https://docs.puppetlabs.com/puppet/3.7/reference/lang_facts_and_builtin_vars.html#special-variables-added-by-puppet
[4] https://docs.puppetlabs.com/facter/latest/core_facts.html
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat