4.2. 使用 Facter 和事实


Facter 是 Puppet 的系统清单工具,包含大量内置事实。您可以在本地主机上命令行中运行 Facter,以显示事实名称和值。您可以使用自定义事实扩展 Facter,然后使用这些事实将主机的特定站点详细信息公开给 Puppet 清单。您还可以使用 Facter 提供的事实在 Puppet 中通知条件表达式。

Puppet 基于资源来确定系统状态;例如,您可以告知 Puppet httpd 服务应始终处于运行状态,并且 Puppet 知道如何处理它们。如果要管理不同的操作系统,您可以使用 osfamily 事实来创建条件表达式,以告知 Puppet 哪个服务监视或要安装的软件包。您可以使用 operatingsystemmajreleaseversioncmp 参数根据不同版本的同一操作系统创建条件表达式。下例演示了将条件表达式与事实搭配使用。

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

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 和 核心事实 添加的特殊变量

4.2.1. 显示 Particular Host 的事实

Puppet 可以访问 Facter 的内置核心事实,以及 Puppet 模块中存在的任何自定义或外部事实。您可以从命令行中查看可用事实(事实(facter -p)),也可从 Web UI(Monitor > Facts)查看可用事实。您可以浏览事实列表或使用 搜索框 来搜索特定事实。例如,键入 "facts." 以显示可用事实的列表。

注意

可用事实列表非常长。UI 一次仅显示 20 事实。在输入更多详细信息时,事实列表会逐渐增加过滤器。例如,键入 "facts.e" 以显示以字母"e"开头的所有事实。

查看 Particicular Host 的事实

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

4.2.2. 根据事实搜索主机

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

根据事实搜索主机

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

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

    搜索返回软件包版本。然后,这可用于填充外部数据库。

4.2.3.1. 添加 pkginventory Puppet 模块

要将 pkginventory Puppet 模块添加到 Red Hat Satellite Server 应用程序,请将模块从 https://forge.puppetlabs.com/ody/pkginventory 下载到安装 Satellite 服务器应用程序的基本系统中,然后按照以下步骤操作。

Puppet 模块通常存储在名为 Puppet Modules 的自定义存储库中。以下流程假设您已使用该名称进行了自定义存储库。如果您还没有为 Puppet 模块提供自定义存储库,请参阅 快速入门指南 中的创建自定义产品

上传 Puppet 模块到存储库

  1. 将 Puppet 模块下载到基本系统。下载的模块将具有 .tar.gz 扩展。
  2. 单击 Content > Products,然后单击与 Puppet 模块存储库关联的 Name 字段中的产品名称。例如,自定义产品
  3. Repositories 选项卡上,选择要修改的 Puppet Modules 存储库。例如,Puppet 模块
  4. Upload Puppet Module 部分中,单击 Browse,然后导航到您下载的模块。
  5. Upload

要将 Puppet 模块分发到客户端,内容主机,模块必须应用到内容视图并发布。按照以下步骤将模块添加到内容视图中。

在内容视图中添加模块

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat