4.2. 使用 Facter 和事实
Facter 是 Puppet 的系统清单工具,包含大量内置事实。您可以在本地主机上命令行中运行 Facter,以显示事实名称和值。您可以使用自定义事实扩展 Facter,然后使用这些事实将主机的特定站点详细信息公开给 Puppet 清单。您还可以使用 Facter 提供的事实在 Puppet 中通知条件表达式。
Puppet 基于资源来确定系统状态;例如,您可以告知 Puppet httpd
服务应始终处于运行状态,并且 Puppet 知道如何处理它们。如果要管理不同的操作系统,您可以使用 osfamily
事实来创建条件表达式,以告知 Puppet 哪个服务监视或要安装的软件包。您可以使用 operatingsystemmajrelease
和 versioncmp
参数根据不同版本的同一操作系统创建条件表达式。下例演示了将条件表达式与事实搭配使用。
将条件表达式与事实搭配使用
这个示例使用表达式 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 的事实
- 在主菜单中点击 Hosts > All Hosts,然后点您要检查的主机的名称。
- 在 Details 窗格中,单击 Facts 以显示有关主机的所有已知事实。
- 对于此页面列出的任何事实,您可以点击 Chart 来显示所有受管主机上此事实名称的分布图表。
- 您可以为搜索添加书签,使其在将来更易于使用。优化搜索后,点击搜索按钮旁边的下拉箭头,然后单击 此搜索的书签。书签搜索会出现在 搜索 下拉列表中,也显示在主菜单中的 Administer > Bookmarks 下。
4.2.2. 根据事实搜索主机 复制链接链接已复制到粘贴板!
您可以使用 Facter 信息来搜索特定的主机。这意味着,您可以搜索与特定事实条件匹配的所有主机,如 facts.architecture = x86_64
。
根据事实搜索主机
- 在主菜单中,点击 Monitor > Facts 以显示 Fact Values 页面。
- 在 搜索字段中,开始输入您要过滤的事实的名称。您可以根据具体名称、名称/值对进行搜索,以此类推。
- 单击 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"}}
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 Copied! Toggle word wrap Toggle overflow 搜索返回软件包版本。然后,这可用于填充外部数据库。
4.2.3.1. 添加 pkginventory Puppet 模块 复制链接链接已复制到粘贴板!
要将 pkginventory
Puppet 模块添加到 Red Hat Satellite Server 应用程序,请将模块从 https://forge.puppetlabs.com/ody/pkginventory 下载到安装 Satellite 服务器应用程序的基本系统中,然后按照以下步骤操作。
Puppet 模块通常存储在名为 Puppet Modules 的自定义存储库中。以下流程假设您已使用该名称进行了自定义存储库。如果您还没有为 Puppet 模块提供自定义存储库,请参阅 快速入门指南 中的创建自定义产品。
上传 Puppet 模块到存储库
-
将 Puppet 模块下载到基本系统。下载的模块将具有
.tar.gz
扩展。 - 单击 Content > Products,然后单击与 Puppet 模块存储库关联的 Name 字段中的产品名称。例如,自定义产品。
- 在 Repositories 选项卡上,选择要修改的 Puppet Modules 存储库。例如,Puppet 模块。
- 在 Upload Puppet Module 部分中,单击 Browse,然后导航到您下载的模块。
- 点 Upload。
要将 Puppet 模块分发到客户端,内容主机,模块必须应用到内容视图并发布。按照以下步骤将模块添加到内容视图中。
在内容视图中添加模块
- 点 Content > Content Views,然后从 Name 菜单中选择 Content View。
- 在 Puppet 模块 选项卡上,单击 Add New Module。此时会出现安装的模块列表。
- 在 Actions 列中,单击 Select a Version 以选择要添加的模块。此时会出现可用版本表。
- 单击要添加的模块版本旁边的 Select Version。
- 单击 Publish New Version 以创建新内容视图。
- (可选)添加描述信息并点 Save。